|
21 | 21 | runs-on: ubuntu-24.04
|
22 | 22 | permissions:
|
23 | 23 | checks: read
|
| 24 | + contents: read |
24 | 25 | outputs:
|
25 | 26 | version: ${{ steps.version.outputs.version }}
|
26 | 27 | steps:
|
|
47 | 48 | echo "Version $GEM_VERSION is not published yet"
|
48 | 49 | fi
|
49 | 50 |
|
50 |
| - # TODO: Verify draft release |
51 |
| - # TODO: Verify milestone |
| 51 | + # Check if there is a draft release for this version |
| 52 | + # API: https://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#list-releases |
| 53 | + - name: Verify draft release |
| 54 | + if: ${{ !inputs.force }} |
| 55 | + continue-on-error: true # TODO: Remove when figuring out why draft release are not returned from API |
| 56 | + env: |
| 57 | + GEM_VERSION: ${{ steps.version.outputs.version }} |
| 58 | + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 |
| 59 | + with: |
| 60 | + script: | |
| 61 | + const { data: releases } = await github.rest.repos.listReleases({ |
| 62 | + owner: context.repo.owner, |
| 63 | + repo: context.repo.repo, |
| 64 | + }); |
| 65 | +
|
| 66 | + console.log(releases); |
| 67 | +
|
| 68 | + const versionTag = `v${process.env.GEM_VERSION}`; |
| 69 | + const draftRelease = releases.find( |
| 70 | + release => release.tag_name === versionTag && release.draft === true |
| 71 | + ); |
| 72 | +
|
| 73 | + if (!draftRelease) { |
| 74 | + core.setFailed(`No draft release found with tag ${versionTag}. Please create a draft release first.`); |
| 75 | + return; |
| 76 | + } |
| 77 | +
|
| 78 | + console.log(`Found draft release with tag ${versionTag} (ID: ${draftRelease.id})`); |
| 79 | +
|
| 80 | + # Check if there is an open milestone for this version |
| 81 | + # API: https://docs.github.com/en/rest/issues/milestones?apiVersion=2022-11-28#list-milestones |
| 82 | + - name: Verify milestone |
| 83 | + if: ${{ !inputs.force }} |
| 84 | + env: |
| 85 | + GEM_VERSION: ${{ steps.version.outputs.version }} |
| 86 | + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 |
| 87 | + with: |
| 88 | + script: | |
| 89 | + const { data: milestones } = await github.rest.issues.listMilestones({ |
| 90 | + owner: context.repo.owner, |
| 91 | + repo: context.repo.repo, |
| 92 | + state: 'open' |
| 93 | + }); |
| 94 | +
|
| 95 | + console.log(milestones); |
| 96 | +
|
| 97 | + const versionMilestone = milestones.find( |
| 98 | + milestone => milestone.title === process.env.GEM_VERSION |
| 99 | + ); |
| 100 | +
|
| 101 | + if (!versionMilestone) { |
| 102 | + core.setFailed(`No open milestone found with title ${process.env.GEM_VERSION}. Please create a milestone first.`); |
| 103 | + return; |
| 104 | + } |
| 105 | +
|
| 106 | + console.log(`Found open milestone ${process.env.GEM_VERSION} (ID: ${versionMilestone.number})`); |
52 | 107 |
|
53 | 108 | # Check if the commit has passed all Github checks
|
54 | 109 | # API: https://docs.github.com/en/rest/checks/runs?apiVersion=2022-11-28#list-check-runs-for-a-git-reference
|
@@ -111,7 +166,7 @@ jobs:
|
111 | 166 | echo "::error::Status check state is '$STATUS'. See: $COMMIT_URL"
|
112 | 167 | exit 1
|
113 | 168 | fi
|
114 |
| - - name: Emergency release notification |
| 169 | + - name: Warning for bypassing checks |
115 | 170 | if: ${{ inputs.force }}
|
116 | 171 | run: |
|
117 | 172 | echo "::warning::Bypassing verification checks"
|
|
0 commit comments