Skip to content

Commit 4fa7cab

Browse files
committed
Verify draft and milestone
1 parent 32a78b8 commit 4fa7cab

File tree

1 file changed

+58
-3
lines changed

1 file changed

+58
-3
lines changed

.github/workflows/publish.yml

Lines changed: 58 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ jobs:
2121
runs-on: ubuntu-24.04
2222
permissions:
2323
checks: read
24+
contents: read
2425
outputs:
2526
version: ${{ steps.version.outputs.version }}
2627
steps:
@@ -47,8 +48,62 @@ jobs:
4748
echo "Version $GEM_VERSION is not published yet"
4849
fi
4950
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})`);
52107
53108
# Check if the commit has passed all Github checks
54109
# 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:
111166
echo "::error::Status check state is '$STATUS'. See: $COMMIT_URL"
112167
exit 1
113168
fi
114-
- name: Emergency release notification
169+
- name: Warning for bypassing checks
115170
if: ${{ inputs.force }}
116171
run: |
117172
echo "::warning::Bypassing verification checks"

0 commit comments

Comments
 (0)