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>
2022-09-02 21:09:23 +00:00
|
|
|
name: ci
|
|
|
|
|
|
|
|
on:
|
|
|
|
push:
|
|
|
|
branches:
|
|
|
|
- develop
|
|
|
|
- releases/**
|
|
|
|
pull_request:
|
|
|
|
branches:
|
|
|
|
- develop
|
|
|
|
- releases/**
|
|
|
|
|
|
|
|
concurrency:
|
2022-09-07 18:12:57 +00:00
|
|
|
group: ci-${{github.ref}}-${{github.event.pull_request.number || github.run_number}}
|
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>
2022-09-02 21:09:23 +00:00
|
|
|
cancel-in-progress: true
|
|
|
|
|
|
|
|
jobs:
|
|
|
|
prechecks:
|
|
|
|
needs: [ changes ]
|
|
|
|
uses: ./.github/workflows/valid-style.yml
|
|
|
|
with:
|
2022-09-08 17:58:53 +00:00
|
|
|
with_coverage: ${{ needs.changes.outputs.core }}
|
2022-09-07 18:12:57 +00:00
|
|
|
all-prechecks:
|
|
|
|
needs: [ prechecks ]
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
|
|
- name: Success
|
|
|
|
run: "true"
|
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>
2022-09-02 21:09:23 +00:00
|
|
|
# Check which files have been updated by the PR
|
|
|
|
changes:
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
# Set job outputs to values from filter step
|
|
|
|
outputs:
|
|
|
|
bootstrap: ${{ steps.filter.outputs.bootstrap }}
|
|
|
|
core: ${{ steps.filter.outputs.core }}
|
|
|
|
packages: ${{ steps.filter.outputs.packages }}
|
|
|
|
steps:
|
2023-04-13 18:28:26 +00:00
|
|
|
- uses: actions/checkout@83b7061638ee4956cf7545a6f7efe594e5ad0247 # @v2
|
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>
2022-09-02 21:09:23 +00:00
|
|
|
if: ${{ github.event_name == 'push' }}
|
|
|
|
with:
|
|
|
|
fetch-depth: 0
|
|
|
|
# For pull requests it's not necessary to checkout the code
|
2022-11-07 19:38:32 +00:00
|
|
|
- uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50
|
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>
2022-09-02 21:09:23 +00:00
|
|
|
id: filter
|
|
|
|
with:
|
|
|
|
# See https://github.com/dorny/paths-filter/issues/56 for the syntax used below
|
|
|
|
# Don't run if we only modified packages in the
|
|
|
|
# built-in repository or documentation
|
|
|
|
filters: |
|
|
|
|
bootstrap:
|
|
|
|
- 'var/spack/repos/builtin/packages/clingo-bootstrap/**'
|
|
|
|
- 'var/spack/repos/builtin/packages/clingo/**'
|
|
|
|
- 'var/spack/repos/builtin/packages/python/**'
|
|
|
|
- 'var/spack/repos/builtin/packages/re2c/**'
|
|
|
|
- 'lib/spack/**'
|
|
|
|
- 'share/spack/**'
|
|
|
|
- '.github/workflows/bootstrap.yml'
|
2022-09-19 17:59:29 +00:00
|
|
|
- '.github/workflows/ci.yaml'
|
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>
2022-09-02 21:09:23 +00:00
|
|
|
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
|
|
|
|
#
|
|
|
|
bootstrap:
|
|
|
|
if: ${{ github.repository == 'spack/spack' && needs.changes.outputs.bootstrap == 'true' }}
|
|
|
|
needs: [ prechecks, changes ]
|
|
|
|
uses: ./.github/workflows/bootstrap.yml
|
|
|
|
unit-tests:
|
2022-09-07 18:12:57 +00:00
|
|
|
if: ${{ github.repository == 'spack/spack' && needs.changes.outputs.core == 'true' }}
|
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>
2022-09-02 21:09:23 +00:00
|
|
|
needs: [ prechecks, changes ]
|
|
|
|
uses: ./.github/workflows/unit_tests.yaml
|
|
|
|
windows:
|
2022-09-07 18:12:57 +00:00
|
|
|
if: ${{ github.repository == 'spack/spack' && needs.changes.outputs.core == 'true' }}
|
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>
2022-09-02 21:09:23 +00:00
|
|
|
needs: [ prechecks ]
|
|
|
|
uses: ./.github/workflows/windows_python.yml
|
2022-09-07 18:12:57 +00:00
|
|
|
all:
|
2022-11-14 12:11:28 +00:00
|
|
|
needs: [ windows, unit-tests, bootstrap ]
|
2022-09-07 18:12:57 +00:00
|
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
|
|
- name: Success
|
|
|
|
run: "true"
|