Skip to content

ci(refactor-release): correlate publisher runs by release identifier - #12783

Draft
DariuszPorowski wants to merge 4 commits into
dp/idempotent-tag-reconciliationfrom
dp/release-identifier-correlation
Draft

DariuszPorowski wants to merge 4 commits into
dp/idempotent-tag-reconciliationfrom
dp/release-identifier-correlation

Conversation

@DariuszPorowski

@DariuszPorowski DariuszPorowski commented Aug 21, 2026 •

Copy link
Copy Markdown
Member

Summary

This is PR 10 in GitHub stack #12738 and depends on #12770; see the GoReleaser release lifecycle implementation plan.

  • add stable release identifiers to Deployment Engine and Bicep publisher payloads
  • query before dispatch and match the exact publisher display_title, reusing successful or active work and retrying failed work under the same identifier
  • remove time-window correlation, add bounded transient API retry and uncertain-dispatch reconciliation, and cover the protocol with hermetic Node tests

Companion dependency: azure-octo/radius-publisher#25 adds identifier-based run-name and concurrency groups and must merge before this PR.

Reason for change

Time-window run discovery can select the wrong publisher run when releases overlap. Exact release identifiers make each source run monitor only its own remote work and let reruns reconcile completed or in-progress publication before dispatching again.

How to test

  • make test-monitor-remote-workflow (19 tests)
  • actionlint and yamllint on the three modified workflows
  • ghalint run on the three modified workflows
  • prettier --check on the controller and test
  • zizmor --pedantic --min-severity medium on the three modified workflows

A live paired-dispatch exercise requires publisher PR #25 to be deployed first.

File change summary

File Summary of change
.github/scripts/monitor-remote-workflow.mjs Reconcile exact identifier-named publisher runs with bounded retry and one total deadline.
.github/scripts/monitor-remote-workflow_test.mjs Cover dispatch, reuse, failure recovery, concurrent identifiers, transient API failures, timeout behavior, and caller wiring.
.github/workflows/__build-bicep-types.yaml Dispatch Bicep publication with a version-and-source-SHA identifier.
.github/workflows/publish-de-image.yaml Correlate the legacy Deployment Engine bridge with a rerun-stable tag-and-run identifier.
.github/workflows/release.yaml Dispatch release Deployment Engine publication with a version-and-source-SHA identifier.
build/test.mk Register the focused Node test target in the unit-test aggregate.
eng/design-notes/tools/2026-09-goreleaser-stack-review/pr-10-release-identifier-correlation.md Review note for this layer: what changed in review, why, the value, and the impact

@DariuszPorowski
DariuszPorowski requested review from a team as code owners August 21, 2026 22:04
@DariuszPorowski
DariuszPorowski force-pushed the dp/release-identifier-correlation branch from 5867aff to 5399f34 Compare August 21, 2026 22:07
Copilot AI lite review requested due to automatic review settings August 21, 2026 23:10
@DariuszPorowski DariuszPorowski added the pr:standard Ongoing maintenance, minor improvements, documentation updates, and routine development work label Aug 21, 2026
@DariuszPorowski DariuszPorowski self-assigned this Aug 21, 2026

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

This PR improves how Radius CI dispatches and monitors publishing workflows in the external azure-octo/radius-publisher repo by correlating runs via a stable release identifier (rather than a time window), enabling safe reuse of already-successful or currently-running publisher jobs and more reliable retries.

Changes:

  • Reworked .github/scripts/monitor-remote-workflow.mjs to (a) dispatch with a release_identifier embedded in the payload, (b) find runs by exact display_title, and (c) add bounded retry/backoff and a single end-to-end deadline.
  • Updated the release + publisher-dispatching workflows to pass EVENT_TYPE, RELEASE_IDENTIFIER, and JSON-escaped CLIENT_PAYLOAD into the monitor script (and increased job timeouts accordingly).
  • Added hermetic Node.js tests for the dispatch/monitor protocol and wired them into make test.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
build/test.mk Adds a Node.js unit test target and includes it in the test aggregate.
.github/workflows/release.yaml Switches DE publishing to the correlated dispatch/monitor script using a stable identifier.
.github/workflows/publish-de-image.yaml Switches the legacy DE image publishing bridge to the correlated dispatch/monitor script.
.github/workflows/__build-bicep-types.yaml Switches Bicep types publishing to the correlated dispatch/monitor script and adds release metadata outputs.
.github/scripts/monitor-remote-workflow.mjs Implements identifier-based correlation, retry/backoff, bounded history scan, and uncertain-dispatch reconciliation.
.github/scripts/monitor-remote-workflow_test.mjs Adds Node.js tests for correlation behavior, retries, timeouts, and workflow caller wiring.
Suppressed comments (1)

.github/scripts/monitor-remote-workflow.mjs:89

  • If '+' is accepted in release identifiers (SemVer build metadata), the validation error message should mention it so failures are actionable.
    if (!RELEASE_IDENTIFIER_PATTERN.test(releaseIdentifier)) {
      throw new Error(
        "Release identifier must contain 1-200 letters, numbers, dots, underscores, or hyphens",
      );
    }

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


/** @param {{ github: any, core: any }} param0 */
export default async ({ github, core }) => {
const RELEASE_IDENTIFIER_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]{0,199}$/;
Comment thread .github/scripts/monitor-remote-workflow.mjs Outdated
@github-actions

Copy link
Copy Markdown

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

  • .github/workflows/release.yaml

@github-actions

github-actions Bot commented Aug 24, 2026 •

Copy link
Copy Markdown

Unit Tests

    2 files    459 suites   7m 9s ⏱️
6 635 tests 6 633 ✅ 2 💤 0 ❌
7 943 runs  7 941 ✅ 2 💤 0 ❌

Results for commit 33e4aa9.

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Aug 24, 2026 •

Copy link
Copy Markdown

Functional Tests - upgrade-noncloud

3 tests  +2   3 ✅ +3   1m 26s ⏱️ - 3m 38s
1 suites ±0   0 💤 ±0 
1 files   ±0   0 ❌  - 1 

Results for commit 8439a30. ± Comparison against base commit 9c17966.

♻️ This comment has been updated with latest results.

@DariuszPorowski DariuszPorowski linked an issue Aug 24, 2026 that may be closed by this pull request
@DariuszPorowski DariuszPorowski linked an issue Aug 25, 2026 that may be closed by this pull request
4 tasks
@DariuszPorowski
DariuszPorowski marked this pull request as draft August 28, 2026 16:00
@DariuszPorowski
DariuszPorowski force-pushed the dp/release-identifier-correlation branch from 7bfb276 to 2520e04 Compare August 28, 2026 16:36
@DariuszPorowski
DariuszPorowski force-pushed the dp/release-identifier-correlation branch from 2520e04 to b2b742a Compare August 28, 2026 16:54
@codecov

codecov Bot commented Aug 28, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 59.52%. Comparing base (3be8a8b) to head (33e4aa9).

Additional details and impacted files
@@                        Coverage Diff                        @@
##           dp/idempotent-tag-reconciliation   #12783   +/-   ##
=================================================================
  Coverage                             59.52%   59.52%           
=================================================================
  Files                                   772      772           
  Lines                                 45060    45060           
=================================================================
+ Hits                                  26822    26823    +1     
+ Misses                                18238    18237    -1     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@DariuszPorowski
DariuszPorowski force-pushed the dp/release-identifier-correlation branch from b2b742a to da71854 Compare August 28, 2026 20:07
@github-actions

github-actions Bot commented Aug 28, 2026 •

Copy link
Copy Markdown

Functional Tests - daprrp-noncloud

26 tests  ±0   26 ✅ ±0   14m 8s ⏱️ +55s
 1 suites ±0    0 💤 ±0 
 1 files   ±0    0 ❌ ±0 

Results for commit 60ce522. ± Comparison against base commit dcc9805.

♻️ This comment has been updated with latest results.

@DariuszPorowski DariuszPorowski changed the title ci: correlate publisher runs by release identifier ci(refactor-release): correlate publisher runs by release identifier Aug 28, 2026
@DariuszPorowski
DariuszPorowski force-pushed the dp/release-identifier-correlation branch from da71854 to 60ce522 Compare September 3, 2026 16:22
@DariuszPorowski
DariuszPorowski force-pushed the dp/release-identifier-correlation branch from 5e7b876 to 6893a16 Compare September 15, 2026 22:59
@DariuszPorowski
DariuszPorowski force-pushed the dp/release-identifier-correlation branch from 6893a16 to c7b68b3 Compare September 17, 2026 21:12
@DariuszPorowski
DariuszPorowski removed this pull request from stack #12738 September 17, 2026 21:54
@DariuszPorowski
DariuszPorowski added this pull request to stack #13045 September 17, 2026 21:56
@DariuszPorowski
DariuszPorowski removed this pull request from stack #13045 September 18, 2026 20:12
@DariuszPorowski
DariuszPorowski added this pull request to stack #13056 September 18, 2026 20:12
@DariuszPorowski
DariuszPorowski force-pushed the dp/release-identifier-correlation branch 2 times, most recently from 79449df to d9a62f3 Compare September 18, 2026 21:05
@DariuszPorowski
DariuszPorowski force-pushed the dp/release-identifier-correlation branch from d9a62f3 to b7dd4c8 Compare September 18, 2026 21:44
@DariuszPorowski
DariuszPorowski force-pushed the dp/release-identifier-correlation branch from b7dd4c8 to 9956917 Compare September 18, 2026 22:04
@DariuszPorowski
DariuszPorowski removed this pull request from stack #13056 September 18, 2026 22:57
@DariuszPorowski
DariuszPorowski added this pull request to stack #13058 September 18, 2026 22:59
@DariuszPorowski
DariuszPorowski removed this pull request from stack #13058 September 18, 2026 23:05
@DariuszPorowski
DariuszPorowski added this pull request to stack #13060 September 18, 2026 23:06
@DariuszPorowski
DariuszPorowski removed this pull request from stack #13060 September 19, 2026 02:21
@DariuszPorowski
DariuszPorowski added this pull request to stack #13063 September 19, 2026 02:21
@DariuszPorowski
DariuszPorowski force-pushed the dp/release-identifier-correlation branch from 9956917 to 94e08d3 Compare September 19, 2026 02:30
Query publisher runs by an exact version-and-source identifier before dispatching, then reuse successful or active work and retry failed work without changing App scopes. Add bounded transient API retries, caller wiring checks, and queue-aware timeout budgets.

Signed-off-by: Dariusz Porowski <3431813+DariuszPorowski@users.noreply.github.com>
Emit dispatch payload values with toJSON so an externally supplied image, tag, or ref cannot break out of the JSON it is placed in. Bound the correlated run lookup to a fixed page budget, reset per retry, so a long publisher history cannot cost an unbounded number of API calls.

Signed-off-by: Dariusz Porowski <3431813+DariuszPorowski@users.noreply.github.com>
Signed-off-by: Dariusz Porowski <3431813+DariuszPorowski@users.noreply.github.com>
Signed-off-by: Dariusz Porowski <3431813+DariuszPorowski@users.noreply.github.com>
@radius-functional-tests

radius-functional-tests Bot commented Sep 25, 2026 •

Copy link
Copy Markdown

Radius functional test overview

🔍 Go to test action run

Click here to see the test run details
Name Value
Repository radius-project/radius
Commit ref 33e4aa9
Unique ID funce657de02e2
Image tag pr-funce657de02e2
  • Dapr: 1.14.4
  • Azure KeyVault CSI driver: 1.4.2
  • Azure Workload identity webhook: 1.3.0
  • Bicep recipe location ghcr.io/radius-project/dev/test/testrecipes/test-bicep-recipes/<name>:pr-funce657de02e2
  • Terraform recipe location http://tf-module-server.radius-test-tf-module-server.svc.cluster.local/<name>.zip (in cluster)
  • applications-rp test image location: ghcr.io/radius-project/dev/applications-rp:pr-funce657de02e2
  • dynamic-rp test image location: ghcr.io/radius-project/dev/dynamic-rp:pr-funce657de02e2
  • controller test image location: ghcr.io/radius-project/dev/controller:pr-funce657de02e2
  • ucp test image location: ghcr.io/radius-project/dev/ucpd:pr-funce657de02e2
  • deployment-engine test image location: ghcr.io/radius-project/deployment-engine:latest

Test Status

⌛ Building Radius and pushing container images for functional tests...
✅ Container images build succeeded
⌛ Publishing Bicep Recipes for functional tests...
✅ Recipe publishing succeeded
⌛ Starting corerp-cloud functional tests...
⌛ Starting ucp-cloud functional tests...
✅ ucp-cloud functional tests succeeded
✅ corerp-cloud functional tests succeeded

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr:standard Ongoing maintenance, minor improvements, documentation updates, and routine development work

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Correlate remote publisher runs by release identifier Migrate release automation to GoReleaser

2 participants