diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index dbb3523..981bcfb 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -16,6 +16,11 @@ on: required: false default: "." type: string + fail-fast: + required: false + default: true + type: boolean + description: "Whether to cancel all in-progress jobs if any matrix job fails" runner-map: required: false type: string @@ -93,6 +98,7 @@ jobs: runs-on: ${{ matrix.systems.runner }} needs: inventory strategy: + fail-fast: ${{ inputs.fail-fast }} matrix: systems: ${{ fromJSON(needs.inventory.outputs.systems) }} diff --git a/README.md b/README.md index 32b6cee..beb4d62 100644 --- a/README.md +++ b/README.md @@ -99,25 +99,24 @@ ERROR magic_nix_cache: FlakeHub cache initialization failed: FlakeHub cache erro #### GitHub Actions Runners -##### Standard & larger runners +##### Standard and larger runners By default, the CI maps the Nix systems to their equivalent GitHub-hosted runners: -| | macOS (Apple Silicon) | ARM Linux | macOS (Intel) | x86 Linux | -|---|---|---|---|---| -| Flake `system:` (Nix build platform) | `aarch64-darwin` | `aarch64-linux` | `x86_64-darwin` | `x86_64-linux` | +| | macOS (Apple Silicon) | ARM Linux | macOS (Intel) | x86 Linux | +| ------------------------------------------------- | ------------------------------------ | --------------------------- | ------------------------------------ | --------------------------- | +| Flake `system` (Nix build platform) | `aarch64-darwin` | `aarch64-linux` | `x86_64-darwin` | `x86_64-linux` | | [GitHub Actions Runner][runners] (workflow label) | `macos-latest` (using Apple Silicon) | `ubuntu-latest` (using x86) | `macos-latest` (using Apple Silicon) | `ubuntu-latest` (using x86) | -> [!INFO] +> [!NOTE] > There is also a [standard ARM Linux runner][runners-linux-arm] `ubuntu-24.04-arm`, currently in public preview and only supported on public repositories. > To use it, supply your own runner map as shown below. -> To use ARM Linux runners on private repositories, you need a non-standard runners, as shown below. +> To use ARM Linux runners on private repositories, you need non-standard runners, as shown below. -##### Non-Standard runners +##### Non-standard runners You can also use several types of non-standard runners by providing a custom runner map. - -For example, this runner-map enables the [larger GitHub runners for macOS][runners-large-macos]: +For example, this runner map enables the [larger GitHub runners for macOS][runners-large-macos]: ```yaml jobs: @@ -135,7 +134,7 @@ jobs: ``` > [!TIP] -> Using `macos-latest-large` is currently the only way to run *current* macOS on Intel architecture. +> Using `macos-latest-large` is currently the only way to run _current_ macOS on Intel architecture. The other two types of runners are those provisioned on your own infrastructure, and [larger Ubuntu (not macOS) runners][runners-large] with bespoke specs (for example, 64 CPUs, 128GB RAM) hosted by GitHub. Confusingly, GitHub sometimes refers to both of these as "self-hosted" runners. @@ -146,9 +145,9 @@ Confusingly, GitHub sometimes refers to both of these as "self-hosted" runners. > > ```diff > jobs: -> DeterminateCI: -> - uses: DeterminateSystems/ci/.github/workflows/workflow.yml@main -> + uses: $YOURORG/ci/.github/workflows/workflow.yml@main +> DeterminateCI: +> - uses: DeterminateSystems/ci/.github/workflows/workflow.yml@main +> + uses: $YOURORG/ci/.github/workflows/workflow.yml@main > ``` > > Replace `$YOURORG` with your own organisation or user. @@ -172,6 +171,22 @@ jobs: ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} ``` +#### Continue on failure + +By default, if any build in the matrix fails, the workflow will cancel all remaining in-progress jobs. +You can change this behavior by setting `fail-fast` to `false`: + +```yaml +jobs: + DeterminateCI: + uses: DeterminateSystems/ci/.github/workflows/workflow.yml@main + permissions: + id-token: write + contents: read + with: + fail-fast: false +``` + ## Notes This workflow uses a collection of GitHub Actions by Determinate Systems, all of which are covered by the Determinate Systems [privacy policy][privacy] and [terms of service][tos].