Skip to content
🎉 GoReleaser v2.19 is out! with Zstandard settings, declarative Homebrew cask hooks, Nix without Nix, and more!

Pull Requests

GoReleaser allows you to, instead of pushing directly to the main branch, push to a feature branch, and open a pull request with the changes.

When pull_request.enabled is true and you don’t set a branch, GoReleaser defaults it to {{ .ProjectName }}-{{ .Version }}, so each release opens its own branch and pull request instead of stacking onto the repository’s default branch.

Templates

GoReleaser will check for a .github/PULL_REQUEST_TEMPLATE.md, and set it in the pull request body if it exists.

We do that to prevent extra work for maintainers of things like winget-pkgs, nixpkgs, and so on.

Cross-repository pull requests

You can also push to a fork, and open the pull request in the original branch.

Here’s an example on how to set it up:

.goreleaser.yaml
something: # can be nix, brews, etc...
  - repository:
      owner: john
      name: repo
      branch: "{{.ProjectName}}-{{.Version}}"
      pull_request:
        enabled: true
        base:
          owner: mike
          name: repo
          branch: main

This will:

  • Try to sync the john/repo fork with mike/repo:main (if on GitHub).
  • Create the files into john/repo, in the branch foo-1.2.3 (assuming ProjectName=foo and Version=1.2.3). 1
  • Open a pull request from john/repo into mike/repo, with the branch main as target. 2

Things that don’t work

  • Opening pull requests to a forked repository (go-github does not have the required fields to do it).
  • Since this can fail for a myriad of reasons, if an error happens, it’ll log it to the release output, but will not fail the pipeline.

  1. In GitHub’s terms, this means head=john:repo:foo-1.2.3 ↩︎

  2. In GitHub’s terms, this means base=mike:repo:main ↩︎

Last updated on