name: unit tests on: workflow_dispatch: workflow_call: inputs: core: required: true type: string packages: required: true type: string with_coverage: required: true type: string 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: ubuntu-latest strategy: matrix: python-version: ['2.7', '3.6', '3.7', '3.8', '3.9', '3.10'] concretizer: ['clingo'] on_develop: - ${{ github.ref == 'refs/heads/develop' }} include: - python-version: 2.7 concretizer: original on_develop: false - python-version: '3.10' concretizer: original on_develop: false exclude: - python-version: '3.7' concretizer: 'clingo' on_develop: false - python-version: '3.8' concretizer: 'clingo' on_develop: false - python-version: '3.9' concretizer: 'clingo' on_develop: false steps: - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2 with: fetch-depth: 0 - uses: actions/setup-python@b55428b1882923874294fa556849718a1d7f2ca5 # @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" pytest-xdist # 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" "click==8.0.4" "black<=21.12b0" 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: ${{ inputs.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: ${{ inputs.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: ${{ inputs.with_coverage == 'true' }} with: flags: unittests,linux,${{ matrix.concretizer }} # Test shell integration shell: runs-on: ubuntu-latest steps: - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2 with: fetch-depth: 0 - uses: actions/setup-python@b55428b1882923874294fa556849718a1d7f2ca5 # @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 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 (without coverage) if: ${{ inputs.with_coverage == 'false' }} run: | share/spack/qa/run-shell-tests - name: Run shell tests (with coverage) if: ${{ inputs.with_coverage == 'true' }} env: COVERAGE: true run: | share/spack/qa/run-shell-tests - uses: codecov/codecov-action@81cd2dc8148241f03f5839d295e000b8f761e378 # @v2.1.0 if: ${{ inputs.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: runs-on: ubuntu-latest if: ${{ inputs.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: runs-on: ubuntu-latest steps: - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2 with: fetch-depth: 0 - uses: actions/setup-python@b55428b1882923874294fa556849718a1d7f2ca5 # @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 pytest-xdist - 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: ${{ inputs.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: ${{ inputs.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: ${{ inputs.with_coverage == 'true' }} with: flags: unittests,linux,clingo # Run unit tests on MacOS macos: runs-on: macos-latest strategy: matrix: python-version: [3.8] steps: - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2 with: fetch-depth: 0 - uses: actions/setup-python@b55428b1882923874294fa556849718a1d7f2ca5 # @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 pytest-xdist - 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 common_args=(--dist loadfile --tx '4*popen//python=./bin/spack-tmpconfig python -u ./bin/spack python' -x) if [ "${{ inputs.with_coverage }}" == "true" ] then coverage run $(which spack) unit-test "${common_args[@]}" 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 "${common_args[@]}" -m "not maybeslow" -k "test_all_virtual_packages_have_default_providers" fi - uses: codecov/codecov-action@81cd2dc8148241f03f5839d295e000b8f761e378 # @v2.1.0 if: ${{ inputs.with_coverage == 'true' }} with: files: ./coverage.xml flags: unittests,macos