Release flow modelled on featbit/featbit (Docker images) +
featbit/featbit-charts (Helm chart).
A single Release workflow run produces, all tagged with the same version (e.g. 0.4.0):
| # | Artefact | Coordinate |
|---|---|---|
| 1 | Docker image | featbit/featbit-rda-track-service:<version> (Docker Hub) |
| 2 | Docker image | featbit/featbit-rda-web:<version> (Docker Hub) |
| 3 | npm package | @featbit/experimentation-claude-code-connector@<version> |
| 4 | Skills bundle | skills-<version>.tar.gz attached to GitHub Release v<version> |
The Helm chart is released separately (see "Chart release" below) — it depends on (1) and (2) being out first.
| Workflow | File | Trigger | Output |
|---|---|---|---|
| Release | .github/workflows/release.yml |
Manual (workflow_dispatch) |
All four artefacts above + GH Release v<version> |
| Release Charts | .github/workflows/release-charts.yml |
Push to main under charts/** |
New chart Release + updated index.yaml on gh-pages |
- Create a
Productionenvironment in repo Settings → Environments → New environment → name itProduction(capital P, matches theenvironment:key in the workflows). - Add release secrets to the
Productionenvironment:DOCKER_HUB_USERNAME— Docker Hub user/org. Must befeatbitto publish under the official namespace.DOCKER_HUB_ACCESS_TOKEN— Docker Hub PAT withRead, Write, Deleteon thefeatbitnamespace.NPM_TOKEN— npm Automation token with publish rights on the@featbitscope.
- Workflow permissions — Settings → Actions → General → Workflow permissions → "Read and write permissions". The release job commits the connector's
package.jsonbump back tomainand creates Release tags; chart-releaser writesgh-pages. - (Chart release only) After the first chart Release succeeds, flip Settings → Pages → Source =
gh-pages/(root)so the index becomes browseable athttps://featbit.github.io/featbit-release-decision-agent.
-
Go to GitHub → Actions → Release → Run workflow:
- version:
0.4.0(no leadingv— the workflow validates SemVer) - build-latest: usually leave off; flip on for stable cuts you want
:latestto follow.
The published web image targets any FeatBit backend at runtime via the
FEATBIT_API_URLenv var (defaults tohttps://app-api-experimentation.featbit.co). One canonical image — no per-deployment rebuild required. - version:
-
Wait for all jobs to go green:
preflightvalidates the version and refuses ifv<version>already exists.docker (featbit-rda-track-service)anddocker (featbit-rda-web)build multi-arch and push.npmbumpsmodules/experimentation-claude-code-connector/package.json, publishes to npm with provenance, then commits the bump back tomain.releasepackagesskills/as a tarball and creates thev<version>GitHub Release with the tarball + sha256 attached and auto-generated changelog.
-
Verify on Docker Hub, npmjs.com, and the GitHub Releases page.
If a job fails partway, the release is partial — fix the cause, then re-run with the same version (since preflight keys on the git tag, you may need to delete the tag first if the release job created it before failing).
The chart workflow auto-runs on every push to main that touches charts/**, but only publishes if Chart.yaml's version: is new (i.e. no existing GitHub Release tag matches featbit-rda-<version>).
- Bump image tags in
charts/featbit-rda/values.yamlto the just-published<version>. - Bump
version:(and usuallyappVersion:) incharts/featbit-rda/Chart.yaml. Use SemVer; chart-releaser refuses to re-release a version that already has a Release. - Commit + merge to
main. - The
Release Chartsworkflow runs, creates GitHub Releasefeatbit-rda-<version>, attaches the packaged.tgz, and pushes the updatedindex.yamltogh-pages.
# Docker images
docker pull featbit/featbit-rda-track-service:0.4.0
docker pull featbit/featbit-rda-web:0.4.0
# npm package
npx @featbit/experimentation-claude-code-connector@0.4.0
# Skills bundle
curl -L -o skills.tar.gz \
https://github.com/featbit/featbit-release-decision-agent/releases/download/v0.4.0/skills-0.4.0.tar.gz
tar -xzf skills.tar.gz -C ~/.claude/
# Helm chart (after first chart release + GitHub Pages enabled)
helm repo add featbit-rda https://featbit.github.io/featbit-release-decision-agent
helm repo update
helm install my-rda featbit-rda/featbit-rda --version 0.3.0