Skip to content

ci: add tag-triggered container releases - #28

Merged
sozercan merged 6 commits into
mainfrom
feat/release-pipeline
Sep 26, 2026
Merged

sozercan merged 6 commits into
mainfrom
feat/release-pipeline

Conversation

@sozercan

Copy link
Copy Markdown
Owner

Summary

  • Publish the frontend and all three runtime images to GHCR for AMD64 and ARM64 when a version tag is pushed.
  • Update latest only for stable versions, include SBOM/provenance, and create a GitHub Release with generated notes after all images publish.
  • Document the release commands. Publishing uses GITHUB_TOKEN; no new secrets are required.

Validation

  • go run github.com/rhysd/actionlint/cmd/actionlint@v1.7.12 .github/workflows/*.yml
  • go test ./...
  • make lint
  • Common Python suite: 930 tests passed in an isolated Python 3.12 environment.
  • Local, no-push builds of all four images for linux/amd64 and linux/arm64, with SBOM/provenance enabled.
  • Checked stable/prerelease CLI arguments, workflow dependencies, image names, permissions, and action pins.

No release tag has been pushed or images published as part of this change.

Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Copilot AI balanced review requested due to automatic review settings September 25, 2026 22:57
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 25, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
馃摑 Code Review 鈿狅笍 Failed 2026-09-25T22:58:30.735768Z 2bea56f PR opened
馃敀 Security Review 鈿狅笍 Failed 2026-09-25T22:58:46.445429Z 2bea56f PR opened
鈩癸笍 About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 馃憖 while any review is running, comments if it has suggestions, and reacts with 馃憤 once all reviews finish with no findings.

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.

Copilot review overview

馃煛 Changes recommended

Stable SemVer tags containing hyphenated build metadata are incorrectly classified as prereleases.

Get a fresh assessment by requesting another Copilot review.

Review effort: Balanced
Findings: 1 Medium severity

Open (1)
What changed in this PR

Adds tag-triggered multi-architecture container publishing and GitHub Release creation.

Changes:

  • Publishes four GHCR images with SBOM and provenance.
  • Documents stable and prerelease workflows.
File Description
.github/鈥媤orkflows/鈥媟elease.yml Builds images and creates releases.
README.md Documents release commands and artifacts.

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

Comment thread .github/workflows/release.yml Outdated
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Copilot AI review requested due to automatic review settings September 25, 2026 23:04

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.

Copilot review overview

馃煛 Changes recommended

Build-metadata tags can overwrite distinct prerelease image tags.

Get a fresh assessment by requesting another Copilot review.

Review effort: Balanced
Findings: 1 High severity

Open (1)
Resolved since last review (1)

Comment thread .github/workflows/release.yml
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Copilot AI review requested due to automatic review settings September 25, 2026 23:53

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.

Copilot review overview

馃煛 Changes recommended

GHCR visibility and non-atomic latest updates could make releases inaccessible or inconsistent.

Get a fresh assessment by requesting another Copilot review.

Review effort: Balanced
Findings: 1 High severity

Open (1)
Resolved since last review (1)
Previously missed (1)

In code that hasn't changed since last review

Medium severity GHCR packages may remain private after first publication

.github/鈥媤orkflows/鈥媟elease.yml:77

First publication of a personal-account-scoped GHCR package defaults to private. This workflow pushes the four packages but never arranges public visibility, while the README and runtime catalog expose them as pullable defaults; a first release can therefore succeed yet remain unavailable to users. Add the required one-time package-visibility setup to the release procedure (or an automated visibility step) before presenting these as public artifacts.

Comment thread .github/workflows/release.yml
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Copilot AI review requested due to automatic review settings September 26, 2026 00:12

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.

Copilot review overview

馃數 Needs a closer look

Malformed v-prefixed tags pass validation and trigger publishing jobs without a valid image tag.

Review effort: Balanced
Findings: None

Resolved since last review (1)
Previously missed (1)

In code that hasn't changed since last review

Medium severity Validate full SemVer tag format before starting matrix jobs

.github/鈥媤orkflows/鈥媟elease.yml:43

The trigger also matches malformed tags such as v1garbage, but this check rejects only build metadata. The pinned metadata action skips invalid SemVer and emits no version tag, so such a tag cannot be published and starts all four matrix jobs only to fail. Validate the complete vMAJOR.MINOR.PATCH[-PRERELEASE] form here before checkout.

Copy link
Copy Markdown
Owner Author

Reviewed the remaining malformed-tag advisory. No second SemVer parser is being added: the pinned docker/metadata-action rejects invalid SemVer and emits no version tag, and Buildx refuses a registry push without a tag. Those image jobs fail, so needs: images prevents release creation. Earlier rejection would improve the error path, but duplicating SemVer parsing is unnecessary for this minimal workflow.

Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Copilot AI review requested due to automatic review settings September 26, 2026 02:38

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.

Copilot review overview

馃數 Needs a closer look

The concurrency configuration can cancel pending tagged releases instead of serializing all of them.

Review effort: Balanced
Findings: None

Previously missed (1)

In code that hasn't changed since last review

Medium severity Prevent pending tag releases from being canceled

.github/鈥媤orkflows/鈥媟elease.yml:13

cancel-in-progress: false protects only the running release. GitHub still keeps a single pending run by default, so if three tags are pushed while the first release is running, the third run cancels the second and that version is never published. Add the larger concurrency queue so tag releases are actually serialized rather than replaced.

Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
Copilot AI review requested due to automatic review settings September 26, 2026 02:43
@sozercan
sozercan merged commit 2fb6efb into main Sep 26, 2026
23 checks passed
@sozercan
sozercan deleted the feat/release-pipeline branch September 26, 2026 02:45

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.

Copilot review overview

馃煛 Changes recommended

Tag validation can produce inconsistent image names, and failed release creation can allow an older run to roll back latest.

Review effort: Balanced
Findings: 1 High severity

Open (1)
Previously missed (1)

In code that hasn't changed since last review

Medium severity Incomplete tag validation permits malformed release tags

.github/鈥媤orkflows/鈥媟elease.yml:43

The trigger accepts any tag beginning with v plus a digit, but this guard only rejects +. A valid Git ref such as v1.2.3/foo reaches the workflow; metadata-action normalizes / to - before SemVer validation and publishes v1.2.3-foo, while this script treats the raw tag as stable and later references the nonexistent :v1.2.3/foo. Validate the complete supported tag grammar before any images are published.

Comment on lines +117 to +121
latest=$(gh api graphql -F owner="${GH_REPO%/*}" -F name="${GH_REPO#*/}" \
-f query='query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { latestRelease { tagName } } }' \
--jq '.data.repository.latestRelease.tagName // ""')
# Older stable releases may publish, but must not roll latest back.
if [[ -z "$latest" || "$(printf '%s\n' "$latest" "$TAG" | sort -V | tail -n 1)" == "$TAG" ]]; then
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