This guide describes how to cut a release of the Workload Variant Autoscaler (WVA). It covers changes in this repository (tag, image, Helm chart), required updates in the llm-d repo’s workload-autoscaling guide once the release is out.
| Step | Where | What |
|---|---|---|
| 1. Pre-release | This repo | Changelog, optional version bumps (see below) |
| 2. Tag & release | GitHub | Create tag vX.Y.Z, push; create GitHub Release (publish) |
| 3. Automation | GitHub Actions | Image build + push; Helm chart version bump + publish to GHCR; chart files committed back |
| 4. Post-release | llm-d repo | Required: Update workload-autoscaling guide (version callout, CRD/sample URLs, helmfile/values) |
A full release typically involves:
-
This repo (WVA)
- A version tag (e.g.
v0.5.2). - A container image built and pushed to
ghcr.io/llm-d/llm-d-workload-variant-autoscaler:<tag>. - Helm chart version and default image tag updated and published to GHCR (
oci://ghcr.io/llm-d). - Chart metadata (e.g.
Chart.yaml,values.yaml) committed back to the default branch.
- A version tag (e.g.
-
llm-d repo and guides (required)
- Once the release is out, the workload-autoscaling guide in llm-d/llm-d must be updated to the new WVA version so users get consistent instructions and correct CRD/sample URLs.
-
Documentation in this repo
- Changelog and, if needed, upstream version pins.
- Permissions: Ability to push tags and create/publish GitHub Releases. For the Helm workflow to push the chart and commit chart files back to the default branch, the workflow needs appropriate
contents: writeand (if applicable) bypass permissions. - Secrets:
CR_TOKENandCR_USER(or equivalent) configured for GHCR so the release workflow can push the image and Helm chart. - State of main: Release from a clean, tested state (e.g. main or a release branch). Run tests locally or rely on CI before tagging.
Do these on the branch you intend to tag (e.g. main).
-
Changelog
- Add a release-specific changelog under
docs/(e.g.docs/CHANGELOG-v0.5.2.md) summarizing user-facing and notable changes. - Optionally reference it in release notes when you create the GitHub Release.
- Add a release-specific changelog under
-
Kustomize default image tag (optional)
- If you want the default kustomize install to use the new version, update
config/manager/kustomization.yaml: setnewTagto the new version (e.g.v0.5.2) and commit. - The Helm release workflow does not update this file; it only updates
charts/workload-variant-autoscaler/Chart.yamlandcharts/workload-variant-autoscaler/values.yaml.
- If you want the default kustomize install to use the new version, update
-
Upstream dependency pins
- If this release pins a new version of an upstream dependency (e.g. llm-d-inference-sim), update docs/upstream-versions.md and the referenced files (e.g.
test/e2e/fixtures/model_service_builder.go,test/utils/resources/llmdsim.go) before releasing.
- If this release pins a new version of an upstream dependency (e.g. llm-d-inference-sim), update docs/upstream-versions.md and the referenced files (e.g.
-
Chart state
- The release workflow will overwrite
Chart.yamlandvalues.yamlwith the release tag and version. Ensure the repo is in a good state to tag (no uncommitted changes you care about for those files, or accept that the workflow will commit the release versions).
- The release workflow will overwrite
Use semantic versioning (e.g. v0.5.2). Alternatively, you can create the tag in step 2 when creating the GitHub Release (no need to run the commands below).
git tag vX.Y.Z
git push origin vX.Y.Z- Pushing a tag matching
v*triggers.github/workflows/ci-release.yaml, which builds and pushes the Docker image toghcr.io/llm-d/llm-d-workload-variant-autoscaler:<tag>.
- In the repo: Releases → Create a new release.
- Choose the tag you just pushed (e.g.
vX.Y.Z), or create the tag there by typing a new tag name (e.g.vX.Y.Z); GitHub will create the tag when you publish. - Add release notes (you can paste from your changelog or
docs/CHANGELOG-vX.Y.Z.md). - Publish the release.
Publishing the release triggers .github/workflows/helm-release.yaml, which:
- Builds and pushes the same multi-arch image (if not already present).
- Updates the Helm chart:
- Sets
versionandappVersionincharts/workload-variant-autoscaler/Chart.yamlfrom the tag. - Sets the controller image repository and tag in
charts/workload-variant-autoscaler/values.yaml.
- Sets
- Packages the chart and pushes it to
oci://ghcr.io/llm-d(GHCR). - Commits the updated
Chart.yamlandvalues.yamlback to the default branch.
So after the workflow runs, the default branch will have the chart metadata aligned with the released version.
- Test tag: Push a tag like
vX.Y.Z-testto run the Helm release workflow without creating a real release. The workflow also supports workflow_dispatch with a tag input so you can run it manually for a given tag (e.g. to verify chart publish and commit-back behavior).
- Chart location:
charts/workload-variant-autoscaler/. - Publish location:
oci://ghcr.io/llm-d(package name:workload-variant-autoscaler). - Install example:
helm install wva oci://ghcr.io/llm-d/workload-variant-autoscaler --version X.Y.Z - The workflow sets the chart version and appVersion from the release tag and updates the default controller image tag in
values.yaml; it then commits those changes back to the default branch.
The llm-d repo hosts a workload-autoscaling guide that references WVA. Once a release is out, this guide must be updated so install instructions and URLs match the new version. Update the following:
-
Version compatibility note
- In
guides/workload-autoscaling/README.md, update the "Version Compatibility" callout to state the new WVA version (e.g. "tested and validated with WVA vX.Y.Z").
- In
-
URLs that embed the version tag
- CRD install (Step 4): URLs like
.../workload-variant-autoscaler/vX.Y.Z/charts/.../crds/llmd.ai_variantautoscalings.yaml— replace the version segment with the new release tag. - Prometheus Adapter values (Step 6): All
curl/download URLs that point at.../workload-variant-autoscaler/vX.Y.Z/config/samples/...(e.g.prometheus-adapter-values.yaml,prometheus-adapter-values-ocp.yaml). - Upgrading section: Any CRD or sample URLs in the "Upgrading" section that include the version tag.
- CRD install (Step 4): URLs like
-
Breaking changes and upgrading text
- If the new release has breaking changes, add or update the "Breaking Changes" / "Upgrading" content and migration steps in the README.
-
Helmfile / values
- If the guide's
helmfile.yaml.gotmplorworkload-autoscaling/values.yaml(or equivalent) pin the WVA image or chart version, update those to the new version.
- If the guide's
Guide location: guides/workload-autoscaling (main branch). After editing, open a PR in the llm-d/llm-d repo so the guide stays in sync with the WVA release.
To allow other team members to perform releases:
-
Permissions
- Grant them permission to push tags and to create/publish GitHub Releases (and, if needed, to push to the default branch for the Helm workflow’s commit-back).
-
Secrets
- Ensure release workflows have access to the required GHCR credentials (
CR_TOKEN,CR_USERor org equivalent). Document where these are set (e.g. repo or org secrets) in internal runbooks.
- Ensure release workflows have access to the required GHCR credentials (
-
Documentation
- Point them to this guide and to the workflows:
.github/workflows/ci-release.yaml— image build on tag push..github/workflows/helm-release.yaml— image + Helm publish and chart commit-back on published release.
- Point them to this guide and to the workflows:
-
Optional runbook
- Maintain a short internal checklist (e.g. “pre-release checklist → tag → release → update llm-d guide”) so the steps above are easy to follow without re-reading the full doc.
| Item | Action |
|---|---|
| WVA release | Tag vX.Y.Z → push → create and publish GitHub Release. CI builds image and (on publish) runs Helm release. |
| Helm | Workflow updates chart version and default image tag, publishes to GHCR, and commits chart files back to the default branch. |
| Guide / llm-d repo | Required: After release, update the workload-autoscaling guide (version callout, CRD/sample URLs, helmfile/values) and open a PR in llm-d/llm-d. |
| Team | Use this doc plus repo permissions and GHCR secrets so others can run the same process safely. |
For workflow details, see .github/workflows/ci-release.yaml and .github/workflows/helm-release.yaml.