Merge pull request 'CI: a newer run cancels the one it supersedes' (#126) from ci-concurrency into main
This commit was merged in pull request #126.
This commit is contained in:
commit
d0fde2f136
2 files changed
+28
-8
No files matched your search
+26
-6
@@ -18,13 +18,33 @@ on:
|
|||||||
# Manual re-run, e.g. after rotating a credential or raising a budget cap.
|
# Manual re-run, e.g. after rotating a credential or raising a budget cap.
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
|
# A newer run for the same PR or branch cancels the one it supersedes: there
|
||||||
|
# is one runner, so a stale run would hold it (and the GPU) to the end. Adding
|
||||||
|
# a label other than e2e:full starts a run whose jobs all skip; it gets a
|
||||||
|
# group of its own, so it can't cancel the real one.
|
||||||
|
#
|
||||||
|
# Gitea triggers on `labeled` but hands the workflow its own name for the
|
||||||
|
# action, `label_updated` (and `synchronized` for a push), so each check
|
||||||
|
# below accepts both. Nor does it say which label was added
|
||||||
|
# (`github.event.label` is empty), so a label event counts when the PR now
|
||||||
|
# has e2e:full; adding another label to an e2e:full PR restarts its run.
|
||||||
|
concurrency:
|
||||||
|
group: >-
|
||||||
|
${{ github.workflow }}-${{ github.head_ref || github.ref }}${{
|
||||||
|
((github.event.action == 'labeled' || github.event.action == 'label_updated')
|
||||||
|
&& !contains(github.event.pull_request.labels.*.name, 'e2e:full'))
|
||||||
|
&& format('-label-{0}', github.run_id) || '' }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
env:
|
env:
|
||||||
# Full on e2e:full, and outside PRs.
|
# Full on e2e:full, and outside PRs.
|
||||||
FULL: ${{ github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'e2e:full') }}
|
FULL: ${{ github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'e2e:full') }}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
checks:
|
checks:
|
||||||
if: github.event.action != 'labeled' || github.event.label.name == 'e2e:full'
|
if: >-
|
||||||
|
(github.event.action != 'labeled' && github.event.action != 'label_updated')
|
||||||
|
|| contains(github.event.pull_request.labels.*.name, 'e2e:full')
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
@@ -76,13 +96,13 @@ jobs:
|
|||||||
# services, every role on a local model, so it spends nothing but keeps
|
# services, every role on a local model, so it spends nothing but keeps
|
||||||
# the RTX 4090 busy: ~10 minutes for the smoke tests, ~25+ for all. On
|
# the RTX 4090 busy: ~10 minutes for the smoke tests, ~25+ for all. On
|
||||||
# PRs and manual runs, and only after the checks pass: a PR that's red
|
# PRs and manual runs, and only after the checks pass: a PR that's red
|
||||||
# already doesn't spend the GPU. There is one runner and Gitea doesn't
|
# already doesn't spend the GPU. A newer push cancels a run it supersedes
|
||||||
# honour cancel-in-progress, so a run a newer push supersedes holds the
|
# (concurrency, above). Locally, run only what you're writing (-k) or
|
||||||
# runner until it's cancelled by hand. Locally, run only what you're
|
# diagnosing (--lf).
|
||||||
# writing (-k) or diagnosing (--lf).
|
|
||||||
if: >-
|
if: >-
|
||||||
github.event_name != 'push'
|
github.event_name != 'push'
|
||||||
&& (github.event.action != 'labeled' || github.event.label.name == 'e2e:full')
|
&& ((github.event.action != 'labeled' && github.event.action != 'label_updated')
|
||||||
|
|| contains(github.event.pull_request.labels.*.name, 'e2e:full'))
|
||||||
needs: checks
|
needs: checks
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
timeout-minutes: 90
|
timeout-minutes: 90
|
||||||
|
|||||||
@@ -81,8 +81,8 @@ Only `nisse-dev` has real code; `nisse-core` and `nisse-ops` are placeholders.
|
|||||||
runs that full set before its image is built. The end-to-end tests drive the
|
runs that full set before its image is built. The end-to-end tests drive the
|
||||||
real agent, every role on a local model (so they cost nothing per call), in a
|
real agent, every role on a local model (so they cost nothing per call), in a
|
||||||
repository of the run's own, with a scripted operator; CI runs them after the
|
repository of the run's own, with a scripted operator; CI runs them after the
|
||||||
checks pass. There is one runner, and a run a newer push
|
checks pass. There is one runner, so a newer run for a
|
||||||
supersedes has to be cancelled by hand. Locally only the tests being written
|
PR or branch cancels the one it supersedes (#126). Locally only the tests being written
|
||||||
(`-k`) or diagnosed (`--lf`); `scripts/e2e.sh` reports what a run spent. Manual
|
(`-k`) or diagnosed (`--lf`); `scripts/e2e.sh` reports what a run spent. Manual
|
||||||
live runs are for the new loop's first runs and phase ends. Findings are filed as
|
live runs are for the new loop's first runs and phase ends. Findings are filed as
|
||||||
issues and either fixed before moving on or deliberately deferred.
|
issues and either fixed before moving on or deliberately deferred.
|
||||||
|
|||||||
Reference in new issue
Block a user