Skip to content

Make the release fan-out testable by hand (dry-run), so the App installation can be verified now - #2694

Merged
rbuergi merged 1 commit into
mainfrom
ci/verify-dispatch-app
Aug 29, 2026
Merged

rbuergi merged 1 commit into
mainfrom
ci/verify-dispatch-app

Conversation

@rbuergi

@rbuergi rbuergi commented Aug 29, 2026

Copy link
Copy Markdown
Contributor

Follow-up to #2691. The fan-out is merged, but whether it actually reaches anything cannot currently be checked without waiting for a release.

Why this matters here specifically

The lane #2691 replaced printed NOT CONFIGURED and went green for its entire life — which is exactly why nothing was ever notified and nobody noticed. A fan-out you cannot test until it matters is that same bet with extra steps.

The change

workflow_dispatch with dry-run: true by default. It mints the token, resolves the subscriber set from GET /installation/repositories, prints it, and dispatches nothing. Safe to run at any time; proves the whole chain except the final POST.

Measured motivation

$ gh api /orgs/Systemorph/installations
  azure-boards      repos=all
  meshweaver-cloud  repos=all

Exactly two Apps are installed org-wide, and neither is obviously a dedicated dependent-dispatch App. So DEPENDENT_DISPATCH_APP_ID — provisioned 2026-08-19, referenced by nothing until #2691 — may well name an App that was never installed anywhere. In that case the first real release resolves an empty subscriber set.

#2691 already fails red on that rather than going green, which is the important half. But discovering it on a release is strictly worse than discovering it on demand.

If the dry run reports zero subscribers

Two options, and the second needs no new installation:

  1. Install the dispatch App on the plugin repos, or
  2. Point the lane at MESHWEAVER_APP_ID / MESHWEAVER_APP_PRIVATE_KEY — the meshweaver-cloud App, which core already holds credentials for and which is installed on all repos.

I have not switched it pre-emptively: DEPENDENT_DISPATCH_APP_* was provisioned deliberately for this purpose, and the dry run will say which is right in about thirty seconds rather than me guessing from an installation list.

"Is the dispatch App installed on every plugin repo?" must be answerable NOW
rather than at the next release. The predecessor to this lane reported success
while notifying nobody for its entire life; a fan-out that cannot be tested until
it matters is the same bet with extra steps.

`workflow_dispatch` with `dry-run: true` by default lists the subscribers — the
repositories the App is actually installed on — and dispatches nothing. It is
safe to run at any time and proves the wiring end to end except for the POST.

Motivation, measured: `GET /orgs/Systemorph/installations` shows exactly two Apps
installed org-wide, `azure-boards` and `meshweaver-cloud`, both `repos=all`.
Neither is obviously a dedicated dependent-dispatch App, so
`DEPENDENT_DISPATCH_APP_ID` may name one that was never installed — in which case
the fan-out would resolve an empty subscriber set on its first real release. The
job already fails RED on that rather than going green, but finding out on a
release is strictly worse than finding out on demand.

If the dry run reports zero subscribers, the fix is either to install that App on
the plugin repos or to point the lane at `MESHWEAVER_APP_ID` /
`MESHWEAVER_APP_PRIVATE_KEY` — the `meshweaver-cloud` App, which core already
holds credentials for and which is installed on all repos.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings August 29, 2026 19:30

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a manual, safe “dry-run” entrypoint to the dependent-repo release fan-out so maintainers can verify the GitHub App installation/repository resolution chain before the next real release.

Changes:

  • Adds workflow_dispatch with dry-run: true by default plus a placeholder version input.
  • Adds a dry-run early-exit path after enumerating subscriber repositories.
  • Makes reason default to manual-check when absent (primarily for manual runs).
Suppressed comments (1)

.github/workflows/notify-dependents.yml:124

  • With workflow_dispatch enabled, it’s possible to flip dry-run to false and accidentally fan out the placeholder version (0.0.0-dispatch-check) to all subscribers. Adding a guard that refuses non-dry runs when VERSION is still the placeholder would prevent accidental fleet-wide rebuilds on a manual click.
          if [ "${DRY_RUN:-false}" = "true" ]; then
            echo "dry-run: no dispatches sent. The list above is who WOULD be notified."
            exit 0
          fi

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +31 to +37
workflow_dispatch:
inputs:
dry-run:
description: 'List the subscribers WITHOUT dispatching (default: true)'
required: false
default: true
type: boolean
@github-actions

Copy link
Copy Markdown
Contributor

Test Results (shard 4)

   10 files  ±0     10 suites  ±0   6m 0s ⏱️ +11s
3 452 tests ±0  3 452 ✅ ±0  0 💤 ±0  0 ❌ ±0 
4 086 runs  ±0  4 086 ✅ ±0  0 💤 ±0  0 ❌ ±0 

Results for commit 37a5395. ± Comparison against base commit 41e91b1.

@rbuergi
rbuergi enabled auto-merge August 29, 2026 19:48
@github-actions

Copy link
Copy Markdown
Contributor

Test Results (shard 3)

689 tests  ±0   497 ✅ ±0   4m 7s ⏱️ -31s
  5 suites ±0   192 💤 ±0 
  5 files   ±0     0 ❌ ±0 

Results for commit 37a5395. ± Comparison against base commit 41e91b1.

@github-actions

Copy link
Copy Markdown
Contributor

Test Results (shard 2)

941 tests  ±0   941 ✅ ±0   4m 57s ⏱️ -18s
  6 suites ±0     0 💤 ±0 
  6 files   ±0     0 ❌ ±0 

Results for commit 37a5395. ± Comparison against base commit 41e91b1.

@github-actions

Copy link
Copy Markdown
Contributor

Test Results (shard 5)

1 528 tests  ±0   1 528 ✅ ±0   6m 40s ⏱️ + 1m 11s
    8 suites ±0       0 💤 ±0 
    8 files   ±0       0 ❌ ±0 

Results for commit 37a5395. ± Comparison against base commit 41e91b1.

@github-actions

Copy link
Copy Markdown
Contributor

Test Results (shard 0)

913 tests  ±0   913 ✅ ±0   5m 28s ⏱️ -1s
  6 suites ±0     0 💤 ±0 
  6 files   ±0     0 ❌ ±0 

Results for commit 37a5395. ± Comparison against base commit 41e91b1.

@github-actions

Copy link
Copy Markdown
Contributor

Test Results (shard 1)

788 tests  ±0   784 ✅ ±0   7m 24s ⏱️ -9s
  6 suites ±0     4 💤 ±0 
  6 files   ±0     0 ❌ ±0 

Results for commit 37a5395. ± Comparison against base commit 41e91b1.

@github-actions

Copy link
Copy Markdown
Contributor

Test Results

   41 files  ±0     41 suites  ±0   34m 38s ⏱️ +22s
8 311 tests ±0  8 115 ✅ ±0  196 💤 ±0  0 ❌ ±0 
8 945 runs  ±0  8 749 ✅ ±0  196 💤 ±0  0 ❌ ±0 

Results for commit 37a5395. ± Comparison against base commit 41e91b1.

@rbuergi
rbuergi merged commit c6d3d94 into main Aug 29, 2026
25 checks passed
@rbuergi
rbuergi deleted the ci/verify-dispatch-app branch October 10, 2026 13:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants