configure-downstream

Configure Konflux for new Submariner version - creates overlays, tenant config, and RPAs for Y-stream releases.

16 stars

Best use case

configure-downstream is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Configure Konflux for new Submariner version - creates overlays, tenant config, and RPAs for Y-stream releases.

Teams using configure-downstream should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/configure-downstream/SKILL.md --create-dirs "https://raw.githubusercontent.com/diegosouzapw/awesome-omni-skill/main/skills/design/configure-downstream/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/configure-downstream/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How configure-downstream Compares

Feature / Agentconfigure-downstreamStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Configure Konflux for new Submariner version - creates overlays, tenant config, and RPAs for Y-stream releases.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Configure Downstream Release

Configures Konflux CI/CD for a new Submariner minor version (Y-stream releases).

**Usage:**

```bash
/configure-downstream 0.23
/configure-downstream 0.23.0  # Extracts major.minor automatically
```

**What it does:**

- Auto-detects previous version from existing overlays
- Creates feature branch (subm-configure-v0.23) from main
- Creates 3 commits with 49 total files:
  - Commit 1: 26 YAML overlay files
  - Commit 2: 22 auto-generated Kustomize manifests
  - Commit 3: 2 ReleasePlanAdmission files (stage + prod)
- Verifies all changes before committing
- Outputs push command and MR instructions

**Arguments:** $ARGUMENTS

```bash
set -euo pipefail

INPUT_VERSION="$ARGUMENTS"

# ━━━ PREREQUISITES VALIDATION ━━━

# Change to konflux-release-data repository
cd ~/konflux/konflux-release-data || {
  echo "❌ Error: konflux-release-data repository not found at ~/konflux/konflux-release-data"
  exit 1
}

# Verify repository structure
test -f "tenants-config/build-single.sh" || {
  echo "❌ Error: Invalid konflux-release-data repository (missing build-single.sh)"
  exit 1
}

# Must be on main branch
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
if [ "$CURRENT_BRANCH" != "main" ]; then
  echo "❌ Error: Must be on main branch to start"
  echo "   Current branch: $CURRENT_BRANCH"
  echo "   Run: git checkout main"
  exit 1
fi

# Check git status
git diff-index --quiet HEAD -- 2>/dev/null || {
  echo "❌ Error: Working tree has uncommitted changes on main"
  echo "   Commit or stash changes before running this skill"
  git status --short
  exit 1
}

# Fetch latest from origin (non-fatal if fails - uses cached refs)
git fetch origin main 2>/dev/null || echo "⚠️  git fetch failed - working with cached remote state"

# Check if main is up to date with origin/main
if ! git merge-base --is-ancestor origin/main HEAD 2>/dev/null; then
  echo "❌ Error: Local main is not up to date with origin/main"
  echo "   Run: git pull origin main"
  exit 1
fi

# ━━━ VERSION AUTO-DETECTION ━━━

# Validate format: 0.Y or 0.Y.Z (Submariner major version is always 0)
echo "$INPUT_VERSION" | grep -qE '^0\.[0-9]+(\.[0-9]+)?$' || {
  echo "❌ Error: Invalid version format '$INPUT_VERSION'"
  echo "   Expected: 0.Y or 0.Y.Z (e.g., 0.23 or 0.23.1)"
  exit 1
}

# Extract major.minor (0.23.1 → 0.23)
MAJOR_MINOR=$(echo "$INPUT_VERSION" | grep -oE '^[0-9]+\.[0-9]+')
NEW_MINOR=$(echo "$MAJOR_MINOR" | cut -d. -f2)

# Convert to hyphenated format (NEW version)
NEW="0-${NEW_MINOR}"

# Check if version already exists
OVERLAY_DIR="$HOME/konflux/konflux-release-data/tenants-config/cluster/kflux-prd-rh02/tenants/submariner-tenant/overlay/application-submariner"
if [ -d "${OVERLAY_DIR}/${NEW}-overlay" ]; then
  echo "❌ Error: Version ${MAJOR_MINOR} already configured"
  echo "   Overlay directory exists: ${NEW}-overlay"
  exit 1
fi

# Find all existing overlays and extract minor versions
EXISTING_VERSIONS=$(ls -1d "${OVERLAY_DIR}"/[0-9]*-overlay 2>/dev/null | \
  xargs -n1 basename | sed 's/-overlay$//' | sed 's/^0-//' | sort -n)

if [ -z "$EXISTING_VERSIONS" ]; then
  echo "❌ Error: No previous versions found"
  echo "   Cannot auto-detect without existing overlays"
  echo "   Expected at least one directory matching: ${OVERLAY_DIR}/0-*-overlay"
  exit 1
fi

# Get most recent (highest) version
PREV_MINOR=$(echo "$EXISTING_VERSIONS" | tail -1)
PREV="0-${PREV_MINOR}"

# Calculate ACM versions: Submariner 0.X → ACM 2.(X-7)
PREV_ACM="2.$((PREV_MINOR - 7))"
NEW_ACM="2.$((NEW_MINOR - 7))"

# Validate ACM versions are positive
if [ "$((NEW_MINOR - 7))" -lt 0 ]; then
  echo "❌ Error: ACM version would be negative: 2.$((NEW_MINOR - 7))"
  echo "   Minimum supported version is 0.7 (ACM 2.0)"
  exit 1
fi

echo "✓ Version detection:"
echo "  Previous: ${PREV} (ACM ${PREV_ACM})"
echo "  New:      ${NEW} (ACM ${NEW_ACM})"
echo ""

# ━━━ FEATURE BRANCH CREATION ━━━

BRANCH="subm-configure-v${NEW//-/.}"

# Check if branch exists on remote (MUST NOT exist)
if git show-ref --verify --quiet "refs/remotes/origin/$BRANCH"; then
  echo "❌ Error: Branch $BRANCH already exists on remote"
  echo "   Delete it first: git push origin --delete $BRANCH"
  echo "   Then re-run this skill"
  exit 1
fi

# Check if branch exists locally (auto-delete if safe)
if git show-ref --verify --quiet "refs/heads/$BRANCH"; then
  echo "⚠️  Local branch $BRANCH exists - deleting and recreating"
  git branch -D "$BRANCH" >/dev/null 2>&1
fi

# Create branch from current HEAD (verified clean main)
git checkout -b "$BRANCH" || {
  echo "❌ Error: Failed to create branch $BRANCH"
  exit 1
}

echo "✓ Created feature branch: $BRANCH"
echo "  (All commits will be made on this branch)"
echo ""

# ━━━ COMMIT 1: CREATE OVERLAY STRUCTURE (26 files) ━━━

cd "${OVERLAY_DIR}"

# Copy overlay
cp -r "${PREV}-overlay" "${NEW}-overlay"
cd "${NEW}-overlay"

# Replace all version strings (3 patterns)
find . -name "*.yaml" -exec sed -i \
    -e "s/$PREV/$NEW/g" \
    -e "s/${PREV//-/.}/${NEW//-/.}/g" \
    -e "s/\/$PREV_ACM\//\/$NEW_ACM\//g" {} +

# Verify (5 checks with specific error messages)
FILE_COUNT=$(find . -name "*.yaml" | wc -l)
[ "$FILE_COUNT" -eq 26 ] || { echo "❌ Expected 26 YAML files, found $FILE_COUNT"; exit 1; }

grep -q "nameSuffix: -$NEW" kustomization.yaml || { echo "❌ nameSuffix not updated in kustomization.yaml"; exit 1; }

grep -q "value: submariner-$NEW" *.yaml || { echo "❌ Application name not updated to submariner-$NEW"; exit 1; }

grep -q "value: release-${NEW//-/.}" component-patch.yaml || { echo "❌ Git branch not updated to release-${NEW//-/.}"; exit 1; }

if grep -rEq "${PREV}|${PREV//-/.}|${PREV_ACM}" .; then
  echo "❌ Old version references still present:"
  grep -rE "${PREV}|${PREV//-/.}|${PREV_ACM}" . | head -3
  exit 1
fi

echo "   ✓ All verifications passed"

# Commit
cd "$(git rev-parse --show-toplevel)"
git add "tenants-config/cluster/kflux-prd-rh02/tenants/submariner-tenant/overlay/application-submariner/${NEW}-overlay"
git commit -s -m "Add Submariner v${NEW//-/.} overlay structure"

echo "✅ Commit 1: Created overlay structure (26 files)"
echo "   - Copied ${PREV}-overlay → ${NEW}-overlay"
echo "   - Updated version strings (${PREV} → ${NEW}, ${PREV_ACM} → ${NEW_ACM})"
echo "   - Verified: nameSuffix, application name, git branch, no old versions"
echo "   - Committed: Add Submariner v${NEW//-/.} overlay structure"
echo ""

# ━━━ COMMIT 2: ENABLE OVERLAY IN TENANT CONFIG (22 files) ━━━

cd ~/konflux/konflux-release-data/tenants-config/cluster/kflux-prd-rh02/tenants/submariner-tenant

# Add to kustomization.yaml (idempotent)
grep -q "overlay/application-submariner/$NEW-overlay" kustomization.yaml || {
  sed -i "/overlay\\/application-submariner\\/$PREV-overlay/a\\  - overlay/application-submariner/$NEW-overlay" kustomization.yaml
}

# Build manifests
cd ~/konflux/konflux-release-data/tenants-config
./build-single.sh submariner-tenant

# Verify (auto-generated files use hyphenated names like submariner-0-23.yaml)
COUNT=$(ls "auto-generated/cluster/kflux-prd-rh02/tenants/submariner-tenant/"*"-${NEW}.yaml" 2>/dev/null | wc -l)
[ "$COUNT" -eq 22 ] || { echo "❌ Error: Expected 22 auto-generated files, found $COUNT"; exit 1; }

# Commit
cd "$(git rev-parse --show-toplevel)"
git add tenants-config/cluster/kflux-prd-rh02/tenants/submariner-tenant/kustomization.yaml
git add tenants-config/auto-generated/cluster/kflux-prd-rh02/tenants/submariner-tenant/
git commit -s -m "Enable Submariner v${NEW//-/.} in tenant config"

echo "✅ Commit 2: Enabled overlay in tenant config (22 files)"
echo "   - Added overlay entry to kustomization.yaml"
echo "   - Ran build-single.sh submariner-tenant"
echo "   - Generated 22 auto-generated manifests"
echo "   - Committed: Enable Submariner v${NEW//-/.} in tenant config"
echo ""

# ━━━ COMMIT 3: ADD STAGE/PROD RPAs (2 files) ━━━

cd ~/konflux/konflux-release-data/config/kflux-prd-rh02.0fk9.p1/product/ReleasePlanAdmission/submariner

# Copy RPAs
cp "submariner-release-plan-admission-prod-$PREV.yaml" "submariner-release-plan-admission-prod-$NEW.yaml"
cp "submariner-release-plan-admission-stage-$PREV.yaml" "submariner-release-plan-admission-stage-$NEW.yaml"

# Replace version strings (4 patterns)
sed -i -e "s/$PREV/$NEW/g" \
       -e "s/${PREV//-/.}/${NEW//-/.}/g" \
       -e "s/\"$PREV_ACM\"/\"$NEW_ACM\"/g" \
       -e "s/\\/$PREV_ACM\\//\\/$NEW_ACM\\//g" \
       "submariner-release-plan-admission-"*"-$NEW.yaml"

# Verify (5 checks with specific error messages)
grep -q "intention: staging" "submariner-release-plan-admission-stage-$NEW.yaml" || { echo "❌ Stage RPA intention not 'staging'"; exit 1; }

grep -q "intention: production" "submariner-release-plan-admission-prod-$NEW.yaml" || { echo "❌ Prod RPA intention not 'production'"; exit 1; }

COMPONENT_COUNT=$(grep -c "url: registry" "submariner-release-plan-admission-prod-$NEW.yaml")
[ "$COMPONENT_COUNT" -eq 9 ] || { echo "❌ Expected 9 components in RPA, found $COMPONENT_COUNT"; exit 1; }

grep -q "product_version: \"$NEW_ACM\"" "submariner-release-plan-admission-prod-$NEW.yaml" || { echo "❌ Product version not set to \"$NEW_ACM\""; exit 1; }

PATCH_MATCHES=$(grep -E "v${NEW//-/.}\.[0-9]+-" "submariner-release-plan-admission-"*"-$NEW.yaml" 2>/dev/null)
if [ -n "$PATCH_MATCHES" ]; then
  echo "❌ Found patch version in RPA tags (should use minor version only)"
  echo "$PATCH_MATCHES" | head -3
  exit 1
fi

echo "   ✓ All verifications passed"

# Commit
cd "$(git rev-parse --show-toplevel)"
git add "config/kflux-prd-rh02.0fk9.p1/product/ReleasePlanAdmission/submariner/submariner-release-plan-admission-"*"-$NEW.yaml"
git commit -s -m "Add Submariner v${NEW//-/.} stage/prod RPAs"

echo "✅ Commit 3: Added stage/prod RPAs (2 files)"
echo "   - Copied RPA files (stage, prod)"
echo "   - Updated version strings and ACM version"
echo "   - Verified: intentions, component count (9), product version, tag format"
echo "   - Committed: Add Submariner v${NEW//-/.} stage/prod RPAs"
echo ""

# ━━━ SUMMARY ━━━

echo "━━━ SUMMARY ━━━"
echo ""
echo "✅ All 3 commits completed successfully"
echo "   - 26 overlay files created"
echo "   - 22 auto-generated manifests built"
echo "   - 2 RPA files configured"
echo "   - Total: 49 files added"
echo "   - Branch: $BRANCH (currently checked out)"
echo ""
echo "📋 Review changes:"
echo "   git log --oneline -3                    # View commit messages"
echo "   git diff main...$BRANCH --stat          # View file changes summary"
echo "   git diff main...$BRANCH                 # View full diff"
echo ""
echo "🚀 Next steps:"
echo "   1. Review the commits above"
echo "   2. Push: git push origin $BRANCH"
echo "   3. Create MR in GitLab UI (auto-opens after push)"
echo "   4. After merge, wait for ArgoCD deploy (~5-10 min)"
echo "   5. Verify: oc get releaseplans -n submariner-tenant | grep -E \"stage-${NEW}|prod-${NEW}\""
echo ""
echo "💡 If you need to start over:"
echo "   git checkout main"
echo "   git branch -D $BRANCH"
```

Related Skills

pre-configured-apis-rules

16
from diegosouzapw/awesome-omni-skill

Rules for using pre-configured APIs in the project, using them only if they are required by the project.

bgo

10
from diegosouzapw/awesome-omni-skill

Automates the complete Blender build-go workflow, from building and packaging your extension/add-on to removing old versions, installing, enabling, and launching Blender for quick testing and iteration.

Coding & Development

angular-best-practices

16
from diegosouzapw/awesome-omni-skill

Angular performance optimization and best practices guide. Use when writing, reviewing, or refactoring Angular code for optimal performance, bundle size, and rendering efficiency.

angular-app-setup

16
from diegosouzapw/awesome-omni-skill

Creates an Angular 20 app directly in the current folder with strict defaults, deterministic non-interactive flags, and preflight safety checks. Use when the user asks to create, scaffold, or initialize Angular 20 in place and wants build/test verification.

angreal-patterns

16
from diegosouzapw/awesome-omni-skill

This skill should be used when the user asks to "test angreal tasks", "mock angreal", "document tasks", "angreal best practices", "error handling in tasks", "subprocess patterns", "dry run mode", "verbose mode", or needs guidance on testing patterns, development workflows, documentation strategies, or common implementation patterns for angreal tasks.

android

16
from diegosouzapw/awesome-omni-skill

Build, review, and refactor Android mobile apps (Kotlin) using modern Android patterns. Use for tasks like setting up Gradle modules, Jetpack Compose UI, navigation, ViewModel/state management, networking (Retrofit/OkHttp), persistence (Room/DataStore), DI (Hilt/Koin), testing, performance, release builds, and Play Store readiness.

android-watch-logs

16
from diegosouzapw/awesome-omni-skill

Start real-time log streaming from connected Android device using adb logcat. Shows only app's log messages. Use when monitoring app behavior, debugging, or viewing Android logs.

android-use

16
from diegosouzapw/awesome-omni-skill

Control Android devices via ADB commands - tap, swipe, type, navigate apps

android-supabase

16
from diegosouzapw/awesome-omni-skill

Supabase integration patterns for Android - authentication, database, realtime subscriptions. Use when setting up Supabase SDK, implementing OAuth, querying database, or setting up realtime.

android-stop-app

16
from diegosouzapw/awesome-omni-skill

Stop the Android app running on connected device. Cleanly terminates the app using force-stop. Use when stopping the app for debugging, testing, or cleanup.

android-project

16
from diegosouzapw/awesome-omni-skill

Navigate and analyze Android project structure, modules, and dependencies. Use when exploring project structure, finding related files, analyzing dependencies, or locating code patterns.

android-notification-builder

16
from diegosouzapw/awesome-omni-skill

Эксперт Android notifications. Используй для push notifications, channels и notification patterns.