Skip to content

feat(release)!: orchestrate backmerge via backmerge-sync; expose go-pr-validation inputs & enforce coverage - #428

Merged
bedatty merged 8 commits into
developfrom
feat/go-pr-validation-expose-lint-args-app-prefix
Jun 17, 2026
Merged

feat(release)!: orchestrate backmerge via backmerge-sync; expose go-pr-validation inputs & enforce coverage#428
bedatty merged 8 commits into
developfrom
feat/go-pr-validation-expose-lint-args-app-prefix

Conversation

@bedatty

@bedatty bedatty commented Jun 17, 2026

Copy link
Copy Markdown
Contributor
Lerian

GitHub Actions Shared Workflows


Description

Several related changes to the Go release/validation pipeline:

1. Expose golangci_lint_args and app_name_prefix on go-pr-validation.yml (closes #427)

The umbrella go-pr-validation.yml only forwarded a subset of go-pr-analysis.yml's inputs. golangci_lint_args (e.g. --timeout=5m) and app_name_prefix are now exposed and forwarded. golangci_lint_args defaults to --timeout=5m (mirroring the downstream default) so existing callers keep their timeout. While exposing it, the input is mapped through a step-level env: var and split with read -ra before reaching golangci-lint run, removing the previous direct ${{ }} interpolation into a run: block (shell-injection hardening; satisfies shellcheck SC2086; preserves multi-flag word-splitting).

2. Enforce Go coverage threshold by default

fail_on_coverage_threshold now defaults to true in go-pr-analysis.yml and go-pr-validation.yml.

3. Orchestrate backmerge via backmerge-sync instead of the semantic-release plugin

Backmerge moves out of the @saithodev/semantic-release-backmerge plugin and into a dedicated backmerge-sync step in release.yml, running after a successful release. This removes the continue-on-error + release-tag-snapshot + release-tag-check + backmerge-pr fallback machinery that only existed to work around the plugin masking the release outcome. Backmerge is now configurable (backmerge_enabled/backmerge_source/backmerge_target/backmerge_mode) and only runs when the release ref matches backmerge_source (beta releases on develop are unaffected). A dry_run input (wired to both semantic-release and the backmerge step) and a pre-release validation step were added. This repo's .releaserc.yml drops the plugin.

4. Default enable_ghcr to true in go-release.yml and build.yml

Aligns the Go/build side with typescript-build.yml, which already defaults to true. GHCR push is now on by default.

Affected workflows: go-pr-validation.yml, go-pr-analysis.yml, release.yml (+ .releaserc.yml), go-release.yml, build.yml.

Note: typescript-release.yml still uses the old plugin + backmerge-pr pattern; consolidating it (and deprecating backmerge-pr/release-tag-*) is left as a follow-up.

Type of Change

  • feat: New workflow or new input/output/step in an existing workflow
  • BREAKING CHANGE: Callers must update their configuration after this PR

Breaking Changes

a) Coverage enforcementfail_on_coverage_threshold default falsetrue in go-pr-analysis.yml/go-pr-validation.yml. Callers below coverage_threshold (default 80) that previously passed will now fail.
Migration: set fail_on_coverage_threshold: false to keep reporting-only behavior.

b) Backmerge orchestration — backmerge is no longer driven by the @saithodev/semantic-release-backmerge plugin in each caller's .releaserc.
Migration: remove the plugin entry from your .releaserc; the backmerge_* inputs default to the previous main → develop behavior. Use backmerge_source/backmerge_target for other topologies, or backmerge_enabled: false to disable. Callers that keep the plugin referenced will fail (it is no longer installed by the workflow).

c) GHCR defaultenable_ghcr default falsetrue in go-release.yml/build.yml. Callers that did not push to GHCR before will now attempt to, which requires the MANAGE_TOKEN secret.
Migration: set enable_ghcr: false to keep the previous behavior.

The input-exposure part (#427) is non-breaking.

Testing

  • YAML syntax validated locally
  • Triggered a real workflow run on a caller repository using @this-branch or the beta tag
  • Verified all existing inputs still work with default values
  • Confirmed no secrets or tokens are printed in logs
  • Checked that unrelated workflows are not affected

Caller repo / workflow run:

Related Issues

Closes #427

Summary by CodeRabbit

  • New Features
    • Added workflow inputs to Go PR validation for extra golangci-lint arguments (default --timeout=5m) and an app_name_prefix.
    • Added release workflow inputs for backmerge control (backmerge_enabled, backmerge_source, backmerge_target, backmerge_mode) and dry_run.
    • Changed default to enable GHCR publishing (enable_ghcr) for build/release workflows.
  • Bug Fixes
    • Enabled coverage-threshold enforcement by default (fail_on_coverage_threshold now defaults to true).
  • Documentation
    • Updated Go PR, analysis, release, build, and Go release workflow docs to reflect new inputs and defaults.
  • Chores
    • Ensured lint argument forwarding is applied during Go analysis.

@bedatty
bedatty requested a review from a team as a code owner June 17, 2026 12:47
@coderabbitai

coderabbitai Bot commented Jun 17, 2026

Copy link
Copy Markdown

Review Change Stack

Walkthrough

PR exposes golangci_lint_args and app_name_prefix inputs in go-pr-validation.yml, passing them through to go-pr-analysis.yml with golangci_lint_args wired via environment variable; changes fail_on_coverage_threshold default to true across Go workflows; refactors release.yml to orchestrate backmerge via dedicated workflow inputs and step instead of semantic-release plugin; and changes enable_ghcr default to true in build.yml and go-release.yml.

Changes

Go validation inputs and coverage enforcement defaults

Layer / File(s) Summary
Input declarations, wiring, and consumption
.github/workflows/go-pr-validation.yml, .github/workflows/go-pr-analysis.yml
Adds golangci_lint_args (default --timeout=5m) and app_name_prefix (default empty) as workflow_call inputs in go-pr-validation.yml. Changes fail_on_coverage_threshold default from false to true in go-pr-validation.yml and go-pr-analysis.yml. Forwards both new inputs to go-pr-analysis.yml via the go-analysis job. Injects golangci_lint_args via GOLANGCI_LINT_ARGS environment variable and parses into bash array for golangci-lint command expansion.
Documentation updates
docs/go-pr-validation.md, docs/go-pr-analysis-workflow.md
Adds golangci_lint_args and app_name_prefix rows to go-pr-validation.md Inputs table. Updates fail_on_coverage_threshold default to true in go-pr-analysis-workflow.md Inputs table. Rewrites coverage threshold tip to reflect enforcement enabled by default and guidance for disabling it.

Release workflow backmerge orchestration

Layer / File(s) Summary
Backmerge inputs and release job restructuring
.github/workflows/release.yml
Introduces four new workflow_call inputs: backmerge_enabled (default true), backmerge_source (default main), backmerge_target (default develop), backmerge_mode (default direct-with-pr-fallback). Adds preflight step validating backmerge mode, branch distinctness, and valid branch format refs. Removes snapshot pre-tag logic and semantic-release backmerge plugin configuration. Removes continue-on-error from semantic-release step. Adds dedicated backmerge step using backmerge-sync composite action, gated on backmerge_enabled, semantic-release new_release_published, and github.ref_name matching backmerge_source. Updates publish-status marker to record published status based solely on semantic-release new_release_published output.
Documentation updates
docs/release-workflow.md
Adds backmerge configuration inputs to workflow inputs table. Inserts migration note instructing removal of @saithodev/semantic-release-backmerge plugin from .releaserc in favor of backmerge_* workflow inputs. Replaces semantic-release backmerge plugin documentation with explanation that backmerge-sync composite action orchestrates backmerge after successful releases using inputs with direct-merge-with-PR-fallback strategy.

GHCR push enabled by default

Layer / File(s) Summary
GHCR default input changes
.github/workflows/build.yml, .github/workflows/go-release.yml, docs/build-workflow.md, docs/go-release-workflow.md
Changes enable_ghcr workflow_call input default from false to true in build.yml and go-release.yml, reversing the opt-in behavior to opt-out. Updates both build-workflow.md and go-release-workflow.md documentation to reflect new default and note that MANAGE_TOKEN secret is required for GHCR pushes.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

Suggested labels

github-config, size/L

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning The PR introduces three distinct feature sets beyond issue #427: enforcing coverage threshold by default and orchestrating backmerge via a new step. These extend the scope significantly beyond the stated issue closure. Clarify why coverage enforcement and backmerge orchestration are bundled with the input-exposure fix, or separate them into follow-up PRs to focus review and mitigate risk.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main changes: orchestrate backmerge via backmerge-sync, expose go-pr-validation inputs, and enforce coverage threshold.
Description check ✅ Passed The PR description comprehensively documents all changes, migration steps for breaking changes, and testing validation against the provided template.
Linked Issues check ✅ Passed The changes fully satisfy issue #427: both golangci_lint_args and app_name_prefix inputs are exposed on go-pr-validation.yml and forwarded to go-pr-analysis.yml with appropriate defaults.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/go-pr-validation-expose-lint-args-app-prefix

Comment @coderabbitai help to get the list of available commands and usage tips.

@lerian-studio lerian-studio added size/XS PR changes < 50 lines documentation Improvements or additions to documentation workflow Changes to one or more reusable workflow files golang Changes to Go-related workflows validate Changes to PR validation composite actions (src/validate/) labels Jun 17, 2026
@lerian-studio

lerian-studio commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

🔍 PR Validation Summary

✅ PR Mergeable — no blocking failures

Check Status Blocking
Source Branch ✅ success yes
PR Title ✅ success yes
PR Description ✅ success yes
PR Size ✅ success no
Auto Labels ✅ success no
PR Metadata ✅ success no

🔍 View workflow run

@lerian-studio

lerian-studio commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

🔍 Lint Analysis

Check Files Scanned Status
YAML Lint 6 file(s) ✅ success
Action Lint 5 file(s) ✅ success
Pinned Actions 5 file(s) ✅ success
Markdown Link Check 5 file(s) ✅ success
Spelling Check 11 file(s) ✅ success
Shell Check 5 file(s) ✅ success
README Check 5 file(s) ✅ success
Composite Schema no changes ⏭️ skipped
Deployment Matrix no changes ⏭️ skipped

🔍 View full scan logs

@lerian-studio

lerian-studio commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

🛡️ CodeQL Analysis Results

Languages analyzed: actions

✅ No security issues found.


🔍 View full scan logs | 🛡️ Security tab

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Warning

CodeRabbit couldn't request changes on this pull request because it doesn't have sufficient GitHub permissions.

Please grant CodeRabbit Pull requests: Read and write permission and re-run the review.

👉 Steps to fix this

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/go-pr-validation.yml:
- Around line 95-102: The `golangci_lint_args` input is being passed directly
into a shell command without proper quoting, which creates a shell injection
vulnerability. In the go-pr-analysis.yml workflow file where
`golangci_lint_args` is used in the run command, move the input value to the
`env:` section as an environment variable (e.g., GOLANGCI_ARGS) and then
reference it with proper quoting in the run command (e.g., `"$GOLANGCI_ARGS"`).
This ensures the input is treated as a single string argument rather than being
subject to shell interpretation. Alternatively, document and enforce a strict
allowlist of permitted argument patterns for the `golangci_lint_args` input to
limit the values that can be passed.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 09af28bc-95a7-43ef-bf00-a86ae506f418

📥 Commits

Reviewing files that changed from the base of the PR and between ff16b50 and fd9e770.

📒 Files selected for processing (2)
  • .github/workflows/go-pr-validation.yml
  • docs/go-pr-validation.md

Comment thread .github/workflows/go-pr-validation.yml
bedatty added 2 commits June 17, 2026 10:15
BREAKING CHANGE: fail_on_coverage_threshold now defaults to true in
go-pr-analysis and go-pr-validation. Callers whose Go coverage is below
coverage_threshold (default 80%) will now fail CI. Set
fail_on_coverage_threshold: false to restore the previous reporting-only
behavior.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Warning

CodeRabbit couldn't request changes on this pull request because it doesn't have sufficient GitHub permissions.

Please grant CodeRabbit Pull requests: Read and write permission and re-run the review.

👉 Steps to fix this

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (5)
.github/workflows/go-pr-analysis.yml (2)

7-9: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Add workflow_dispatch to align with reusable workflow trigger requirements.

This workflow currently declares only workflow_call.

As per coding guidelines, .github/workflows/*.yml workflows must include both workflow_call and workflow_dispatch (except self-* files).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/go-pr-analysis.yml around lines 7 - 9, The workflow file
is missing the `workflow_dispatch` trigger. In the `on:` section at the
beginning of the file, add `workflow_dispatch:` as an additional trigger
alongside the existing `workflow_call:` trigger to align with the coding
guidelines that require both triggers for non-self workflows.

Source: Coding guidelines


8-97: ⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

Introduce dry_run and gate state-changing steps.

This workflow performs state changes (PR comments + Slack notifications) but does not expose a dry_run boolean input. Add dry_run (default: false) and conditionally skip state-mutating steps/jobs when enabled.

Suggested change (core wiring)
 on:
   workflow_call:
     inputs:
+      dry_run:
+        description: 'Preview mode: skip state-changing actions (comments/notifications)'
+        type: boolean
+        default: false
       runner_type:
         description: 'GitHub runner type'
         type: string
         default: 'blacksmith-4vcpu-ubuntu-2404'
@@
-      - name: Post coverage comment
-        if: github.event_name == 'pull_request'
+      - name: Post coverage comment
+        if: github.event_name == 'pull_request' && !inputs.dry_run
         uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
@@
   notify:
     name: Notify
     needs: [detect-changes, lint, security, tests, build, integration-tests, test-determinism]
-    if: always() && needs.detect-changes.outputs.has_changes == 'true'
+    if: always() && needs.detect-changes.outputs.has_changes == 'true' && !inputs.dry_run
     uses: ./.github/workflows/slack-notify.yml

As per coding guidelines, workflows that apply state changes must expose a dry_run boolean input (default false).

Also applies to: 622-623, 943-947

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/go-pr-analysis.yml around lines 8 - 97, Add a new boolean
input called `dry_run` with default value `false` to the workflow_call inputs
section alongside the other existing inputs like `enable_lint`,
`enable_security`, etc. Then identify all state-changing steps in the workflow
that perform PR comments or Slack notifications (referenced at lines 622-623 and
943-947) and add conditional checks to skip these steps when `dry_run` is set to
true, allowing the workflow to run in test mode without making actual changes to
the repository or sending notifications.

Source: Coding guidelines

.github/workflows/go-pr-validation.yml (1)

8-10: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Add workflow_dispatch to satisfy reusable-workflow trigger policy.

This reusable workflow exposes workflow_call only. The shared CI/CD guideline for non-self-* workflows requires both triggers.

Suggested change
 on:
   workflow_call:
     inputs:
       runner_type:
         description: 'GitHub runner type to use'
         type: string
         default: 'blacksmith-4vcpu-ubuntu-2404'
+  workflow_dispatch:

As per coding guidelines, .github/workflows/*.yml workflows must include both workflow_call and workflow_dispatch (except self-* files).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/go-pr-validation.yml around lines 8 - 10, The workflow
file currently only defines the `workflow_call` trigger in the `on:` section but
is missing the required `workflow_dispatch` trigger. Add `workflow_dispatch:` as
a separate trigger entry under the `on:` section alongside the existing
`workflow_call:` trigger to comply with the shared CI/CD guideline that requires
all non-self-* workflows to support both trigger types.

Source: Coding guidelines

docs/go-pr-validation.md (1)

80-82: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Pin the production uses: example to an exact semver tag.

The example currently uses @v1, which is a floating major. For production examples in docs/, use an exact pinned tag (for example @v1.0.0).

Suggested change
-    uses: LerianStudio/github-actions-shared-workflows/.github/workflows/go-pr-validation.yml@v1
+    uses: LerianStudio/github-actions-shared-workflows/.github/workflows/go-pr-validation.yml@v1.0.0

As per coding guidelines, production examples in docs/ must use pinned stable versions in @vX.Y.Z form.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/go-pr-validation.md` around lines 80 - 82, The production example in the
go-pr-validation.md file uses a floating major version tag `@v1` in the uses
field of the GitHub Actions workflow reference, which does not meet production
documentation standards. Update the uses statement that references the
LerianStudio/github-actions-shared-workflows workflow to pin it to an exact
semver version in the format `@vX.Y.Z` instead of the floating `@v1` tag to
comply with coding guidelines for production examples in documentation.

Source: Coding guidelines

docs/go-pr-analysis-workflow.md (1)

1-1: ⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

Rename this workflow documentation file to match the workflow filename contract.

For .github/workflows/go-pr-analysis.yml, the doc should be docs/go-pr-analysis.md (not docs/go-pr-analysis-workflow.md). Please rename and update inbound links.

As per coding guidelines, workflow documentation filenames in docs/*.md must exactly match the workflow filename stem.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/go-pr-analysis-workflow.md` at line 1, Rename the documentation file
from docs/go-pr-analysis-workflow.md to docs/go-pr-analysis.md to match the
workflow filename stem from .github/workflows/go-pr-analysis.yml according to
the documentation naming convention. After renaming, search the entire codebase
for any inbound links or references that point to the old filename
(go-pr-analysis-workflow.md) and update them to reference the new filename
(go-pr-analysis.md).

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/go-pr-analysis.yml:
- Around line 48-51: The `fail_on_coverage_threshold` parameter in the workflow
inputs has its default set to `true`, which is a breaking change for existing
callers who relied on the previous default behavior. Change the `default` value
for `fail_on_coverage_threshold` back to `false` to maintain backward
compatibility with direct callers of this workflow, unless this breaking change
has been intentionally documented and communicated as a required upgrade.

In @.github/workflows/go-pr-validation.yml:
- Around line 107-110: The default value for the fail_on_coverage_threshold
input has been changed from false to true, which introduces a breaking change
for callers of this workflow that do not explicitly override this input. To
maintain backward compatibility, revert the default value of
fail_on_coverage_threshold back to false, requiring callers to explicitly opt-in
to the stricter coverage checking behavior by setting the input to true.

---

Outside diff comments:
In @.github/workflows/go-pr-analysis.yml:
- Around line 7-9: The workflow file is missing the `workflow_dispatch` trigger.
In the `on:` section at the beginning of the file, add `workflow_dispatch:` as
an additional trigger alongside the existing `workflow_call:` trigger to align
with the coding guidelines that require both triggers for non-self workflows.
- Around line 8-97: Add a new boolean input called `dry_run` with default value
`false` to the workflow_call inputs section alongside the other existing inputs
like `enable_lint`, `enable_security`, etc. Then identify all state-changing
steps in the workflow that perform PR comments or Slack notifications
(referenced at lines 622-623 and 943-947) and add conditional checks to skip
these steps when `dry_run` is set to true, allowing the workflow to run in test
mode without making actual changes to the repository or sending notifications.

In @.github/workflows/go-pr-validation.yml:
- Around line 8-10: The workflow file currently only defines the `workflow_call`
trigger in the `on:` section but is missing the required `workflow_dispatch`
trigger. Add `workflow_dispatch:` as a separate trigger entry under the `on:`
section alongside the existing `workflow_call:` trigger to comply with the
shared CI/CD guideline that requires all non-self-* workflows to support both
trigger types.

In `@docs/go-pr-analysis-workflow.md`:
- Line 1: Rename the documentation file from docs/go-pr-analysis-workflow.md to
docs/go-pr-analysis.md to match the workflow filename stem from
.github/workflows/go-pr-analysis.yml according to the documentation naming
convention. After renaming, search the entire codebase for any inbound links or
references that point to the old filename (go-pr-analysis-workflow.md) and
update them to reference the new filename (go-pr-analysis.md).

In `@docs/go-pr-validation.md`:
- Around line 80-82: The production example in the go-pr-validation.md file uses
a floating major version tag `@v1` in the uses field of the GitHub Actions
workflow reference, which does not meet production documentation standards.
Update the uses statement that references the
LerianStudio/github-actions-shared-workflows workflow to pin it to an exact
semver version in the format `@vX.Y.Z` instead of the floating `@v1` tag to
comply with coding guidelines for production examples in documentation.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: ASSERTIVE

Plan: Pro

Run ID: a08d0001-f444-4143-bc55-a98831b5d73f

📥 Commits

Reviewing files that changed from the base of the PR and between a3554fa and 94b8be9.

📒 Files selected for processing (4)
  • .github/workflows/go-pr-analysis.yml
  • .github/workflows/go-pr-validation.yml
  • docs/go-pr-analysis-workflow.md
  • docs/go-pr-validation.md

Comment thread .github/workflows/go-pr-analysis.yml
Comment thread .github/workflows/go-pr-validation.yml
…emantic-release plugin

Move backmerge out of the @saithodev/semantic-release-backmerge plugin and
into a dedicated backmerge-sync step that runs after a successful release.
This removes the continue-on-error + release-tag-snapshot + release-tag-check
+ backmerge-pr fallback machinery that only existed to work around the plugin
masking the release outcome. Backmerge is now configurable via inputs and only
runs when the release ref matches backmerge_source (so beta releases on develop
are unaffected).

BREAKING CHANGE: backmerge is no longer driven by the @saithodev/semantic-release-backmerge
plugin in each caller's .releaserc. Callers must remove that plugin entry from
their .releaserc and rely on the new backmerge_* inputs (defaults reproduce the
previous main->develop behavior). Callers that keep the plugin referenced will
fail because it is no longer installed by the workflow.
@bedatty bedatty changed the title feat(go-pr-validation): expose golangci_lint_args and app_name_prefix feat(release)!: orchestrate backmerge via backmerge-sync; expose go-pr-validation inputs & enforce coverage Jun 17, 2026
@lerian-studio lerian-studio added size/S PR changes 50–199 lines github-config Changes to repository configuration (templates, CODEOWNERS, labeler, etc.) and removed size/XS PR changes < 50 lines labels Jun 17, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Warning

CodeRabbit couldn't request changes on this pull request because it doesn't have sufficient GitHub permissions.

Please grant CodeRabbit Pull requests: Read and write permission and re-run the review.

👉 Steps to fix this

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/release-workflow.md (1)

82-90: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Inputs table default for runner_type is stale versus workflow contract.

The docs still show runner_type default as firmino-lxc-runners, but .github/workflows/release.yml defaults it to blacksmith-4vcpu-ubuntu-2404. This will mislead callers configuring overrides.

As per coding guidelines, “Flag if inputs table is out of sync with the corresponding workflow changes in this PR.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/release-workflow.md` around lines 82 - 90, The documentation table in
the inputs section shows an outdated default value for the runner_type input
parameter. Update the default value for runner_type in the inputs table from
firmino-lxc-runners to blacksmith-4vcpu-ubuntu-2404 to align with the actual
default specified in the corresponding .github/workflows/release.yml file. This
ensures the documentation accurately reflects the current workflow contract.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/release.yml:
- Around line 56-77: The workflow orchestrates state-changing backmerge
operations but lacks a dry_run input for safe validation before mutating
branches. Add a new boolean input called dry_run with default value false to the
inputs section alongside the existing backmerge configuration inputs
(backmerge_enabled, backmerge_source, backmerge_target, backmerge_mode). Then
locate where the backmerge-sync action is called (referenced as occurring around
lines 211-227) and pass the dry_run input value to that action invocation to
enable callers to safely validate the backmerge behavior without applying actual
branch mutations.
- Around line 211-227: The backmerge configuration validation is currently only
performed inside the backmerge-sync action, which runs after semantic-release
publishes the release. This creates an operationally problematic scenario where
a release can be published but the backmerge step fails due to invalid
configuration. Add a preflight validation step that runs before the semantic
release step to validate the backmerge inputs early. This step should verify
that inputs.backmerge_mode is valid and that the inputs.backmerge_source and
inputs.backmerge_target branches are properly configured, failing fast if
validation fails so that semantic-release never runs with invalid backmerge
configuration.

In `@docs/release-workflow.md`:
- Around line 463-464: The documentation text at line 463-464 only describes the
direct-with-pr-fallback backmerge behavior, but the backmerge_mode input
actually supports three modes: direct, pr, and direct-with-pr-fallback. Update
the backmerge documentation to explicitly describe what each of these three
modes does, so that callers understand the behavior differences between them.
This should clarify how direct mode works differently from pr mode, and how
direct-with-pr-fallback differs from both.

---

Outside diff comments:
In `@docs/release-workflow.md`:
- Around line 82-90: The documentation table in the inputs section shows an
outdated default value for the runner_type input parameter. Update the default
value for runner_type in the inputs table from firmino-lxc-runners to
blacksmith-4vcpu-ubuntu-2404 to align with the actual default specified in the
corresponding .github/workflows/release.yml file. This ensures the documentation
accurately reflects the current workflow contract.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: ASSERTIVE

Plan: Pro

Run ID: de9aa94b-7628-41ab-b714-a6625fbef1bb

📥 Commits

Reviewing files that changed from the base of the PR and between 94b8be9 and 6a5167b.

⛔ Files ignored due to path filters (1)
  • .releaserc.yml is excluded by !.releaserc.yml
📒 Files selected for processing (2)
  • .github/workflows/release.yml
  • docs/release-workflow.md

Comment thread .github/workflows/release.yml
Comment thread .github/workflows/release.yml
Comment thread docs/release-workflow.md Outdated
bedatty added 2 commits June 17, 2026 14:13
- Add dry_run input wired to both semantic-release (no tags/releases) and the
  backmerge-sync step (preview only), so callers can validate safely.
- Validate backmerge_mode and source/target branches before the release runs,
  failing fast instead of producing 'release published + job failed'.
- Document all three backmerge modes.
Align go-release.yml and build.yml with the TypeScript side (typescript-build.yml
already defaults to true). GHCR push is now on by default; callers must provide
MANAGE_TOKEN (org secret) or set enable_ghcr: false to opt out.

BREAKING CHANGE: enable_ghcr default changed from false to true in go-release.yml
and build.yml. Callers that did not push to GHCR before will now attempt to, which
requires the MANAGE_TOKEN secret. Set enable_ghcr: false to keep the previous behavior.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/go-release-workflow.md (1)

41-45: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Clarify MANAGE_TOKEN requirement in secrets table.

The secrets table marks MANAGE_TOKEN as "Required: No", but with enable_ghcr now defaulting to true, the token is effectively required unless callers explicitly set enable_ghcr: false. Consider updating the "Required" column to "Yes (unless enable_ghcr: false)" or adding a note that the token is needed for the default GHCR push behavior.

📝 Suggested clarification
 | Secret | Description | Required |
 |--------|-------------|----------|
-| `MANAGE_TOKEN` | Token for release commits, tags and private module access | No |
+| `MANAGE_TOKEN` | Token for release commits, tags, GHCR push, and private module access | Yes (unless `enable_ghcr: false`) |
 | `SLACK_WEBHOOK_URL` | Slack webhook for pipeline notifications | No |
 | `HELM_REPO_TOKEN` | Token for dispatching Helm chart updates (when enabled in build) | No |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/go-release-workflow.md` around lines 41 - 45, Update the secrets table
in the documentation to clarify the MANAGE_TOKEN requirement. The current
"Required: No" value is misleading since enable_ghcr defaults to true, making
the token effectively required for default behavior. Change the "Required"
column value for the MANAGE_TOKEN row from "No" to "Yes (unless `enable_ghcr:
false`)" to accurately reflect that the token is only optional when callers
explicitly disable the GHCR push feature. Alternatively, add a note below the
table explaining the conditional requirement based on the enable_ghcr setting.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@docs/go-release-workflow.md`:
- Around line 41-45: Update the secrets table in the documentation to clarify
the MANAGE_TOKEN requirement. The current "Required: No" value is misleading
since enable_ghcr defaults to true, making the token effectively required for
default behavior. Change the "Required" column value for the MANAGE_TOKEN row
from "No" to "Yes (unless `enable_ghcr: false`)" to accurately reflect that the
token is only optional when callers explicitly disable the GHCR push feature.
Alternatively, add a note below the table explaining the conditional requirement
based on the enable_ghcr setting.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: ASSERTIVE

Plan: Pro

Run ID: c772688f-1f41-42c5-a8bd-f391ab298da2

📥 Commits

Reviewing files that changed from the base of the PR and between 06b0e6c and ce94449.

📒 Files selected for processing (4)
  • .github/workflows/build.yml
  • .github/workflows/go-release.yml
  • docs/build-workflow.md
  • docs/go-release-workflow.md

@bedatty
bedatty merged commit dbb6fa2 into develop Jun 17, 2026
2 checks passed
@github-actions
github-actions Bot deleted the feat/go-pr-validation-expose-lint-args-app-prefix branch June 17, 2026 18:55
bedatty added a commit that referenced this pull request Jun 17, 2026
…e-lint-args-app-prefix

feat(release): orchestrate backmerge via backmerge-sync; expose go-pr-validation inputs & enforce coverage
@coderabbitai coderabbitai Bot mentioned this pull request Jun 17, 2026
14 tasks
@coderabbitai coderabbitai Bot mentioned this pull request Jun 22, 2026
14 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation github-config Changes to repository configuration (templates, CODEOWNERS, labeler, etc.) golang Changes to Go-related workflows size/S PR changes 50–199 lines validate Changes to PR validation composite actions (src/validate/) workflow Changes to one or more reusable workflow files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(go-pr-validation): expose golangci_lint_args and app_name_prefix (pass-through to go-pr-analysis)

2 participants