Skip to content

Commit

Permalink
CI: Assign milestone on merged PRs (OSGeo#4414)
Browse files Browse the repository at this point in the history
* CI: Create a workflow to assign milestones

* Add GH_TOKEN for gh cli

* CI: Add GH_REPO for gh cli

* CI: View PR from gh cli using html_url

* CI: Download and parse version file

* CI: Show version file

* CI: Download and parse version file using a pipe

* Show version file output

Clean up

* Pipe version file env to head

* Rename variables to milestone and title

* Edit PR with milestone

* Get milestone from gh cli

* Add comment on why API call is used for getting milestone

* Show if the PR has a milestone set or not

* Do not run steps if a milestone is already set

* Add pull_request_target closed trigger

* Add ref as url parameter

* Remove debugging steps

* CI: Handle RC followed by numbers in sed pattern replacement
  • Loading branch information
echoix committed Dec 18, 2024
1 parent fe3b107 commit f8f7f96
Showing 1 changed file with 70 additions and 0 deletions.
70 changes: 70 additions & 0 deletions .github/workflows/milestones.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
---
name: Assign Milestone

on:
pull_request_target:
types: [closed]

jobs:
assign-milestone:
runs-on: ubuntu-latest
if: github.event.pull_request.merged
steps:
# Retreiving the current milestoone from API instead of github context,
# so up-to-date information is used when running after being queued or for reruns
# Otherwise, the information should be available using
# ${{ github.event.pull_request.milestone.title }}
- name: Get current milestone title
id: current-milestone
run: |
echo "milestone<<EOF" >> "${GITHUB_OUTPUT}"
gh pr view ${{ github.event.pull_request.html_url }} --json milestone \
--jq .milestone.title >> "${GITHUB_OUTPUT}"
echo 'EOF' >> "${GITHUB_OUTPUT}"
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
- name: PR already has a milestone
run: echo "PR already has a milestone"
if: ${{ steps.current-milestone.outputs.milestone }}
- name: PR does not have a milestone
run: echo "PR does not have a milestone"
if: ${{ !steps.current-milestone.outputs.milestone }}
- name: Get VERSION file
if: ${{ !steps.current-milestone.outputs.milestone }}
id: version-file
run: |
echo "version<<EOF" >> "${GITHUB_OUTPUT}"
gh api \
-H "Accept: application/vnd.github.raw" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"/repos/{owner}/{repo}/contents/include/VERSION?ref=${{ github.sha }}" >> "${GITHUB_OUTPUT}"
echo "EOF" >> "${GITHUB_OUTPUT}"
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
- name: Show version file
if: ${{ !steps.current-milestone.outputs.milestone }}
run: echo "${VERSIONFILE}"
env:
VERSIONFILE: ${{ steps.version-file.outputs.version }}
- name: Get milestone title from VERSION file
if: ${{ !steps.current-milestone.outputs.milestone }}
id: milestone
run: |
version=$(echo "$VERSIONFILE" | head -n 3 | xargs | sed 's/ /./g; s/\(RC[0-9]*\|dev\)//g')
echo "title=$version" >> "${GITHUB_OUTPUT}"
env:
VERSIONFILE: ${{ steps.version-file.outputs.version }}
- name: Show milestone title
if: ${{ !steps.current-milestone.outputs.milestone }}
run: echo "${MILESTONE}"
env:
MILESTONE: ${{ steps.milestone.outputs.title }}
- name: Set PR milestone
if: ${{ !steps.current-milestone.outputs.milestone }}
run: gh pr edit ${{ github.event.pull_request.html_url }} --milestone "${MILESTONE}"
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
MILESTONE: ${{ steps.milestone.outputs.title }}

0 comments on commit f8f7f96

Please sign in to comment.