@plainconceptsplatform/workflows 1.0.12 → 1.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
# Runners this repository actually has.
|
|
3
3
|
#
|
|
4
4
|
# actionlint knows GitHub's own labels and rejects everything else, so a workflow that
|
|
5
|
-
# names one of our runner groups was reported as an error on every pull request.
|
|
6
|
-
#
|
|
7
|
-
# work router. Listing them here is how actionlint is told a
|
|
8
|
-
# rather than a typo, and it keeps that knowledge in a file the
|
|
9
|
-
# does not overwrite.
|
|
5
|
+
# names one of our runner groups was reported as an error on every pull request. All of
|
|
6
|
+
# these are real: agents-arc runs CI/Deploy, agents-aw runs the agent workflows,
|
|
7
|
+
# RunnerLandingZone runs the work router. Listing them here is how actionlint is told a
|
|
8
|
+
# label is self-hosted rather than a typo, and it keeps that knowledge in a file the
|
|
9
|
+
# workflow generator does not overwrite.
|
|
10
10
|
self-hosted-runner:
|
|
11
11
|
labels:
|
|
12
12
|
- agents-arc
|
|
13
|
+
- agents-aw
|
|
13
14
|
- RunnerLandingZone
|
|
@@ -555,72 +555,6 @@ jobs:
|
|
|
555
555
|
${{ env.IMPLEMENT_MARKER }}
|
|
556
556
|
${{ env.INCOMPLETE_COMMENT }}
|
|
557
557
|
[View this workflow run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})
|
|
558
|
-
# The implement-global concurrency group is held for as long as this called workflow runs,
|
|
559
|
-
# so waiting here is what makes the queue serial end to end rather than merely serial up to
|
|
560
|
-
# pull request creation. Without it the next story branches from a default branch that does
|
|
561
|
-
# not yet contain this one, and every later pull request in a batch conflicts with every
|
|
562
|
-
# earlier one: work an agent then has to redo at merge-gate time, once per pair.
|
|
563
|
-
#
|
|
564
|
-
# Hosted, not agents-arc: this job sleeps, and the fleet is capped at two VMs that the
|
|
565
|
-
# pull request's own CI needs in order to finish.
|
|
566
|
-
await_landing:
|
|
567
|
-
# agent and safe_outputs are named explicitly, not just conclude: a custom job that does
|
|
568
|
-
# not reference them is treated as pre-agent and wired as a dependency OF the agent job,
|
|
569
|
-
# which makes agent -> await_landing -> conclude -> agent a cycle and fails compilation.
|
|
570
|
-
needs: [agent, safe_outputs, conclude]
|
|
571
|
-
if: always() && needs.conclude.result == 'success'
|
|
572
|
-
runs-on: agents-arc
|
|
573
|
-
timeout-minutes: 95
|
|
574
|
-
permissions:
|
|
575
|
-
contents: read
|
|
576
|
-
issues: read
|
|
577
|
-
pull-requests: read
|
|
578
|
-
steps:
|
|
579
|
-
- name: Wait for the pull request to reach a terminal state
|
|
580
|
-
env:
|
|
581
|
-
GH_TOKEN: ${{ github.token }}
|
|
582
|
-
REPO: ${{ github.repository }}
|
|
583
|
-
ISSUE: ${{ inputs.issue-number }}
|
|
584
|
-
REVIEW_LABEL: ${{ env.REVIEW_LABEL }}
|
|
585
|
-
# Cap below the job timeout so the step reports rather than being killed.
|
|
586
|
-
MAX_WAIT_MINUTES: "90"
|
|
587
|
-
run: |
|
|
588
|
-
set -euo pipefail
|
|
589
|
-
|
|
590
|
-
# The pull request is recorded on the issue by the marker implement stamps; fall
|
|
591
|
-
# back to a body search for pull requests created before markers existed.
|
|
592
|
-
pr=$(gh issue view "$ISSUE" --repo "$REPO" --json body --jq '.body // ""' \
|
|
593
|
-
| grep -oE '<!-- implement-pr: [0-9]+ -->' | head -1 | grep -oE '[0-9]+' || true)
|
|
594
|
-
if [ -z "$pr" ]; then
|
|
595
|
-
pr=$(gh pr list --repo "$REPO" --state open --json number,body \
|
|
596
|
-
--jq "[.[] | select(((.body // \"\") + \" \") | ascii_downcase | test(\"clos(e|es|ed) #${ISSUE}[^0-9]|fix(es|ed)? #${ISSUE}[^0-9]|resolves? #${ISSUE}[^0-9]\"))][0].number // empty")
|
|
597
|
-
fi
|
|
598
|
-
if [ -z "$pr" ]; then
|
|
599
|
-
echo "::notice::No pull request found for #$ISSUE; nothing to wait for."
|
|
600
|
-
exit 0
|
|
601
|
-
fi
|
|
602
|
-
|
|
603
|
-
echo "Holding the implement slot until PR #$pr lands."
|
|
604
|
-
deadline=$(( $(date +%s) + MAX_WAIT_MINUTES * 60 ))
|
|
605
|
-
while [ "$(date +%s)" -lt "$deadline" ]; do
|
|
606
|
-
state=$(gh pr view "$pr" --repo "$REPO" --json state --jq '.state' 2>/dev/null || echo GONE)
|
|
607
|
-
case "$state" in
|
|
608
|
-
MERGED)
|
|
609
|
-
echo "::notice::PR #$pr merged. Releasing the slot so the next story branches from it."
|
|
610
|
-
exit 0 ;;
|
|
611
|
-
CLOSED|GONE)
|
|
612
|
-
echo "::notice::PR #$pr is $state. Releasing the slot."
|
|
613
|
-
exit 0 ;;
|
|
614
|
-
esac
|
|
615
|
-
# A human now owns the change, so the queue must not wait on them.
|
|
616
|
-
if gh issue view "$ISSUE" --repo "$REPO" --json labels \
|
|
617
|
-
--jq '[.labels[].name]' | jq -e --arg l "$REVIEW_LABEL" 'index($l)' >/dev/null; then
|
|
618
|
-
echo "::notice::#$ISSUE was handed to a human ($REVIEW_LABEL). Releasing the slot."
|
|
619
|
-
exit 0
|
|
620
|
-
fi
|
|
621
|
-
sleep 30
|
|
622
|
-
done
|
|
623
|
-
echo "::warning::PR #$pr did not land within ${MAX_WAIT_MINUTES}m. Releasing the slot; the next story may branch from a default branch without these changes."
|
|
624
558
|
agent:
|
|
625
559
|
needs: [eligibility]
|
|
626
560
|
if: needs.eligibility.outputs.eligible == 'true'
|