From 86d114fefddac4cac204e6c73f8db0fe0a7b047e Mon Sep 17 00:00:00 2001 From: Pierre Bonet Date: Sat, 11 Nov 2023 08:29:44 +0100 Subject: [PATCH 1/3] Adds automatically merged PRs to next milestone --- .github/PULL_REQUEST_TEMPLATE.md | 8 +- .github/workflows/auto_add_pr_to_miletone.yml | 26 ++++++ github-actions-helpers/Build.Github.cs | 83 +++++++++++++++++++ github-actions-helpers/Build.cs | 3 + 4 files changed, 115 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/auto_add_pr_to_miletone.yml diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 52a95cd382..c627550f34 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -4,11 +4,9 @@ Any description you feel is relevant and gives more background to this PR, if necessary. --> -### Readiness checklist -- [ ] (only for Members) Changelog has been added to the release document. -- [ ] Tests added for this feature/bug. + + ### Reviewer checklist +- [ ] Test coverage seems ok. - [ ] Appropriate labels assigned. -- [ ] Milestone is set. -- [ ] Changelog has been added to the release document. For community contributors the reviewer is in charge of this task. diff --git a/.github/workflows/auto_add_pr_to_miletone.yml b/.github/workflows/auto_add_pr_to_miletone.yml new file mode 100644 index 0000000000..2c081ad0a0 --- /dev/null +++ b/.github/workflows/auto_add_pr_to_miletone.yml @@ -0,0 +1,26 @@ +name: Auto add PR to vNext milestone + +on: + pull_request: + branches: + - master + - main + types: [closed] + +jobs: + add_to_milestone: + if: github.event.pull_request.merged == true && startsWith(github.event.pull_request.title, '[Version Bump]') == false + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - uses: actions/setup-dotnet@v1 + with: + dotnet-version: '7.0.101' + + - name: "Assign to vNext Milestone" + run: ./tracer/build.sh AssignPullRequestToMilestone + env: + GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" + PullRequestNumber: "${{ github.event.pull_request.number }}" diff --git a/github-actions-helpers/Build.Github.cs b/github-actions-helpers/Build.Github.cs index 42bae452ef..7a36b072b5 100644 --- a/github-actions-helpers/Build.Github.cs +++ b/github-actions-helpers/Build.Github.cs @@ -41,6 +41,39 @@ partial class Build const string GitHubRepositoryOwner = "DataDog"; + Target AssignPullRequestToMilestone => _ => _ + .Unlisted() + .Requires(() => GitHubRepositoryName) + .Requires(() => GitHubToken) + .Requires(() => PullRequestNumber) + .Executes(async() => + { + var client = GetGitHubClient(); + + var currentMilestone = (await client.PullRequest.Get( + owner: GitHubRepositoryOwner, + name: GitHubRepositoryName, + number: PullRequestNumber.Value)) + .Milestone; + + if (currentMilestone != null && currentMilestone.Number != 0) { + Console.WriteLine($"Pull request {PullRequestNumber} already has a milesotone: {currentMilestone.Title} ({currentMilestone.Number})"); + return; + } + + var milestone = await GetOrCreateNextMilestone(client); + + Console.WriteLine($"Assigning PR {PullRequestNumber} to {milestone.Title} ({milestone.Number})"); + + await client.Issue.Update( + owner: GitHubRepositoryOwner, + name: GitHubRepositoryName, + number: PullRequestNumber.Value, + new IssueUpdate { Milestone = milestone.Number }); + + Console.WriteLine($"PR assigned"); + }); + Target SummaryOfSnapshotChanges => _ => _ .Unlisted() .Requires(() => GitHubRepositoryName) @@ -321,6 +354,56 @@ LabbelerConfiguration GetLabellerConfiguration() } }); + private async Task GetOrCreateNextMilestone(GitHubClient gitHubClient) + { + var milestoneName = CalculateNextVersion(Version); + var milestone = await GetMilestone(gitHubClient, milestoneName); + if (milestone is not null) + { + Console.WriteLine($"Found {milestoneName} milestone: {milestone.Number}"); + return milestone; + } + + Console.WriteLine($"{milestoneName} milestone not found, creating"); + + var milestoneRequest = new NewMilestone(milestoneName); + milestone = await gitHubClient.Issue.Milestone.Create( + owner: GitHubRepositoryOwner, + name: GitHubRepositoryName, + milestoneRequest); + Console.WriteLine($"Created {milestoneName} milestone: {milestone.Number}"); + return milestone; + } + + private async Task GetMilestone(GitHubClient gitHubClient, string milestoneName) + { + Console.WriteLine("Fetching milestones..."); + var allOpenMilestones = await gitHubClient.Issue.Milestone.GetAllForRepository( + owner: GitHubRepositoryOwner, + name: GitHubRepositoryName, + new MilestoneRequest { State = ItemStateFilter.Open }); + + return allOpenMilestones.FirstOrDefault(x => x.Title == milestoneName); + } + + string CalculateNextVersion(string currentVersion) + { + Console.WriteLine("Current version is " + currentVersion); + var parsedVersion = new Version(currentVersion); + var major = parsedVersion.Major; + int minor; + int patch; + + // always do minor version bump on 2.x branch + minor = parsedVersion.Minor + 1; + patch = 0; + + var nextVersion = $"{major}.{minor}.{patch}"; + + Console.WriteLine("Next version calculated as " + nextVersion); + return nextVersion; + } + GitHubClient GetGitHubClient() => new(new ProductHeaderValue("nuke-ci-client")) { diff --git a/github-actions-helpers/Build.cs b/github-actions-helpers/Build.cs index fd9fc70cec..c00c7432e6 100644 --- a/github-actions-helpers/Build.cs +++ b/github-actions-helpers/Build.cs @@ -24,6 +24,9 @@ partial class Build : NukeBuild [Parameter("Configuration to build - Default is 'Debug' (local) or 'Release' (server)")] readonly Configuration Configuration = IsLocalBuild ? Configuration.Debug : Configuration.Release; + [Parameter("The current version of the source and build")] + readonly string Version = "0.94.0"; + Target Clean => _ => _ .Before(Restore) .Executes(() => From 55674d889e1f344d5ed4282a0ad20436a9d771a9 Mon Sep 17 00:00:00 2001 From: Pierre Bonet Date: Thu, 30 Nov 2023 22:47:17 +0100 Subject: [PATCH 2/3] add nuke folder to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 983529712e..4b726c75ae 100644 --- a/.gitignore +++ b/.gitignore @@ -51,3 +51,4 @@ tmp/opcache* docker-compose.override.yml tests/Sapi/Roadrunner/rr-* github-actions-helpers/_build.csproj.DotSettings +.nuke From 3891c38b2da6c08365b33e70e6250106825b2f81 Mon Sep 17 00:00:00 2001 From: Pierre Bonet Date: Thu, 30 Nov 2023 22:53:45 +0100 Subject: [PATCH 3/3] fix some regexes for labeller --- .github/labeller.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/labeller.yml b/.github/labeller.yml index d24c80a7a9..10f89df8c9 100644 --- a/.github/labeller.yml +++ b/.github/labeller.yml @@ -6,10 +6,10 @@ labels: allFilesIn: "(appsec\/.*|docker-compose.yml|.*\/.circleci\/.*)" - name: "profiling" - title: "^*(profiler)" + title: "^.*\\(profiler\\)" - name: "profiling" - title: "^*(profiling)" + title: "^.*\\(profiling\\)" - name: "profiling" allFilesIn: "(profiling\/.*|docker-compose.yml|.*\/.circleci\/.*)"