From 006019b87cab11f6234d05f2c34372daf3c7075d Mon Sep 17 00:00:00 2001 From: Alexander Holstrup <117829001+aholstrup1@users.noreply.github.com> Date: Tue, 10 Dec 2024 14:35:43 +0100 Subject: [PATCH] Add support for including a suffix in the Commit message/PR message (#1351) Add support for including a suffix in the Commit message/PR message This is useful if you have e.g. the Azure Boards integration set up in your repository. Then you can add "AB#" to your commit/PR messages. Currently in BCApps we require a workitem so we have to manually edit the PRs for "Update AL-Go System Files" so it includes the workitem. See for example: https://github.com/microsoft/BCApps/pull/2455 Also related to #1352 --------- Co-authored-by: Maria Zhelezova <43066499+mazhelez@users.noreply.github.com> --- Actions/AL-Go-Helper.ps1 | 32 +++++++++++++++++++++++++++++++- RELEASENOTES.md | 4 ++++ Scenarios/settings.md | 1 + 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/Actions/AL-Go-Helper.ps1 b/Actions/AL-Go-Helper.ps1 index 141081778..cc6f15907 100644 --- a/Actions/AL-Go-Helper.ps1 +++ b/Actions/AL-Go-Helper.ps1 @@ -661,6 +661,11 @@ function ReadSettings { "defaultReleaseMD" = "## Release reference documentation\n\nThis is the generated reference documentation for [{REPOSITORY}](https://github.com/{REPOSITORY}).\n\nYou can use the navigation bar at the top and the table of contents to the left to navigate your documentation.\n\nYou can change this content by creating/editing the **{INDEXTEMPLATERELATIVEPATH}** file in your repository or use the alDoc:defaultReleaseMD setting in your repository settings file (.github/AL-Go-Settings.json)\n\n{RELEASENOTES}" } "trustMicrosoftNuGetFeeds" = $true + "commitOptions" = [ordered]@{ + "messageSuffix" = "" + "pullRequestAutoMerge" = $false + "pullRequestLabels" = @() + } "trustedSigning" = [ordered]@{ "Endpoint" = "" "Account" = "" @@ -1355,9 +1360,23 @@ function CommitFromNewFolder { invoke-git add * $status = invoke-git -returnValue status --porcelain=v1 if ($status) { + $title = $commitMessage + + # Add commit message suffix if specified in settings + $settings = ReadSettings + if ($settings.commitOptions.messageSuffix) { + $commitMessage = "$commitMessage / $($settings.commitOptions.messageSuffix)" + $body = "$body`n$($settings.commitOptions.messageSuffix)" + } + if ($commitMessage.Length -gt 250) { $commitMessage = "$($commitMessage.Substring(0,250))...)" } + + if ($title.Length -gt 250) { + $title = "$($title.Substring(0,250))...)" + } + invoke-git commit --allow-empty -m "$commitMessage" $activeBranch = invoke-git -returnValue -silent name-rev --name-only HEAD # $branch is the name of the branch to be used when creating a Pull Request @@ -1377,7 +1396,18 @@ function CommitFromNewFolder { } invoke-git push -u $serverUrl $branch try { - invoke-gh pr create --fill --head $branch --repo $env:GITHUB_REPOSITORY --base $ENV:GITHUB_REF_NAME --body "$body" + $prCreateCmd = "invoke-gh pr create --fill --title ""$title"" --head ""$branch"" --repo ""$env:GITHUB_REPOSITORY"" --base ""$ENV:GITHUB_REF_NAME"" --body ""$body""" + if ($settings.commitOptions.pullRequestLabels) { + $labels = "$($settings.commitOptions.pullRequestLabels -join ",")" + Write-Host "Adding labels: $labels" + $prCreateCmd += " --label ""$labels""" + } + + Invoke-Expression $prCreateCmd + + if ($settings.commitOptions.pullRequestAutoMerge) { + invoke-gh pr merge --auto --squash --delete-branch + } } catch { OutputError("GitHub actions are not allowed to create Pull Requests (see GitHub Organization or Repository Actions Settings). You can create the PR manually by navigating to $($env:GITHUB_SERVER_URL)/$($env:GITHUB_REPOSITORY)/tree/$branch") diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 028c2613d..57466989d 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -6,6 +6,10 @@ ### New Repository Settings - `useGitSubmodules` can be either `true` or `recursive` if you want to enable Git Submodules in your repository. If your Git submodules resides in a private repository, you need to create a secret called `gitSubmodulesToken` containing a PAT with access to the submodule repositories. Like with all other secrets, you can also create a setting called `gitSubmodulesTokenSecretName` and specify the name of another secret, with these permissions (f.ex. ghTokenWorkflow). +- `commitOptions` - is a structure defining how you want AL-Go to handle automated commits or pull requests coming from AL-Go (e.g. for Update AL-Go System Files). The structure contains the following properties + - `messageSuffix` : A string you want to append to the end of commits/pull requests created by AL-Go. This can be useful if you are using the Azure Boards integration (or similar integration) to link commits to workitems. + - `pullRequestAutoMerge` : A boolean defining whether you want AL-Go pull requests to be set to auto-complete. This will auto-complete the pull requests once all checks are green and all required reviewers have approved. + - `pullRequestLabels` : A list of labels to add to the pull request. The labels need to be created in the repository before they can be applied. ### Support for Git submodules diff --git a/Scenarios/settings.md b/Scenarios/settings.md index cb4056e81..d33e11f60 100644 --- a/Scenarios/settings.md +++ b/Scenarios/settings.md @@ -79,6 +79,7 @@ The repository settings are only read from the repository settings file (.github | UpdateGitHubGoSystemFilesSchedule | CRON schedule for when Update AL-Go System Files should run. When Update AL-Go System Files runs on a schedule, it uses direct Commit instead of creating a PR. Default is no scheduled run, only manual trigger. Build your CRON string here: [https://crontab.guru](https://crontab.guru). You need to run the Update AL-Go System Files workflow for the schedule to take effect. | | buildModes | A list of build modes to use when building the AL-Go projects. Every AL-Go project will be built using each build mode. AL-Go ships with the following build modes out of the box:
**Default**: Apps are compiled as they are in the source code.
**Clean**: _PreprocessorSymbols_ are enabled when compiling the apps. The values for the symbols correspond to the `cleanModePreprocessorSymbols` setting of the AL-Go project.
**Translated**: `TranslationFile` compiler feature is enabled when compiling the apps.

It is also possible to specify custom build modes by adding a build mode that is different than 'Default', 'Clean' or 'Translated'. | | useGitSubmodules | If your repository is using Git Submodules, you can set the `useGitSubmodules` setting to `"true"` or `"recursive"` in order to use these submodules during build workflows. If `useGitSubmodules` is not set, git submodules are not initialized. If the submodules reside in private repositories, you need to define a `gitSubmodulesToken` secret. Read [this](https://aka.ms/algosecrets#gitSubmodulesToken) for more information. | +| commitOptions | If you want more control over how AL-Go creates pull requests or commits changes to the repository you can define `commitOptions`. It is a structure defining how you want AL-Go to handle automated commits or pull requests coming from AL-Go (e.g. for Update AL-Go System Files). The structure contains the following properties:
`messageSuffix` : A string you want to append to the end of commits/pull requests created by AL-Go. This can be useful if you are using the Azure Boards integration (or similar integration) to link commits to work items.
`pullRequestAutoMerge` : A boolean defining whether you want AL-Go pull requests to be set to auto-complete. This will auto-complete the pull requests once all checks are green and all required reviewers have approved.
`pullRequestLabels` : A list of labels to add to the pull request. The labels need to be created in the repository before they can be applied.
If you want different behavior in different AL-Go workflows you can add the `commitOptions` setting to your [workflow-specific settings files](https://github.com/microsoft/AL-Go/blob/main/Scenarios/settings.md#where-are-the-settings-located). | ## Advanced settings