66# Triggers:
77# - pull_request: when a PR targets main
88# - push: when code is pushed to main
9+ # - milestone: when milestone metadata changes
910#
1011# Notes:
1112# Builds against Java 17, 21, and 25.
@@ -15,6 +16,8 @@ run-name: Build - ${{ github.event_name }}
1516
1617on :
1718 workflow_dispatch :
19+ milestone :
20+ types : [created, edited, closed, deleted]
1821 pull_request :
1922 branches :
2023 - main
3841
3942permissions :
4043 contents : read
44+ issues : read
4145 pages : write
4246 id-token : write
4347
5458 steps :
5559 - name : Checkout repository
5660 uses : actions/checkout@v7
61+ with :
62+ ref : ${{ github.event_name == 'milestone' && github.event.repository.default_branch || github.ref }}
5763
5864 - name : Setup Java ${{ matrix.java }}
5965 uses : actions/setup-java@v5
@@ -76,16 +82,38 @@ jobs:
7682 if : ${{ matrix.java == 17 }}
7783 run : mvn -B -pl sdk -am javadoc:javadoc
7884
85+ - name : Generate milestone badge
86+ if : ${{ matrix.java == 17 }}
87+ env :
88+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
89+ run : |
90+ set -euo pipefail
91+
92+ TITLE=$(gh api repos/${{ github.repository }}/milestones \
93+ --jq '[.[] | select(.state == "open" and .due_on != null)] | sort_by(.due_on) | .[0].title // empty')
94+
95+ if [ -z "$TITLE" ]; then
96+ URL="https://img.shields.io/badge/Next%20Milestone-No%20milestone-lightgrey"
97+ else
98+ ENCODED=$(echo -n "$TITLE" | jq -sRr @uri | sed 's/-/--/g')
99+ URL="https://img.shields.io/badge/Next%20Milestone-${ENCODED}-blue"
100+ fi
101+
102+ mkdir -p milestone
103+ curl -sfL "$URL" -o milestone/badge.svg
104+ echo "Badge generated for: ${TITLE:-No milestone}"
105+
79106 - name : Configure GitHub Pages
80107 if : ${{ matrix.java == 17 }}
81108 uses : actions/configure-pages@v5
82109
83110 - name : Prepare GitHub Pages artifact
84111 if : ${{ matrix.java == 17 }}
85112 run : |
86- mkdir -p github-pages/coverage github-pages/javadoc
113+ mkdir -p github-pages/coverage github-pages/javadoc github-pages/milestone
87114 cp -R coverage-report/target/site/jacoco-aggregate/. github-pages/coverage
88115 cp -R sdk/target/reports/apidocs/. github-pages/javadoc
116+ cp -R milestone/. github-pages/milestone
89117 touch github-pages/.nojekyll
90118
91119 - name : Upload GitHub Pages artifact
95123 path : github-pages
96124
97125 deploy-pages :
98- if : ${{ github.ref == 'refs/heads/main' }}
126+ if : ${{ github.event_name == 'milestone' || github. ref == 'refs/heads/main' }}
99127 needs : build
100128 runs-on : ubuntu-latest
101129 environment :
0 commit comments