diff --git a/www/docs/cmd/goreleaser.md b/www/docs/cmd/goreleaser.md
index f200fcf4df7..54a91204f1f 100644
--- a/www/docs/cmd/goreleaser.md
+++ b/www/docs/cmd/goreleaser.md
@@ -28,6 +28,7 @@ Check out our website for more information, examples and documentation: https://
* [goreleaser changelog](/cmd/goreleaser_changelog/) - Preview your changelog
* [goreleaser check](/cmd/goreleaser_check/) - Checks if configuration is valid
* [goreleaser completion](/cmd/goreleaser_completion/) - Generate the autocompletion script for the specified shell
+* [goreleaser continue](/cmd/goreleaser_continue/) - Continues a previously prepared release
* [goreleaser init](/cmd/goreleaser_init/) - Generates a .goreleaser.yaml file
* [goreleaser jsonschema](/cmd/goreleaser_jsonschema/) - outputs goreleaser's JSON schema
* [goreleaser publish](/cmd/goreleaser_publish/) - Publishes a previously prepared release
diff --git a/www/docs/cmd/goreleaser_announce.md b/www/docs/cmd/goreleaser_announce.md
index 47545134869..135ad341092 100644
--- a/www/docs/cmd/goreleaser_announce.md
+++ b/www/docs/cmd/goreleaser_announce.md
@@ -4,11 +4,14 @@ Announces a previously prepared release
## Synopsis
-If you have a previously prepared release with `goreleaser release --prepare` and published it with `goreleaser publish`, you can use this command to announce it.
+If you have a previously prepared release with `goreleaser release --prepare` or `goreleaser release --split` and published it with `goreleaser publish`, you can use this command to announce it.
-The idea is to prepare a release without publishing anything, assert the artifacts are correct (either automatically or not), publish it, and then, finally, announce it to your users.
+The idea is to prepare a release without publishing anything, assert the
+artifacts are correct (either automatically or not), publish it, and then,
+finally, announce it to your users.
-Environment variables will be re-evaluated here, so make sure they are available to the announce command as well.
+Environment variables will be re-evaluated here, so make sure they are
+available to the announce command as well.
!!! success "GoReleaser Pro"
This subcommand is [GoReleaser Pro feature](https://goreleaser.com/pro/).
@@ -24,6 +27,7 @@ goreleaser announce [flags]
-d, --dist string dist folder to continue (default "./dist")
-h, --help help for announce
-k, --key string GoReleaser Pro license key [$GORELEASER_KEY]
+ --merge Merges multiple parts of a --split release
-p, --parallelism int Amount tasks to run concurrently (default: number of CPUs)
--skip-after Skips global after hooks
--timeout duration Timeout to the entire announce process (default 30m0s)
diff --git a/www/docs/cmd/goreleaser_continue.md b/www/docs/cmd/goreleaser_continue.md
new file mode 100644
index 00000000000..f81f69d7e6f
--- /dev/null
+++ b/www/docs/cmd/goreleaser_continue.md
@@ -0,0 +1,41 @@
+# goreleaser continue
+
+Continues a previously prepared release
+
+## Synopsis
+
+If you have a previously prepared release (run with `goreleaser release --prepare` or `goreleaser release --split`), you can use this command to continue it.
+
+Environment variables will be re-evaluated here, so make sure they are
+available to the continue command as well.
+
+!!! success "GoReleaser Pro"
+ This subcommand is [GoReleaser Pro feature](https://goreleaser.com/pro/).
+
+
+```
+goreleaser continue [flags]
+```
+
+## Options
+
+```
+ -d, --dist string dist folder to continue (default "./dist")
+ -h, --help help for continue
+ -k, --key string GoReleaser Pro license key [$GORELEASER_KEY]
+ --merge Merges multiple parts of a --split release
+ -p, --parallelism int Amount tasks to run concurrently (default: number of CPUs)
+ --skip-after Skips global after hooks
+ --timeout duration Timeout to the entire continue process (default 30m0s)
+```
+
+## Options inherited from parent commands
+
+```
+ --debug Enable debug mode
+```
+
+## See also
+
+* [goreleaser](/cmd/goreleaser/) - Deliver Go binaries as fast and easily as possible
+
diff --git a/www/docs/cmd/goreleaser_publish.md b/www/docs/cmd/goreleaser_publish.md
index 455bba4c631..5a6046c4711 100644
--- a/www/docs/cmd/goreleaser_publish.md
+++ b/www/docs/cmd/goreleaser_publish.md
@@ -4,11 +4,14 @@ Publishes a previously prepared release
## Synopsis
-If you have a previously prepared release (run with `goreleaser release --prepare`), you can use this command to publish it.
+If you have a previously prepared release (run with `goreleaser release --prepare` or `goreleaser release --split`), you can use this command to publish it.
-The idea is to prepare a release without publishing anything, assert the artifacts are correct (either automatically or not), and then, finally, publish the release and its artifacts.
+The idea is to prepare a release without publishing anything, assert the
+artifacts are correct (either automatically or not), and then, finally, publish
+the release and its artifacts.
-Environment variables will be re-evaluated here, so make sure they are available to the publish command as well.
+Environment variables will be re-evaluated here, so make sure they are
+available to the publish command as well.
!!! success "GoReleaser Pro"
This subcommand is [GoReleaser Pro feature](https://goreleaser.com/pro/).
@@ -24,6 +27,7 @@ goreleaser publish [flags]
-d, --dist string dist folder to continue (default "./dist")
-h, --help help for publish
-k, --key string GoReleaser Pro license key [$GORELEASER_KEY]
+ --merge Merges multiple parts of a --split release
-p, --parallelism int Amount tasks to run concurrently (default: number of CPUs)
--skip-after Skips global after hooks
--timeout duration Timeout to the entire publish process (default 30m0s)
diff --git a/www/docs/cmd/goreleaser_release.md b/www/docs/cmd/goreleaser_release.md
index 8cc496fbfc1..939cfce23fc 100644
--- a/www/docs/cmd/goreleaser_release.md
+++ b/www/docs/cmd/goreleaser_release.md
@@ -33,6 +33,7 @@ goreleaser release [flags]
--skip-sign Skips signing artifacts
--skip-validate Skips git checks
--snapshot Generate an unversioned snapshot release, skipping all validations and without publishing any artifacts (implies --skip-publish, --skip-announce and --skip-validate, overrides --nightly)
+ --split Split the build so it can be merged and published later (implies --prepare)
--timeout duration Timeout to the entire release process (default 30m0s)
```
diff --git a/www/docs/customization/partial.md b/www/docs/customization/partial.md
new file mode 100644
index 00000000000..d451db2ec3c
--- /dev/null
+++ b/www/docs/customization/partial.md
@@ -0,0 +1,76 @@
+# Splitting and Merging builds
+
+!!! success "GoReleaser Pro"
+ This subcommand is [GoReleaser Pro feature](https://goreleaser.com/pro/).
+
+> Since GoReleaser v1.12.0.
+
+You can now split and merge builds.
+This can help in several areas:
+
+1. CGO, as you can build each platform in their target OS and merge later;
+1. Native packaging and signing for Windows and macOS (more features for this
+ will be added soon);
+1. Speed up slow builds, by splitting them into multiple workers;
+
+## Usage
+
+You don't really need to set anything up. To get started, run:
+
+```bash
+goreleaser release --rm-dist --split
+```
+
+Note that this step will push your Docker images as well.
+Docker manifests are not created yet, though.
+
+This will build only the artifacts for your current `GOOS`, and you should be
+able to find them in `dist/$GOOS`.
+
+You can run the other `GOOS` you want as well by either running in their OS, or
+by giving a `GOOS` to `goreleaser`.
+
+You should then have multiple `GOOS` folder inside your `dist` folder.
+
+Now, to continue, run:
+
+```bash
+goreleaser continue
+```
+
+This last step will run some extra things that were not run during the previous
+step:
+
+- merge previous contexts and artifacts lists
+- pull previously built images
+- create the source archive (if enabled)
+- checksum all artifacts
+- sign artifacts (according to configuration)
+- SBOM artifacts (according to configuration)
+- run all the publishers
+- run all the announcers
+
+You can also run the publishing and announce steps separately:
+
+```bash
+goreleaser publish --merge
+goreleaser announce --merge
+```
+
+## Customization
+
+You can choose by what you want your pipeline to be split by:
+
+```yaml
+# goreleaser.yaml
+partial:
+ # By what you want to build the partial things.
+ #
+ # Valid options are `target` and `goos`:
+ # - `target`: `GOOS` + `GOARCH`.
+ # - `goos`: `GOOS` only
+ #
+ # Default: `goos`.
+ by: target
+```
+
diff --git a/www/docs/pro.md b/www/docs/pro.md
index 0132c5d9525..b3f2d665451 100644
--- a/www/docs/pro.md
+++ b/www/docs/pro.md
@@ -1,43 +1,73 @@
# GoReleaser Pro
-GoReleaser Pro is a paid, closed-source GoReleaser distribution with some additional features:
+GoReleaser Pro is a paid, closed-source GoReleaser distribution with some
+additional features:
+- [x] [Split and merge builds](/customization/partial) to speed up your release
+ by splitting work, use CGO, or run platform-specific code;
- [x] Have custom [before and after hooks for achives](/customization/archive/);
-- [x] Prepare a release with [`goreleaser release --prepare`](/cmd/goreleaser_release/), publish and announce it later with [`goreleaser publish`](/cmd/goreleaser_publish/) and [`goreleaser announce`](/cmd/goreleaser_announce/);
-- [x] Preview and test your next release's changelog with [`goreleaser changelog`](/cmd/goreleaser_changelog/);
+- [x] Prepare a release with [`goreleaser release
+ --prepare`](/cmd/goreleaser_release/), publish and announce it later with
+ [`goreleaser publish`](/cmd/goreleaser_publish/) and [`goreleaser
+ announce`](/cmd/goreleaser_announce/);
+- [x] Preview and test your next release's change log with
+ [`goreleaser changelog`](/cmd/goreleaser_changelog/);
- [x] Continuously release [nightly builds](/customization/nightlies/);
-- [x] Import pre-built binaries with the [`prebuilt` builder](/customization/build/#import-pre-built-binaries);
-- [x] Rootless build [Docker images](/customization/docker/#podman) and [manifests](/customization/docker_manifest/#podman) with [Podman](https://podman.io);
-- [x] Easily create `apt` and `yum` repositories with the [fury.io integration](/customization/fury/);
-- [x] Reuse configuration files with the [include keyword](/customization/includes/);
-- [x] Run commands after the release with [global after hooks](/customization/hooks/);
+- [x] Import pre-built binaries with the
+ [`prebuilt` builder](/customization/build/#import-pre-built-binaries);
+- [x] Rootless build [Docker images](/customization/docker/#podman) and
+ [manifests](/customization/docker_manifest/#podman) with
+ [Podman](https://podman.io);
+- [x] Easily create `apt` and `yum` repositories with the
+ [fury.io integration](/customization/fury/);
+- [x] Reuse configuration files with the
+ [include keyword](/customization/includes/);
+- [x] Run commands after the release with
+ [global after hooks](/customization/hooks/);
- [x] Use GoReleaser within your [monorepo](/customization/monorepo/);
-- [x] Create [custom template variables](/customization/templates/#custom-variables) (goes well with [includes](/customization/includes/)).
+- [x] Create
+ [custom template variables](/customization/templates/#custom-variables)
+ (goes well with [includes](/customization/includes/)).
Get GoReleaser Pro
-## Roadmap
+## Road map
-The roadmap is not public (yet), but we do have a couple of ideas, and your input is always welcome!
-Once you buy it, feel free to [email me](mailto:carlos@becker.software?subject=GoReleaser%20Feature%20Suggestion) with your suggestions.
+We don't have a properly organized public road map (*yet*), but these are some
+of the things we plan to work on, in one form or another:
+
+- [ ] `--dry-run` to test the release locally, possibly skipping the actual
+ build of the binaries to focus on faster iteration of the other parts;
+- [ ] `--single-target` & friends for `goreleaser release` as well;
+- [ ] first-class macOS signing;
+- [ ] create Windows installers;
+
+That said, your input is always welcome!
+Once you buy it, feel free to [email me](mailto:carlos@becker.software?subject=GoReleaser%20Feature%20Suggestion)
+with your suggestions and ideas.
## Pricing & Sponsors
-- The current pricing is low and is likely to increase as we keep adding more pro-only features;
-- If you sponsor either the project or any of its developers, you [can ask for a discount](mailto:carlos@becker.software?subject=GoReleaser%20Coupon%20Request)!
+- The current pricing is low and is likely to increase as we keep adding more
+ pro-only features;
+- If you sponsor either the project or any of its developers, you [can ask for a
+ discount](mailto:carlos@becker.software?subject=GoReleaser%20Coupon%20Request)!
## Enterprise support
-I don't have a plan for that yet, but please [email me](mailto:carlos@becker.software?subject=GoReleaser%20Enterprise%20Support) if you are interested.
+I don't have a plan for that yet, but please [email
+me](mailto:carlos@becker.software?subject=GoReleaser%20Enterprise%20Support) if
+you are interested.
## Using GoReleaser Pro
-Once you [buy it](https://gum.co/goreleaser), you'll get a license key.
-You can then pass it to the [`release` command](/cmd/goreleaser_release/) either via the `--key` flag or the `GORELEASER_KEY` environment variable.
+Once you [buy it](https://gum.co/goreleaser), you'll get a license key. You can
+then pass it to the [`release` command](/cmd/goreleaser_release/) either via the
+`--key` flag or the `GORELEASER_KEY` environment variable.
-If you use the GitHub action, you will want to set the `distribution` option to `goreleaser-pro`.
-Check the [documentation](/ci/actions/) for more details.
+If you use the GitHub action, you will want to set the `distribution` option to
+`goreleaser-pro`. Check the [documentation](/ci/actions/) for more details.
## EULA
diff --git a/www/docs/static/schema-pro.json b/www/docs/static/schema-pro.json
index 73b055aab95..a171522033d 100644
--- a/www/docs/static/schema-pro.json
+++ b/www/docs/static/schema-pro.json
@@ -1687,6 +1687,20 @@
"additionalProperties": false,
"type": "object"
},
+ "Partial": {
+ "properties": {
+ "by": {
+ "type": "string",
+ "enum": [
+ "goos",
+ "target"
+ ],
+ "default": "goos"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object"
+ },
"PreBuiltOptions": {
"properties": {
"path": {
@@ -1764,9 +1778,6 @@
"snapshot": {
"$ref": "#/$defs/Snapshot"
},
- "nightly": {
- "$ref": "#/$defs/Nightly"
- },
"checksum": {
"$ref": "#/$defs/Checksum"
},
@@ -1800,12 +1811,6 @@
},
"type": "array"
},
- "furies": {
- "items": {
- "$ref": "#/$defs/Fury"
- },
- "type": "array"
- },
"publishers": {
"items": {
"$ref": "#/$defs/Publisher"
@@ -1845,9 +1850,6 @@
"gomod": {
"$ref": "#/$defs/GoMod"
},
- "monorepo": {
- "$ref": "#/$defs/Monorepo"
- },
"announce": {
"$ref": "#/$defs/Announce"
},
@@ -1883,6 +1885,21 @@
},
"variables": {
"type": "object"
+ },
+ "monorepo": {
+ "$ref": "#/$defs/Monorepo"
+ },
+ "partial": {
+ "$ref": "#/$defs/Partial"
+ },
+ "nightly": {
+ "$ref": "#/$defs/Nightly"
+ },
+ "furies": {
+ "items": {
+ "$ref": "#/$defs/Fury"
+ },
+ "type": "array"
}
},
"additionalProperties": false,
diff --git a/www/mkdocs.yml b/www/mkdocs.yml
index 369aed2def6..c64516d0b3a 100644
--- a/www/mkdocs.yml
+++ b/www/mkdocs.yml
@@ -84,6 +84,7 @@ nav:
- customization/verifiable_builds.md
- customization/monorepo.md
- customization/universalbinaries.md
+ - customization/partial.md
- Packaging and Archiving:
- customization/archive.md
- customization/nfpm.md