From 5ef3e324f8319e2d16bbe250cc958d3d0dec10fe Mon Sep 17 00:00:00 2001 From: kaitranntt Date: Fri, 12 Dec 2025 05:57:58 -0500 Subject: [PATCH] ci(release): add issue labeling for dev releases - Add label-pending-release.yml workflow to tag issues when PR created - Update dev-release.yml to comment and label issues after npm publish - Labels: pending-release (yellow), released-dev (blue) - Auto-removes pending-release when released-dev is applied --- .github/workflows/dev-release.yml | 58 +++++++++++++++++++++ .github/workflows/label-pending-release.yml | 40 ++++++++++++++ 2 files changed, 98 insertions(+) create mode 100644 .github/workflows/label-pending-release.yml diff --git a/.github/workflows/dev-release.yml b/.github/workflows/dev-release.yml index b1967ad1..761a6f79 100644 --- a/.github/workflows/dev-release.yml +++ b/.github/workflows/dev-release.yml @@ -12,6 +12,7 @@ jobs: permissions: contents: write + issues: write steps: - name: Checkout @@ -96,6 +97,63 @@ jobs: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} run: npm publish --tag dev + - name: Tag resolved issues + env: + GH_TOKEN: ${{ secrets.PAT_TOKEN }} + run: | + NEW_VERSION="${{ steps.bump.outputs.new }}" + + # Find commits since last dev release (look for version bump commits) + LAST_RELEASE_COMMIT=$(git log --oneline --grep="chore(release):" -n 2 | tail -1 | cut -d' ' -f1) + + if [[ -n "$LAST_RELEASE_COMMIT" ]]; then + RANGE="${LAST_RELEASE_COMMIT}..HEAD" + else + RANGE="HEAD~20..HEAD" + fi + + echo "Checking commits in range: $RANGE" + + # Extract issue numbers from commits + ISSUES=$(git log $RANGE --pretty=format:"%s %b" | \ + grep -oE "(Fixes|Closes|Resolves|Refs?) #[0-9]+" | \ + grep -oE "#[0-9]+" | sort -u || true) + + if [[ -z "$ISSUES" ]]; then + echo "No linked issues found in commits" + exit 0 + fi + + # Create labels if they don't exist + gh label create "released-dev" \ + --color "1d76db" \ + --description "Fix available in @dev npm channel" \ + --repo ${{ github.repository }} 2>/dev/null || true + + for ISSUE in $ISSUES; do + NUM=${ISSUE#\#} + echo "Tagging issue #$NUM as released-dev" + + # Add comment + gh issue comment $NUM --body ":test_tube: This fix is available for testing in version \`$NEW_VERSION\` + +Install with: +\`\`\`bash +npm install @kaitranntt/ccs@dev +\`\`\` + +Please test and confirm the fix works as expected." --repo ${{ github.repository }} || true + + # Add released-dev label, remove pending-release if present + gh issue edit $NUM \ + --add-label "released-dev" \ + --remove-label "pending-release" \ + --repo ${{ github.repository }} 2>/dev/null || \ + gh issue edit $NUM \ + --add-label "released-dev" \ + --repo ${{ github.repository }} || true + done + - name: Commit version bump run: | git config user.name "github-actions[bot]" diff --git a/.github/workflows/label-pending-release.yml b/.github/workflows/label-pending-release.yml new file mode 100644 index 00000000..b427cd5a --- /dev/null +++ b/.github/workflows/label-pending-release.yml @@ -0,0 +1,40 @@ +name: Label Pending Release + +on: + pull_request: + types: [opened, reopened] + branches: [dev] + +jobs: + label: + runs-on: ubuntu-latest + permissions: + issues: write + + steps: + - name: Label linked issues as pending-release + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + # Extract issue numbers from PR title and body + PR_TEXT="${{ github.event.pull_request.title }} ${{ github.event.pull_request.body }}" + ISSUES=$(echo "$PR_TEXT" | grep -oE "(Fixes|Closes|Resolves|Refs?) #[0-9]+" | grep -oE "#[0-9]+" | sort -u || true) + + if [[ -z "$ISSUES" ]]; then + echo "No linked issues found in PR" + exit 0 + fi + + for ISSUE in $ISSUES; do + NUM=${ISSUE#\#} + echo "Labeling issue #$NUM as pending-release" + + # Create label if doesn't exist + gh label create "pending-release" \ + --color "fbca04" \ + --description "Fix in review, awaiting merge" \ + --repo ${{ github.repository }} 2>/dev/null || true + + # Add label to issue + gh issue edit $NUM --add-label "pending-release" --repo ${{ github.repository }} || true + done