Skip to content

feat(ci): automated alpha/beta/stable release pipeline#65

Open
plumppig wants to merge 27 commits into
masterfrom
cicd-pipeline-spec
Open

feat(ci): automated alpha/beta/stable release pipeline#65
plumppig wants to merge 27 commits into
masterfrom
cicd-pipeline-spec

Conversation

@plumppig
Copy link
Copy Markdown
Contributor

Summary

  • Implements a fully automated CI/CD pipeline for ryuu.js: every PR merge to master publishes an alpha; soak gates auto-promote alpha→beta→stable; latest is operator-controlled.
  • Soak windows: patch 3d/7d, minor 7d/14d, major 14d/30d. Promotion is blocked while any open Critical/Major Jira ticket carries the version:<base>-<phase> label, or while another beta is already in flight.
  • 7 GitHub Actions workflows + 11 typed helper modules in scripts/ci/ with 42 unit tests. Daily cron at 14:00 UTC drives auto-promotion. promote-latest.yml is the only path to move npm latest and is workflow_dispatch-only.

See docs/superpowers/specs/2026-04-24-cicd-github-actions-design.md for the full design and docs/ci/setup.md for the operator runbook.

Required before merging

These are operator-only Phase 0 setup tasks. The workflows reference them but won't function until they exist:

  • GitHub App ryuu-ci-bot created, installed on this repo, with permissions Contents/PRs/Actions Read+Write, Metadata Read.
  • Repo secrets set: `NPM_TOKEN`, `BOT_APP_ID`, `BOT_APP_PRIVATE_KEY`, `JIRA_BASE_URL`, `JIRA_API_TOKEN`, `JIRA_PROJECT_KEY`.
  • Branch protection rules on `master` and `release/v*`: require `PR Validate / validate` check, add the App to the bypass list.

Test plan

  • `PR Validate` workflow runs green on this PR (no secrets needed — pure tsc/test/build).
  • After merge, confirm `Publish Alpha` runs end-to-end: bumps `package.json`, publishes to npm with `--tag alpha`, bot commit lands on master with `[skip ci]`.
  • Run `Soak Check` manually with `dry_run: true` and verify it logs the master alpha candidate without firing any downstream workflow.
  • (Once an alpha has soaked the right number of days with no critical bugs) verify auto cut-beta + alpha publish at the rolled-forward version + beta publish on the new release branch.
  • Verify `npm dist-tag ls ryuu.js` after a `Publish Stable` run shows the new version under `stable`, with `latest` unchanged. Manually trigger `Promote Latest` and confirm `latest` then moves.

🤖 Generated with Claude Code

JSON and others added 27 commits April 24, 2026 22:39
Designs an automated CI/CD process that publishes alphas on every master
merge, betas on each release-branch merge, and stables after a soak
period gated on Jira-tracked Critical/Major bug counts. The npm `latest`
dist-tag is moved only by an explicit operator workflow.

Spec covers Subsystem 1 (GitHub Actions workflows + helper scripts),
Subsystem 4 (manual `latest` promotion), and the Jira label convention
used for joining. Subsystems 2 (Blue/Green dashboard test apps) and 3
(Jira ticket structure) will get their own specs later.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@plumppig
Copy link
Copy Markdown
Contributor Author

In theory these workflows work great, but our billing is on a legacy plan and therefor we aren't allowed to use Actions.

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