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

1.6 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 got 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.

!!! warning This feature is in beta and might change based on feedback. Let me know you think about it after trying it out!