Skip to content

Commit fa069dd

Browse files
committed
ci(release): adopt release-plz for library publishing (fleet standard)
trash-core/trash-forensic were hand-published (both at 0.3.1). Add the fleet-standard release-plz pair (workspace variant: per-crate trash-core-v*/trash-forensic-v* tags, core before forensic) so future bumps are PR-reviewed and auto-published. Versions are in sync with crates.io, so this publishes nothing today. Also gitignore /.claude/ (worktree cruft).
1 parent 75ef839 commit fa069dd

3 files changed

Lines changed: 101 additions & 0 deletions

File tree

‎.github/workflows/release-plz.yml‎

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
name: release-plz
2+
3+
# Owns crates.io publishing + changelogs + version bumps for the workspace libraries
4+
# (trash-core, trash-forensic). Configuration lives in release-plz.toml.
5+
#
6+
# On every push to main:
7+
# - release-plz-pr: opens/updates a human-reviewed version-bump PR
8+
# - release-plz-release: publishes any crate whose version is ahead of crates.io
9+
# (release-plz resolves dependency order: core before forensic)
10+
#
11+
# trash-forensic is a library workspace (no binary), so there is no release.yml / v[0-9]* tag;
12+
# release-plz cuts per-crate `trash-core-v*` / `trash-forensic-v*` tags.
13+
14+
permissions:
15+
contents: write
16+
pull-requests: write
17+
18+
on:
19+
push:
20+
branches: [main]
21+
22+
concurrency:
23+
group: release-plz-${{ github.ref }}
24+
cancel-in-progress: false
25+
26+
jobs:
27+
release-plz-release:
28+
name: release-plz release
29+
runs-on: ubuntu-latest
30+
steps:
31+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
32+
with:
33+
fetch-depth: 0
34+
- uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable
35+
- name: release-plz release
36+
uses: release-plz/action@e8792575c7f2366cf6ff3ccc33ead9ace5b691c7 # v0.5.130
37+
with:
38+
command: release
39+
env:
40+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
41+
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
42+
43+
release-plz-pr:
44+
name: release-plz PR
45+
runs-on: ubuntu-latest
46+
concurrency:
47+
group: release-plz-pr
48+
cancel-in-progress: false
49+
steps:
50+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
51+
with:
52+
fetch-depth: 0
53+
- uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable
54+
- name: release-plz release-pr
55+
uses: release-plz/action@e8792575c7f2366cf6ff3ccc33ead9ace5b691c7 # v0.5.130
56+
with:
57+
command: release-pr
58+
env:
59+
GITHUB_TOKEN: ${{ secrets.RELEASE_PLZ_TOKEN || secrets.GITHUB_TOKEN }}
60+
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}

‎.gitignore‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
11
/target
2+
3+
# Claude Code worktree / session data — never part of the repo
4+
/.claude/

‎release-plz.toml‎

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# release-plz owns crates.io publishing + changelogs + per-crate version bumps for the
2+
# workspace libraries (trash-core, trash-forensic). It runs on pushes to main
3+
# (see .github/workflows/release-plz.yml):
4+
# - `release-pr` opens a human-reviewed version-bump PR (conventional commits)
5+
# - `release` publishes any crate whose Cargo.toml version is ahead of crates.io,
6+
# in dependency order (core before forensic), and tags it
7+
#
8+
# Both members publish; the fuzz crate is a detached [workspace] (not a member), so no
9+
# per-package publish=false override is needed. Per-crate tags are `trash-core-v0.3.2`
10+
# etc. — crate-prefixed, so they never match a `v[0-9]*` binary trigger.
11+
12+
[workspace]
13+
git_tag_enable = true
14+
git_release_enable = false
15+
changelog_update = true
16+
dependencies_update = false
17+
# Only prepare a release on a real change. release-plz's detection is file-based, so a
18+
# changelog-only "chore: release" commit otherwise re-triggers a release (the churn
19+
# loop). This allowlist makes feat/fix/perf/refactor/doc/revert the only triggers.
20+
release_commits = "^(feat|fix|perf|refactor|doc|revert)"
21+
22+
[changelog]
23+
commit_parsers = [
24+
{ message = "^chore\\(release\\):", skip = true },
25+
{ message = "^chore: release", skip = true },
26+
{ message = "^feat", group = "added" },
27+
{ message = "^fix", group = "fixed" },
28+
{ message = "^perf", group = "performance" },
29+
{ message = "^refactor", group = "other" },
30+
{ message = "^doc", group = "documentation" },
31+
{ message = "^revert", group = "other" },
32+
{ message = "^style", skip = true },
33+
{ message = "^test", skip = true },
34+
{ message = "^ci", skip = true },
35+
{ message = "^build", skip = true },
36+
{ message = "^chore", skip = true },
37+
{ message = "^.*", group = "other" },
38+
]

0 commit comments

Comments
 (0)