You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
chore: prep for release pipeline — drop project-agent + skills-project, align image env contract
Removes the project-agent backend module (already gone from modules/), its
orphan web frontend (`components/project-agent/*`, `api/agent-context`,
`api/agent-session`), the AgentSession Prisma model + a drop migration, and
the standalone skills-project catalogue.
Aligns docker-compose with the actual runtime env contract of each image:
- web: adds SANDBOX0_API_KEY (chat 401s without it) + SANDBOX0_BASE_URL,
plus optional knobs as comments
- track-service: adds ClickHouse__{Database,FlagEvaluationsTable,MetricEventsTable}
overrides matching the chart
Adds .github/workflows/{publish-docker-images,release-charts}.yml and
RELEASING.md for the upcoming GitHub-driven release flow. Renames published
image repos to featbit/featbit-rda-{track-service,web} for namespace clarity.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The four runtime services (web, track-service, project-agent, run-active-test) are wired together in `modules/docker-compose.yml`. The local-mode connector is published to npm and is **not** part of `docker compose` — each end user runs it themselves on their own machine.
56
+
The runtime services (web, track-service, run-active-test) are wired together in `modules/docker-compose.yml`. The local-mode connector is published to npm and is **not** part of `docker compose` — each end user runs it themselves on their own machine.
57
57
58
58
---
59
59
@@ -66,7 +66,7 @@ The four runtime services (web, track-service, project-agent, run-active-test) a
|`project-agent`|`featbit/project-agent:local`| 3031 | web (healthy) |
359
321
|`web`|`featbit/web:local`| 3000 | — |
360
322
361
323
The `Local Claude Code` chat path is **not** a docker service — users run `npx @featbit/experimentation-claude-code-connector` on their own machines.
@@ -567,7 +529,6 @@ Use the language-native dev loop:
567
529
|---|---|
568
530
|`modules/web`|`npm run dev` (Next.js HMR) — or `npx tsc --noEmit` + `npm run lint` for compile-time only |
569
531
|`modules/track-service`|`dotnet run` from the project directory |
570
-
|`modules/project-agent`|`npm run dev` in the module |
571
532
|`modules/experimentation-claude-code-connector`|`npm run dev` (tsx watch) — only when modifying the connector itself; end-user verification is `npx @featbit/experimentation-claude-code-connector` from outside the repo |
572
533
|`modules/run-active-test-worker`|`npm run dev` (wrangler dev) |
| Publish Docker Images |[`.github/workflows/publish-docker-images.yml`](.github/workflows/publish-docker-images.yml)| Manual (`workflow_dispatch`) | Multi-arch images on Docker Hub: `featbit/featbit-rda-track-service:<version>` and `featbit/featbit-rda-web:<version>`|
11
+
| Release Charts |[`.github/workflows/release-charts.yml`](.github/workflows/release-charts.yml)| Push to `main` under `charts/**`| A new GitHub Release `featbit-rda-<chart-version>` containing the packaged `.tgz`, plus an updated `index.yaml` on the `gh-pages` branch |
12
+
13
+
## One-time GitHub setup
14
+
15
+
1.**Create a `Production` environment** in repo Settings → Environments → New environment → name it `Production` (capital P, matches the `environment:` key in both workflows).
16
+
2.**Add Docker Hub secrets to the `Production` environment**:
17
+
-`DOCKER_HUB_USERNAME` — Docker Hub user/org that owns the images. Must be `featbit` to publish under the official namespace.
18
+
-`DOCKER_HUB_ACCESS_TOKEN` — Docker Hub PAT with `Read, Write, Delete` on the `featbit` namespace.
19
+
3.**Enable a `gh-pages` branch** for the Helm repo. The chart-releaser action will create it on first run if missing; you only need to flip Settings → Pages → Source = `gh-pages` / `/ (root)`*after* the first successful chart release so the index becomes browseable at `https://featbit.github.io/featbit-release-decision-agent`.
20
+
4.**Workflow permissions** — Settings → Actions → General → Workflow permissions → "Read and write permissions". chart-releaser needs this to push to `gh-pages` and create releases.
21
+
22
+
## Cutting an image release
23
+
24
+
When you've merged code changes that need to ship in a new image:
25
+
26
+
1. Decide the version (e.g. `0.4.0` for track-service, or whatever you'll pin in `values.yaml` next).
-**build-latest**: usually leave off; flip on for stable cuts you want `:latest` to follow.
30
+
-**next-public-featbit-api-url**: defaults to `https://app-api.featbit.co` (FeatBit SaaS). Override if you're publishing an image targeting a self-hosted FeatBit backend — this value is baked into the web bundle and cannot be changed at runtime.
31
+
3. Wait for both matrix jobs (`featbit-rda-track-service`, `featbit-rda-web`) to go green. Verify on Docker Hub.
32
+
33
+
## Cutting a chart release
34
+
35
+
The chart release is automatic on every push to `main` that touches `charts/**`, but only publishes when `Chart.yaml`'s `version:` is **new** (i.e. no existing GitHub Release tag matches `featbit-rda-<version>`). Workflow:
36
+
37
+
1. Bump image tags in `charts/featbit-rda/values.yaml` to the just-published version(s).
38
+
2. Bump `version:` (and usually `appVersion:`) in `charts/featbit-rda/Chart.yaml`. Use SemVer; chart-releaser refuses to re-release a version that already has a Release.
39
+
3. Commit + merge to `main`.
40
+
4. The `Release Charts` workflow runs, creates GitHub Release `featbit-rda-<version>`, attaches the packaged `.tgz`, and pushes the updated `index.yaml` to `gh-pages`.
41
+
42
+
## Consuming the published chart
43
+
44
+
Once the first chart release ships and `gh-pages` is exposed via GitHub Pages:
Until then, point `helm install` at the local checkout (the existing flow documented in `charts/README.md`).
53
+
54
+
## Recommended cadence
55
+
56
+
- Publish images first; verify by pulling them in a smoke environment.
57
+
- Then bump `values.yaml` + `Chart.yaml` in a single commit so the chart release strictly follows working images.
58
+
- Image tags and chart `appVersion` don't have to match each other — track-service and web typically version independently — but the chart's own `version:` must always be bumped per release.
0 commit comments