Skip to content

Commit

Permalink
Merge pull request #454 from axodotdev/rel3
Browse files Browse the repository at this point in the history
release: 0.3.0
  • Loading branch information
Gankra authored Sep 27, 2023
2 parents 4371fcd + 31b4724 commit 8cee192
Show file tree
Hide file tree
Showing 9 changed files with 141 additions and 20 deletions.
16 changes: 8 additions & 8 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
# CI that:
#
# * checks for a Git Tag that looks like a release
# * builds artifacts with cargo-dist (executable-zips, installers, hashes)
# * builds artifacts with cargo-dist (archives, installers, hashes)
# * uploads those artifacts to temporary workflow zip
# * on success, uploads the artifacts to a Github Release™
#
Expand Down Expand Up @@ -54,11 +54,11 @@ jobs:
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install cargo-dist
run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.3.0-prerelease.4/cargo-dist-installer.sh | sh"
run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.3.0-prerelease.9/cargo-dist-installer.sh | sh"
- id: plan
run: |
cargo dist plan ${{ !github.event.pull_request && format('--tag={0}', github.ref_name) || '' }} --output-format=json > dist-manifest.json
Expand Down Expand Up @@ -93,7 +93,7 @@ jobs:
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
submodules: recursive
- uses: swatinem/rust-cache@v2
Expand Down Expand Up @@ -127,11 +127,11 @@ jobs:
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install cargo-dist
run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.3.0-prerelease.4/cargo-dist-installer.sh | sh"
run: "curl --proto '=https' --tlsv1.2 -LsSf https://github.com/axodotdev/cargo-dist/releases/download/v0.3.0-prerelease.9/cargo-dist-installer.sh | sh"
# Get all the local artifacts for the global tasks to use (for e.g. checksums)
- name: Fetch local artifacts
uses: actions/download-artifact@v3
Expand Down Expand Up @@ -175,7 +175,7 @@ jobs:
GITHUB_EMAIL: "[email protected]"
if: ${{ !fromJson(needs.plan.outputs.val).announcement_is_prerelease || fromJson(needs.plan.outputs.val).publish_prereleases }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
repository: "axodotdev/homebrew-tap"
token: ${{ secrets.HOMEBREW_TAP_TOKEN }}
Expand Down Expand Up @@ -206,7 +206,7 @@ jobs:
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
submodules: recursive
- name: "Download artifacts"
Expand Down
115 changes: 115 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,120 @@
# Unreleased

Nothing Yet!


# Version 0.3.0 (2023-09-27)

This release is a big overhaul of cargo-dist's UX! [Our CI scripts have been completely redesigned](https://opensource.axo.dev/cargo-dist/book/introduction.html#distributing) to allow your release process to be tested in pull-requests, so you don't have to worry as much about your release process breaking!

Since we can now test your release process frequently, we've also made most cargo-dist commands default to erroring out if anything is out of sync and needs to be regenerated.

To make this easier, we've also introduced an experimental new system for [user-defined hooks](https://opensource.axo.dev/cargo-dist/book/ci/github.html#custom-jobs), allowing you to write custom publish jobs without having to actually edit release.yml.

This release also introduces initial support for msi installers with the wonderful help of [cargo-wix](https://github.com/volks73/cargo-wix)!



## Features

### CI redesign

This is the big ticket item of the release, the CI has been completely redesigned! We recommend reading the docs below for details, but some high-level details:

* The CI now runs `cargo dist plan` on pull-requests
* This can be cranked up to `cargo dist build`, with results uploaded to the PR workflow, allowing you to download+test them
* To do this, we now use GitHub's upload-artifact/download-artifact system, instead of using a draft GitHub release as scratch storage
* This means we also no longer create a draft Release on startup, and instead transactionally create the full Release at the very end
* `cargo dist plan` will now check that the CI script is up to date and not hand-edited (can be opted out)
* The user-defined publish jobs feature helps you avoid hand-edits
* More such features are in the pipeline for the next release!

* impl
* @mistydemeo + @gankra [initial impl](https://github.com/axodotdev/cargo-dist/pull/378)
* @gankra [cleanup init logic](https://github.com/axodotdev/cargo-dist/pull/392)
* @mistydemeo [use checkout@v4](https://github.com/axodotdev/cargo-dist/pull/442)
* @mistydemeo [add docs](https://github.com/axodotdev/cargo-dist/pull/443)

* docs
* [high-level summary](https://opensource.axo.dev/cargo-dist/book/introduction.html#distributing)
* [detailed docs](https://opensource.axo.dev/cargo-dist/book/ci/github.html)

### user-defined publish jobs

You can now define custom hand-written publish jobs that cargo-dist's CI will know how to invoke, without actually having to hand-edit release.yml!

* @mistydemeo [impl](https://github.com/axodotdev/cargo-dist/pull/417)
* [docs](https://opensource.axo.dev/cargo-dist/book/ci/github.html#custom-jobs)

### default to not publishing prereleases to homebrew

Homebrew doesn't have a notion of package "versions", there is Only The Latest Version, so we changed the default to only publishing to your homebrew tap if you're cutting a stable release. You can opt back in to the old behaviour with `publish-prereleases = true`.

* @mistydemeo [impl](https://github.com/axodotdev/cargo-dist/pull/401)
* [docs](https://opensource.axo.dev/cargo-dist/book/reference/config.html#publish-prereleases)

### generate command

This feature is a bit of an internal affair that you don't necessarily need to care about, but it's big enough that we figured it's worth mentioning.

The "plumbing" `generate-ci` command which is invoked by `cargo dist init` has been reworked into a more general `generate` command, as the introduction of msi installers means we now have two kinds of checked-in generated output.

Most notably, `generate --check` now exists, which produces an error if `generate` would change the contents (ignoring newline-style). **Most cargo-dist commands now run `generate --check` on startup, making it an error to have your release.yml out of date or hand-edited**. This is a key piece to the puzzle of the new CI design, as it lets you catch issues with your release process in PRs.

The `allow-dirty = ["ci"]` config was introduced to disable these `generate` modifying or checking release.yml, for users that still really need to hand-edit. We're actively working on several features that should make it less necessary to do hand-edits.

* impl
* @mistydemeo [initial impl](https://github.com/axodotdev/cargo-dist/pull/381)
* @gankra [generalize for msi](https://github.com/axodotdev/cargo-dist/pull/391)
* @gankra [improved --allow-dirty behaviour](https://github.com/axodotdev/cargo-dist/pull/397)
* @mistydemeo [default to --artifacts=all in generate](https://github.com/axodotdev/cargo-dist/pull/410)
* @gankra [ignore newline style when checking file equality](https://github.com/axodotdev/cargo-dist/pull/414)
* @mistydemeo [hide generate-ci alias command](https://github.com/axodotdev/cargo-dist/pull/434)
* @gankra [cleanup more references to generate-ci](https://github.com/axodotdev/cargo-dist/pull/444)
* docs
* [generate cli command](https://opensource.axo.dev/cargo-dist/book/reference/cli.html#cargo-dist-generate)
* [allow-dirty config](https://opensource.axo.dev/cargo-dist/book/reference/config.html#allow-dirty)

### msi installer

Initial msi installer support is here, based on the wonderful [cargo-wix](https://volks73.github.io/cargo-wix/cargo_wix/). We contributed several upstream improvements to cargo-wix for our purposes, and look forward to helping out even more in the future!

* impl
* @gankra [initial impl](https://github.com/axodotdev/cargo-dist/pull/370)
* @gankra [properly handle multiple subscribers to a binary](https://github.com/axodotdev/cargo-dist/pull/421)
* @gankra [don't forward WiX output to stdout](https://github.com/axodotdev/cargo-dist/pull/418)
* [docs](https://opensource.axo.dev/cargo-dist/book/installers/msi.html)

## Fixes

### more useful checksum files

The checksum files we generate are now in the expected format for tools like sha256sum, making them more immediately useful.

* @gankra [impl](https://github.com/axodotdev/cargo-dist/pull/420)

## Maintenance

### more polished cli output

CLI Output has been streamlined and cleaned up a lot in this release!

* @gankra [remove redundant output](https://github.com/axodotdev/cargo-dist/pull/411)
* @gankra [various improvements](https://github.com/axodotdev/cargo-dist/pull/437)
* @gankra [better help diagnostics](https://github.com/axodotdev/cargo-dist/pull/447)

### refreshed docs

The docs have been significantly reworked to reflect how much cargo-dist has changed and improved over the last few releases. Installers have rapidly grown from "something we're trying out" to "the star of the show", so they're now front-and-center with room for their own guides.

This was a big undertaking, and not everything has been reworked yet. Further improvements will be done more incrementally.

* @gankra [big docs overhaul](https://github.com/axodotdev/cargo-dist/pull/451)
* @mistydemeo [don't suggest --profile in install instructions](https://github.com/axodotdev/cargo-dist/pull/404)
* @tshepang [make search more useful](https://github.com/axodotdev/cargo-dist/pull/386)
* @tshepang [remove stray char](https://github.com/axodotdev/cargo-dist/pull/388)


# Version 0.2.0 (2023-08-30)

This release includes a bunch of features that resolve several of our user's needs.
Expand Down
4 changes: 2 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 5 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ pre-release-commit-message = "release: {{version}}"
# Config for 'cargo dist'
[workspace.metadata.dist]
# The preferred cargo-dist version to use in CI (Cargo.toml SemVer syntax)
cargo-dist-version = "0.3.0-prerelease.4"
# CI backends to support (see 'cargo dist generate-ci')
cargo-dist-version = "0.3.0-prerelease.9"
# CI backends to support
ci = ["github"]
# The installers to generate for each app
installers = ["shell", "powershell", "homebrew"]
Expand All @@ -23,7 +23,9 @@ tap = "axodotdev/homebrew-tap"
# Publish jobs to run in CI
publish-jobs = ["homebrew"]
# Target platforms to build apps for (Rust target-triple syntax)
targets = ["x86_64-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-pc-windows-msvc", "aarch64-apple-darwin"]
targets = ["x86_64-unknown-linux-gnu", "aarch64-apple-darwin", "x86_64-apple-darwin", "x86_64-pc-windows-msvc"]
# Publish jobs to run in CI
pr-run-mode = "plan"

# The profile that 'cargo dist' will build with
[profile.dist]
Expand Down
2 changes: 1 addition & 1 deletion book/src/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ That's a short list because "we make [installers][]" is doing a lot of heavy lif
As a distribution tool, cargo-dist gets to flex its biggest superpower: **it generates [its own CI scripts][ci-providers]**. For instance, enabling [GitHub CI][github-ci] with `cargo dist init` will generate release.yml, which implements the full pipeline of plan, build, host, publish, announce:

* Plan
* Waits for you to push a git tag for a new version (v1.0.0, my-app-v1.0.0, my-app/1.0.0, ...)
* Waits for you to push a git tag for a new version (v1.0.0, my-app-1.0.0...)
* Selects what apps in your workspace to announce new releases for based on that tag
* Generates [a machine-readable manifest][manifest] with changelogs and build plans
* Build
Expand Down
7 changes: 6 additions & 1 deletion book/src/reference/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,10 +99,15 @@ This is a list of CI backends you want to support, allowing subsequent runs of [

> since 0.3.0
Example: `allow-dirty = ["ci"]`
Example: `allow-dirty = ["ci", "msi"]`

This is a list of generate tasks for cargo-dist to ignore when checking if generated configuration is up to date. It's useful for users who customize their own configuration beyond cargo-dist's generated defaults and want to avoid cargo-dist overwriting it.

Possible values are:

* "ci": don't check/regenerate ci scripts (release.yml)
* "msi": don't check/regenerate msi templates (main.wxs)

### targets

> since 0.0.3
Expand Down
2 changes: 1 addition & 1 deletion cargo-dist-schema/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
name = "cargo-dist-schema"
description = "Schema information for cargo-dist's dist-manifest.json"
version = "0.3.0-prerelease.9"
version = "0.3.0"
edition = "2021"
license = "MIT OR Apache-2.0"
repository = "https://github.com/axodotdev/cargo-dist"
Expand Down
4 changes: 2 additions & 2 deletions cargo-dist/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
name = "cargo-dist"
description = "Shippable application packaging for Rust"
version = "0.3.0-prerelease.9"
version = "0.3.0"
edition = "2021"
license = "MIT OR Apache-2.0"
repository = "https://github.com/axodotdev/cargo-dist"
Expand Down Expand Up @@ -30,7 +30,7 @@ clap-cargo = { version = "0.10.0", optional = true }
axocli = { version = "0.1.0", optional = true }

# Features used by the cli and library
cargo-dist-schema = { version = "=0.3.0-prerelease.9", path = "../cargo-dist-schema" }
cargo-dist-schema = { version = "=0.3.0", path = "../cargo-dist-schema" }

axoasset = { version = "0.5.1", features = ["json-serde", "toml-serde", "toml-edit", "compression"] }
axoproject = { version = "0.4.7", default-features = false, features = ["cargo-projects"] }
Expand Down
3 changes: 1 addition & 2 deletions cargo-dist/tests/snapshots/error_manifest.snap
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@ stderr:

--tag=v1.0.0-FAKEVERSION will Announce: cargo-dist

you can also request any single package with --tag=cargo-dist-
v1.0.0-FAKEVERSION
you can also request any single package with --tag=cargo-dist-v1.0.0-FAKEVERSION



0 comments on commit 8cee192

Please sign in to comment.