feat: link to the release a Create release step makes - #238
NickJosevski wants to merge 5 commits into
Conversation
|
Second slice pushed: the build page now shows the release too. The step records each release it creates as a hidden build artifact ( New Getting the link onto the new UI's overview itself would need a JS plugin against the newer TeamCity API — happy to scope that separately. |
Local testingRan the release link against a local Octopus (not the containerised free-tier one used by the e2e suite): a real project in a non-default space, on a recent build of the server. TeamCity server + agent came from the e2e fixture and reached the local instance over Five scenarios, all passing:
Worth noting:
Not covered locally: the classic build-summary surface, which only the container suite exercises (there's no local TeamCity set up, and its datadir is empty). The tab was verified through the current UI's iframe adapter both locally and in the container suite. The local harness is uncommitted scratch — it hardcodes the local space, project and URL. Say the word and I'll parameterise it by environment variables and commit it as a repeatable local check. |
|
Correction to the e2e note in
So the number five was right, the name wasn't. Fixed in b7c9230, which also drops "free tier" for "unlicensed / Community Edition" in the surrounding docs and in Note that the earlier |
3a709b1 to
742687f
Compare
The step already asked the CLI for JSON it only read a version out of; the release id was in there too. With the space id (one `space view` call, skipped when the step is configured with a `Spaces-N` value) that is the address Octopus itself reports as a release's `Links.Web`, so the step now logs it and publishes it as `octopus.release.url` and `octopus.release.number` for later steps. A link is a nicety on top of a release that already exists, so nothing on this path can fail the step: the space lookup is an optional command, and an unreadable response costs the link and nothing else. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The step records the release it created as a hidden build artifact, one file per step, and the server reads those back to link to each release from an "Octopus Deploy" tab on the build - the surface the current TeamCity UI renders for a plugin, which hosts it in its classic-UI adapter. The classic build page additionally carries the same link in the build's summary, which is the only place that fragment can appear. A hidden artifact rather than stored state so the record lives and is cleaned up with the build it describes, and so the server needs no listener to catch it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Octopus's free tier allows five projects at once and the suite was already using four, so a project per new test made the next test to provision fail with "This would exceed the limits of your current license". The two release link tests only need somewhere to make a release, so they share one project and keep their own release versions apart. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
OidcPluginFixture already sends GITHUB_TOKEN when it has one, but the job never passed it, so it asked for the OIDC plugin's latest release unauthenticated - against a limit shared per IP across runners. Hitting it 403s the fixture, and with it the whole shared stack's boot, failing every e2e test in seconds. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The note added with the shared-project change called the five-project cap "Octopus's free tier". It is not: the advertised free tier allows ten projects and needs a licence key, while the stack runs unlicensed, which is the Community Edition. Its limits, as the running container reports them, are five projects, five targets, five tenants and one space. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
742687f to
6aa4b12
Compare
The Create release step now points at what it made: the build log links to the release, and
octopus.release.url/octopus.release.numberare published for later steps.release create --output-format jsonalready returned the release id alongside the version the step was reading; with the space id (onespace viewcall, skipped when the step is configured with aSpaces-Nvalue) that gives the address Octopus itself reports as a release'sLinks.Web— verified against Octopus 2026.4.12 as{server}/app#/{SpaceId}/releases/{ReleaseId}.Nothing on this path can fail the step: the space lookup is an optional command, and an unreadable CLI response costs the link and nothing else.
Only reaches steps on the new Go CLI (
OCTOPUS_NEW_CLIor an OIDC connection) — legacyoctoexposes no release id without replacing the step's readable log with JSON.Tested with a new e2e (
OctopusCreateReleaseLinkE2ETest) that asserts the logged link equals the release's ownLinks.Weband that a follow-on step can read the parameters back.🤖 Generated with Claude Code