Skip to content

ci: version-driven releases from deno.json - #367

Merged
kojiwakayama merged 3 commits into
mainfrom
ci/manual-release-button
Feb 16, 2026
Merged

kojiwakayama merged 3 commits into
mainfrom
ci/manual-release-button

Conversation

@kojiwakayama

@kojiwakayama kojiwakayama commented Feb 16, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Replace tag-based and manual-dispatch release triggers with automatic detection from the version string in deno.json:

  • X.Y.Z (clean semver) → stable release (npm latest + GitHub release + Homebrew + git tag)
  • Anything else (e.g. X.Y.Z-rc) → RC release (npm rc tag + GitHub pre-release)

How it works

A new version-check job reads deno.json on every push to main and outputs is_stable. Downstream jobs branch accordingly:

Push to main
    ↓
version-check (reads deno.json)
    ↓
┌─── is_stable=false ───┐    ┌─── is_stable=true ──────┐
│  prerelease job       │    │  release job             │
│  npm publish --tag rc │    │  npm publish (latest)    │
│  GitHub pre-release   │    │  Create git tag          │
│  Server deploy        │    │  GitHub release          │
└───────────────────────┘    │  Homebrew tap update     │
                             │  Server deploy           │
                             └──────────────────────────┘

Release workflow

  1. Day-to-day: deno.json has 0.1.14-rc → every merge to main publishes RC
  2. Stable release: PR that changes version to 0.1.14 → merge publishes as latest
  3. Next cycle: Bump to 0.1.15-rc in follow-up commit

Changes

  • Removed tags: ["v*"] trigger and workflow_dispatch release input
  • Added version-check job that detects RC vs stable from deno.json
  • prerelease job runs only when is_stable=false
  • release job runs only when is_stable=true (with environment: production approval gate)
  • Stable release auto-creates git tag (with duplicate check)
  • update-homebrew uses version from version-check outputs instead of git tag ref
  • Removed release-tag manual dispatch job
  • Simplified CI job conditions (removed tag-skip guards since tags no longer trigger workflow)

Test plan

  • Verify YAML syntax is valid
  • Merge with current deno.json version 0.1.13 (clean semver) → should trigger stable release path
  • After release, bump to 0.1.14-rc → subsequent merges should publish RC only

Long-running commands (dev, start, mcp) never return from routeCommand,
so this only runs for commands like deploy, push, init, build — ensuring
the process exits instead of hanging on open handles.
Adds a "Release" checkbox to the manual workflow trigger in GitHub
Actions. When checked, it reads the version from deno.json, validates
it's a clean semver (no -rc or prerelease suffix), and creates the
git tag — which triggers the existing release pipeline.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b49892cb4e

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread .github/workflows/cicd.yml Outdated
Comment thread .github/workflows/cicd.yml Outdated
Replace tag-based and manual-dispatch release triggers with automatic
detection from the version string in deno.json:

- X.Y.Z (clean semver) → stable release (npm latest + GitHub release + Homebrew)
- anything else (e.g. X.Y.Z-rc) → RC release (npm rc tag + GitHub pre-release)

This makes the release process a simple PR: change the version in deno.json
from "0.1.14-rc" to "0.1.14" and merge to publish a stable release.

Stable releases auto-create git tags for history. No manual workflow
dispatch or git tag pushing needed.
@kojiwakayama kojiwakayama changed the title ci: add manual stable release button ci: version-driven releases from deno.json Feb 16, 2026
@kojiwakayama
kojiwakayama merged commit b940aef into main Feb 16, 2026
13 checks passed
@kojiwakayama
kojiwakayama deleted the ci/manual-release-button branch February 16, 2026 09:08
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.

1 participant