1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-01-10 03:47:03 +02:00
goreleaser/www/docs/customization/monorepo.md
Randy Fay 176336f264
docs: miscellaneous usage and wording improvements (#3152)
* Make sure to do required go mod init before continuing or goreleaser command fails.

* how the release might look like -> what the release might look like

* How does it look like -> What does it look like

* you must therefore -> you must

* Don't use GO111MODULES in example since it's so obsolete

* modules -> verifiable builds

* got you covered -> has you covered
2022-06-10 23:04:16 -03:00

1.4 KiB

Monorepo

!!! success "GoReleaser Pro" The monorepo support is a GoReleaser Pro feature.

If you want to use GoReleaser within a monorepo and use tag prefixes to mark "which tags belong to which sub project", GoReleaser has you covered.

Premise

You create your tags like subproject1/v1.2.3 and subproject2/v1.2.3.

Usage

You'll need to create a .goreleaser.yaml for each subproject you want to use GoReleaser in:

# subroj1/.goreleaser.yaml
project_name: subproj1

monorepo:
  tag_prefix: subproject1/
  dir: subproj1

Then, you can release with (from the project's root directory):

goreleaser release --rm-dist -f ./subproj1/.goreleaser.yaml

Then, the following is different from a "regular" run:

  • GoReleaser will then look if current commit has a tag prefixed with subproject1, and also the previous tag with the same prefix;
  • Changelog will include only commits that contain changes to files within the subproj1 directory;
  • Release name gets prefixed with {{ .ProjectName }} if empty;
  • All build's dir setting get set to monorepo.dir if empty;
    • if yours is not, you might want to change that manually;
  • Extra files on the release, archives, Docker builds, etc are prefixed with monorepo.dir;
  • On templates, {{.PrefixedTag}} will be monorepo.prefix/tag (aka the actual tag name), and {{.Tag}} has the prefix stripped;

The rest of the release process should work as usual.