Agent-skills flux-controller-patch-releases
install
source · Clone the upstream repo
git clone https://github.com/fluxcd/agent-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/fluxcd/agent-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/internal/skills/flux-controller-patch-releases" ~/.claude/skills/fluxcd-agent-skills-flux-controller-patch-releases && rm -rf "$T"
manifest:
internal/skills/flux-controller-patch-releases/SKILL.mdsource content
Flux Controller Patch Releases
Use this skill for upstream Flux controller patch releases only. Do not use it for
flux2, pkg, or other non-controller repos.
Supported controllers:
helm-controllerimage-automation-controllerimage-reflector-controllerkustomize-controllernotification-controllersource-controllersource-watcher
Preconditions
- Read the upstream procedure at
, sectionwebsite/content/en/flux/releases/procedure.md
.Controllers: patch releases - Treat
andgit
commands as confirmation points if the user wants that.gh - Use
to get the release date for changelog entries.date - Fetch before reasoning about release branches or merged PRs. Do not trust stale
local
refs.origin/*
Release Flow
For each controller:
-
Refresh local state.
git fetch --all --tags --prunegit switch release/vX.Y.xgit pull origin release/vX.Y.x
-
Create the release preparation branch exactly from the release series branch.
git switch -c release-vX.Y.Z release/vX.Y.x
-
Draft the new
entry.CHANGELOG.md- Use the existing changelog structure in that repo.
- Use the current date from
.date - Build the entry from the commits merged into the release series branch since the previous tag.
- Prefer PR titles over commit subjects for bullets.
- Check the PRs that introduced the changes; do not infer titles from local commit messages.
- In the intro paragraph, summarize the concrete bug fixes shipped in the patch release.
-
Commit the changelog entry.
git add CHANGELOG.mdgit commit -s -m "Add changelog entry for vX.Y.Z"
-
Apply the release version bump exactly as documented.
- Update the controller self-API version in the root
.go.mod - Update
config/manager/kustomization.yaml
tonewTag
.vX.Y.Z - Commit with:
git add go.mod config/manager/kustomization.yamlgit commit -s -m "Release vX.Y.Z"
- Update the controller self-API version in the root
-
Push the release preparation branch.
git push origin release-vX.Y.Z
-
Open and merge the release PR into the release series branch.
- Base:
release/vX.Y.x - Head:
release-vX.Y.Z
- Base:
-
Refresh the release series branch after merge.
git switch release/vX.Y.xgit pull origin release/vX.Y.x
-
Create and push signed tags from the updated release series branch. Push the
tag first — the release tag depends on it.api/git tag -s -m "api/vX.Y.Z" api/vX.Y.Zgit push origin api/vX.Y.Zgit tag -s -m "vX.Y.Z" vX.Y.Zgit push origin vX.Y.Z
-
Confirm the non-
tag triggered the release workflow.api/ -
Cherry-pick only the changelog commit back to
.main
git switch maingit pull origin maingit switch -c pick-changelog-vX.Y.Z maingit cherry-pick -x <Add changelog entry commit>git push origin pick-changelog-vX.Y.Z- Open PR from
topick-changelog-vX.Y.Zmain
How To Build The Changelog Entry
For a patch release, gather:
- the latest release tag on the release line
- the merged commits on
since that tagorigin/release/vX.Y.x - the PRs corresponding to those merges
Write the new section at the top of
CHANGELOG.md:
## X.Y.Z**Release date:** YYYY-MM-DD- short intro paragraph describing the actual bug fixes in user-facing language
when there are bug-fix itemsFixes:
for dependency updates, docs, feature gates, or cleanupImprovements:
Rules:
- Use PR titles, not raw commit messages
- Group multiple dependency bump PRs naturally when the repo history already does that
- Verify the title against GitHub when the local merge commit is vague
Critical Checks
- Always fetch before comparing
.tag..origin/release/... - Always pull the release series branch before creating
.release-vX.Y.Z - Always pull the release series branch again after merging the release PR and before tagging.
- Always inspect the actual root
; do not assume the self-API path form.go.mod
usessource-watcher
, so it still needs the same self-API release bump pattern.github.com/fluxcd/source-watcher/api/v2 - Do not silently special-case a controller. If the documented step seems not to apply, inspect the file and confirm before proceeding.
- Tag from the release series branch merge commit, not from the release prep branch.
- Cherry-pick only the changelog commit back to
, not the release version bump.main
Useful Local Queries
- Release branches:
git branch -r --list 'origin/release/v*.x' | sort -V
- Latest tags:
git tag -l 'v*' | sort -V | tail
- Commits since previous release on the release branch:
git log --oneline <prev-tag>..origin/release/vX.Y.x
- PR metadata for changelog bullets:
gh pr view <number> -R fluxcd/<repo> --json number,title,url,baseRefName