diff --git a/.github/workflows/milestone.yml b/.github/workflows/milestone.yml new file mode 100644 index 00000000000..969592c1500 --- /dev/null +++ b/.github/workflows/milestone.yml @@ -0,0 +1,70 @@ +name: Assign Milestone + +on: + pull_request: + types: [opened, reopened, edited] + +jobs: + assign-milestone: + runs-on: ubuntu-latest + permissions: + pull-requests: write + # Following needed because PRs are technically under issues + issues: write + steps: + - name: Assign milestone based on target branch + uses: actions/github-script@v7 + with: + script: | + const pr = context.payload.pull_request; + const baseBranch = pr.base.ref; + + // Skip if targeting master + if (baseBranch === 'master') { + console.log('PR targets master, skipping milestone assignment'); + return; + } + + // Parse v*-dev branch pattern + const match = baseBranch.match(/^v(\d+\.\d+)-dev$/); + if (!match) { + console.log(`Branch ${baseBranch} does not match v*-dev pattern`); + return; + } + + const milestoneName = `v${match[1]}.0`; + + // Skip if PR already has the correct milestone + if (pr.milestone && pr.milestone.title === milestoneName) { + console.log(`PR already has correct milestone: ${pr.milestone.title}`); + return; + } + + console.log(`Looking for milestone: ${milestoneName}`); + + // Find the milestone + const milestones = await github.rest.issues.listMilestones({ + owner: context.repo.owner, + repo: context.repo.repo, + state: 'open' + }); + + const milestone = milestones.data.find(m => m.title === milestoneName); + + if (!milestone) { + core.warning(`Milestone ${milestoneName} not found. Create it to enable automatic assignment.`); + return; + } + + // Assign or update the milestone + if (pr.milestone) { + console.log(`Updating milestone from ${pr.milestone.title} to ${milestoneName}`); + } + await github.rest.issues.update({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: pr.number, + milestone: milestone.number + }); + + console.log(`Assigned milestone ${milestoneName} to PR #${pr.number}`); diff --git a/README.md b/README.md index 62be4cc3d0c..c5cd9922e4a 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +test + :