Skip to content

[PRA-257] Automatic promotion bundle #8

[PRA-257] Automatic promotion bundle

[PRA-257] Automatic promotion bundle #8

# Copyright 2026 Canonical Ltd.
# See LICENSE file for licensing details.
name: Automatic promotion of bundle revisions
on:
pull_request:
workflow_dispatch:
inputs:
from-risk:
description: "Risk level to fetch revisions from"
required: true
default: edge
type: choice
options:
- edge
- beta
- candidate
- stable
to-risk:
description: "Risk level to promote revisions to"
required: true
default: candidate
type: choice
options:
- edge
- beta
- candidate
- stable
gate:
description: "Workflow to gate promotion on"
required: true
default: ci-tests-single-kyuubi
type: choice
options:
- ci-tests-single-kyuubi
- ci-tests-minimal
dry-run:
description: "Whether to run promotion in dry-run mode"
required: true
default: true
type: boolean
jobs:
generate-revisions:
name: Generate charm revisions
uses: ./.github/workflows/generate-charm-revisions.yaml
secrets: inherit
with:
risk: ${{ inputs.from-risk || 'edge' }}
tests-single-kyuubi:
name: Run CI tests (single kyuubi)
needs: generate-revisions
if: github.event_name == 'pull_request' || github.event.inputs.gate == 'ci-tests-single-kyuubi'
uses: ./.github/workflows/ci-tests-single-kyuubi.yaml
secrets: inherit
with:
tfvars-file: ${{ needs.generate-revisions.outputs.tfvars-artifact-name }}
tests-minimal:
name: Run CI tests (minimal)
needs: generate-revisions
if: github.event.inputs.gate == 'ci-tests-minimal'
uses: ./.github/workflows/ci-tests-minimal.yaml
secrets: inherit
with:
tfvars-file: ${{ needs.generate-revisions.outputs.tfvars-artifact-name }}
promotion:
name: Promotion
needs:
- generate-revisions
- tests-single-kyuubi
- tests-minimal
if: ${{ always() && (needs.tests-single-kyuubi.result == 'success' || needs.tests-minimal.result == 'success') }}
uses: ./.github/workflows/promote-charm-revisions.yaml
secrets: inherit
with:
tfvars-artifact-name: ${{ needs.generate-revisions.outputs.tfvars-artifact-name }}
risk: ${{ inputs.to-risk || 'beta'}}
dry-run: ${{ inputs.dry-run || true }}