automerge
automerge makes Stategraph Orchestration merge the pull request after every directory in it applies successfully. If a directory fails to apply, there is no merge.
Default Configuration
automerge:
enabled: false
delete_branch: false
merge_strategy: auto
require_explicit_apply: false
retain_pr_title: false
Keys
| Key | Type | Description |
|---|---|---|
enabled |
boolean | Turns on automerge. Default is false. |
delete_branch |
boolean | Deletes the source branch after a successful merge. Default is false. |
merge_strategy |
string | The merge method: auto, merge, rebase, or squash. Default is auto. See Merge Strategy. |
require_explicit_apply |
boolean | true: automerge runs only after an apply from a comment, such as stategraph apply or stategraph apply-force, not after an autoapply. Default is false. |
retain_pr_title |
boolean | Uses the pull request title as the commit title. Default is false. See Commit Title. |
Automerge does not force a merge. It respects the branch protection rules of the repository, and on GitLab the merge checks of the project. If the merge fails, Orchestration comments the reason on the pull request.
Merge Strategy
| Value | Description |
|---|---|
auto |
On GitHub, tries a merge commit first. If the repository does not allow merge commits, it squashes. On GitLab, does a standard (non-squash) merge. This is the default. |
merge |
Creates a merge commit. On GitLab, does a non-squash merge. |
rebase |
Rebases the commits of the pull request onto the base branch. On GitLab, does a non-squash merge, the same as merge. |
squash |
Squashes all commits of the pull request into one commit. |
The repository's merge settings must allow the strategy. If they do not, the merge fails. The exception is auto on GitHub, which falls back to squash.
On GitLab, Orchestration only chooses whether to squash. The merge method in the project's merge request settings decides how GitLab merges.
Commit Title
On GitHub, a merge commit or a squash commit gets the title Terrateam Automerge #PR_NUMBER by default. Every automerged commit then looks almost the same in the history of the main branch.
With retain_pr_title: true, the title is the pull request title, followed by the number in parentheses, for example My pull request title (#123). If the pull request title is not available, Orchestration uses the default title.
On GitLab, retain_pr_title affects only squash merges (merge_strategy: squash). Orchestration sets no squash commit message by default, so GitLab uses its own default message. With retain_pr_title: true, the squash commit message is the merge request title, with no number.
Examples
Enable Automerge
automerge:
enabled: true
Enable Automerge and Delete Branch
automerge:
enabled: true
delete_branch: true
Enable Automerge with Squash
automerge:
enabled: true
merge_strategy: squash
Retain Pull Request Title in Squash Commit
automerge:
enabled: true
merge_strategy: squash
retain_pr_title: true
Stacked Pull Requests
On GitHub, Orchestration merges through the asynchronous merge API, which supports stacked pull requests. A merge of a stacked pull request also merges every unmerged pull request below it, as one operation. GitHub then changes the base of the pull requests above it to the stack base.
Automerge thus works on a stack. Apply the bottom pull request, and Orchestration merges it. GitHub changes the base of the next pull request, and you can then plan and apply that one.
On a GitHub Enterprise Server version without the asynchronous merge API, Orchestration uses the synchronous merge API. That API cannot merge a stacked pull request.