summaryrefslogtreecommitdiff
path: root/.github/workflows/unit_tests.yaml
diff options
context:
space:
mode:
authorTom Scogland <scogland1@llnl.gov>2022-09-02 14:09:23 -0700
committerGitHub <noreply@github.com>2022-09-02 14:09:23 -0700
commit69f7a8f4d142cf5b7142bf8f20925b214e56316a (patch)
tree32b2c22f0b6ada94fd0047be4278f79465d7b8b3 /.github/workflows/unit_tests.yaml
parent80389911cce2daae5b0e4df069a3be9575954dc3 (diff)
downloadspack-69f7a8f4d142cf5b7142bf8f20925b214e56316a.tar.gz
spack-69f7a8f4d142cf5b7142bf8f20925b214e56316a.tar.bz2
spack-69f7a8f4d142cf5b7142bf8f20925b214e56316a.tar.xz
spack-69f7a8f4d142cf5b7142bf8f20925b214e56316a.zip
Reorder workflow execution in GHA (#32183)
This patchset refactors our GitHub actions into a single top-level ci workflow that invokes a series of reusable actions. The main goal of this is to be able to easily control which tests run and in what order based on the success or failure of top-level prechecks. Our previous workflows ran in three sets: * nix tests: style and verification first, then linux and macos tests if successful * windows tests: style and verification first, then linux and macos tests if successful * bootstrap tests As a result, the bootstrap tests ran even if the style failed, and style and verification had to run on two different platforms despite running identical checks. I'm relatively sure that's because of the limitation on dependencies between steps in the jobs. Reusable workflows allow us to run the style, verification and now audit checks once, then depending on the results, and the files changed, run the appropriate nix, windows and bootstrap tests. While it saves only a few minutes by itself, this makes it easier to refactor checks to subset tests without having to replicate tests or other workflow components in the future. Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
Diffstat (limited to '.github/workflows/unit_tests.yaml')
-rw-r--r--.github/workflows/unit_tests.yaml164
1 files changed, 27 insertions, 137 deletions
diff --git a/.github/workflows/unit_tests.yaml b/.github/workflows/unit_tests.yaml
index b20d969a43..3856f1039f 100644
--- a/.github/workflows/unit_tests.yaml
+++ b/.github/workflows/unit_tests.yaml
@@ -1,103 +1,25 @@
-name: linux tests
+name: unit tests
on:
- push:
- branches:
- - develop
- - releases/**
- pull_request:
- branches:
- - develop
- - releases/**
+ workflow_call:
+ inputs:
+ core:
+ required: true
+ type: string
+ packages:
+ required: true
+ type: string
+ with_coverage:
+ required: true
+ type: string
concurrency:
- group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_number }}
+ group: unit_tests-${{ 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@b55428b1882923874294fa556849718a1d7f2ca5 # @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.6- -vvv lib/spack/spack/ lib/spack/llnl/ bin/
- - name: vermin (Repositories)
- run: vermin --backport argparse --violations --backport typing -t=2.7- -t=3.6- -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@b55428b1882923874294fa556849718a1d7f2ca5 # @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 ]
+ ubuntu:
runs-on: ubuntu-latest
strategy:
matrix:
@@ -148,7 +70,7 @@ jobs:
spack bootstrap untrust spack-install
spack -v solve zlib
- name: Run unit tests (full suite with coverage)
- if: ${{ needs.changes.outputs.with_coverage == 'true' }}
+ if: ${{ inputs.with_coverage == 'true' }}
env:
SPACK_PYTHON: python
COVERAGE: true
@@ -158,7 +80,7 @@ jobs:
coverage combine
coverage xml
- name: Run unit tests (reduced suite without coverage)
- if: ${{ needs.changes.outputs.with_coverage == 'false' }}
+ if: ${{ inputs.with_coverage == 'false' }}
env:
SPACK_PYTHON: python
ONLY_PACKAGES: true
@@ -166,12 +88,11 @@ jobs:
run: |
share/spack/qa/run-unit-tests
- uses: codecov/codecov-action@81cd2dc8148241f03f5839d295e000b8f761e378 # @v2.1.0
- if: ${{ needs.changes.outputs.with_coverage == 'true' }}
+ if: ${{ inputs.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
@@ -194,26 +115,25 @@ jobs:
git --version
. .github/workflows/setup_git.sh
- name: Run shell tests (without coverage)
- if: ${{ needs.changes.outputs.with_coverage == 'false' }}
+ if: ${{ inputs.with_coverage == 'false' }}
run: |
share/spack/qa/run-shell-tests
- name: Run shell tests (with coverage)
- if: ${{ needs.changes.outputs.with_coverage == 'true' }}
+ if: ${{ inputs.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' }}
+ 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:
- needs: [ validate, style, changes ]
runs-on: ubuntu-latest
- if: ${{ needs.changes.outputs.with_coverage == 'true' }}
+ if: ${{ inputs.with_coverage == 'true' }}
container: registry.access.redhat.com/ubi8/ubi
steps:
- name: Install dependencies
@@ -237,7 +157,6 @@ jobs:
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
@@ -262,7 +181,7 @@ jobs:
git --version
. .github/workflows/setup_git.sh
- name: Run unit tests (full suite with coverage)
- if: ${{ needs.changes.outputs.with_coverage == 'true' }}
+ if: ${{ inputs.with_coverage == 'true' }}
env:
COVERAGE: true
SPACK_TEST_SOLVER: clingo
@@ -271,19 +190,18 @@ jobs:
coverage combine
coverage xml
- name: Run unit tests (reduced suite without coverage)
- if: ${{ needs.changes.outputs.with_coverage == 'false' }}
+ 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: ${{ needs.changes.outputs.with_coverage == 'true' }}
+ if: ${{ inputs.with_coverage == 'true' }}
with:
flags: unittests,linux,clingo
# Run unit tests on MacOS
- build:
- needs: [ validate, style, changes ]
+ macos:
runs-on: macos-latest
strategy:
matrix:
@@ -311,7 +229,7 @@ jobs:
. share/spack/setup-env.sh
$(which spack) bootstrap untrust spack-install
$(which spack) solve zlib
- if [ "${{ needs.changes.outputs.with_coverage }}" == "true" ]
+ if [ "${{ inputs.with_coverage }}" == "true" ]
then
coverage run $(which spack) unit-test -x
coverage combine
@@ -324,36 +242,8 @@ jobs:
$(which spack) unit-test -x -m "not maybeslow" -k "test_all_virtual_packages_have_default_providers"
fi
- uses: codecov/codecov-action@81cd2dc8148241f03f5839d295e000b8f761e378 # @v2.1.0
- if: ${{ needs.changes.outputs.with_coverage == 'true' }}
+ if: ${{ inputs.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@b55428b1882923874294fa556849718a1d7f2ca5 # @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