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:
parent
15bc4faf2d
commit
0026d60b60
3 changed files with 135 additions and 9 deletions
113
.github/workflows/bootstrap.yml
vendored
Normal file
113
.github/workflows/bootstrap.yml
vendored
Normal 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/
|
|
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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):
|
||||||
|
|
Loading…
Reference in a new issue