From 01ff3b086a60f565b332ea9257168aaa1699e279 Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Mon, 16 Mar 2026 10:47:29 -0600 Subject: [PATCH] Add Workflow for Deferring Issues Signed-off-by: Josh Cummings <3627351+jzheaux@users.noreply.github.com> --- .github/workflows/defer-issues.yml | 76 ++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 .github/workflows/defer-issues.yml diff --git a/.github/workflows/defer-issues.yml b/.github/workflows/defer-issues.yml new file mode 100644 index 0000000000..26d874ca92 --- /dev/null +++ b/.github/workflows/defer-issues.yml @@ -0,0 +1,76 @@ +name: Defer Issues + +on: + workflow_dispatch: + +permissions: + contents: read + +jobs: + defer-issues: + name: Defer Issues + runs-on: ubuntu-latest + if: github.repository_owner == 'spring-projects' + permissions: + issues: write + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - name: Compute Version + id: compute-version + uses: spring-io/spring-release-actions/compute-version@0.0.3 + - name: Get Today's Release Version + id: todays-release + uses: spring-io/spring-release-actions/get-todays-release-version@0.0.3 + with: + snapshot-version: ${{ steps.compute-version.outputs.version }} + milestone-repository: ${{ github.repository }} + milestone-token: ${{ secrets.GITHUB_TOKEN }} + - name: Compute Next Version + id: next-version + uses: spring-io/spring-release-actions/compute-next-version@0.0.3 + with: + version: ${{ steps.todays-release.outputs.release-version }} + - name: Schedule Next Milestone + uses: spring-io/spring-release-actions/schedule-milestone@0.0.3 + with: + version: ${{ steps.next-version.outputs.version }} + version-date: ${{ steps.next-version.outputs.version-date }} + repository: ${{ github.repository }} + token: ${{ secrets.GITHUB_TOKEN }} + - name: Move Open Issues to Next Milestone + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CURRENT_MILESTONE: ${{ steps.todays-release.outputs.release-version }} + NEXT_MILESTONE: ${{ steps.next-version.outputs.version }} + run: | + current_milestone_number=$(gh api repos/${{ github.repository }}/milestones \ + --jq ".[] | select(.title == \"$CURRENT_MILESTONE\") | .number") + if [ -z "$current_milestone_number" ]; then + echo "No milestone found for $CURRENT_MILESTONE" + exit 0 + fi + next_milestone_number=$(gh api repos/${{ github.repository }}/milestones \ + --jq ".[] | select(.title == \"$NEXT_MILESTONE\") | .number") + if [ -z "$next_milestone_number" ]; then + echo "No milestone found for $NEXT_MILESTONE" + exit 1 + fi + echo "Moving open issues from milestone '$CURRENT_MILESTONE' (#$current_milestone_number) to '$NEXT_MILESTONE' (#$next_milestone_number)" + page=1 + while true; do + issues=$(gh api "repos/${{ github.repository }}/issues?milestone=$current_milestone_number&state=open&per_page=100&page=$page" \ + --jq '.[].number') + if [ -z "$issues" ]; then + break + fi + for issue in $issues; do + echo "Moving issue/PR #$issue to milestone $NEXT_MILESTONE" + gh api repos/${{ github.repository }}/issues/$issue \ + --method PATCH \ + --field milestone=$next_milestone_number \ + --silent + done + page=$((page + 1)) + done + echo "Done."