From 6b4574876e77a1e16607d7ce880552d02dfc3c6c Mon Sep 17 00:00:00 2001 From: Tony Hsu Date: Thu, 6 Feb 2025 16:01:26 +0100 Subject: [PATCH] Milestone operation --- .github/workflows/publish.yml | 85 +++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 3375b58a543..2b9793abd29 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -148,6 +148,9 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GEM_VERSION: ${{ needs.verify-checks.outputs.version }} + outputs: + next_version: ${{ steps.next_version.outputs.next_version }} + permissions: contents: write pull-requests: write @@ -180,6 +183,88 @@ jobs: --base master \ --head version-bump-from-${{ github.job }} + milestone: + if: github.ref_name == 'master' + runs-on: ubuntu-24.04 + needs: + - verify-checks + - rubygems-release + - bump-version-pull-request + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GEM_VERSION: ${{ needs.verify-checks.outputs.version }} + NEXT_VERSION: ${{ needs.bump-version-pull-request.outputs.next_version }} + permissions: + issues: write + repository-projects: write + steps: + - name: list milestones + id: milestones + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + with: + script: | + const milestones = await github.rest.issues.listMilestones({ + owner: context.repo.owner, + repo: context.repo.repo, + state: 'open' + }); + return milestones.data; + + - name: Close milestone + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + with: + script: | + const milestones = ${{steps.milestones.outputs.result}} + + const milestone = milestones.data.find( + m => m.title === process.env.GEM_VERSION + ); + + if (!milestone) { + console.log(`No open milestone found with version ${process.env.GEM_VERSION} - skipping close operation`); + return; + } + + // Close the milestone + try { + await github.rest.issues.updateMilestone({ + owner: context.repo.owner, + repo: context.repo.repo, + milestone_number: milestone.number, + state: 'closed' + }); + console.log(`Successfully closed milestone: ${process.env.GEM_VERSION}`); + } catch (error) { + core.setFailed(`Failed to close milestone: ${error.message}`); + } + + - name: Create milestone + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + with: + script: | + const milestones = ${{steps.milestones.outputs.result}} + + const milestone = milestones.data.find( + m => m.title === process.env.NEXT_VERSION + ); + + if (milestone) { + console.log(`Milestone "${process.env.NEXT_VERSION}" already exists - skipping creation`); + return; + } + + // Create new milestone + try { + await github.rest.issues.createMilestone({ + owner: context.repo.owner, + repo: context.repo.repo, + title: process.env.NEXT_VERSION + }); + console.log(`Successfully created milestone: ${process.env.NEXT_VERSION}`); + } catch (error) { + core.setFailed(`Failed to create milestone: ${error.message}`); + } + document-pull-request: if: github.ref_name == 'master' runs-on: ubuntu-24.04