Skip to content

Commit 2e76af6

Browse files
authored
ci: add job to set the milestone of linked issues to match the milestone of the PR [skip ci] (ibis-project#9770)
1 parent 3f01075 commit 2e76af6

File tree

3 files changed

+61
-0
lines changed

3 files changed

+61
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
name: Set milestone on issues closed by PR
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
8+
concurrency:
9+
group: ${{ github.repository }}-${{ github.head_ref || github.sha }}-${{ github.workflow }}
10+
11+
permissions:
12+
issues: write
13+
pull-requests: read
14+
15+
jobs:
16+
set-milestone:
17+
if: github.repository == 'ibis-project/ibis'
18+
runs-on: ubuntu-latest
19+
steps:
20+
- uses: actions/checkout@v4
21+
- name: set milestone
22+
env:
23+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
24+
run: ./ci/set-milestone-on-issue.sh "${GITHUB_SHA}"

ci/linked-issues.gql

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
query ($owner: String!, $repo: String!, $pr: Int!) {
2+
repository(owner: $owner, name: $repo) {
3+
pullRequest(number: $pr) {
4+
closingIssuesReferences(first: 100) {
5+
nodes {
6+
number
7+
}
8+
}
9+
}
10+
}
11+
}

ci/set-milestone-on-issue.sh

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#!/usr/bin/env bash
2+
3+
set -euo pipefail
4+
5+
top="$(dirname "$(readlink -f "$0")")"
6+
7+
# find all pull requests associated with commit
8+
linked_issues_query='.data.repository.pullRequest.closingIssuesReferences.nodes[].number'
9+
10+
gh pr list --search "$1" --state merged --json number --jq '.[].number' |
11+
sed '/^$/d' |
12+
while read -r pr; do
13+
milestone="$(gh pr view "${pr}" --json milestone --jq '.milestone.title')"
14+
15+
if [ -n "${milestone}" ]; then
16+
# find all issues associated with said pull requests
17+
# taken from https://github.com/cli/cli/discussions/7097#discussioncomment-5229031
18+
readarray -t issues < <(
19+
gh api graphql -F owner=ibis-project -F repo=ibis -F pr="${pr}" -F query="@${top}/linked-issues.gql" \
20+
--jq "${linked_issues_query}" | sed '/^$/d')
21+
22+
if [ "${#issues[@]}" -gt 0 ]; then
23+
gh issue edit "${issues[@]}" --milestone "${milestone}"
24+
fi
25+
fi
26+
done

0 commit comments

Comments
 (0)