Commit a51ed7a
ci: add release-please for versioned contract releases (#321)
## What
Adds release-please so merges to `main` cut versioned releases — a
`vX.Y.Z` git tag + GitHub release + CHANGELOG — from the conventional
commits already enforced here.
- `release-please-config.json` — `release-type: simple`, `vX.Y.Z` tags
(no component), pre-1.0 bump rules, changelog sections.
- `.release-please-manifest.json` — seeds the version at `0.1.0`
(matches `pyproject.toml`).
- `.github/workflows/release-please.yml` — runs on `main` +
`workflow_dispatch`.
## Why
scale-agentex has no version axis of its own: it floats at head, and the
only version concept comes from SGP's platform release. So there's no
way to name an **"oldest supported server contract"** that downstream
consumers can target.
This gives scale-agentex its own contract version axis — each release
tag is an immutable snapshot of `agentex/openapi.yaml`. The SDK's
cross-version compatibility suite
([scale-agentex-python#407](scaleapi/scale-agentex-python#407))
can then pin `min-supported` to a real release tag instead of the
placeholder commit SHA it uses today.
**These are contract checkpoints, not a deploy gate** — the server still
floats at head for deploys. The release version is a separate axis from
SGP's platform version; don't read them as the same.
## Bootstrap
Seeded at `0.1.0` with `bootstrap-sha` at the current `main` HEAD, so
the changelog starts fresh (no history backfill). After merge, the first
`feat`/`fix` PR (or a manual **workflow_dispatch**) opens the first
release PR; merging it cuts the first tag. The release PR title is
`chore: release …`, which passes the PR-title check.
## Next (the SGP hookup — separate)
1. Tag the built image with the release version in `build-agentex.yml`
(today it's `:sha`/`:latest`) so deploys get a version handle.
2. Have SGP pin agentex by version, so "oldest supported" becomes
derivable from the oldest live SGP release rather than a hand-maintained
floor.
- Note: tags/releases created with the default `GITHUB_TOKEN` don't
trigger other workflows, so the image-on-release build (1) will need a
PAT or `repository_dispatch`.
## Decision to confirm
Seed version `0.1.0` (matches `pyproject.toml`). Bump to `1.0.0` instead
if you want the first tag to signal contract stability.
🧑💻🤖 — posted via [Claude Code](https://claude.com/claude-code)
<!-- claude-code -->
<!-- greptile_comment -->
<h3>Greptile Summary</h3>
Adds Release Please automation for versioned Agentex contract releases
on `main` and manual dispatch.
Seeds the release manifest at `0.1.0`.
Introduces a shared Agentex version source and wires FastAPI/OpenAPI
versioning to it.
Configures coordinated version bumps for Python package metadata,
backend metadata, OpenAPI `info.version`, and the shared version file.
<details><summary><h3>Confidence Score: 5/5</h3></summary>
The changes are limited to release automation and version metadata
wiring, with no blocking code issues identified.
The workflow, manifest, configuration, and shared version source align
with the described release process and appear safe to merge.
</details>
<details><summary><h3><a href="https://www.greptile.com/trex"><img
alt="T-Rex"
src="https://greptile-static-assets.s3.amazonaws.com/trex/trex_green.svg"
height="20" align="absmiddle"></a> T-Rex Logs</h3></summary>
**What T-Rex did**
- Compared the before and after release-please configuration states; the
before state had all three files absent and overall validation failing,
while the after state has the files present and most checks passing,
with contract checks failing for specific items.
- Compared the before and after OpenAPI version wiring states; the
before state showed base commit, no agentex/src/\_version.py, and no
explicit version in FastAPI, with /openapi.json returning 200 OK and
info.version=0.1.0, while the after state shows head commit, a defined
\_\_version\_\_ in \_version.py, FastAPI(version=\_\_version\_\_), and
/openapi.json returning 200 OK with info.version=0.1.0; no
contract-mismatch was filed because the head imports and the app
responds as expected, and OpenAPI exposes 0.1.0 from the new wiring.
<a
href="https://app.greptile.com/trex/runs/11426852/artifacts"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://greptile-static-assets.s3.amazonaws.com/badges/ViewAllArtifactsDark.svg?v=1"><source
media="(prefers-color-scheme: light)"
srcset="https://greptile-static-assets.s3.amazonaws.com/badges/ViewAllArtifacts.svg?v=1"><img
alt="View all artifacts"
src="https://greptile-static-assets.s3.amazonaws.com/badges/ViewAllArtifacts.svg?v=1"
height="32"></picture></a>
<sub><a href="https://www.greptile.com/trex"><img alt="T-Rex"
src="https://greptile-static-assets.s3.amazonaws.com/trex/trex_green.svg"
height="14" align="absmiddle"></a> Ran code and verified through
T-Rex</sub>
</details>
<!-- greptile_failed_comments -->
<details open><summary><h3>Comments Outside Diff (1)</h3></summary>
1. General comment
<a href="#"><img alt="P1"
src="https://greptile-static-assets.s3.amazonaws.com/badges/p1.svg?v=9"
align="top"></a> **Release-please package metadata and pre-major patch
bump setting contradict the claimed contract**
- **Bug**
- The head release-please configuration is present and parseable, but it
does not semantically match the requested contract for versioned
contract checkpoint releases. In `release-please-config.json`, the root
package is configured with `release-type: "python"` and `package-name:
"agentex"` instead of the claimed `release-type: "simple"` and
`package-name: "contract-checkpoints"`. The same config also sets
`bump-patch-for-minor-pre-major` to `false`, while the validation
objective expected the pre-1.0 bump boolean to be enabled. The executed
after artifact reports these exact failed checks while the before
artifact shows the config was absent on base.
- **Cause**
- Changed lines in `release-please-config.json` implement package
metadata and bump behavior that target the Python package (`agentex`)
rather than the claimed simple contract-checkpoint release package, and
disable patch bumps for minor pre-major changes.
- **Fix**
- Update `release-please-config.json` so the root package uses
`"release-type": "simple"`, `"package-name": "contract-checkpoints"`,
and set `"bump-patch-for-minor-pre-major": true` if the intended
contract is the one described in the PR/validation objective. If the
actual intended release is the Python package release, update the PR
description and release contract accordingly.
<sub><a href="https://www.greptile.com/trex"><img alt="T-Rex"
src="https://greptile-static-assets.s3.amazonaws.com/trex/trex_green.svg"
height="14" align="absmiddle"></a> Ran code and verified through
T-Rex</sub>
</details>
<!-- /greptile_failed_comments -->
<sub>Reviews (4): Last reviewed commit: ["ci: add release-please for
versioned,
se..."](4fd3813)
| [Re-trigger
Greptile](https://app.greptile.com/api/retrigger?id=38185565)</sub>
<!-- /greptile_comment -->
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>1 parent bfa6652 commit a51ed7a
5 files changed
Lines changed: 64 additions & 0 deletions
File tree
- .github/workflows
- agentex/src
- api
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
21 | 21 | | |
22 | 22 | | |
23 | 23 | | |
| 24 | + | |
24 | 25 | | |
25 | 26 | | |
26 | 27 | | |
| |||
108 | 109 | | |
109 | 110 | | |
110 | 111 | | |
| 112 | + | |
111 | 113 | | |
112 | 114 | | |
113 | 115 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
0 commit comments