How to cut a partner release in the modern vuer-release repo: add onerelease.json, commit it to master, push a <partner>@<N> tag, and the self-hosted autobuild.yml CI generates → builds → publishes the component images to Harbor. This is the reusable durable how-to; the worked example is nusz@13 (2026-07-03).
For Agents
Repo:TechTeamer/vuer-release (Gen2 lean release-orchestration repo — see vuer-release).
What the tool actually does (read from the TechTeamer/vuer-release-cli Python source): vuer-release-build-flow — notably that component source is cloned from TAG, notVERSION.
A release cut = one added file + one commit + one tag, committed directly to master (NOT via a PR).
The tag <partner>@<N> is what fires CI. Trigger = tag matching *@*and a changed path projects/*/release/*/release.json → .github/workflows/autobuild.yml on [self-hosted, docker].
For partner <partner>, cutting release number <N> (previous is <N-1>):
Copy the previous release descriptor:
projects/<partner>/release/<N-1>/release.json → projects/<partner>/release/<N>/release.json
Bump in the new file:
top-level RELEASE_VERSION (the @<N> number)
RELEASE_VERSION inside DEFAULT_ARGS
TIMESTAMP
each component’s VERSION + TAG (→ new app version + source tag, e.g. 1.9.11.47 / nusz-1.9.11.47)
COMPONENT_LIST = the components that build (e.g. vuer_oss + vuer_css)
Commit to master:Release: <partner>, version: <N>
Tag + push:
git tag <partner>@<N>git push origin mastergit push origin <partner>@<N>
The commit lands on master (clean fast-forward), not a branch. The tag push is what starts the build.
What the CI does (autobuild.yml)
.github/workflows/autobuild.yml runs on [self-hosted, docker], triggered by a pushed tag matching *@*and a changed projects/*/release/*/release.json. Two jobs:
parse_tag — parses <partner>@<N>, resolves the release path. Fast (≈6 s green).
build — downloads the release tool from TechTeamer/vuer-release-cli, then runs gen → build → publish push against release/<N>/release.json, pushing the built component images to harbor.techteamer.com/<project>/<component>:<version>-<…>.
CORRECTED 2026-07-22 — gen does not snapshot component config
The earlier version of this callout was wrong. It claimed gen snapshots each projects/<partner>/components/<svc>/component_env_values.json INTO release.json, so hand-set pins were unreliable. Read from the CLI source, that is false:
gen reads release.json ONLY — commands/gen/gen.py:76 is return release_json["COMPONENT_LIST"]. It never re-reads component_env_values.json. Once release.json exists, the component env files are irrelevant to the build.
The merge happens one step earlier, in release create (commands/release/release.py:239-259), and only as interactive prompt defaults the operator confirms or overrides.
The nusz@12 observation (component-config janus == release/12 janus == 60ed394f) is still true — but it is the expected result of pressing enter at the prompt, not evidence of a gen-time overwrite. Full mechanics (with file:line refs) in the “release create vs gen — who writes what” section of vuer-release-build-flow.
What actually sets the pins in release.json
release-tool release create merges base/components/<c>/component_env_values.json then projects/<partner>/components/<c>/component_env_values.json (project wins) and prompts for every key with that value as the default. Whatever you confirm is written to release/<N>/release.json. So the component env files are the effective default but overridable at release time — not immutable, and not re-applied later.
Because this recipe hand-copiesrelease/<N-1>/release.json instead of running release create, nothing overwrites your values: what you commit is exactly what builds. Keeping the new file in agreement with the current component_env_values.json is still good hygiene (it keeps the prompt defaults honest for anyone who does use release create), just not a correctness requirement.
Gotchas
Narrowed fetch refspecs in facekom clones
git ls-remote the repo before deciding FF / next tag number — local remote-tracking refs go stale (narrowed refspecs, no prune). Confirm master tip and the highest existing <partner>@N from the remote, not local.
Solo-author identity
The vuer-release clone’s default committer is andras.lederer@alpiq.com. Override to the solo-author identity Andras Lederer <25370292+wowjeeez@users.noreply.github.com> (git commit --author=…, no Co-Authored-By).
Failure handling: if CI fails after a tag is pushed, fix-forward to the next @N — do NOT delete pushed tags (precedent: nusz@8 was skipped, never created).
Watch a run:gh run watch <run-id> --repo TechTeamer/vuer-release. RTK mangles gh run view output → use rtk proxy gh … for raw output (see rtk-mangles-curl-and-pipes).
Relationship to the other release notes
release-process documents the legacy manual vuer_build publish (tag → build.sh → sign-partner.sh → Harbor) plus the per-client changelog/tag conventions on the customization branches. The source-tag step (tag vuer_oss + vuer_css<partner>-<version>, kept in sync) is shared; only the publish half differs (legacy build.sh vs modern autobuild).
FKITDEV-8344-vuer-release-migration-batch covers migrating a partner INTO vuer-release (the lean projects/<partner>/ layout). That note correctly says release/<N>/release.json is a release-tool artifact not added in a migration PR. No contradiction: you add release/<N>/release.json only when cutting a release (this note), committed directly to master, outside the migration PR.
Worked example — nusz@13
Added projects/nusz/release/13/release.json (COMPONENT_LIST = vuer_oss + vuer_css, VERSION1.9.11.47, TAGnusz-1.9.11.47), commit 712000c on master (clean FF over d7ebb37), tag nusz@13 → autobuild CI run 28667229191 publishes app 1.9.11.47 to Harbor. Full record + payload: nusz-1.9.11.47.