-
Notifications
You must be signed in to change notification settings - Fork 0
ci(concurrency): scope noema/strix/opencode workflows by PR number #1787
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
861e8d4
59e34da
19f323d
9e87df4
3abc455
13faffe
7ce613d
a73706f
6847202
9f7a6dd
8da772e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,39 @@ | ||
| name: appguardrail Hourly Review Repair | ||
|
|
||
| on: | ||
| schedule: | ||
| # Minute 41 is the roster slot already reserved for Appguardrail across | ||
| # the hourly callers (see afipc/nonnest2/originweave cron comments). It | ||
| # avoids pg-llm-batch (1), aFIPC (2), kaefa (3), LineageWeave (4), | ||
| # codec-carver (5), life-os (6), Wardnet (7), mightyETL (8), | ||
| # psychometrics-commons (9), OriginWeave (10), naruon (11), | ||
| # DiagramWeave (12), pg-erd-cloud (13), mhtml-etl-gateway (14), | ||
| # html4tree (15), nonnest2 (16), orchestrator (17), noema (19), | ||
| # Clearfolio (23), Keyverse (29), Scopeweave (31), DiskSage (37), | ||
| # newsdom-api (43), macOS utility packs (44), Inkspan (47), | ||
| # fast-mlsirm (49), BandScope (53), and semantic-data-portal (59). | ||
| - cron: "41 * * * *" | ||
|
|
||
| concurrency: | ||
| group: appguardrail-hourly-review-repair | ||
| # A later heartbeat must not cancel an in-flight scan RCA. | ||
| cancel-in-progress: false | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| jobs: | ||
| dispatch-review-repair: | ||
| permissions: | ||
| contents: read | ||
| id-token: write | ||
| uses: ./.github/workflows/pr-review-fix-scheduler.yml | ||
| with: | ||
| target_repository: ContextualWisdomLab/appguardrail | ||
| base_branch: develop | ||
| max_prs: "50" | ||
| max_dispatches: "1" | ||
| retry_hours: "2" | ||
| secrets: | ||
| PR_REVIEW_MERGE_TOKEN: ${{ secrets.PR_REVIEW_MERGE_TOKEN }} | ||
| OPENCODE_APPROVE_TOKEN: ${{ secrets.OPENCODE_APPROVE_TOKEN }} |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -42,6 +42,10 @@ on: | |
| permissions: | ||
| contents: read | ||
|
|
||
| concurrency: | ||
| group: ${{ github.workflow }}-${{ github.repository }}-${{ github.event.pull_request.number || github.event.workflow_call.head_repository.full_name || github.run_id }} | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📝 Info: deploy-pages concurrency references a non-existent context property
Was this helpful? React with 👍 or 👎 to provide feedback. |
||
| cancel-in-progress: true | ||
|
|
||
| jobs: | ||
| deploy_pages: | ||
| name: Deploy ${{ inputs.project_name }} | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,39 @@ | ||
| name: macOS utility packs Hourly Review Repair | ||
|
|
||
| on: | ||
| schedule: | ||
| # Minute 44 is a fresh roster allocation for the macOS utility packs | ||
| # bootstrap. It avoids pg-llm-batch (1), aFIPC (2), kaefa (3), | ||
| # LineageWeave (4), codec-carver (5), life-os (6), Wardnet (7), | ||
| # mightyETL (8), psychometrics-commons (9), OriginWeave (10), | ||
| # naruon (11), DiagramWeave (12), pg-erd-cloud (13), | ||
| # mhtml-etl-gateway (14), html4tree (15), nonnest2 (16), | ||
| # orchestrator (17), noema (19), Clearfolio (23), Keyverse (29), | ||
| # Scopeweave (31), DiskSage (37), Appguardrail (41), newsdom-api (43), | ||
| # Inkspan (47), fast-mlsirm (49), BandScope (53), and | ||
| # semantic-data-portal (59). | ||
| - cron: "44 * * * *" | ||
|
|
||
| concurrency: | ||
| group: macos_utility_packs-hourly-review-repair | ||
| # A later heartbeat must not cancel an in-flight bootstrap RCA. | ||
| cancel-in-progress: false | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| jobs: | ||
| dispatch-review-repair: | ||
| permissions: | ||
| contents: read | ||
| id-token: write | ||
| uses: ./.github/workflows/pr-review-fix-scheduler.yml | ||
| with: | ||
| target_repository: ContextualWisdomLab/macos_utility_packs | ||
| base_branch: develop | ||
| max_prs: "50" | ||
| max_dispatches: "1" | ||
| retry_hours: "2" | ||
| secrets: | ||
| PR_REVIEW_MERGE_TOKEN: ${{ secrets.PR_REVIEW_MERGE_TOKEN }} | ||
| OPENCODE_APPROVE_TOKEN: ${{ secrets.OPENCODE_APPROVE_TOKEN }} |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -18,15 +18,7 @@ on: | |
| types: [noema-review] | ||
|
|
||
| concurrency: | ||
| group: >- | ||
| noema-review-${{ | ||
| github.event_name == 'pull_request_target' && github.event.pull_request.base.repo.full_name || | ||
| github.event_name == 'repository_dispatch' && github.event.client_payload.target_repository || | ||
| github.repository }}-${{ github.event_name }}-${{ | ||
| github.event_name == 'pull_request_target' && format('pr-{0}', github.event.pull_request.number) || | ||
| github.event_name == 'workflow_run' && github.event.workflow_run.pull_requests[0].number && format('pr-{0}', github.event.workflow_run.pull_requests[0].number) || | ||
| github.event_name == 'repository_dispatch' && github.event.client_payload.pr_number || | ||
| github.run_id }} | ||
| group: ${{ github.workflow }}-${{ github.repository }}-${{ github.event.pull_request.number || github.event.client_payload.pr_number || github.event.workflow_run.pull_requests[0].number }} | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔍 Noema review may cancel across event types for the same PR The old group included Was this helpful? React with 👍 or 👎 to provide feedback. |
||
| cancel-in-progress: true | ||
|
|
||
| permissions: | ||
|
|
||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -13,11 +13,7 @@ on: | |||||
|
|
||||||
| concurrency: | ||||||
| # PR-number scope keeps stale dispatches replaced for the current head. | ||||||
| group: >- | ||||||
| opencode-review-repository-dispatch-${{ | ||||||
| github.event.client_payload.target_repository || github.repository }}-${{ | ||||||
| github.event.client_payload.pr_number && format('pr-{0}', github.event.client_payload.pr_number) || | ||||||
| github.run_id }} | ||||||
| group: ${{ github.workflow }}-${{ github.repository }}-${{ github.event.client_payload.pr_number || github.event.pull_request.number || github.event.workflow_run.pull_requests[0].number }} | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔴 Review dispatches for different repos with the same PR number cancel each other For
Suggested change
Was this helpful? React with 👍 or 👎 to provide feedback. |
||||||
| cancel-in-progress: true | ||||||
|
|
||||||
| permissions: | ||||||
|
|
@@ -4471,12 +4467,15 @@ jobs: | |||||
| # or used for product/model improvement, so private repositories | ||||||
| # include neither NIM nor anonymous free candidates and start at the | ||||||
| # existing keyed fallback list: OpenCode Zen GPT-5.6 Terra, DeepSeek | ||||||
| # V3, the direct GPT-5.4 slot, and pinned PAID | ||||||
| # V3, the direct OpenAI gpt-5.4 slot, and pinned PAID | ||||||
| # OpenRouter coder models (free-tier candidates hit the shared | ||||||
| # free-models-per-day cap and hung for the full candidate timeout, | ||||||
| # so the OpenRouter slots use cheap paid models billed against the | ||||||
| # org's OpenRouter credits), then the full-size GPT-4.1 long-context | ||||||
| # endpoint and provider-specific GPT/o3 fallbacks. | ||||||
| # The direct-OpenAI slot runs gpt-5.4. Candidate order is bound to | ||||||
| # the provider/model contract and review capability; it does not | ||||||
| # infer a ranking from unverified or time-varying price claims. | ||||||
| OPENCODE_MODEL_CANDIDATES: "${{ needs.validate-pr-metadata.outputs.is_private == 'false' && 'nvidia-nim/nvidia/llama-3.3-nemotron-super-49b-v1.5 nvidia-nim/nvidia/llama-3.1-nemotron-ultra-253b-v1 nvidia-nim/nvidia/nemotron-3-super-120b-a12b nvidia-nim/nvidia/nemotron-3-ultra-550b-a55b nvidia-nim/meta/llama-3.3-70b-instruct nvidia-nim/deepseek-ai/deepseek-v4-pro nvidia-nim/mistralai/codestral-22b-instruct-v0.1 opencode-free/nemotron-3-ultra-free opencode-free/deepseek-v4-flash-free opencode-free/north-mini-code-free opencode-free/laguna-s-2.1-free opencode-free/ling-3.0-flash-free opencode-free/big-pickle opencode-free/mimo-v2.5-free opencode-free/hy3-free opencode-free/minimax-m3-free opencode-free/glm-5-free opencode-free/kimi-k2.5-free opencode-free/qwen3.6-plus-free ' || '' }}opencode/gpt-5.6-terra github-models/deepseek/deepseek-v3-0324 openai/gpt-5.4 openrouter/deepseek/deepseek-v3.2 openrouter/qwen/qwen3-coder github-models/openai/gpt-4.1 github-models/openai/gpt-5 github-models/openai/gpt-5-chat github-models/openai/o3 github-models/deepseek/deepseek-r1-0528 github-models/deepseek/deepseek-r1" | ||||||
| # One attempt per model, then fall through to the next model. Retrying | ||||||
| # the SAME model 5x let a rate-limited/hung leader consume the whole | ||||||
|
|
||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -87,21 +87,8 @@ on: | |
| types: [merge-scheduler] | ||
|
|
||
| concurrency: | ||
| group: >- | ||
| central-pr-review-merge-scheduler-${{ github.repository }}-${{ | ||
| github.event_name == 'pull_request_target' && format('pr-{0}', github.event.pull_request.number) || | ||
| github.event_name == 'pull_request_review' && format('pr-{0}', github.event.pull_request.number) || | ||
| github.event_name == 'workflow_run' && github.event.workflow_run.pull_requests[0].number && format('pr-{0}', github.event.workflow_run.pull_requests[0].number) || | ||
| github.event_name == 'workflow_run' && !github.event.workflow_run.pull_requests[0].number && format('workflow-run-no-pr-{0}', github.repository) || | ||
| github.event_name == 'workflow_call' && inputs.pr_number != '' && format('pr-{0}', inputs.pr_number) || | ||
| github.event_name == 'workflow_call' && inputs.base_branch != '' && format('call-{0}', inputs.base_branch) || | ||
| github.event_name == 'schedule' && format('schedule-{0}', github.event.schedule) || | ||
| github.event_name == 'repository_dispatch' && github.event.client_payload.org_sweep == true && format('org-sweep-{0}', github.repository) || | ||
| github.event_name == 'repository_dispatch' && github.event.client_payload.target_repository != '' && github.event.client_payload.pr_number != '' && format('target-{0}-pr-{1}', github.event.client_payload.target_repository, github.event.client_payload.pr_number) || | ||
| github.event_name == 'repository_dispatch' && github.event.client_payload.pr_number != '' && format('pr-{0}', github.event.client_payload.pr_number) || | ||
| github.event_name == 'repository_dispatch' && format('repo-dispatch-{0}', github.repository) || | ||
| github.ref }} | ||
| cancel-in-progress: ${{ github.event_name == 'pull_request_target' || github.event_name == 'pull_request_review' || github.event_name == 'repository_dispatch' || (github.event_name == 'workflow_run' && !github.event.workflow_run.pull_requests[0].number) }} | ||
| group: ${{ github.workflow }}-${{ github.repository }}-${{ github.event.pull_request.number || github.event.workflow_run.pull_requests[0].number || inputs.pr_number || github.event.client_payload.pr_number || github.run_id }} | ||
| cancel-in-progress: true | ||
|
Comment on lines
+90
to
+91
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔍 Merge scheduler cancel-in-progress made unconditional
Was this helpful? React with 👍 or 👎 to provide feedback. |
||
|
|
||
| # Scorecard Token-Permissions (alert #9): declare a least-privilege default at | ||
| # the workflow level. The scan-pr-queue job that actually needs write access | ||
|
|
||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -36,7 +36,7 @@ on: | |||||
| types: [python-security-scan] | ||||||
|
|
||||||
| concurrency: | ||||||
| group: python-security-${{ github.event.pull_request.base.repo.full_name || github.repository }}-${{ github.event.pull_request.number || github.ref }} | ||||||
| group: ${{ github.workflow }}-${{ github.repository }}-${{ github.event.pull_request.number }} | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔴 Push and scheduled security scans across branches cancel one another The group dropped its
Suggested change
Was this helpful? React with 👍 or 👎 to provide feedback. |
||||||
| cancel-in-progress: true | ||||||
|
|
||||||
| permissions: | ||||||
|
|
||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -29,7 +29,7 @@ on: | |
| types: [published] | ||
|
|
||
| concurrency: | ||
| group: sbom-generation-${{ github.event.pull_request.base.repo.full_name || github.repository }}-${{ github.event.pull_request.number || github.event.release.tag_name || github.ref }} | ||
| group: ${{ github.workflow }}-${{ github.repository }}-${{ github.event.pull_request.number }} | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🔍 Concurrent releases cancel each other's SBOM upload Release events carry no PR number, so the group collapses to the constant Was this helpful? React with 👍 or 👎 to provide feedback. |
||
| cancel-in-progress: true | ||
|
|
||
| permissions: | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🔴 Cloudflare apply can be cancelled mid-reconcile by a later run
For
pushandrepository_dispatchthere is no PR number, so every such run shares the constant group, andcancel-in-progresswas flipped from false to true. A push dry-run or a second apply now cancels an in-flightmode=applyreconcile, which can leave DNS records partially written.Was this helpful? React with 👍 or 👎 to provide feedback.