Unreleased - ReleaseDate
0.22.1 - 2022-10-21
- Don't claim the user excluded a crate when the config did
- Actually push the branch
- Show we'll push the branch in dry-run mode, even if we won't as its better than not showing it even if we will
0.22.0 - 2022-10-21
The goal of this release is improved workspace support, including
- Workspace inheritance support
- Greater control over versioning by supporting calling
cargo release version
as needed and thencargo release --unpublished
- Setting configured crate owners when publishing new crates
- Identifying failures early like missing metadata, hitting rate limits, etc
- Inspect changes with
cargo release changes
, including conventional commit support - Improved defaults
This does mean that cargo release
(no other args) changed from recovering
from a failed release to releasing the currently specified versions of crates.
Recovery is now done more manually with cargo release publish
, etc.
- Removed
dev-version
support consolidate-commits
is now the default for workspaces- It is also now all-or-nothing
consolidate-pushes
is now exclusively useddependent-versions = "upgrade"
is now the default- Removed
ignore
,warn
, anderror
- Removed
Cargo.toml
'spackage.publish = false
disables release- Removed
--dump-config
in favor ofcargo release config
- Remove
--token
in favor in favor of more secure ways of authenticating cargo release
is no longer used for recovery, instead usecargo release publish
,cargo release tag
, etc- Error if nothing to release
- Changed standard exit code to 101
MSRV is now 1.64.0
- Turn some verification errors into warnings on steps
- Run replacements when no version is bumped
- Be smarter about finding previous tags
- Bail out early when we'll hit crates.io rate limits
- Bail out early when we'll hit
cargo publish
missing field errors - Implicitly layer package over workspace for workspace config when not in a workspace
- Only update versions for path dependencies
- Cleaned up output
- Ignore tests when tracking changes
package.version.workspace = true
support- Forces
consolidate-commits = true
- Forces
shared-version = "workspace"
- Forces
dependency.<name>.workspace = true
supportpackage.publish.workspace = true
supportowners = []
to set crate owners for new workspace members- Use
cargo release owner
to update owners for existing crates
- Use
- In addition to
shared-version = true
, we now support named groups, likeshared-version = "foo"
--unpublished
flag to automatically release unpublished crates- Expose
changes
,hook
, andcommit
steps
0.21.4 - 2022-10-14
- Fail again when pre-release checks fail
0.21.3 - 2022-10-13
- Expose release steps as subcommands, useful for
- Custom release processes
- Verify configuration / cargo-release behavior
- Recovering on failure
0.21.2 - 2022-09-28
- Polish help output
0.21.1 - 2022-07-12
- Load workspace config from the actual workspace manifest
0.21.0 - 2022-05-26
- Template substitutions are now performed on pre-release-hook arguments
- Template substitutions are now performed on pre-release-hook arguments
0.20.6 - 2022-05-26
- Don't accidentally publish a
default-member
instead of the root crate
0.20.5 - 2022-04-13
- Add
--allow-branch
0.20.4 - 2022-04-12
- Be explicit on dry-run failures
0.20.3 - 2022-03-07
- Don't fail dirty detection when a
HEAD
file exists - Show more details on dry-run
0.20.2 - 2022-02-15
- Break cycles at dev dependencies
0.20.1 - 2022-02-04
- Add missing
--metadata
to complement-m
0.20.0 - 2022-02-02
- Replacements: Changed
^
/$
to match start/end of lines rather than file
- Replacements: Changed
^
/$
to match start/end of lines rather than file
0.19.4 - 2022-01-25
- Lightweight tag support by setting
message = ""
0.19.3 - 2022-01-21
- Preserve dependent version requirement format
0.19.2 - 2022-01-17
--target
flag to control what target is used for the verification build during publish
0.19.1 - 2022-01-12
- Don't panic on
release=false
0.19.0 - 2022-01-07
- Dirty repo check will now check the entire workspace
Config
sign-commit
will no longer sign tags, instead setsign-tag
- Removed
disable-release
in favor ofrelease
- Removed
disable-publish
in favor ofpublish
- Removed
no-verify
in favor ofverify
- Removed
disable-push
in favor ofpush
- Removed
no-dev-version
in favor ofdev-version
- Removed
disable-tag
in favor oftag
Args:
- Removed
--skip-publish
in favor of--no-publish
- Removed
--skip-push
in favor of--no-push
- Removed
--skip-tag
in favor of--no-tag
Template
{{version}}
,{{prev_version}}
, and{{next_version}}
now exclude the build field which is exposed in{{metadata}}
etc
Hook
${NEXT_VERSION}
and${PREV_VERSION}
now exclude the build field which is exposed in${METADATA}
etc
- Automatically share tags between crates by giving them the same name
- Recommended to use with
shared-version = true
- Recommended to use with
- With
shared-version
, bump to highest shared version, rather than error on mismatch cargo-release release
will now skip publishing crates that are already published- Report tag name conflicts earlier in the process
--dump-config
will now also include defaults- Don't fail on dry-run release in a workspace (from intra-workspace dependency updates)
cargo-release <version>
will now work with-m <build>
cargo-release <version>
will now carry over-m <build>
from a prior run if none is specified- Make dirty check more expansive so we don't accidentally commit unexpected filed
0.18.8 - 2021-12-31
--dump-config
flag to see defaults and debug config layering
0.18.7 - 2021-12-27
- Don't error out when excluding workspace packages that would be downgraded by the current run
0.18.6 - 2021-12-08
- Consider optional dependencies when evaluating release order
0.18.5 - 2021-11-16
- Warn users when skipping crates in a workspace that have no changes
- Use static crt on Windows
- Tweak log levels to avoid needing to show all traces to see whats happening
0.18.4 - 2021-10-30
- Vendor libgit2 for a more consistent experience
0.18.3 - 2021-10-26
- Fix bug where we ignored
push
config
0.18.2 - 2021-10-11
- Crash when setting
publish = false
inCargo.toml
and` in a config file / commandline
0.18.1 - 2021-10-09
- Introduced
cargo publish
fix for workspaces that was meant to be in before 0.18
0.18.0 - 2021-10-08
dev-version
is now disabled by default. This to encourage people to not use
it as it makes it harder for dependent crates to [patch]
in a version from
git.
- Opt-in shared crate version. For now, it just errors on mismatch. This lets you reference the version in consolidated commits.
- In dev-version commit, render
{{next_version}}
- Disable always-sleep after publish. We believe the underlying problem
preventing us from detecting the crate from being released is fixed. If you
run into problems, you can set the env variable
PUBLISH_GRACE_SLEEP
. - Let packages override consolidated actions
- Switched command-line to more common
no-
prefixes - Added positive and negative version of each command-line flag to allow overriding the config, and not just defaults.
- Added positive versions of each negative (
disable_
,no_
) config field - Deprecated all negative (
disable_
,no_
) config fields
0.17.1 - 2021-08-24
- Correctly detect changes for crates outside of the root
0.17.0 - 2021-08-23
- Support
~/.config/cargo-release/release.toml
- Run
cargo publish
during dry-runs to help catch publish-specific errors - Add
allow-branch
config setting to limit what branches a release can happen from - Support
Cargo.toml
sworkspace.metadata
- In theory, finally fixed it so we properly wait between publishing of crates in a workspace
- Don't warn a user about releasing a crate without changes if a dependency changed
- Notify for all
[[bin]]
crates onCargo.lock
change, rather than just the root crate - Made clearer what are fatal errors during dry-run (since dry-run doesn't stop for them)
- Gracefully handle path-only dependencies which are especially important for cycles.
- Correctly update dependents on post-release version bump.
- Log what was dirty about a repo to make it easier for people to report problems
- Allow pushing even when there isn't a tracking branch
- Specifying
--package
should switch us to opt-in
--dry-run
is now the default. Pass--execute
to perform the release.exclude-paths
config setting was removed; we now rely oncargo package --list
to know which files to check for changes.
- Respect
disable_push
flag at package level.
- Submodule operation dir issue
- Git dirty check for submodules
- Prior sharing of pushes between workspace crates is now behind the flag
consolidate-pushes
- Avoid panic on invalid Cargo.toml entry
- Fixed issue where the versions of cfg specific dependencies wouldn't be properly bumped.
push-options
to send flags to the server, on push. Current limitations include:- Only on branch and not tag push
- Operates at the workspace level
- No placeholders are supported
disable-push
,push-remote
now only apply at the workspace level, when in a workspace.- tags are pushed before branch as requested in #250
- Add
PUBLISH_GRACE_SLEEP
environment variable that allows to set the number of seconds to sleep between two invocations ofcargo publish
. Default is5
- Do not sleep between publishes on dry runs
- New
disable-release
config flag to skip crates in a workspace - Warn on detached HEADs and being behind the remote
- Note: This means we are now doing a
git fetch
at the beginning, even with--dry-run
- Note: This means we are now doing a
- Dependencies updated
- Add sleep between publish [#247]
- Improved diff view in dry-run mode
- New option
post-release-replacements
support [#228]
- Upgraded crate-index and minimum rust version [#227]
min
/max
bug with replacement settings [#225]- Better error message for IOError [#226]
- Added new option
sign-tag
for tag signing only
- Changed default timeout on waiting crate to land on crates.io [#207]
- Changed change detection log to debug [#208]
- Ability to upload to alternate registries (though wait-for-publish is skipped) [#203]
- Prerelease check for replacement
- Config:
exclude_paths
list of globs to get more accurate listing of files-changed [#149] - CLI:
--token
can be used to specify the token used bycargo publish
- Take 2 on waiting for a crate to be published before publishing the next one [#194]
- Notify users on unchanged crates when releasing workspace [#148]
- Strict check on replacements [#187]
- Trace replacement diff on dry-run [#171]
- Allow workspace release commits to be consolidated [#181]
- Releasing specific version [#191]
tag_name
is now available in replacements and can be useful for changelog generation in multi-crate workspace [#168]
- Renamed option "pro-release-commit-message" to "post-release-commit-message" [#140]
- Use logging for output [#152]
- Also check untracked files in initial dirty check [#146]
[package.metadata.release]
in$CRATE/Cargo.toml
now has a higher priority than$CRATE/release.toml
[7cc9890] [#181]- Confirmation is prompted for even when there is no version bump [47bf645] [#175]
- Fixed issue when crate.io didn't update in time that causing workspace release failed [#183]
- Doc upload removed as the community has moved to docs.rs [#176]
- Fixed commit message after release #136
- Only update dependents when needed #135
- Fixed issue when updating dependency version in workspace #130
- Fixed serde version as 1.0.95 was yanked
- Workspace support #66
- Layered config support #111
- Support for tag name customization #125
- Using
v
as default version tag prefix #127 - Improved cargo binary detection #88 #89
- Doc update