# pr-merge.ps1 - Merge pull requests on Gitea or GitHub # Usage: .\pr-merge.ps1 -Number PR_NUMBER [-Method method] [-DeleteBranch] [CmdletBinding()] param( [Parameter(Mandatory=$true)] [Alias("n")] [int]$Number, [Alias("m")] [ValidateSet("merge", "squash", "rebase")] [string]$Method = "merge", [Alias("d")] [switch]$DeleteBranch, [Alias("h")] [switch]$Help ) $ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path . "$ScriptDir\detect-platform.ps1" function Show-Usage { @" Usage: pr-merge.ps1 [OPTIONS] Merge a pull request on the current repository (Gitea or GitHub). Options: -Number, -n NUMBER PR number to merge (required) -Method, -m METHOD Merge method: merge, squash, rebase (default: merge) -DeleteBranch, -d Delete the head branch after merge -Help, -h Show this help message Examples: .\pr-merge.ps1 -n 42 # Merge PR #42 .\pr-merge.ps1 -n 42 -m squash # Squash merge .\pr-merge.ps1 -n 42 -m rebase -d # Rebase and delete branch "@ exit 1 } if ($Help) { Show-Usage } $platform = Get-GitPlatform switch ($platform) { "github" { $cmd = @("gh", "pr", "merge", $Number) switch ($Method) { "merge" { $cmd += "--merge" } "squash" { $cmd += "--squash" } "rebase" { $cmd += "--rebase" } } if ($DeleteBranch) { $cmd += "--delete-branch" } & $cmd[0] $cmd[1..($cmd.Length-1)] } "gitea" { $cmd = @("tea", "pr", "merge", $Number) switch ($Method) { "merge" { $cmd += @("--style", "merge") } "squash" { $cmd += @("--style", "squash") } "rebase" { $cmd += @("--style", "rebase") } } if ($DeleteBranch) { Write-Warning "Branch deletion after merge may need to be done separately with tea" } & $cmd[0] $cmd[1..($cmd.Length-1)] } default { Write-Error "Could not detect git platform" exit 1 } } Write-Host "PR #$Number merged successfully"