workflows: move eval from push to queue (#451926)
This commit is contained in:
31
.github/workflows/eval.yml
vendored
31
.github/workflows/eval.yml
vendored
@@ -11,6 +11,9 @@ on:
|
|||||||
systems:
|
systems:
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
|
defaultVersion:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
testVersions:
|
testVersions:
|
||||||
required: false
|
required: false
|
||||||
default: false
|
default: false
|
||||||
@@ -105,7 +108,7 @@ jobs:
|
|||||||
- name: Evaluate the ${{ matrix.system }} output paths at the merge commit
|
- name: Evaluate the ${{ matrix.system }} output paths at the merge commit
|
||||||
env:
|
env:
|
||||||
MATRIX_SYSTEM: ${{ matrix.system }}
|
MATRIX_SYSTEM: ${{ matrix.system }}
|
||||||
MATRIX_VERSION: ${{ matrix.version || 'nixVersions.latest' }}
|
MATRIX_VERSION: ${{ matrix.version || inputs.defaultVersion }}
|
||||||
run: |
|
run: |
|
||||||
nix-build nixpkgs/untrusted/ci --arg nixpkgs ./nixpkgs/untrusted-pinned -A eval.singleSystem \
|
nix-build nixpkgs/untrusted/ci --arg nixpkgs ./nixpkgs/untrusted-pinned -A eval.singleSystem \
|
||||||
--argstr evalSystem "$MATRIX_SYSTEM" \
|
--argstr evalSystem "$MATRIX_SYSTEM" \
|
||||||
@@ -115,36 +118,18 @@ jobs:
|
|||||||
# If it uses too much memory, slightly decrease chunkSize.
|
# If it uses too much memory, slightly decrease chunkSize.
|
||||||
# Note: Keep the same further down in sync!
|
# Note: Keep the same further down in sync!
|
||||||
|
|
||||||
# Running the attrpath generation step separately from the outpath step afterwards.
|
|
||||||
# The idea is that, *if* Eval on the target branch has not finished, yet, we will
|
|
||||||
# generate the attrpaths in the meantime - and the separate command command afterwards
|
|
||||||
# will check cachix again for whether Eval has finished. If no Eval result from the
|
|
||||||
# target branch can be found the second time, we proceed to run it in here. Attrpaths
|
|
||||||
# generation takes roughly 30 seconds, so for every normal use-case this should be more
|
|
||||||
# than enough of a head start for Eval on the target branch to finish.
|
|
||||||
# This edge-case, that Eval on the target branch is delayed is unlikely to happen anyway:
|
|
||||||
# For a commit to become the target commit of a PR, it must *already* be on the branch.
|
|
||||||
# Normally, CI should always start running on that push event *before* it starts running
|
|
||||||
# on the PR.
|
|
||||||
- name: Evaluate the ${{ matrix.system }} attribute paths at the target commit
|
|
||||||
if: inputs.targetSha
|
|
||||||
env:
|
|
||||||
MATRIX_SYSTEM: ${{ matrix.system }}
|
|
||||||
run: |
|
|
||||||
nix-build nixpkgs/trusted/ci --arg nixpkgs ./nixpkgs/trusted-pinned -A eval.attrpathsSuperset \
|
|
||||||
--argstr evalSystem "$MATRIX_SYSTEM" \
|
|
||||||
--argstr nixPath "nixVersions.latest"
|
|
||||||
|
|
||||||
- name: Evaluate the ${{ matrix.system }} output paths at the target commit
|
- name: Evaluate the ${{ matrix.system }} output paths at the target commit
|
||||||
if: inputs.targetSha
|
if: inputs.targetSha
|
||||||
env:
|
env:
|
||||||
MATRIX_SYSTEM: ${{ matrix.system }}
|
MATRIX_SYSTEM: ${{ matrix.system }}
|
||||||
# This should be very quick, because it pulls the eval results from Cachix.
|
# This must match the default version set in the Merge Queue.
|
||||||
|
VERSION: lixPackageSets.latest.lix
|
||||||
|
# This is very quick, because it pulls the eval results from Cachix.
|
||||||
run: |
|
run: |
|
||||||
nix-build nixpkgs/trusted/ci --arg nixpkgs ./nixpkgs/trusted-pinned -A eval.singleSystem \
|
nix-build nixpkgs/trusted/ci --arg nixpkgs ./nixpkgs/trusted-pinned -A eval.singleSystem \
|
||||||
--argstr evalSystem "$MATRIX_SYSTEM" \
|
--argstr evalSystem "$MATRIX_SYSTEM" \
|
||||||
--arg chunkSize 8000 \
|
--arg chunkSize 8000 \
|
||||||
--argstr nixPath "nixVersions.latest" \
|
--argstr nixPath "$VERSION" \
|
||||||
--out-link target
|
--out-link target
|
||||||
|
|
||||||
- name: Compare outpaths against the target branch
|
- name: Compare outpaths against the target branch
|
||||||
|
|||||||
33
.github/workflows/merge-group.yml
vendored
33
.github/workflows/merge-group.yml
vendored
@@ -17,6 +17,21 @@ on:
|
|||||||
permissions: {}
|
permissions: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
prepare:
|
||||||
|
runs-on: ubuntu-24.04-arm
|
||||||
|
outputs:
|
||||||
|
systems: ${{ steps.systems.outputs.systems }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
sparse-checkout: |
|
||||||
|
ci/supportedSystems.json
|
||||||
|
|
||||||
|
- name: Load supported systems
|
||||||
|
id: systems
|
||||||
|
run: |
|
||||||
|
echo "systems=$(jq -c <ci/supportedSystems.json)" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
lint:
|
lint:
|
||||||
name: Lint
|
name: Lint
|
||||||
uses: ./.github/workflows/lint.yml
|
uses: ./.github/workflows/lint.yml
|
||||||
@@ -26,6 +41,23 @@ jobs:
|
|||||||
mergedSha: ${{ inputs.mergedSha || github.event.merge_group.head_sha }}
|
mergedSha: ${{ inputs.mergedSha || github.event.merge_group.head_sha }}
|
||||||
targetSha: ${{ inputs.targetSha || github.event.merge_group.base_sha }}
|
targetSha: ${{ inputs.targetSha || github.event.merge_group.base_sha }}
|
||||||
|
|
||||||
|
eval:
|
||||||
|
name: Eval
|
||||||
|
needs: [prepare]
|
||||||
|
uses: ./.github/workflows/eval.yml
|
||||||
|
# The eval workflow requests these permissions so we must explicitly allow them,
|
||||||
|
# even though they are unused when working with the merge queue.
|
||||||
|
permissions:
|
||||||
|
# compare
|
||||||
|
statuses: write
|
||||||
|
secrets:
|
||||||
|
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||||
|
with:
|
||||||
|
mergedSha: ${{ inputs.mergedSha || github.event.merge_group.head_sha }}
|
||||||
|
systems: ${{ needs.prepare.outputs.systems }}
|
||||||
|
# This must match the version in Eval's target step.
|
||||||
|
defaultVersion: lixPackageSets.latest.lix
|
||||||
|
|
||||||
# This job's only purpose is to create the target for the "Required Status Checks" branch ruleset.
|
# This job's only purpose is to create the target for the "Required Status Checks" branch ruleset.
|
||||||
# It "needs" all the jobs that should block the Merge Queue.
|
# It "needs" all the jobs that should block the Merge Queue.
|
||||||
unlock:
|
unlock:
|
||||||
@@ -33,6 +65,7 @@ jobs:
|
|||||||
# Modify this list to add or remove jobs from required status checks.
|
# Modify this list to add or remove jobs from required status checks.
|
||||||
needs:
|
needs:
|
||||||
- lint
|
- lint
|
||||||
|
- eval
|
||||||
runs-on: ubuntu-24.04-arm
|
runs-on: ubuntu-24.04-arm
|
||||||
permissions:
|
permissions:
|
||||||
statuses: write
|
statuses: write
|
||||||
|
|||||||
1
.github/workflows/pr.yml
vendored
1
.github/workflows/pr.yml
vendored
@@ -86,6 +86,7 @@ jobs:
|
|||||||
mergedSha: ${{ needs.prepare.outputs.mergedSha }}
|
mergedSha: ${{ needs.prepare.outputs.mergedSha }}
|
||||||
targetSha: ${{ needs.prepare.outputs.targetSha }}
|
targetSha: ${{ needs.prepare.outputs.targetSha }}
|
||||||
systems: ${{ needs.prepare.outputs.systems }}
|
systems: ${{ needs.prepare.outputs.systems }}
|
||||||
|
defaultVersion: nixVersions.latest
|
||||||
testVersions: ${{ contains(fromJSON(needs.prepare.outputs.touched), 'pinned') && !contains(fromJSON(needs.prepare.outputs.headBranch).type, 'development') }}
|
testVersions: ${{ contains(fromJSON(needs.prepare.outputs.touched), 'pinned') && !contains(fromJSON(needs.prepare.outputs.headBranch).type, 'development') }}
|
||||||
|
|
||||||
labels:
|
labels:
|
||||||
|
|||||||
50
.github/workflows/push.yml
vendored
50
.github/workflows/push.yml
vendored
@@ -1,50 +0,0 @@
|
|||||||
name: Push
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
- staging
|
|
||||||
- release-*
|
|
||||||
- staging-*
|
|
||||||
- haskell-updates
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
mergedSha:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
secrets:
|
|
||||||
CACHIX_AUTH_TOKEN:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
permissions: {}
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
prepare:
|
|
||||||
runs-on: ubuntu-24.04-arm
|
|
||||||
outputs:
|
|
||||||
systems: ${{ steps.systems.outputs.systems }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
||||||
with:
|
|
||||||
sparse-checkout: |
|
|
||||||
ci/supportedSystems.json
|
|
||||||
|
|
||||||
- name: Load supported systems
|
|
||||||
id: systems
|
|
||||||
run: |
|
|
||||||
echo "systems=$(jq -c <ci/supportedSystems.json)" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
eval:
|
|
||||||
name: Eval
|
|
||||||
needs: [prepare]
|
|
||||||
uses: ./.github/workflows/eval.yml
|
|
||||||
# Those are not actually used on push, but will throw an error if not set.
|
|
||||||
permissions:
|
|
||||||
# compare
|
|
||||||
statuses: write
|
|
||||||
secrets:
|
|
||||||
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
|
||||||
with:
|
|
||||||
mergedSha: ${{ inputs.mergedSha || github.sha }}
|
|
||||||
systems: ${{ needs.prepare.outputs.systems }}
|
|
||||||
20
.github/workflows/test.yml
vendored
20
.github/workflows/test.yml
vendored
@@ -48,6 +48,7 @@ jobs:
|
|||||||
})).map(file => file.filename)
|
})).map(file => file.filename)
|
||||||
|
|
||||||
if (files.some(file => [
|
if (files.some(file => [
|
||||||
|
'.github/workflows/eval.yml',
|
||||||
'.github/workflows/lint.yml',
|
'.github/workflows/lint.yml',
|
||||||
'.github/workflows/merge-group.yml',
|
'.github/workflows/merge-group.yml',
|
||||||
'.github/workflows/test.yml',
|
'.github/workflows/test.yml',
|
||||||
@@ -65,12 +66,6 @@ jobs:
|
|||||||
'.github/workflows/test.yml',
|
'.github/workflows/test.yml',
|
||||||
].includes(file))) core.setOutput('pr', true)
|
].includes(file))) core.setOutput('pr', true)
|
||||||
|
|
||||||
if (files.some(file => [
|
|
||||||
'.github/workflows/eval.yml',
|
|
||||||
'.github/workflows/push.yml',
|
|
||||||
'.github/workflows/test.yml',
|
|
||||||
].includes(file))) core.setOutput('push', true)
|
|
||||||
|
|
||||||
merge-group:
|
merge-group:
|
||||||
if: needs.prepare.outputs.merge-group
|
if: needs.prepare.outputs.merge-group
|
||||||
name: Merge Group
|
name: Merge Group
|
||||||
@@ -98,16 +93,3 @@ jobs:
|
|||||||
secrets:
|
secrets:
|
||||||
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||||
NIXPKGS_CI_APP_PRIVATE_KEY: ${{ secrets.NIXPKGS_CI_APP_PRIVATE_KEY }}
|
NIXPKGS_CI_APP_PRIVATE_KEY: ${{ secrets.NIXPKGS_CI_APP_PRIVATE_KEY }}
|
||||||
|
|
||||||
push:
|
|
||||||
if: needs.prepare.outputs.push
|
|
||||||
name: Push
|
|
||||||
needs: [prepare]
|
|
||||||
uses: ./.github/workflows/push.yml
|
|
||||||
# Those are not actually used on the push or pull_request events, but will throw an error if not set.
|
|
||||||
permissions:
|
|
||||||
statuses: write
|
|
||||||
secrets:
|
|
||||||
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
|
||||||
with:
|
|
||||||
mergedSha: ${{ needs.prepare.outputs.mergedSha }}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user