Draft or update UDS Core release notes page and Slack announcement from the release-please PR. Use this skill whenever the user mentions release notes, preparing a release, writing release announcements, updating release pages, or anything related to documenting a new UDS Core version. Also use it when the user says things like "prep the release", "write up the release", "draft release notes", or references a release-please PR.
This skill guides the creation of release notes pages and Slack announcements for UDS Core releases.
Read these files for template, conventions, and style reference:
.ai/docs/release-notes-template.md — the authoritative template and all formatting conventions. Follow it exactly..mdx file in docs/operations/release-notes/ — for real-world style referenceAsk the user if not obvious:
Use CLI to find and analyze the release-please PR:
gh# Find the open release-please PR
gh pr list --repo defenseunicorns/uds-core --label "autorelease: pending" --json number,title,body
From the PR body, extract all merged PR references. Then fetch details for each to understand the changes:
# Get the full body of the release-please PR
gh pr view <PR_NUMBER> --repo defenseunicorns/uds-core --json body,title
For each included PR, categorize it:
! in conventional commit type (e.g., feat!:, chore!:)feat: commits that add user-visible functionalityfix: commits, especially prominent oneschore(deps): commits; extract package name + old/new versionTo get dependency version details, read the actual PR diffs when needed:
gh pr view <DEP_PR_NUMBER> --repo defenseunicorns/uds-core --json title,body
Review all chore(deps): PRs in the release. Include both application updates and Helm chart version bumps in a single dependency table. Application updates track the actual running software (e.g., Prometheus 3.10.0, Grafana 12.4.1). Helm chart bumps track the chart packaging version (e.g., kube-prometheus-stack 82.13.5, Grafana Helm chart 11.3.3).
For Helm chart entries, add a "Helm chart" suffix to the package name (e.g., "Falco Helm chart", "Grafana Helm chart", "kube-prometheus-stack Helm chart"). Skip Helm charts where the chart version always matches the application version (e.g., Istio charts). Skip local/internal charts (keycloak, authservice, uds-operator-config, uds-cluster-crds). Skip test-only charts (podinfo).
Do NOT include:
When in doubt, ask the user whether a specific dependency should be included. If they provide guidance on a dependency you weren't sure about, update this skill's SKILL.md to include that guidance for future runs.
For each included dependency, extract the previous and updated version numbers from the actual PR diff (e.g., image tags in zarf.yaml or values.yaml), not from the PR title. The version in the PR title may not accurately reflect the actual application version. The application version is what belongs in the release notes table.
In the dependency table, link the "Updated" version number to the upstream release page (GitHub release or project release page). Use these URL patterns:
https://istio.io/latest/news/releases/X.Y.x/announcing-X.Y.Z/https://github.com/keycloak/keycloak/releases/tag/X.Y.Zhttps://github.com/prometheus/prometheus/releases/tag/vX.Y.Zhttps://github.com/prometheus/alertmanager/releases/tag/vX.Y.Zhttps://github.com/grafana/grafana/releases/tag/vX.Y.Zhttps://github.com/grafana/loki/releases/tag/vX.Y.Zhttps://github.com/vmware-tanzu/velero/releases/tag/vX.Y.Zhttps://github.com/vectordotdev/vector/releases/tag/vX.Y.Zhttps://github.com/defenseunicorns/pepr/releases/tag/vX.Y.Zhttps://github.com/falcosecurity/falco/releases/tag/X.Y.Zhttps://github.com/defenseunicorns/uds-identity-config/releases/tag/vX.Y.Zhttps://github.com/prometheus-operator/prometheus-operator/releases/tag/vX.Y.Zhttps://github.com/kubernetes-sigs/metrics-server/releases/tag/vX.Y.Zhttps://github.com/kiwigrid/k8s-sidecar/releases/tag/X.Y.Zhttps://github.com/falcosecurity/falcosidekick/releases/tag/X.Y.Zhttps://github.com/prometheus/blackbox_exporter/releases/tag/vX.Y.Zhttps://github.com/istio-ecosystem/authservice/releases/tag/vX.Y.Zhttps://github.com/prometheus/node_exporter/releases/tag/vX.Y.Zhttps://github.com/kubernetes/kube-state-metrics/releases/tag/vX.Y.ZWhen a Helm chart version is bumped independently of the application version, include it in the same dependency table with a "Helm chart" suffix (e.g., "Falco Helm chart", "Grafana Helm chart"). Link the updated version to the chart's release page using these patterns:
https://github.com/falcosecurity/charts/releases/tag/falco-X.Y.Zhttps://github.com/grafana-community/helm-charts/releases/tag/grafana-X.Y.Zhttps://github.com/istio/istio/releases/tag/X.Y.Z (chart version matches app version)https://github.com/prometheus-community/helm-charts/releases/tag/kube-prometheus-stack-X.Y.Zhttps://github.com/grafana-community/helm-charts/releases/tag/loki-X.Y.Zhttps://github.com/kubernetes-sigs/metrics-server/releases/tag/metrics-server-helm-chart-X.Y.Zhttps://github.com/prometheus-community/helm-charts/releases/tag/prometheus-blackbox-exporter-X.Y.Zhttps://github.com/prometheus-community/helm-charts/releases/tag/prometheus-operator-crds-X.Y.Zhttps://github.com/vectordotdev/helm-charts/releases/tag/vector-X.Y.Zhttps://github.com/vmware-tanzu/helm-charts/releases/tag/velero-X.Y.ZLeave entries unlinked when there is no meaningful upstream release page (e.g., DoD CA Certs).
Look for any uds-identity-config version bump in the included PRs. If found:
# Check the identity-config release for notable changes
gh release view v<VERSION> --repo defenseunicorns/uds-identity-config --json body
This content gets inlined into the Core release notes per the template conventions.
Before writing the release notes, ask the user whether there are any manual upgrade steps required for this release. This applies to both Core changes and identity-config changes.
For Core changes, check for:
For identity-config changes, check for:
Ask the user directly: "Are there any manual upgrade steps operators need to perform for this release — either for Core or identity-config?" If they describe steps, include them in the Upgrade considerations section using the <Steps> component format from the template. If they're unsure, flag the specific changes that look like they might need manual steps and ask for confirmation.
Follow the template from .ai/docs/release-notes-template.md. Determine the sidebar.order by looking at the most recent release notes file and using the next lower 3-decimal value (for example: 3.999, 3.998, 3.997, … — decrement by 0.001).
Add to the existing minor version's release notes:
> [!CAUTION] callout in the Upgrade considerations section noting what's fixedFor minor/major releases, update docs/operations/release-notes/overview.mdx:
<LinkCard> for the new version at the topAfter the release notes page is written, generate a Slack-friendly announcement message in a code block the user can copy-paste.
Map the minor version number to a letter of the alphabet (modulo 26 for numbers > 26). For example:
Generate 5-8 fun name options using the pattern adjective + animal, both starting with that letter. Mix up the vibes — some playful, some majestic, some silly. Present them to the user and let them pick their favorite. For example, for "L": Luminous Lemur, Legendary Lynx, Lively Lobster, Lavish Leopard, etc.
This release includes <features, bug fixes, CVE fixes, etc as applicable>. You can view the full release notes on the docs site [here](<docs-site-link>).
Some particular changes of note:
- <List any significant features included>
- <List any significant bug fixes (focus on any prominent/very public bugs)>
- Full dependency updates (<docs-site-link>#dependency-updates)
As per usual please reach out in #product-support if you encounter any issues consuming this release.
<Also note if we are tracking any bugs or CVEs that we know will be fixed soon in a patch>
Instead of listing individual dependency updates in the Slack message, link to the dependency updates section of the release notes page. Use the anchor #dependency-updates on the docs site URL.
Also provide the metadata for the Slack workflow:
@uds-foundation-teamhttps://github.com/defenseunicorns/uds-core/releases/tag/v<VERSION>UDS Core <version> ("<name>") (name only for minor/major)https://docs.defenseunicorns.com/core/operations/release-notes/X-Y/Provide the GitHub release page body:
## [X.Y.0](https://github.com/defenseunicorns/uds-core/compare/vPREVIOUS...vX.Y.0) (YYYY-MM-DD)
[Release Notes](https://docs.defenseunicorns.com/core/operations/release-notes/X-Y/)
Please open GitHub issue(s) if you encounter problems using this release.
Read docs/docs.config.json and check if archiveCount needs incrementing (only for minor versions if value < 4). If so, note this for the user.
After writing the release notes, run a git diff from the previous minor release tag to HEAD across zarf.yaml and values.yaml files to verify all dependency version numbers in the release notes are exactly correct:
git diff v<PREVIOUS>...HEAD -- '**/*.yaml' | grep -E '^\+|^\-' | grep -iE '<app-name>' | head -10
Cross-reference every entry in the dependency table against the actual image tags and chart versions in the diff. If any version is wrong, fix it before presenting to the user.