Skip to content

Commit 86d114f

Browse files
committed
Adds automatically merged PRs to next milestone
1 parent 9ebc339 commit 86d114f

File tree

4 files changed

+115
-5
lines changed

4 files changed

+115
-5
lines changed

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@
44
Any description you feel is relevant and gives more background to this PR, if necessary.
55
-->
66

7-
### Readiness checklist
8-
- [ ] (only for Members) Changelog has been added to the release document.
9-
- [ ] Tests added for this feature/bug.
7+
<!-- Fixes #{issue} -->
8+
<!-- Documented in #{doc pr} -->
109

1110
### Reviewer checklist
11+
- [ ] Test coverage seems ok.
1212
- [ ] Appropriate labels assigned.
13-
- [ ] Milestone is set.
14-
- [ ] Changelog has been added to the release document. For community contributors the reviewer is in charge of this task.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
name: Auto add PR to vNext milestone
2+
3+
on:
4+
pull_request:
5+
branches:
6+
- master
7+
- main
8+
types: [closed]
9+
10+
jobs:
11+
add_to_milestone:
12+
if: github.event.pull_request.merged == true && startsWith(github.event.pull_request.title, '[Version Bump]') == false
13+
runs-on: ubuntu-latest
14+
steps:
15+
- name: Checkout
16+
uses: actions/checkout@v2
17+
18+
- uses: actions/setup-dotnet@v1
19+
with:
20+
dotnet-version: '7.0.101'
21+
22+
- name: "Assign to vNext Milestone"
23+
run: ./tracer/build.sh AssignPullRequestToMilestone
24+
env:
25+
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
26+
PullRequestNumber: "${{ github.event.pull_request.number }}"

github-actions-helpers/Build.Github.cs

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,39 @@ partial class Build
4141

4242
const string GitHubRepositoryOwner = "DataDog";
4343

44+
Target AssignPullRequestToMilestone => _ => _
45+
.Unlisted()
46+
.Requires(() => GitHubRepositoryName)
47+
.Requires(() => GitHubToken)
48+
.Requires(() => PullRequestNumber)
49+
.Executes(async() =>
50+
{
51+
var client = GetGitHubClient();
52+
53+
var currentMilestone = (await client.PullRequest.Get(
54+
owner: GitHubRepositoryOwner,
55+
name: GitHubRepositoryName,
56+
number: PullRequestNumber.Value))
57+
.Milestone;
58+
59+
if (currentMilestone != null && currentMilestone.Number != 0) {
60+
Console.WriteLine($"Pull request {PullRequestNumber} already has a milesotone: {currentMilestone.Title} ({currentMilestone.Number})");
61+
return;
62+
}
63+
64+
var milestone = await GetOrCreateNextMilestone(client);
65+
66+
Console.WriteLine($"Assigning PR {PullRequestNumber} to {milestone.Title} ({milestone.Number})");
67+
68+
await client.Issue.Update(
69+
owner: GitHubRepositoryOwner,
70+
name: GitHubRepositoryName,
71+
number: PullRequestNumber.Value,
72+
new IssueUpdate { Milestone = milestone.Number });
73+
74+
Console.WriteLine($"PR assigned");
75+
});
76+
4477
Target SummaryOfSnapshotChanges => _ => _
4578
.Unlisted()
4679
.Requires(() => GitHubRepositoryName)
@@ -321,6 +354,56 @@ LabbelerConfiguration GetLabellerConfiguration()
321354
}
322355
});
323356

357+
private async Task<Milestone> GetOrCreateNextMilestone(GitHubClient gitHubClient)
358+
{
359+
var milestoneName = CalculateNextVersion(Version);
360+
var milestone = await GetMilestone(gitHubClient, milestoneName);
361+
if (milestone is not null)
362+
{
363+
Console.WriteLine($"Found {milestoneName} milestone: {milestone.Number}");
364+
return milestone;
365+
}
366+
367+
Console.WriteLine($"{milestoneName} milestone not found, creating");
368+
369+
var milestoneRequest = new NewMilestone(milestoneName);
370+
milestone = await gitHubClient.Issue.Milestone.Create(
371+
owner: GitHubRepositoryOwner,
372+
name: GitHubRepositoryName,
373+
milestoneRequest);
374+
Console.WriteLine($"Created {milestoneName} milestone: {milestone.Number}");
375+
return milestone;
376+
}
377+
378+
private async Task<Milestone> GetMilestone(GitHubClient gitHubClient, string milestoneName)
379+
{
380+
Console.WriteLine("Fetching milestones...");
381+
var allOpenMilestones = await gitHubClient.Issue.Milestone.GetAllForRepository(
382+
owner: GitHubRepositoryOwner,
383+
name: GitHubRepositoryName,
384+
new MilestoneRequest { State = ItemStateFilter.Open });
385+
386+
return allOpenMilestones.FirstOrDefault(x => x.Title == milestoneName);
387+
}
388+
389+
string CalculateNextVersion(string currentVersion)
390+
{
391+
Console.WriteLine("Current version is " + currentVersion);
392+
var parsedVersion = new Version(currentVersion);
393+
var major = parsedVersion.Major;
394+
int minor;
395+
int patch;
396+
397+
// always do minor version bump on 2.x branch
398+
minor = parsedVersion.Minor + 1;
399+
patch = 0;
400+
401+
var nextVersion = $"{major}.{minor}.{patch}";
402+
403+
Console.WriteLine("Next version calculated as " + nextVersion);
404+
return nextVersion;
405+
}
406+
324407
GitHubClient GetGitHubClient() =>
325408
new(new ProductHeaderValue("nuke-ci-client"))
326409
{

github-actions-helpers/Build.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ partial class Build : NukeBuild
2424
[Parameter("Configuration to build - Default is 'Debug' (local) or 'Release' (server)")]
2525
readonly Configuration Configuration = IsLocalBuild ? Configuration.Debug : Configuration.Release;
2626

27+
[Parameter("The current version of the source and build")]
28+
readonly string Version = "0.94.0";
29+
2730
Target Clean => _ => _
2831
.Before(Restore)
2932
.Executes(() =>

0 commit comments

Comments
 (0)