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