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.
This commit is contained in:
Massimiliano Culpo 2021-08-03 16:53:40 +02:00 committed by GitHub
parent 15bc4faf2d
commit 0026d60b60
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 135 additions and 9 deletions

113
.github/workflows/bootstrap.yml vendored Normal file
View file

@ -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/

View file

@ -92,15 +92,19 @@ def make_module_available(module, spec=None, install=False):
installed_specs = spack.store.db.query(spec, installed=True) installed_specs = spack.store.db.query(spec, installed=True)
for ispec in installed_specs: for ispec in installed_specs:
# TODO: make sure run-environment is appropriate lib_spd = ispec['python'].package.default_site_packages_dir
module_path = ispec['python'].package.get_python_lib(prefix=ispec.prefix) lib64_spd = lib_spd.replace('lib/', 'lib64/')
module_paths = [
os.path.join(ispec.prefix, lib_spd),
os.path.join(ispec.prefix, lib64_spd)
]
try: try:
sys.path.append(module_path) sys.path.extend(module_paths)
__import__(module) __import__(module)
return return
except ImportError: except ImportError:
tty.warn("Spec %s did not provide module %s" % (ispec, module)) 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): def _raise_error(module_name, module_spec):
error_msg = 'cannot import module "{0}"'.format(module_name) error_msg = 'cannot import module "{0}"'.format(module_name)
@ -117,13 +121,18 @@ def _raise_error(module_name, module_spec):
spec.concretize() spec.concretize()
spec.package.do_install() 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: try:
sys.path.append(module_path) sys.path.extend(module_paths)
__import__(module) __import__(module)
return return
except ImportError: except ImportError:
sys.path = sys.path[:-1] sys.path = sys.path[:-2]
_raise_error(module, spec) _raise_error(module, spec)

View file

@ -920,8 +920,12 @@ def site_packages_dir(self):
try: try:
return self.get_python_lib(prefix='') return self.get_python_lib(prefix='')
except (ProcessError, RuntimeError): except (ProcessError, RuntimeError):
return os.path.join( return self.default_site_packages_dir
'lib', 'python{0}'.format(self.version.up_to(2)), 'site-packages')
@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 @property
def easy_install_file(self): def easy_install_file(self):