From claudio-plugin
Create production releases on the Konflux platform. Handles the complete stage-to-production release workflow including discovering stage releases, generating production release YAMLs with release notes, and preparing them for review. Supports manual mode and config-driven mode with an external product config directory.
How this skill is triggered — by the user, by Claude, or both
Slash command
/claudio-plugin:konflux-releaseThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Konflux is an open source build and release platform based on OpenShift and Tekton. This skill handles the stage-to-production release workflow: discovering stage releases by commit SHA, generating production release YAMLs with release notes, and preparing them for human review.
Konflux is an open source build and release platform based on OpenShift and Tekton. This skill handles the stage-to-production release workflow: discovering stage releases by commit SHA, generating production release YAMLs with release notes, and preparing them for human review.
The skill generates release YAML files and a summary document. It does NOT apply releases to the cluster -- application of release YAMLs is handled separately through manual review or CI pipelines.
The skill operates in two modes:
Prerequisites: kubectl, python3, jq, and optionally glab and skopeo. These are expected to be pre-installed. Do NOT check or install dependencies upfront — just run the commands and scripts directly. If something fails due to a missing dependency, then install it using the scripts in tools/.
Scripts:
This skill includes helper scripts in scripts/ directory.
for, while), background processes (&), or subshells to batch multiple components into a single commandCorrect execution:
/full/path/to/konflux-release/scripts/generate_release_yaml.py --component foo --version 1.0 --snapshot bar --release-plan prod --release-name foo-1-0-prod-1 --accelerator Variant --namespace ns --release-notes-template /path/to/template.yaml --release-type RHEA --output /path/to/out/foo.yaml
Incorrect execution:
# DON'T - relative path (won't resolve)
scripts/generate_release_yaml.py ...
# DON'T - changing directory first
cd scripts && ./generate_release_yaml.py ...
# DON'T - line breaks
/path/to/generate_release_yaml.py \
--component foo \
--version 1.0
# DON'T - shell loops or background processes
for comp in foo bar baz; do /path/to/generate_release_yaml.py --component $comp ...; done
/path/to/generate_release_yaml.py --component foo ... &
/path/to/generate_release_yaml.py --component bar ... &
wait
Permission pattern:
*/konflux-release/scripts/generate_release_yaml.py *This pattern matches the script in any user directory or plugin cache location.
1. Code merged -> CI builds -> Stage Release created
2. Stage Release succeeds -> Snapshot captured (references built images)
3. Production Release YAML generated -> References same Snapshot (same images)
4. Release YAMLs reviewed and applied (manually or via CI)
Key principle: stage and production releases reference the same Snapshot because it points to the same built container images.
Three options depending on what the user provides:
Option A - Direct SHA: User already has the full 40-character commit SHA. No resolution needed.
Option B - Git tag via glab:
glab api --method GET "projects/<url-encoded-project>/repository/commits/<tag>" | jq -r '.id'
Option C - Image URL via skopeo: Extract the commit SHA from container image labels:
skopeo inspect --no-tags docker://<image-url> | jq -r '.Labels["vcs-ref"]'
Query releases using the commit SHA label:
kubectl get releases -n <namespace> -l "pac.test.appstudio.openshift.io/sha=<full-40-char-sha>"
Use the full 40-character SHA. Short SHAs won't match labels.
Check the appstudio.openshift.io/application label on the releases to determine the application name. Some applications use versioned release plans (with version suffix) while others use a single unversioned plan.
kubectl get releases -n <namespace> -l "pac.test.appstudio.openshift.io/sha=<sha>" -o jsonpath='{.items[0].metadata.labels.appstudio\.openshift\.io/application}'
Check that each stage release has completed successfully:
kubectl get releases -n <namespace> -l "pac.test.appstudio.openshift.io/sha=<sha>" -o json | jq '[.items[] | select(.status.conditions[]? | select(.type == "Released" and .status == "True")) | {name: .metadata.name, component: .metadata.labels["appstudio.openshift.io/component"], snapshot: .spec.snapshot, releasePlan: .spec.releasePlan}]'
.status.conditions[type=Released].status = "True"For each successful stage release, extract:
.metadata.labels["appstudio.openshift.io/component"].spec.snapshot.spec.releasePlanThen determine:
Query existing production releases to determine the next sequence number:
kubectl get releases -n <namespace> --sort-by=.metadata.creationTimestamp -o json | jq '[.items[] | select(.metadata.name | startswith("<component>-<version-dashed>-prod-"))] | length'
Use length + 1 as the next sequence number for the release name.
The script automatically creates the output directory. Use the provided script for each component (full path, single line):
/full/path/to/konflux-release/scripts/generate_release_yaml.py --component <component-name> --version <version> --snapshot <snapshot-name> --release-plan <prod-release-plan> --release-name <release-name> --accelerator <accelerator> --namespace <namespace> --release-notes-template <template-path> --release-type <RHEA|RHSA> --output /path/to/output/<component>-prod.yaml
Required parameters:
--component - component name--version - semantic version--snapshot - snapshot name from the successful stage release--release-plan - production release plan name--release-name - unique release name (see naming conventions)--accelerator - variant/accelerator type for template substitution--namespace - Kubernetes namespace--release-notes-template - path to release notes YAML template--release-type - RHEA (default) or RHSA--output - output file pathOptional parameters:
--cves-file - path to CVE list file (required for RHSA releases)--grace-period - grace period in days (default: 30)Create a summary document that includes:
The generated release YAMLs and summary are NOT applied directly to the cluster.
Config-driven mode: Follow the config repo's CLAUDE.md instructions for where to store output files. Commit the generated files and open a merge request against the config repo for human review.
Manual mode: Write the files to a local output directory. The user decides how to apply them (manually, via CI, etc.).
When a product configs repository is added as a working directory, the skill can read product configuration automatically instead of requiring all parameters manually.
The config repo's CLAUDE.md should document:
The skill does not assume any particular config file structure -- it relies entirely on the config repo's CLAUDE.md for guidance.
synopsis: "Product Name {version} ({accelerator})"
description: "Product Name"
topic: "Product Name {version} ({accelerator}) is now available."
references:
- https://example.com/product
solution: ""
{version} - provided via --version argument{accelerator} - provided via --accelerator argumentThe script replaces all placeholders recursively through all string values.
ga.yaml template + GA production release plantech-preview.yaml template + tech preview production release planspecial-variant.yaml), use it instead of the default GA/TP template--cves-file parameter
# Release Summary
## Release Information
- Date: YYYY-MM-DD
- Version: X.Y.Z
- Commit: <sha>
- Source: <repository-url>
## Components
| Component | Status | Release Name | Release Plan |
|-----------|--------|--------------|--------------|
| component-1 | Ready | name-prod-1 | plan-prod |
| component-2 | Ready | name-prod-2 | plan-tp-prod |
## Generated Files
- component-1-prod.yaml
- component-2-prod.yaml
In config-driven mode, follow the config repo's CLAUDE.md for where to store the summary.
In manual mode, store it alongside the generated YAMLs in the output directory.
Pattern: <component>-<version-dashed>-prod-<seq>
Example: my-component-1-2-0-prod-1
<component> - full component name<version-dashed> - version with dots replaced by dashesprod - environment<seq> - sequence number (auto-incremented)Common patterns:
<app>-prod<app>-tech-preview-prod<app>-stageFor applications with multiple components:
Support optional filtering by variant/accelerator type:
User provides a list of types to include.
Tag not found:
No stage releases found:
Stage release failed:
Template file not found:
Template parsing error:
CVE file not found:
Release name already exists:
Config repo not available:
Do NOT proactively check or install dependencies. Run commands and scripts directly. Only use these install scripts if a command fails due to a missing tool.
Required: kubectl, jq, python3, PyYAML
Optional: glab (tag resolution), skopeo (image inspection)
Install scripts (use only if needed):
tools/jq/install.sh # jq
tools/kubectl/install.sh # kubectl
tools/skopeo/install.sh # skopeo
tools/glab/install.sh # glab
# PyYAML is installed via pip (tools/python/konflux-release-requirements.txt)
Always use full SHAs - label selectors require full 40-character SHAs. Short SHAs won't match.
Verify before generating - all stage releases must succeed and snapshots must be captured before generating production YAMLs.
Coordinate parameters correctly:
Use release notes templates - store templates in version control, use {version} and {accelerator} placeholders for dynamic content.
Generate summaries - document what was released, include verification steps and links.
Review before applying - generated files should always go through human review before being applied to the cluster.
npx claudepluginhub aipcc-cicd/claudio-skills --plugin claudio-pluginOrchestrates GitHub releases with automated versioning, changelog generation, multi-platform builds, and rollback support. Use when cutting a release or coordinating a deploy.
Release workflow with version bump, changelog, tagging, CycloneDX SBOM, npm provenance, and deploy verification. Use when cutting a release or deploying to production.
Design repeatable release processes that minimize risk and manual overhead. Use when shipping to production, managing versioning, or coordinating multi-team releases.