-
Notifications
You must be signed in to change notification settings - Fork 340
80 lines (79 loc) · 3.32 KB
/
Copy pathupdate-issues-on-release.yaml
File metadata and controls
80 lines (79 loc) · 3.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
name: Update issues on release
on:
release:
types: [released]
workflow_dispatch:
inputs:
milestone:
required: true
default: "0.0.0"
jobs:
update_issues:
permissions:
id-token: write # Required for OIDC token federation
issues: write # Required to update issues
runs-on: ubuntu-latest
steps:
- name: Get GitHub Token via dd-octo-sts
id: generate-token
uses: DataDog/dd-octo-sts-action@96a25462dbcb10ebf0bfd6e2ccc917d2ab235b9a # v1.0.4
with:
scope: DataDog/dd-trace-java
policy: self.update-issues-on-release
- name: Get milestone for release
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # 9.0.0
with:
github-token: ${{ steps.generate-token.outputs.token }}
script: |
// Get release milestone name
const milestoneName = "${{github.event_name}}" == "workflow_dispatch" ?
"${{github.event.inputs.milestone}}" :
"${{github.event.release.name}}"
// Get release URL
const releaseURL = "${{github.event_name}}" == "workflow_dispatch" ?
"${{github.event.repository.html_url}}/releases/tag/v${{github.event.release.name}}" :
"${{github.event.release.html_url}}"
core.info(`Notify of release availability: v${milestoneName}`)
// Get release milestone number
const milestoneNumber = await github.paginate(github.rest.issues.listMilestones, {
owner: context.repo.owner,
repo: context.repo.repo,
state: 'all'
}, (response, done) => {
const releaseMilestone = response.data.find(milestone => milestone.title == milestoneName)
if (releaseMilestone) {
done()
return releaseMilestone.number
}
}).then(milestones => milestones.pop())
if (!milestoneNumber) {
core.setFailed(`Failed to find milestone: ${milestoneName}`)
return
}
// Get all release milestone issues
const issues = await github.paginate(github.rest.issues.listForRepo, {
owner: context.repo.owner,
repo: context.repo.repo,
state: 'all',
milestone: milestoneNumber
}, (response) => response.data.filter(issue => !issue["pull_request"]))
// Comment and close issues
for (const issue of issues) {
core.info(issue.state == 'open' ?
`Commenting and closing issue ${issue.number}` :
`Commenting on closed issue ${issue.number}`)
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
body: `:robot: This issue has been addressed in the latest release. Check full details in the [Release Notes](${releaseURL}).`
})
if (issue.state == 'open') {
await github.rest.issues.update({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
state: 'closed'
})
}
}