Skip to content

feat(workflows): add chart-only mode to shared-release and three new release workflows - #69

Open
onuryilmaz wants to merge 7 commits into
mainfrom
feat/phase1-shared-release-helm-docker-goreleaser
Open

onuryilmaz wants to merge 7 commits into
mainfrom
feat/phase1-shared-release-helm-docker-goreleaser

Conversation

@onuryilmaz

Copy link
Copy Markdown
Contributor

Summary

  • shared-release.yaml: adds chart-only boolean input (default: false). When true: skips appVersion bump, tags as helm-chart-vX.Y.Z instead of vX.Y.Z, skips GitHub Release creation. Fully backward compatible — existing callers pass no new inputs.
  • shared-helm-release.yaml (new): reusable helm package + helm push to GHCR OCI. Includes a duplicate-version guard that fails fast; set allow-existing: true to exit 0 instead (useful when not all charts in a batch have changed).
  • shared-docker-release.yaml (new): reusable Docker build + multi-arch push to GHCR. Standard tag set: semver, v{major}.{minor}, v{major}, latest (default branch only), long sha.
  • shared-goreleaser.yaml (new): reusable GoReleaser binary build + GitHub Release. Supports optional goreleaser-config path and goreleaser-version constraint.

Context

These workflows are the foundation for consolidating the release processes across the org. Each downstream repo will replace its bespoke release workflows with callers of these shared ones, eliminating 4 copies of helm publish logic, 2 copies of goreleaser logic, and providing a common docker release pattern.

Design decisions

  • All OCI helm pushes use the repo-scoped path oci://ghcr.io/{repo}/charts/ (not owner-scoped).
  • latest Docker tag is only applied on the default branch to prevent pre-release tags from overwriting it.
  • shared-goreleaser.yaml deliberately excludes repo-specific changelog builder steps — GoReleaser handles release notes via its own config.
  • All action versions match the pinned SHAs already in use across this repo.

Test plan

  • Verify shared-release.yaml with chart-only: true creates a helm-chart-v* tag, skips appVersion, skips GitHub Release
  • Verify shared-release.yaml with chart-only: false (default) has identical behaviour to before this change
  • Review YAML structure of the three new workflows for correctness

@onuryilmaz
onuryilmaz requested a review from a team as a code owner October 15, 2026 11:58
Copilot AI balanced review requested due to automatic review settings October 15, 2026 11:58
@onuryilmaz
onuryilmaz requested a review from a team as a code owner October 15, 2026 11:59

Copilot AI 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.

🟡 Changes recommended

Unresolved version handling, Docker tagging, and concurrency issues can produce incorrect or incomplete releases.

5 open findings
What changed in this PR

Adds reusable release workflows to consolidate publishing across organization repositories.

Changes:

  • Introduces chart-only release tagging and skips appVersion updates and GitHub Release creation in that mode.
  • Adds Helm OCI and multi-platform Docker publishing workflows.
  • Adds configurable GoReleaser publishing.
File Description
.github/​workflows/​shared-release.yaml Adds chart-only release mode.
.github/​workflows/​shared-helm-release.yaml Packages and publishes charts with duplicate-version checks.
.github/​workflows/​shared-goreleaser.yaml Builds binaries and publishes GitHub Releases.
.github/​workflows/​shared-docker-release.yaml Builds and publishes multi-platform GHCR images.

🧠 Review effort: Balanced


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

Comment thread .github/workflows/shared-docker-release.yaml
Comment thread .github/workflows/shared-goreleaser.yaml Outdated
Comment thread .github/workflows/shared-helm-release.yaml Outdated
Comment thread .github/workflows/shared-helm-release.yaml Outdated
Comment thread .github/workflows/shared-release.yaml

Copilot AI 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.

🟡 Changes recommended

App releases following chart-only releases can reuse published chart versions, preventing publication of updated charts.

2 open findings
5 resolved since last review
Previously missed (1)

In code that hasn't changed since last review

Medium severity App releases can reuse published chart versions

.github/​workflows/​shared-release.yaml:36

After a chart-only release, a normal release with both makefile-path and chart-path can reuse a published chart version. Starting at 1.2.3, a chart-only patch publishes chart 1.2.4 while leaving the Makefile at 1.2.3. The next app patch derives 1.2.4 from the Makefile and writes it to the chart with a new appVersion. The Helm duplicate guard then rejects publication, or skips it with allow-existing, leaving the updated chart unpublished. Advance the chart version independently during app releases, while keeping appVersion tied to the application version.

🧠 Review effort: Balanced

Comment thread RELEASING.md Outdated
Comment thread RELEASING.md
@onuryilmaz

Copy link
Copy Markdown
Contributor Author

@Copilot please re-review this PR. All previous findings have been addressed in commit 19d8d0d.

…release workflows

- shared-release.yaml: add chart-only boolean input (default: false)
  - when true: skip appVersion bump, tag as helm-chart-vX.Y.Z, skip GitHub Release
  - backward compatible: existing callers pass no new inputs and behaviour is unchanged
- shared-helm-release.yaml: new reusable workflow for helm package + push to GHCR OCI
  - inputs: chart-dir, chart-name, helm-version, run-dependency-update, allow-existing
  - duplicate-version guard fails fast; allow-existing=true exits 0 instead
- shared-docker-release.yaml: new reusable workflow for Docker build + push to GHCR
  - inputs: image-name, dockerfile, context, platforms
  - standard tag set: semver, v{major}.{minor}, v{major}, latest (default branch only), sha
- shared-goreleaser.yaml: new reusable workflow for GoReleaser binary build + GitHub Release
  - inputs: goreleaser-version, goreleaser-config, go-version-file

Signed-off-by: I313226 <I313226@users.noreply.github.com>
Signed-off-by: I313226 <I313226@users.noreply.github.com>
…kflows

- shared-docker-release: add flavor:latest=false so metadata-action does not
  auto-tag semver releases as latest; only the explicit type=raw rule controls it
- shared-goreleaser: scope concurrency group to goreleaser+repo+ref to prevent
  helm/version-bump jobs from displacing pending goreleaser runs
- shared-helm-release: scope concurrency group to helm+repo+chart+ref so
  independent chart releases do not cancel each other
- shared-helm-release: use helm show chart for version extraction instead of
  raw YAML grep/sed to handle quoted and commented version fields correctly
- shared-release: reject makefile-path when chart-only=true to prevent version
  mismatch between Makefile and Chart.yaml in chart-only mode; require chart-path

Signed-off-by: I313226 <I313226@users.noreply.github.com>
@onuryilmaz
onuryilmaz force-pushed the feat/phase1-shared-release-helm-docker-goreleaser branch from 19d8d0d to 9e87124 Compare October 15, 2026 19:16
…pipelines

- Add warning that GITHUB_TOKEN tag pushes do not trigger downstream
  push workflows; PAT or GitHub App token required for automatic chaining
- Restructure complete example into two independent pipelines: app release
  (v* tags) and chart release (helm-chart-* tags) to avoid implying a
  single v* tag triggers chart publishing

Signed-off-by: I313226 <I313226@users.noreply.github.com>
@onuryilmaz

Copy link
Copy Markdown
Contributor Author

@copilot review

2 similar comments
@onuryilmaz

Copy link
Copy Markdown
Contributor Author

@copilot review

@onuryilmaz

Copy link
Copy Markdown
Contributor Author

@copilot review

Copilot AI 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.

🔵 Needs a closer look

Publishing needs end-to-end validation, and the Helm duplicate-version guard still proceeds after lookup failures.

1 open finding
2 resolved since last review

🧠 Review effort: Balanced

Comment thread .github/workflows/shared-helm-release.yaml Outdated
I313226 added 2 commits October 16, 2026 16:19
Signed-off-by: I313226 <I313226@users.noreply.github.com>
…cker tag

- shared-helm-release: distinguish 'version not found' from real errors
  (auth/network/transport) in the duplicate-version check; previously all
  non-zero helm pull exits were treated as 'not found', so a transient
  failure could silently proceed to push and overwrite an existing chart
- shared-docker-release: add type=semver,pattern=v{{version}} alias so
  both unprefixed (0.6.0) and v-prefixed (v0.6.0) tags are always
  published; charts that default image tag to .Chart.AppVersion (v-prefixed)
  would otherwise reference an unpublished tag

Signed-off-by: I313226 <I313226@users.noreply.github.com>

Copilot AI 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.

🔵 Needs a closer look

Shared release paths need end-to-end human validation, and Helm repository casing remains unresolved.

0 open findings

1 resolved since last review
Previously missed (1)

In code that hasn't changed since last review

Medium severity Normalize repository names in OCI pull and push references

.github/​workflows/​shared-helm-release.yaml:106

For callers such as cloudoperators/MyApp, github.repository retains uppercase characters, which are invalid in OCI repository paths. The duplicate check therefore fails before publishing. Normalize the repository component in both this pull reference and the push destination at line 138, for example by replacing ${{ github.repository }} with ${GITHUB_REPOSITORY,,} in both shell commands. Fixing only the pull reference leaves publishing broken.

🧠 Review effort: Balanced

Signed-off-by: I313226 <I313226@users.noreply.github.com>
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