667c39987c
When installing setuptools from sources in Spack, we might get into weird failures due to the way we use pip. In particular, for Spack it's necessary to install in a non-isolated pip environment to allow using PYTHONPATH as a selection method for all the build requirements of a Python package. This can fail when installing setuptools since there might be a setuptools version already installed for the Python interpreter being used, with different entry points than the one we want to install. Installing from wheels both pip and setuptools should harden our installation procedure in the context of: - Bootstrapping Python dependencies of Spack - Using external Python packages
361 lines
13 KiB
YAML
361 lines
13 KiB
YAML
name: linux tests
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- develop
|
|
- releases/**
|
|
pull_request:
|
|
branches:
|
|
- develop
|
|
- releases/**
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_number }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
# Validate that the code can be run on all the Python versions
|
|
# supported by Spack
|
|
validate:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2
|
|
- uses: actions/setup-python@d09bd5e6005b175076f227b13d9730d56e9dcfcb # @v2
|
|
with:
|
|
python-version: '3.10'
|
|
- name: Install Python Packages
|
|
run: |
|
|
pip install --upgrade pip
|
|
pip install --upgrade vermin
|
|
- name: vermin (Spack's Core)
|
|
run: vermin --backport argparse --violations --backport typing -t=2.7- -t=3.5- -vvv lib/spack/spack/ lib/spack/llnl/ bin/
|
|
- name: vermin (Repositories)
|
|
run: vermin --backport argparse --violations --backport typing -t=2.7- -t=3.5- -vvv var/spack/repos
|
|
# Run style checks on the files that have been changed
|
|
style:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2
|
|
with:
|
|
fetch-depth: 0
|
|
- uses: actions/setup-python@d09bd5e6005b175076f227b13d9730d56e9dcfcb # @v2
|
|
with:
|
|
python-version: '3.10'
|
|
- name: Install Python packages
|
|
run: |
|
|
pip install --upgrade pip six setuptools types-six
|
|
- name: Setup git configuration
|
|
run: |
|
|
# Need this for the git tests to succeed.
|
|
git --version
|
|
. .github/workflows/setup_git.sh
|
|
- name: Run style tests
|
|
run: |
|
|
share/spack/qa/run-style-tests
|
|
# Check which files have been updated by the PR
|
|
changes:
|
|
runs-on: ubuntu-latest
|
|
# Set job outputs to values from filter step
|
|
outputs:
|
|
core: ${{ steps.filter.outputs.core }}
|
|
packages: ${{ steps.filter.outputs.packages }}
|
|
with_coverage: ${{ steps.coverage.outputs.with_coverage }}
|
|
steps:
|
|
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2
|
|
if: ${{ github.event_name == 'push' }}
|
|
with:
|
|
fetch-depth: 0
|
|
# For pull requests it's not necessary to checkout the code
|
|
- uses: dorny/paths-filter@b2feaf19c27470162a626bd6fa8438ae5b263721
|
|
id: filter
|
|
with:
|
|
# See https://github.com/dorny/paths-filter/issues/56 for the syntax used below
|
|
filters: |
|
|
core:
|
|
- './!(var/**)/**'
|
|
packages:
|
|
- 'var/**'
|
|
# Some links for easier reference:
|
|
#
|
|
# "github" context: https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context
|
|
# job outputs: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idoutputs
|
|
# setting environment variables from earlier steps: https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable
|
|
#
|
|
- id: coverage
|
|
# Run the subsequent jobs with coverage if core has been modified,
|
|
# regardless of whether this is a pull request or a push to a branch
|
|
run: |
|
|
echo Core changes: ${{ steps.filter.outputs.core }}
|
|
echo Event name: ${{ github.event_name }}
|
|
if [ "${{ steps.filter.outputs.core }}" == "true" ]
|
|
then
|
|
echo "::set-output name=with_coverage::true"
|
|
else
|
|
echo "::set-output name=with_coverage::false"
|
|
fi
|
|
|
|
# Run unit tests with different configurations on linux
|
|
unittests:
|
|
needs: [ validate, style, changes ]
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
python-version: ['2.7', '3.5', '3.6', '3.7', '3.8', '3.9', '3.10']
|
|
concretizer: ['clingo']
|
|
include:
|
|
- python-version: 2.7
|
|
concretizer: original
|
|
- python-version: 3.6
|
|
concretizer: original
|
|
- python-version: 3.9
|
|
concretizer: original
|
|
steps:
|
|
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2
|
|
with:
|
|
fetch-depth: 0
|
|
- uses: actions/setup-python@d09bd5e6005b175076f227b13d9730d56e9dcfcb # @v2
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
- name: Install System packages
|
|
run: |
|
|
sudo apt-get -y update
|
|
# Needed for unit tests
|
|
sudo apt-get -y install \
|
|
coreutils cvs gfortran graphviz gnupg2 mercurial ninja-build \
|
|
patchelf cmake bison libbison-dev kcov
|
|
- name: Install Python packages
|
|
run: |
|
|
pip install --upgrade pip six setuptools pytest codecov "coverage[toml]<=6.2"
|
|
# ensure style checks are not skipped in unit tests for python >= 3.6
|
|
# note that true/false (i.e., 1/0) are opposite in conditions in python and bash
|
|
if python -c 'import sys; sys.exit(not sys.version_info >= (3, 6))'; then
|
|
pip install --upgrade flake8 isort>=4.3.5 mypy>=0.900 black
|
|
fi
|
|
- name: Pin pathlib for Python 2.7
|
|
if: ${{ matrix.python-version == 2.7 }}
|
|
run: |
|
|
pip install -U pathlib2==2.3.6
|
|
- name: Setup git configuration
|
|
run: |
|
|
# Need this for the git tests to succeed.
|
|
git --version
|
|
. .github/workflows/setup_git.sh
|
|
- name: Bootstrap clingo
|
|
if: ${{ matrix.concretizer == 'clingo' }}
|
|
env:
|
|
SPACK_PYTHON: python
|
|
run: |
|
|
. share/spack/setup-env.sh
|
|
spack bootstrap untrust spack-install
|
|
spack -v solve zlib
|
|
- name: Run unit tests (full suite with coverage)
|
|
if: ${{ needs.changes.outputs.with_coverage == 'true' }}
|
|
env:
|
|
SPACK_PYTHON: python
|
|
COVERAGE: true
|
|
SPACK_TEST_SOLVER: ${{ matrix.concretizer }}
|
|
run: |
|
|
share/spack/qa/run-unit-tests
|
|
coverage combine
|
|
coverage xml
|
|
- name: Run unit tests (reduced suite without coverage)
|
|
if: ${{ needs.changes.outputs.with_coverage == 'false' }}
|
|
env:
|
|
SPACK_PYTHON: python
|
|
ONLY_PACKAGES: true
|
|
SPACK_TEST_SOLVER: ${{ matrix.concretizer }}
|
|
run: |
|
|
share/spack/qa/run-unit-tests
|
|
- uses: codecov/codecov-action@81cd2dc8148241f03f5839d295e000b8f761e378 # @v2.1.0
|
|
if: ${{ needs.changes.outputs.with_coverage == 'true' }}
|
|
with:
|
|
flags: unittests,linux,${{ matrix.concretizer }}
|
|
# Test shell integration
|
|
shell:
|
|
needs: [ validate, style, changes ]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2
|
|
with:
|
|
fetch-depth: 0
|
|
- uses: actions/setup-python@d09bd5e6005b175076f227b13d9730d56e9dcfcb # @v2
|
|
with:
|
|
python-version: '3.10'
|
|
- name: Install System packages
|
|
run: |
|
|
sudo apt-get -y update
|
|
# Needed for shell tests
|
|
sudo apt-get install -y coreutils kcov csh zsh tcsh fish dash bash
|
|
- name: Install Python packages
|
|
run: |
|
|
pip install --upgrade pip six setuptools pytest codecov coverage[toml]==6.2
|
|
- name: Setup git configuration
|
|
run: |
|
|
# Need this for the git tests to succeed.
|
|
git --version
|
|
. .github/workflows/setup_git.sh
|
|
- name: Run shell tests (without coverage)
|
|
if: ${{ needs.changes.outputs.with_coverage == 'false' }}
|
|
run: |
|
|
share/spack/qa/run-shell-tests
|
|
- name: Run shell tests (with coverage)
|
|
if: ${{ needs.changes.outputs.with_coverage == 'true' }}
|
|
env:
|
|
COVERAGE: true
|
|
run: |
|
|
share/spack/qa/run-shell-tests
|
|
- uses: codecov/codecov-action@81cd2dc8148241f03f5839d295e000b8f761e378 # @v2.1.0
|
|
if: ${{ needs.changes.outputs.with_coverage == 'true' }}
|
|
with:
|
|
flags: shelltests,linux
|
|
|
|
# Test RHEL8 UBI with platform Python. This job is run
|
|
# only on PRs modifying core Spack
|
|
rhel8-platform-python:
|
|
needs: [ validate, style, changes ]
|
|
runs-on: ubuntu-latest
|
|
if: ${{ needs.changes.outputs.with_coverage == 'true' }}
|
|
container: registry.access.redhat.com/ubi8/ubi
|
|
steps:
|
|
- name: Install dependencies
|
|
run: |
|
|
dnf install -y \
|
|
bzip2 curl file gcc-c++ gcc gcc-gfortran git gnupg2 gzip \
|
|
make patch tcl unzip which xz
|
|
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @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: Run unit tests
|
|
shell: runuser -u spack-test -- bash {0}
|
|
run: |
|
|
source share/spack/setup-env.sh
|
|
spack -d solve zlib
|
|
spack unit-test -k 'not cvs and not svn and not hg' -x --verbose
|
|
# Test for the clingo based solver (using clingo-cffi)
|
|
clingo-cffi:
|
|
needs: [ validate, style, changes ]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2
|
|
with:
|
|
fetch-depth: 0
|
|
- uses: actions/setup-python@d09bd5e6005b175076f227b13d9730d56e9dcfcb # @v2
|
|
with:
|
|
python-version: '3.10'
|
|
- name: Install System packages
|
|
run: |
|
|
sudo apt-get -y update
|
|
# Needed for unit tests
|
|
sudo apt-get -y install \
|
|
coreutils cvs gfortran graphviz gnupg2 mercurial ninja-build \
|
|
patchelf kcov
|
|
- name: Install Python packages
|
|
run: |
|
|
pip install --upgrade pip six setuptools pytest codecov coverage[toml]==6.2 clingo
|
|
- name: Setup git configuration
|
|
run: |
|
|
# Need this for the git tests to succeed.
|
|
git --version
|
|
. .github/workflows/setup_git.sh
|
|
- name: Run unit tests (full suite with coverage)
|
|
if: ${{ needs.changes.outputs.with_coverage == 'true' }}
|
|
env:
|
|
COVERAGE: true
|
|
SPACK_TEST_SOLVER: clingo
|
|
run: |
|
|
share/spack/qa/run-unit-tests
|
|
coverage combine
|
|
coverage xml
|
|
- name: Run unit tests (reduced suite without coverage)
|
|
if: ${{ needs.changes.outputs.with_coverage == 'false' }}
|
|
env:
|
|
ONLY_PACKAGES: true
|
|
SPACK_TEST_SOLVER: clingo
|
|
run: |
|
|
share/spack/qa/run-unit-tests
|
|
- uses: codecov/codecov-action@81cd2dc8148241f03f5839d295e000b8f761e378 # @v2.1.0
|
|
if: ${{ needs.changes.outputs.with_coverage == 'true' }}
|
|
with:
|
|
flags: unittests,linux,clingo
|
|
# Run unit tests on MacOS
|
|
build:
|
|
needs: [ validate, style, changes ]
|
|
runs-on: macos-latest
|
|
strategy:
|
|
matrix:
|
|
python-version: [3.8]
|
|
steps:
|
|
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2
|
|
with:
|
|
fetch-depth: 0
|
|
- uses: actions/setup-python@d09bd5e6005b175076f227b13d9730d56e9dcfcb # @v2
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
- name: Install Python packages
|
|
run: |
|
|
pip install --upgrade pip six setuptools
|
|
pip install --upgrade pytest codecov coverage[toml]==6.2
|
|
- name: Setup Homebrew packages
|
|
run: |
|
|
brew install dash fish gcc gnupg2 kcov
|
|
- name: Run unit tests
|
|
env:
|
|
SPACK_TEST_SOLVER: clingo
|
|
run: |
|
|
git --version
|
|
. .github/workflows/setup_git.sh
|
|
. share/spack/setup-env.sh
|
|
$(which spack) bootstrap untrust spack-install
|
|
$(which spack) solve zlib
|
|
if [ "${{ needs.changes.outputs.with_coverage }}" == "true" ]
|
|
then
|
|
coverage run $(which spack) unit-test -x
|
|
coverage combine
|
|
coverage xml
|
|
# Delete the symlink going from ./lib/spack/docs/_spack_root back to
|
|
# the initial directory, since it causes ELOOP errors with codecov/actions@2
|
|
rm lib/spack/docs/_spack_root
|
|
else
|
|
echo "ONLY PACKAGE RECIPES CHANGED [skipping coverage]"
|
|
$(which spack) unit-test -x -m "not maybeslow" -k "package_sanity"
|
|
fi
|
|
- uses: codecov/codecov-action@81cd2dc8148241f03f5839d295e000b8f761e378 # @v2.1.0
|
|
if: ${{ needs.changes.outputs.with_coverage == 'true' }}
|
|
with:
|
|
files: ./coverage.xml
|
|
flags: unittests,macos
|
|
|
|
# Run audits on all the packages in the built-in repository
|
|
package-audits:
|
|
needs: [ validate, style, changes ]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2
|
|
- uses: actions/setup-python@d09bd5e6005b175076f227b13d9730d56e9dcfcb # @v2
|
|
with:
|
|
python-version: '3.10'
|
|
- name: Install Python packages
|
|
run: |
|
|
pip install --upgrade pip six setuptools pytest codecov coverage[toml]==6.2
|
|
- name: Package audits (with coverage)
|
|
if: ${{ needs.changes.outputs.with_coverage == 'true' }}
|
|
run: |
|
|
. share/spack/setup-env.sh
|
|
coverage run $(which spack) audit packages
|
|
coverage combine
|
|
coverage xml
|
|
- name: Package audits (without coverage)
|
|
if: ${{ needs.changes.outputs.with_coverage == 'false' }}
|
|
run: |
|
|
. share/spack/setup-env.sh
|
|
$(which spack) audit packages
|
|
- uses: codecov/codecov-action@81cd2dc8148241f03f5839d295e000b8f761e378 # @v2.1.0
|
|
if: ${{ needs.changes.outputs.with_coverage == 'true' }}
|
|
with:
|
|
flags: unittests,linux,audits
|