Skip to content

Commit df3688e

Browse files
committed
Adds automatically merged PRs to next milestone
1 parent 73c5afd commit df3688e

File tree

4 files changed

+104
-5
lines changed

4 files changed

+104
-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: '8.0.100-rc.2.23502.2'
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: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,28 @@ 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 milestone = await GetOrCreateNextMilestone(client);
54+
55+
Console.WriteLine($"Assigning PR {PullRequestNumber} to {milestone.Title} ({milestone.Number})");
56+
57+
await client.Issue.Update(
58+
owner: GitHubRepositoryOwner,
59+
name: GitHubRepositoryName,
60+
number: PullRequestNumber.Value,
61+
new IssueUpdate { Milestone = milestone.Number });
62+
63+
Console.WriteLine($"PR assigned");
64+
});
65+
4466
Target SummaryOfSnapshotChanges => _ => _
4567
.Unlisted()
4668
.Requires(() => GitHubRepositoryName)
@@ -321,6 +343,56 @@ LabbelerConfiguration GetLabellerConfiguration()
321343
}
322344
});
323345

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

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.93.1";
29+
2730
Target Clean => _ => _
2831
.Before(Restore)
2932
.Executes(() =>

0 commit comments

Comments
 (0)