Skip to content

Commit 3038ed6

Browse files
committed
Milestone operation
1 parent 18c4bdf commit 3038ed6

File tree

1 file changed

+100
-12
lines changed

1 file changed

+100
-12
lines changed

.github/workflows/publish.yml

Lines changed: 100 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ jobs:
119119
attestations: false # PENDING decision for attestations
120120

121121
github-release:
122-
name: Attach gem to GitHub release and publish
122+
name: Attach gem to Github Release and publish
123123
runs-on: ubuntu-24.04
124124
needs:
125125
- verify-checks
@@ -138,28 +138,26 @@ jobs:
138138
gh release upload "v${GEM_VERSION}" *.gem --clobber
139139
gh release edit "v${GEM_VERSION}" --draft=false
140140
141-
bump-version-pull-request:
141+
update-gem-version:
142142
if: github.ref_name == 'master'
143+
name: Pull request to update gem version
143144
runs-on: ubuntu-24.04
144145
needs:
145146
- verify-checks
146147
- rubygems-release
147148
env:
148-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
149+
GITHUB_TOKEN: ${{ secrets.GHA_PAT }}
149150
GEM_VERSION: ${{ needs.verify-checks.outputs.version }}
150-
151+
outputs:
152+
next_version: ${{ steps.next_version.outputs.next_version }}
151153
permissions:
152154
contents: write
153155
pull-requests: write
154-
155156
steps:
156-
- uses: actions/checkout@v4
157+
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
157158
with:
158159
fetch-depth: 0
159160
- run: bundle install
160-
- run: |
161-
git config user.name "${{ github.actor }}"
162-
git config user.email "${{ github.actor }}@users.noreply.github.com"
163161
- run: |
164162
git checkout -b version-bump-from-${{ github.job }}
165163
- id: next_version
@@ -180,15 +178,107 @@ jobs:
180178
--base master \
181179
--head version-bump-from-${{ github.job }}
182180
183-
document-pull-request:
181+
# https://docs.github.com/en/rest/issues/milestones?apiVersion=2022-11-28
182+
milestone:
184183
if: github.ref_name == 'master'
184+
name: Open/Close Github milestones
185185
runs-on: ubuntu-24.04
186186
needs:
187187
- verify-checks
188188
- rubygems-release
189+
- update-gem-version
189190
env:
190191
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
191192
GEM_VERSION: ${{ needs.verify-checks.outputs.version }}
193+
NEXT_VERSION: ${{ needs.update-gem-version.outputs.next_version }}
194+
permissions:
195+
issues: write
196+
pull-requests: write
197+
steps:
198+
- name: list milestones
199+
id: milestones
200+
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
201+
with:
202+
script: |
203+
// https://octokit.github.io/rest.js/v21/#issues-list-milestones
204+
// https://docs.github.com/en/rest/issues/milestones?apiVersion=2022-11-28#list-milestones
205+
const milestones = await github.rest.issues.listMilestones({
206+
owner: context.repo.owner,
207+
repo: context.repo.repo,
208+
state: 'open'
209+
});
210+
return milestones.data;
211+
212+
- name: Close milestone
213+
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
214+
with:
215+
script: |
216+
const milestones = ${{steps.milestones.outputs.result}}
217+
218+
const milestone = milestones.data.find(
219+
m => m.title === process.env.GEM_VERSION
220+
);
221+
222+
if (!milestone) {
223+
console.log(`No open milestone found with version ${process.env.GEM_VERSION} - skipping close operation`);
224+
return;
225+
}
226+
227+
// https://octokit.github.io/rest.js/v21/#issues-update-milestone
228+
// https://docs.github.com/en/rest/issues/milestones?apiVersion=2022-11-28#update-a-milestone
229+
try {
230+
await github.rest.issues.updateMilestone({
231+
owner: context.repo.owner,
232+
repo: context.repo.repo,
233+
milestone_number: milestone.number,
234+
state: 'closed'
235+
});
236+
console.log(`Successfully closed milestone: ${process.env.GEM_VERSION}`);
237+
} catch (error) {
238+
core.setFailed(`Failed to close milestone: ${error.message}`);
239+
}
240+
241+
- name: Create milestone
242+
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
243+
with:
244+
script: |
245+
const milestones = ${{steps.milestones.outputs.result}}
246+
247+
const milestone = milestones.data.find(
248+
m => m.title === process.env.NEXT_VERSION
249+
);
250+
251+
if (milestone) {
252+
console.log(`Milestone "${process.env.NEXT_VERSION}" already exists - skipping creation`);
253+
return;
254+
}
255+
256+
// https://octokit.github.io/rest.js/v21/#issues-create-milestone
257+
// https://docs.github.com/en/rest/issues/milestones?apiVersion=2022-11-28#create-a-milestone
258+
try {
259+
await github.rest.issues.createMilestone({
260+
owner: context.repo.owner,
261+
repo: context.repo.repo,
262+
title: process.env.NEXT_VERSION
263+
});
264+
console.log(`Successfully created milestone: ${process.env.NEXT_VERSION}`);
265+
} catch (error) {
266+
core.setFailed(`Failed to create milestone: ${error.message}`);
267+
}
268+
269+
update-release-branch:
270+
if: github.ref_name == 'master'
271+
name: Pull request to update 'release' branch
272+
runs-on: ubuntu-24.04
273+
needs:
274+
- verify-checks
275+
- rubygems-release
276+
permissions:
277+
issues: write
278+
pull-requests: write
279+
env:
280+
GITHUB_TOKEN: ${{ secrets.GHA_PAT }}
281+
GEM_VERSION: ${{ needs.verify-checks.outputs.version }}
192282
steps:
193283
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
194284
with:
@@ -202,5 +292,3 @@ jobs:
202292
--title "Update document v${GEM_VERSION}" \
203293
--body "This is an auto-generated PR to update documentation from [here](${JOB_URL}). Please merge (with a merge commit) when ready." \
204294
--label "docs"
205-
206-
# TODO: Close existing milestone and create next milestone

0 commit comments

Comments
 (0)