diff --git a/.github/workflows/release-branch-create.yaml b/.github/workflows/release-branch-create.yaml index 434100ff3f..88d7d53bcf 100644 --- a/.github/workflows/release-branch-create.yaml +++ b/.github/workflows/release-branch-create.yaml @@ -153,8 +153,78 @@ jobs: echo "EOF" } >> $GITHUB_OUTPUT - - name: Post summary + - name: Ensure release labels if: steps.check_version.outputs.is_minor_bump == 'true' + env: + GH_TOKEN: ${{ secrets.PR_GH_TOKEN || secrets.GITHUB_TOKEN }} + run: | + set -euo pipefail + + BRANCH_BASE="${{ steps.check_version.outputs.branch_base }}" + + if [[ -z "$BRANCH_BASE" ]]; then + echo "::error::Branch base not set; unable to manage labels" + exit 1 + fi + + declare -A COLORS=( + [core]="4361ee" + [cloud]="4f6ef5" + ) + + for PREFIX in core cloud; do + LABEL="${PREFIX}/${BRANCH_BASE}" + COLOR="${COLORS[$PREFIX]}" + DESCRIPTION="Backport PRs for ${PREFIX} ${BRANCH_BASE}" + + if gh label view "$LABEL" >/dev/null 2>&1; then + gh label edit "$LABEL" \ + --color "$COLOR" \ + --description "$DESCRIPTION" + echo "🔄 Updated label $LABEL" + else + gh label create "$LABEL" \ + --color "$COLOR" \ + --description "$DESCRIPTION" + echo "✨ Created label $LABEL" + fi + done + + MIN_LABELS_TO_KEEP=3 + MAX_LABELS_TO_FETCH=200 + + for PREFIX in core cloud; do + mapfile -t LABELS < <( + gh label list \ + --json name \ + --limit "$MAX_LABELS_TO_FETCH" \ + --jq '.[].name' | + grep -E "^${PREFIX}/[0-9]+\.[0-9]+$" | + sort -t/ -k2,2V + ) + + TOTAL=${#LABELS[@]} + + if (( TOTAL <= MIN_LABELS_TO_KEEP )); then + echo "â„šī¸ Nothing to prune for $PREFIX labels" + continue + fi + + REMOVE_COUNT=$((TOTAL - MIN_LABELS_TO_KEEP)) + + if (( REMOVE_COUNT > 1 )); then + REMOVE_COUNT=1 + fi + + for ((i=0; i