Skip to content

ci: publish nightly CLI releases#14

Merged
tkkhq merged 5 commits into
mainfrom
ci/nightly
Jun 19, 2026
Merged

ci: publish nightly CLI releases#14
tkkhq merged 5 commits into
mainfrom
ci/nightly

Conversation

@tkkhq

@tkkhq tkkhq commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

Summary

  • publish CLI releases on main pushes using v0.0.-nightly..
  • mark nightly releases as prerelease and not latest
  • keep release titles equal to the tag/version
  • maintain a moving nightly release alias at /releases/tag/nightly with the latest nightly assets
  • use static notes for nightly releases and generated notes for stable releases

Validation

  • bash -n scripts/ci/resolve-cli-build-env.sh
  • parsed .github/workflows/publish-cli.yml as YAML
  • bash-checked the publish release step script
  • verified main build env requires pre-resolved CLI_VERSION and accepts the resolved nightly version

Copilot AI review requested due to automatic review settings June 18, 2026 18:08
@tkkhq tkkhq requested a review from a team as a code owner June 18, 2026 18:08

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.

Pull request overview

This PR updates the CLI release pipeline to publish nightly GitHub Releases from main pushes using tags like v0.0.<next>-nightly.<YYYYMMDD>.<n>, and ensures nightly releases are marked as prerelease and not latest, with release titles matching the tag.

Changes:

  • Extend ref/tag validation to allow both stable vMAJOR.MINOR.PATCH and nightly v0.0.N-nightly.YYYYMMDD.NUMBER formats.
  • Add a release “resolver” job to compute the nightly tag/title/flags on main, and pass the resolved version into the build.
  • Update GitHub release publishing to set --prerelease and --latest=false for nightly releases and keep titles aligned with the tag.

Reviewed changes

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

File Description
scripts/ci/resolve-cli-build-env.sh Accepts nightly tags and supports resolving a nightly version on main (or using a provided CLI_VERSION).
.github/workflows/publish-cli.yml Triggers publishing on main pushes, resolves nightly/stable release metadata, and publishes GitHub Releases with correct prerelease/latest settings.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/workflows/publish-cli.yml
Comment thread scripts/ci/resolve-cli-build-env.sh Outdated
@tkkhq

tkkhq commented Jun 18, 2026

Copy link
Copy Markdown
Contributor Author

Addressed the latest review feedback:

  • Removed duplicate nightly version resolution from resolve-cli-build-env.sh; main builds now require the workflow-resolved CLI_VERSION.
  • Changed publish_release so gh release edit only runs for existing releases, not immediately after gh release create.
  • Switched nightly releases to static notes instead of generated notes; stable releases still use generated notes.
  • Added --target "$GITHUB_SHA" on existing-release edits so the moving nightly alias metadata follows the current commit where supported by gh.

Left as acceptable:

  • Nightly numbering race is mitigated by the existing publish-cli-main concurrency group (cancel-in-progress: false), so main publish runs serialize.
  • The force-pushed nightly tag is intentional and scoped to the alias tag.

@swkeever swkeever left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Found one actionable issue in the nightly release path.

NIGHTLY_ALIAS_NOTES="$(printf 'Latest nightly build: %s\n\nCommit: %s' "$RELEASE_TITLE" "$GITHUB_SHA")"
git tag -f nightly "$GITHUB_SHA"
git push origin refs/tags/nightly --force
publish_release nightly "$RELEASE_TITLE" "$NIGHTLY_ALIAS_NOTES" --prerelease --latest=false

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Publishing the nightly release here makes install.sh part of the alias assets, but the bundled installer still only accepts latest or stable vMAJOR.MINOR.PATCH selectors and only verifies tag-signed identities. VOLCANO_VERSION=nightly currently exits with unsupported Volcano CLI version selector: nightly; running this alias installer without that env installs the latest stable release instead. Please update the installer to support the nightly selector and the refs/heads/main signing identity, or omit/replace the installer asset for nightly releases.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Valid catch. I updated scripts/install-volcano.sh so the bundled installer now supports VOLCANO_VERSION=nightly via /releases/download/nightly/..., accepts immutable nightly versions like v0.0.N-nightly.YYYYMMDD.NUMBER, and verifies nightly artifacts against the main-branch workflow identity (publish-cli.yml@refs/heads/main). Stable latest and stable tag behavior is unchanged.

@marckong marckong 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.

Review: nightly CLI releases (ci/nightlymain)

Summary: Extends the publish workflow to cut nightly prereleases from main pushes (v0.0.N-nightly.YYYYMMDD.M), adds a resolve-release job to compute the version/flags, and reworks release publishing into a reusable publish_release helper plus a moving nightly alias tag. The two prior Copilot findings are both addressed.

Verification of the addressed feedback:

  • Recursion guard — the new !v*.*.*-nightly.* trigger exclusion matches the generated tag v0.0.N-nightly.YYYYMMDD.M (positive v*.*.* matches, negative excludes), and the nightly alias tag doesn't match v*.*.* at all. The self-trigger loop is genuinely prevented.
  • Tag/version mismatch — the refs/tags/* path in resolve-cli-build-env.sh now unconditionally sets CLI_VERSION="$REF_NAME", so an injected CLI_VERSION can no longer desync the embedded version from the triggering tag. The refs/heads/main path correctly requires the workflow-resolved value.
  • Serialized numberingconcurrency: publish-cli-${{ github.ref_name }} with cancel-in-progress: false serializes all main runs under one group, so resolve-release reads the prior run's pushed nightly tags before incrementing. The stated mitigation holds.
  • gh release edit (existing-release path) only runs after view succeeds, and static notes for nightly / generated notes for stable are wired correctly.

Review: Looks correct and the prior feedback is properly resolved — no blocking findings. A couple of non-blocking observations:

  • Each main push creates a new permanent v0.0.N-nightly... tag + prerelease with no cleanup, so these will accumulate indefinitely. Appears intentional, but a retention/prune step may be worth a follow-up if the releases page gets noisy.
  • gh release edit --target (used for the moving alias) is supported in current gh; worth pinning/being aware of the runner's gh version since it was flagged as version-dependent.

Overall correctness: CORRECT — existing stable-tag releases are unaffected, the new nightly path is self-consistent, and both reviewed issues are fixed without introducing new blocking bugs.

@tkkhq

tkkhq commented Jun 18, 2026

Copy link
Copy Markdown
Contributor Author

Addressed the installer review finding in 9aa2c7d:

  • VOLCANO_VERSION=nightly now downloads from the moving alias release.
  • Immutable nightly versions like v0.0.N-nightly.YYYYMMDD.NUMBER are accepted.
  • Nightly signatures verify against the main-branch workflow identity (publish-cli.yml@refs/heads/main), matching how main-push nightly artifacts are signed.
  • Stable latest and stable tag install behavior remains unchanged.

Validation:

  • bash -n scripts/install-volcano.sh
  • bash -n scripts/ci/resolve-cli-build-env.sh
  • parsed workflow YAML
  • bash-checked publish step script

@tkkhq tkkhq enabled auto-merge June 18, 2026 22:12
@tkkhq tkkhq requested review from marckong and swkeever June 18, 2026 22:12
@tkkhq tkkhq added this pull request to the merge queue Jun 19, 2026
Merged via the queue into main with commit 81f7e28 Jun 19, 2026
8 checks passed
@tkkhq tkkhq deleted the ci/nightly branch June 19, 2026 01:21
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.

4 participants