New/Set-GitHubRepository: Add Support for Merge Commit Title and Message Options (#385)

Adds merge commit message and title parameters to the `New-GitHubRepository` and `Set-GitHubRepository` functions.

Fixes #384

#### References

- https://docs.github.com/en/rest/repos/repos#create-an-organization-repository
- https://docs.github.com/en/rest/repos/repos#update-a-repository
This commit is contained in:
Simon Heather 2023-05-02 02:12:49 +01:00 коммит произвёл GitHub
Родитель dd844e5e4a
Коммит 6f94a9b0a3
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 506 добавлений и 0 удалений

Просмотреть файл

@ -11,6 +11,25 @@
GitHubRepositoryLanguageTypeName = 'GitHub.RepositoryLanguage'
GitHubRepositoryTagTypeName = 'GitHub.RepositoryTag'
GitHubRepositoryTeamPermissionTypeName = 'GitHub.RepositoryTeamPermission'
SquashMergeCommitTitleConversion = @{
'PRTitle' = 'PR_TITLE'
'CommitOrPRTitle' = 'COMMIT_OR_PR_TITLE'
'MergeMessage' = 'MERGE_MESSAGE'
}
SquashMergeCommitMessageConversion = @{
'PRBody' = 'PR_BODY'
'CommitMessages' = 'COMMIT_MESSAGES'
'Blank' = 'BLANK'
}
MergeCommitTitleConversion = @{
'PRTitle' = 'PR_TITLE'
'MergeMessage' = 'MERGE_MESSAGE'
}
MergeCommitMessageConversion = @{
'PRTitle' = 'PR_TITLE'
'PRBody' = 'PR_BODY'
'Blank' = 'BLANK'
}
}.GetEnumerator() | ForEach-Object {
Set-Variable -Scope Script -Option ReadOnly -Name $_.Key -Value $_.Value
}
@ -86,6 +105,34 @@ filter New-GitHubRepository
By default, rebase-merge pull requests will be allowed.
Specify this to disallow.
.PARAMETER SquashMergeCommitTitle
Specifies the default value for a squash merge commit title. This can be one of the
following values:
- 'PRTitle' - default to the pull request's title.
- 'CommitOrPRTitle' - default to the commit's title (if only one commit) or the pull
request's title (when more than one commit).
.PARAMETER SquashMergeCommitMessage
Specifies the default value for a squash merge commit message. This can be one of the
following values:
- 'PRBody' - default to the pull request's body.
- 'CommitMessages' - default to the branch's commit messages.
- Blank - default to a blank commit message.
.PARAMETER MergeCommitTitle
Specifies the default value for a merge commit title. This can be one of the
following values:
- 'PRTitle' - default to the pull request's title.
- 'MergeMessage' - default to the classic title for a merge message (e.g., Merge pull request
#123 from branch-name).
.PARAMETER MergeCommitMessage
Specifies the default vaule for a merge commit message. This can be one of the
following values:
- 'PRTitle' - default to the pull request's title.
- 'PRBody' - default to the pull request's body.
- 'Blank' - default to a blank commit message.
.PARAMETER AllowAutoMerge
Specifies whether to allow auto-merge on pull requests.
@ -172,6 +219,18 @@ filter New-GitHubRepository
[switch] $DisallowRebaseMerge,
[ValidateSet('PRTitle', 'CommitOrPRTitle')]
[string] $SquashMergeCommitTitle,
[ValidateSet('PRBody', 'CommitMessages', 'Blank')]
[string] $SquashMergeCommitMessage,
[ValidateSet('PRTitle', 'MergeMessage')]
[string] $MergeCommitTitle,
[ValidateSet('PRTitle', 'PRBody', 'Blank')]
[string] $MergeCommitMessage,
[switch] $AllowAutoMerge,
[switch] $AllowUpdateBranch,
@ -222,6 +281,10 @@ filter New-GitHubRepository
if ($PSBoundParameters.ContainsKey('DisallowSquashMerge')) { $hashBody['allow_squash_merge'] = (-not $DisallowSquashMerge.ToBool()) }
if ($PSBoundParameters.ContainsKey('DisallowMergeCommit')) { $hashBody['allow_merge_commit'] = (-not $DisallowMergeCommit.ToBool()) }
if ($PSBoundParameters.ContainsKey('DisallowRebaseMerge')) { $hashBody['allow_rebase_merge'] = (-not $DisallowRebaseMerge.ToBool()) }
if ($PSBoundParameters.ContainsKey('SquashMergeCommitTitle')) { $hashBody['squash_merge_commit_title'] = $script:SquashMergeCommitTitleConversion.$SquashMergeCommitTitle }
if ($PSBoundParameters.ContainsKey('SquashMergeCommitMessage')) { $hashBody['squash_merge_commit_message'] = $script:SquashMergeCommitMessageConversion.$SquashMergeCommitMessage }
if ($PSBoundParameters.ContainsKey('MergeCommitTitle')) { $hashBody['merge_commit_title'] = $script:MergeCommitTitleConversion.$MergeCommitTitle }
if ($PSBoundParameters.ContainsKey('MergeCommitMessage')) { $hashBody['merge_commit_message'] = $script:MergeCommitMessageConversion.$MergeCommitMessage }
if ($PSBoundParameters.ContainsKey('AllowAutoMerge')) { $hashBody['allow_auto_merge'] = $AllowAutoMerge.ToBool() }
if ($PSBoundParameters.ContainsKey('AllowUpdateBranch')) { $hashBody['allow_update_branch'] = $AllowUpdateBranch.ToBool() }
if ($PSBoundParameters.ContainsKey('DeleteBranchOnMerge')) { $hashBody['delete_branch_on_merge'] = $DeleteBranchOnMerge.ToBool() }
@ -1082,6 +1145,34 @@ filter Set-GitHubRepository
By default, rebase-merge pull requests will be allowed.
Specify this to disallow.
.PARAMETER SquashMergeCommitTitle
Specifies the default value for a squash merge commit title. This can be one of the
following values:
- PRTitle - default to the pull request's title.
- CommitOrPRTitle - default to the commit's title (if only one commit) or the pull
request's title (when more than one commit).
.PARAMETER SquashMergeCommitMessage
Specifies the default value for a squash merge commit message. This can be one of the
following values:
- PRBody - default to the pull request's body.
- CommitMessages - default to the branch's commit messages.
- Blank - default to a blank commit message.
.PARAMETER MergeCommitTitle
Specifies the default value for a merge commit title. This can be one of the
following values:
- PRTitle - default to the pull request's title.
- MergeMessage - default to the classic title for a merge message (e.g., Merge pull request
#123 from branch-name).
.PARAMETER MergeCommitMessage
Specifies the default vaule for a merge commit message. This can be one of the
following values:
- PRTitle - default to the pull request's title.
- PRBody - default to the pull request's body.
- Blank - default to a blank commit message.
.PARAMETER AllowAutoMerge
Specifies whether to allow auto-merge on pull requests.
@ -1199,6 +1290,18 @@ filter Set-GitHubRepository
[switch] $DisallowRebaseMerge,
[ValidateSet('PRTitle', 'CommitOrPRTitle')]
[string] $SquashMergeCommitTitle,
[ValidateSet('PRBody', 'CommitMessages', 'Blank')]
[string] $SquashMergeCommitMessage,
[ValidateSet('PRTitle', 'MergeMessage')]
[string] $MergeCommitTitle,
[ValidateSet('PRTitle', 'PRBody', 'Blank')]
[string] $MergeCommitMessage,
[switch] $AllowAutoMerge,
[switch] $AllowUpdateBranch,
@ -1250,6 +1353,10 @@ filter Set-GitHubRepository
if ($PSBoundParameters.ContainsKey('DisallowSquashMerge')) { $hashBody['allow_squash_merge'] = (-not $DisallowSquashMerge.ToBool()) }
if ($PSBoundParameters.ContainsKey('DisallowMergeCommit')) { $hashBody['allow_merge_commit'] = (-not $DisallowMergeCommit.ToBool()) }
if ($PSBoundParameters.ContainsKey('DisallowRebaseMerge')) { $hashBody['allow_rebase_merge'] = (-not $DisallowRebaseMerge.ToBool()) }
if ($PSBoundParameters.ContainsKey('SquashMergeCommitTitle')) { $hashBody['squash_merge_commit_title'] = $script:SquashMergeCommitTitleConversion.$SquashMergeCommitTitle }
if ($PSBoundParameters.ContainsKey('SquashMergeCommitMessage')) { $hashBody['squash_merge_commit_message'] = $script:SquashMergeCommitMessageConversion.$SquashMergeCommitMessage }
if ($PSBoundParameters.ContainsKey('MergeCommitTitle')) { $hashBody['merge_commit_title'] = $script:MergeCommitTitleConversion.$MergeCommitTitle }
if ($PSBoundParameters.ContainsKey('MergeCommitMessage')) { $hashBody['merge_commit_message'] = $script:MergeCommitMessageConversion.$MergeCommitMessage }
if ($PSBoundParameters.ContainsKey('AllowAutoMerge')) { $hashBody['allow_auto_merge'] = $AllowAutoMerge.ToBool() }
if ($PSBoundParameters.ContainsKey('AllowUpdateBranch')) { $hashBody['allow_update_branch'] = $AllowUpdateBranch.ToBool() }
if ($PSBoundParameters.ContainsKey('DeleteBranchOnMerge')) { $hashBody['delete_branch_on_merge'] = $DeleteBranchOnMerge.ToBool() }

Просмотреть файл

@ -202,6 +202,230 @@ Describe 'GitHubRepositories\New-GitHubRepository' {
}
}
Context -Name 'When creating a repository with Squash Merge Commit PR Title' {
BeforeAll -ScriptBlock {
$repoName = ([Guid]::NewGuid().Guid)
$newGithubRepositoryParms = @{
RepositoryName = $repoName
DisallowSquashMerge = $false
SquashMergeCommitTitle = 'PRTitle'
SquashMergeCommitMessage = 'Blank'
}
$repo = New-GitHubRepository @newGithubRepositoryParms
}
It 'Should return an object of the correct type' {
$repo | Should -BeOfType PSCustomObject
}
It 'Should return the correct properties' {
$repo.name | Should -Be $repoName
$repo.allow_squash_merge | Should -BeTrue
$repo.squash_merge_commit_title | Should -Be 'PR_TITLE'
$repo.squash_merge_commit_message | Should -Be 'BLANK'
}
AfterAll -ScriptBlock {
if ($repo)
{
Remove-GitHubRepository -Uri $repo.svn_url -Confirm:$false
}
}
}
Context -Name 'When creating a repository with Squash Merge Commit PR Title and Commit details' {
BeforeAll -ScriptBlock {
$repoName = ([Guid]::NewGuid().Guid)
$newGithubRepositoryParms = @{
RepositoryName = $repoName
DisallowSquashMerge = $false
SquashMergeCommitTitle = 'PRTitle'
SquashMergeCommitMessage = 'CommitMessages'
}
$repo = New-GitHubRepository @newGithubRepositoryParms
}
It 'Should return an object of the correct type' {
$repo | Should -BeOfType PSCustomObject
}
It 'Should return the correct properties' {
$repo.name | Should -Be $repoName
$repo.allow_squash_merge | Should -BeTrue
$repo.squash_merge_commit_title | Should -Be 'PR_TITLE'
$repo.squash_merge_commit_message | Should -Be 'COMMIT_MESSAGES'
}
AfterAll -ScriptBlock {
if ($repo)
{
Remove-GitHubRepository -Uri $repo.svn_url -Confirm:$false
}
}
}
Context -Name 'When creating a repository with Squash Merge Commit PR Title and Description' {
BeforeAll -ScriptBlock {
$repoName = ([Guid]::NewGuid().Guid)
$newGithubRepositoryParms = @{
RepositoryName = $repoName
DisallowSquashMerge = $false
SquashMergeCommitTitle = 'PRTitle'
SquashMergeCommitMessage = 'PRBody'
}
$repo = New-GitHubRepository @newGithubRepositoryParms
}
It 'Should return an object of the correct type' {
$repo | Should -BeOfType PSCustomObject
}
It 'Should return the correct properties' {
$repo.name | Should -Be $repoName
$repo.allow_squash_merge | Should -BeTrue
$repo.squash_merge_commit_title | Should -Be 'PR_TITLE'
$repo.squash_merge_commit_message | Should -Be 'PR_BODY'
}
AfterAll -ScriptBlock {
if ($repo)
{
Remove-GitHubRepository -Uri $repo.svn_url -Confirm:$false
}
}
}
Context -Name 'When creating a repository with Squash Merge Commit default message' {
BeforeAll -ScriptBlock {
$repoName = ([Guid]::NewGuid().Guid)
$newGithubRepositoryParms = @{
RepositoryName = $repoName
DisallowSquashMerge = $false
SquashMergeCommitTitle = 'CommitOrPRTitle'
SquashMergeCommitMessage = 'CommitMessages'
}
$repo = New-GitHubRepository @newGithubRepositoryParms
}
It 'Should return an object of the correct type' {
$repo | Should -BeOfType PSCustomObject
}
It 'Should return the correct properties' {
$repo.name | Should -Be $repoName
$repo.allow_squash_merge | Should -BeTrue
$repo.squash_merge_commit_title | Should -Be 'COMMIT_OR_PR_TITLE'
$repo.squash_merge_commit_message | Should -Be 'COMMIT_MESSAGES'
}
AfterAll -ScriptBlock {
if ($repo)
{
Remove-GitHubRepository -Uri $repo.svn_url -Confirm:$false
}
}
}
Context -Name 'When creating a repository with Merge Commit PR Title' {
BeforeAll -ScriptBlock {
$repoName = ([Guid]::NewGuid().Guid)
$newGithubRepositoryParms = @{
RepositoryName = $repoName
DisallowMergeCommit = $false
MergeCommitTitle = 'PRTitle'
MergeCommitMessage = 'Blank'
}
$repo = New-GitHubRepository @newGithubRepositoryParms
}
It 'Should return an object of the correct type' {
$repo | Should -BeOfType PSCustomObject
}
It 'Should return the correct properties' {
$repo.name | Should -Be $repoName
$repo.allow_merge_commit | Should -BeTrue
$repo.merge_commit_title | Should -Be 'PR_TITLE'
$repo.merge_commit_message | Should -Be 'BLANK'
}
AfterAll -ScriptBlock {
if ($repo)
{
Remove-GitHubRepository -Uri $repo.svn_url -Confirm:$false
}
}
}
Context -Name 'When creating a repository with Merge Commit PR Title and Description' {
BeforeAll -ScriptBlock {
$repoName = ([Guid]::NewGuid().Guid)
$newGithubRepositoryParms = @{
RepositoryName = $repoName
DisallowMergeCommit = $false
MergeCommitTitle = 'PRTitle'
MergeCommitMessage = 'PRBody'
}
$repo = New-GitHubRepository @newGithubRepositoryParms
}
It 'Should return an object of the correct type' {
$repo | Should -BeOfType PSCustomObject
}
It 'Should return the correct properties' {
$repo.name | Should -Be $repoName
$repo.allow_merge_commit | Should -BeTrue
$repo.merge_commit_title | Should -Be 'PR_TITLE'
$repo.merge_commit_message | Should -Be 'PR_BODY'
}
AfterAll -ScriptBlock {
if ($repo)
{
Remove-GitHubRepository -Uri $repo.svn_url -Confirm:$false
}
}
}
Context -Name 'When creating a repository with Merge Commit default message' {
BeforeAll -ScriptBlock {
$repoName = ([Guid]::NewGuid().Guid)
$newGithubRepositoryParms = @{
RepositoryName = $repoName
DisallowMergeCommit = $false
MergeCommitTitle = 'MergeMessage'
MergeCommitMessage = 'PRTitle'
}
$repo = New-GitHubRepository @newGithubRepositoryParms
}
It 'Should return an object of the correct type' {
$repo | Should -BeOfType PSCustomObject
}
It 'Should return the correct properties' {
$repo.name | Should -Be $repoName
$repo.allow_merge_commit | Should -BeTrue
$repo.merge_commit_title | Should -Be 'MERGE_MESSAGE'
$repo.merge_commit_message | Should -Be 'PR_TITLE'
}
AfterAll -ScriptBlock {
if ($repo)
{
Remove-GitHubRepository -Uri $repo.svn_url -Confirm:$false
}
}
}
Context -Name 'When a TeamID is specified' -Fixture {
BeforeAll -ScriptBlock {
$repoName = ([Guid]::NewGuid().Guid)
@ -858,6 +1082,181 @@ Describe 'GitHubRepositories\Set-GitHubRepository' {
}
}
Context -Name 'When updating a repository with Squash Merge Commit PR Title' {
BeforeAll -ScriptBlock {
$updateGithubRepositoryParms = @{
OwnerName = $repo.owner.login
RepositoryName = $repoName
DisallowSquashMerge = $false
SquashMergeCommitTitle = 'PRTitle'
SquashMergeCommitMessage = 'Blank'
}
$updatedRepo = Set-GitHubRepository @updateGithubRepositoryParms -PassThru
}
It 'Should return an object of the correct type' {
$updatedRepo | Should -BeOfType PSCustomObject
}
It 'Should return the correct properties' {
$updatedRepo.name | Should -Be $repoName
$updatedRepo.allow_squash_merge | Should -BeTrue
$updatedRepo.squash_merge_commit_title | Should -Be 'PR_TITLE'
$updatedRepo.squash_merge_commit_message | Should -Be 'BLANK'
}
}
Context -Name 'When updating a repository with Squash Merge Commit PR Title and Commit details' {
BeforeAll -ScriptBlock {
$updateGithubRepositoryParms = @{
OwnerName = $repo.owner.login
RepositoryName = $repoName
DisallowSquashMerge = $false
SquashMergeCommitTitle = 'PRTitle'
SquashMergeCommitMessage = 'CommitMessages'
}
$updatedRepo = Set-GitHubRepository @updateGithubRepositoryParms -PassThru
}
It 'Should return an object of the correct type' {
$updatedRepo | Should -BeOfType PSCustomObject
}
It 'Should return the correct properties' {
$updatedRepo.name | Should -Be $repoName
$updatedRepo.allow_squash_merge | Should -BeTrue
$updatedRepo.squash_merge_commit_title | Should -Be 'PR_TITLE'
$updatedRepo.squash_merge_commit_message | Should -Be 'COMMIT_MESSAGES'
}
}
Context -Name 'When updating a repository with Squash Merge Commit PR Title and Description' {
BeforeAll -ScriptBlock {
$updateGithubRepositoryParms = @{
OwnerName = $repo.owner.login
RepositoryName = $repoName
DisallowSquashMerge = $false
SquashMergeCommitTitle = 'PRTitle'
SquashMergeCommitMessage = 'PRBody'
}
$updatedRepo = Set-GitHubRepository @updateGithubRepositoryParms -PassThru
}
It 'Should return an object of the correct type' {
$updatedRepo | Should -BeOfType PSCustomObject
}
It 'Should return the correct properties' {
$updatedRepo.name | Should -Be $repoName
$updatedRepo.allow_squash_merge | Should -BeTrue
$updatedRepo.squash_merge_commit_title | Should -Be 'PR_TITLE'
$updatedRepo.squash_merge_commit_message | Should -Be 'PR_BODY'
}
}
Context -Name 'When updating a repository with Squash Merge Commit default message' {
BeforeAll -ScriptBlock {
$updateGithubRepositoryParms = @{
OwnerName = $repo.owner.login
RepositoryName = $repoName
DisallowSquashMerge = $false
SquashMergeCommitTitle = 'CommitOrPRTitle'
SquashMergeCommitMessage = 'CommitMessages'
}
$updatedRepo = Set-GitHubRepository @updateGithubRepositoryParms -PassThru
}
It 'Should return an object of the correct type' {
$updatedRepo | Should -BeOfType PSCustomObject
}
It 'Should return the correct properties' {
$updatedRepo.name | Should -Be $repoName
$updatedRepo.allow_squash_merge | Should -BeTrue
$updatedRepo.squash_merge_commit_title | Should -Be 'COMMIT_OR_PR_TITLE'
$updatedRepo.squash_merge_commit_message | Should -Be 'COMMIT_MESSAGES'
}
}
Context -Name 'When updating a repository with Merge Commit PR Title' {
BeforeAll -ScriptBlock {
$updateGithubRepositoryParms = @{
OwnerName = $repo.owner.login
RepositoryName = $repoName
DisallowMergeCommit = $false
MergeCommitTitle = 'PRTitle'
MergeCommitMessage = 'Blank'
}
$updatedRepo = Set-GitHubRepository @updateGithubRepositoryParms -PassThru
}
It 'Should return an object of the correct type' {
$updatedRepo | Should -BeOfType PSCustomObject
}
It 'Should return the correct properties' {
$updatedRepo.name | Should -Be $repoName
$updatedRepo.allow_merge_commit | Should -BeTrue
$updatedRepo.merge_commit_title | Should -Be 'PR_TITLE'
$updatedRepo.merge_commit_message | Should -Be 'BLANK'
}
}
Context -Name 'When updating a repository with Merge Commit PR Title and Description' {
BeforeAll -ScriptBlock {
$updateGithubRepositoryParms = @{
OwnerName = $repo.owner.login
RepositoryName = $repoName
DisallowMergeCommit = $false
MergeCommitTitle = 'PRTitle'
MergeCommitMessage = 'PRBody'
}
$updatedRepo = Set-GitHubRepository @updateGithubRepositoryParms -PassThru
}
It 'Should return an object of the correct type' {
$updatedRepo | Should -BeOfType PSCustomObject
}
It 'Should return the correct properties' {
$updatedRepo.name | Should -Be $repoName
$updatedRepo.allow_merge_commit | Should -BeTrue
$updatedRepo.merge_commit_title | Should -Be 'PR_TITLE'
$updatedRepo.merge_commit_message | Should -Be 'PR_BODY'
}
}
Context -Name 'When updating a repository with Merge Commit default message' {
BeforeAll -ScriptBlock {
$updateGithubRepositoryParms = @{
OwnerName = $repo.owner.login
RepositoryName = $repoName
DisallowMergeCommit = $false
MergeCommitTitle = 'MergeMessage'
MergeCommitMessage = 'PRTitle'
}
$updatedRepo = Set-GitHubRepository @updateGithubRepositoryParms -PassThru
}
It 'Should return an object of the correct type' {
$updatedRepo | Should -BeOfType PSCustomObject
}
It 'Should return the correct properties' {
$updatedRepo.name | Should -Be $repoName
$updatedRepo.allow_merge_commit | Should -BeTrue
$updatedRepo.merge_commit_title | Should -Be 'MERGE_MESSAGE'
$updatedRepo.merge_commit_message | Should -Be 'PR_TITLE'
}
}
Context -Name 'When updating a repository with the Archive setting' {
BeforeAll -ScriptBlock {
$updateGithubRepositoryParms = @{