name: unit tests on: workflow_dispatch: workflow_call: concurrency: group: unit_tests-${{github.ref}}-${{github.event.pull_request.number || github.run_number}} cancel-in-progress: true jobs: # Run unit tests with different configurations on linux ubuntu: runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest] python-version: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12'] concretizer: ['clingo'] on_develop: - ${{ github.ref == 'refs/heads/develop' }} include: - python-version: '3.11' os: ubuntu-latest concretizer: original on_develop: ${{ github.ref == 'refs/heads/develop' }} - python-version: '3.6' os: ubuntu-20.04 concretizer: clingo on_develop: ${{ github.ref == 'refs/heads/develop' }} exclude: - python-version: '3.7' os: ubuntu-latest concretizer: 'clingo' on_develop: false - python-version: '3.8' os: ubuntu-latest concretizer: 'clingo' on_develop: false - python-version: '3.9' os: ubuntu-latest concretizer: 'clingo' on_develop: false - python-version: '3.10' os: ubuntu-latest concretizer: 'clingo' on_develop: false - python-version: '3.11' os: ubuntu-latest concretizer: 'clingo' on_develop: false steps: - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 with: fetch-depth: 0 - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d 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 \ cmake bison libbison-dev kcov - name: Install Python packages run: | pip install --upgrade pip setuptools pytest pytest-xdist pytest-cov pip install --upgrade flake8 "isort>=4.3.5" "mypy>=0.900" "click" "black" - 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 disable spack-install spack bootstrap now spack -v solve zlib - name: Run unit tests env: SPACK_PYTHON: python SPACK_TEST_SOLVER: ${{ matrix.concretizer }} SPACK_TEST_PARALLEL: 2 COVERAGE: true UNIT_TEST_COVERAGE: ${{ matrix.python-version == '3.11' }} run: | share/spack/qa/run-unit-tests - uses: codecov/codecov-action@5ecb98a3c6b747ed38dc09f787459979aebb39be with: flags: unittests,linux,${{ matrix.concretizer }} token: ${{ secrets.CODECOV_TOKEN }} verbose: true # Test shell integration shell: runs-on: ubuntu-latest steps: - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 with: fetch-depth: 0 - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d with: python-version: '3.11' - 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 setuptools pytest coverage[toml] pytest-xdist - name: Setup git configuration run: | # Need this for the git tests to succeed. git --version . .github/workflows/setup_git.sh - name: Run shell tests env: COVERAGE: true run: | share/spack/qa/run-shell-tests - uses: codecov/codecov-action@5ecb98a3c6b747ed38dc09f787459979aebb39be with: flags: shelltests,linux token: ${{ secrets.CODECOV_TOKEN }} verbose: true # Test RHEL8 UBI with platform Python. This job is run # only on PRs modifying core Spack rhel8-platform-python: runs-on: ubuntu-latest 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@a5ac7e51b41094c92402da3b24376905380afc29 - name: Setup repo and non-root user run: | git --version git config --global --add safe.directory /__w/spack/spack 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 bootstrap now --dev 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: runs-on: ubuntu-latest steps: - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 with: fetch-depth: 0 - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d with: python-version: '3.11' - name: Install System packages run: | sudo apt-get -y update sudo apt-get -y install coreutils cvs gfortran graphviz gnupg2 mercurial ninja-build kcov - name: Install Python packages run: | pip install --upgrade pip setuptools pytest coverage[toml] pytest-cov clingo pytest-xdist pip install --upgrade flake8 "isort>=4.3.5" "mypy>=0.900" "click" "black" - 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) env: COVERAGE: true SPACK_TEST_SOLVER: clingo run: | share/spack/qa/run-unit-tests - uses: codecov/codecov-action@5ecb98a3c6b747ed38dc09f787459979aebb39be with: flags: unittests,linux,clingo token: ${{ secrets.CODECOV_TOKEN }} verbose: true # Run unit tests on MacOS macos: runs-on: ${{ matrix.os }} strategy: matrix: os: [macos-13, macos-14] python-version: ["3.11"] steps: - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 with: fetch-depth: 0 - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d with: python-version: ${{ matrix.python-version }} - name: Install Python packages run: | pip install --upgrade pip setuptools pip install --upgrade pytest coverage[toml] pytest-xdist pytest-cov - name: Setup Homebrew packages run: | brew install dash fish gcc gnupg2 kcov - name: Run unit tests env: SPACK_TEST_SOLVER: clingo SPACK_TEST_PARALLEL: 4 run: | git --version . .github/workflows/setup_git.sh . share/spack/setup-env.sh $(which spack) bootstrap disable spack-install $(which spack) solve zlib common_args=(--dist loadfile --tx '4*popen//python=./bin/spack-tmpconfig python -u ./bin/spack python' -x) $(which spack) unit-test --verbose --cov --cov-config=pyproject.toml --cov-report=xml:coverage.xml "${common_args[@]}" - uses: codecov/codecov-action@5ecb98a3c6b747ed38dc09f787459979aebb39be with: flags: unittests,macos token: ${{ secrets.CODECOV_TOKEN }} verbose: true