summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMassimiliano Culpo <massimiliano.culpo@gmail.com>2021-08-03 16:53:40 +0200
committerGitHub <noreply@github.com>2021-08-03 16:53:40 +0200
commit0026d60b607f4e6ab67026dfe1126cfcc6afe1c4 (patch)
treeee2f7adef07c4458462a5749afbf2f2a71d72a1b
parent15bc4faf2d042bc166c1b1a326dc3c9221e49d34 (diff)
downloadspack-0026d60b607f4e6ab67026dfe1126cfcc6afe1c4.tar.gz
spack-0026d60b607f4e6ab67026dfe1126cfcc6afe1c4.tar.bz2
spack-0026d60b607f4e6ab67026dfe1126cfcc6afe1c4.tar.xz
spack-0026d60b607f4e6ab67026dfe1126cfcc6afe1c4.zip
Test bootstrapping in a workflow (#25138)
Add a workflow to test bootstrapping clingo on different platforms so that we can detect changes that break it. Compute `site_packages_dir` in `bootstrap.py` as it was before #24095, until we figure a better way to override that attribute.
-rw-r--r--.github/workflows/bootstrap.yml113
-rw-r--r--lib/spack/spack/bootstrap.py23
-rw-r--r--var/spack/repos/builtin/packages/python/package.py8
3 files changed, 135 insertions, 9 deletions
diff --git a/.github/workflows/bootstrap.yml b/.github/workflows/bootstrap.yml
new file mode 100644
index 0000000000..70fe9bf58a
--- /dev/null
+++ b/.github/workflows/bootstrap.yml
@@ -0,0 +1,113 @@
+name: Bootstrapping
+
+on:
+ pull_request:
+ branches:
+ - develop
+ - releases/**
+ paths-ignore:
+ # Don't run if we only modified packages in the
+ # built-in repository or documentation
+ - 'var/spack/repos/builtin/**'
+ - '!var/spack/repos/builtin/packages/clingo-bootstrap/**'
+ - '!var/spack/repos/builtin/packages/python/**'
+ - 'lib/spack/docs/**'
+ schedule:
+ # nightly at 2:16 AM
+ - cron: '16 2 * * *'
+
+jobs:
+
+ fedora:
+ runs-on: ubuntu-latest
+ container: "fedora:latest"
+ steps:
+ - name: Install dependencies
+ run: |
+ dnf install -y \
+ bzip2 curl file gcc-c++ gcc gcc-gfortran git gnupg2 gzip \
+ make patch unzip which xz python3 python3-devel tree \
+ cmake bison bison-devel libstdc++-static
+ - uses: actions/checkout@v2
+ - name: Setup repo and non-root user
+ run: |
+ git --version
+ git fetch --unshallow
+ . .github/workflows/setup_git.sh
+ useradd spack-test
+ chown -R spack-test .
+ - name: Bootstrap clingo
+ shell: runuser -u spack-test -- bash {0}
+ run: |
+ source share/spack/setup-env.sh
+ spack external find cmake bison
+ spack -d solve zlib
+ tree ~/.spack/bootstrap/store/
+
+ ubuntu:
+ runs-on: ubuntu-latest
+ container: "ubuntu:latest"
+ steps:
+ - name: Install dependencies
+ env:
+ DEBIAN_FRONTEND: noninteractive
+ run: |
+ apt-get update -y && apt-get upgrade -y
+ apt-get install -y \
+ bzip2 curl file g++ gcc gfortran git gnupg2 gzip \
+ make patch unzip xz-utils python3 python3-dev tree \
+ cmake bison
+ - uses: actions/checkout@v2
+ - name: Setup repo and non-root user
+ run: |
+ git --version
+ git fetch --unshallow
+ . .github/workflows/setup_git.sh
+ useradd -m spack-test
+ chown -R spack-test .
+ - name: Bootstrap clingo
+ shell: runuser -u spack-test -- bash {0}
+ run: |
+ source share/spack/setup-env.sh
+ spack external find cmake bison
+ spack -d solve zlib
+ tree ~/.spack/bootstrap/store/
+
+ opensuse:
+ runs-on: ubuntu-latest
+ container: "opensuse/tumbleweed:latest"
+ steps:
+ - name: Install dependencies
+ run: |
+ zypper update -y
+ zypper install -y \
+ bzip2 curl file gcc-c++ gcc gcc-fortran tar git gpg2 gzip \
+ make patch unzip which xz python3 python3-devel tree \
+ cmake bison
+ - uses: actions/checkout@v2
+ - name: Setup repo and non-root user
+ run: |
+ git --version
+ git fetch --unshallow
+ . .github/workflows/setup_git.sh
+ - name: Bootstrap clingo
+ run: |
+ source share/spack/setup-env.sh
+ spack external find cmake bison
+ spack -d solve zlib
+ tree ~/.spack/bootstrap/store/
+
+ macos:
+ runs-on: macos-latest
+ steps:
+ - name: Install dependencies
+ run: |
+ brew install cmake bison@2.7 tree
+ - uses: actions/checkout@v2
+ - name: Bootstrap clingo
+ run: |
+ source share/spack/setup-env.sh
+ export PATH=/usr/local/opt/bison@2.7/bin:$PATH
+ spack external find --not-buildable cmake bison
+ spack -d solve zlib
+ tree ~/.spack/bootstrap/store/
diff --git a/lib/spack/spack/bootstrap.py b/lib/spack/spack/bootstrap.py
index 92bbb2fa42..09088c3eb6 100644
--- a/lib/spack/spack/bootstrap.py
+++ b/lib/spack/spack/bootstrap.py
@@ -92,15 +92,19 @@ def make_module_available(module, spec=None, install=False):
installed_specs = spack.store.db.query(spec, installed=True)
for ispec in installed_specs:
- # TODO: make sure run-environment is appropriate
- module_path = ispec['python'].package.get_python_lib(prefix=ispec.prefix)
+ lib_spd = ispec['python'].package.default_site_packages_dir
+ lib64_spd = lib_spd.replace('lib/', 'lib64/')
+ module_paths = [
+ os.path.join(ispec.prefix, lib_spd),
+ os.path.join(ispec.prefix, lib64_spd)
+ ]
try:
- sys.path.append(module_path)
+ sys.path.extend(module_paths)
__import__(module)
return
except ImportError:
tty.warn("Spec %s did not provide module %s" % (ispec, module))
- sys.path = sys.path[:-1]
+ sys.path = sys.path[:-2]
def _raise_error(module_name, module_spec):
error_msg = 'cannot import module "{0}"'.format(module_name)
@@ -117,13 +121,18 @@ def make_module_available(module, spec=None, install=False):
spec.concretize()
spec.package.do_install()
- module_path = spec['python'].package.get_python_lib(prefix=spec.prefix)
+ lib_spd = spec['python'].package.default_site_packages_dir
+ lib64_spd = lib_spd.replace('lib/', 'lib64/')
+ module_paths = [
+ os.path.join(spec.prefix, lib_spd),
+ os.path.join(spec.prefix, lib64_spd)
+ ]
try:
- sys.path.append(module_path)
+ sys.path.extend(module_paths)
__import__(module)
return
except ImportError:
- sys.path = sys.path[:-1]
+ sys.path = sys.path[:-2]
_raise_error(module, spec)
diff --git a/var/spack/repos/builtin/packages/python/package.py b/var/spack/repos/builtin/packages/python/package.py
index 61f42aaad3..760dc422c2 100644
--- a/var/spack/repos/builtin/packages/python/package.py
+++ b/var/spack/repos/builtin/packages/python/package.py
@@ -920,8 +920,12 @@ class Python(AutotoolsPackage):
try:
return self.get_python_lib(prefix='')
except (ProcessError, RuntimeError):
- return os.path.join(
- 'lib', 'python{0}'.format(self.version.up_to(2)), 'site-packages')
+ return self.default_site_packages_dir
+
+ @property
+ def default_site_packages_dir(self):
+ python_dir = 'python{0}'.format(self.version.up_to(2))
+ return os.path.join('lib', python_dir, 'site-packages')
@property
def easy_install_file(self):