Skip to content

Commit d3dc852

Browse files
Brandon GreenwellBrandon Greenwell
authored andcommitted
feat: add automated crates.io publishing via GitHub Action
- Add custom publish-crates-io job to release workflow - Runs after successful build, publishes automatically - Includes error handling for existing versions - Update announce job to wait for crates.io completion - Improve release checklist with explicit CHANGELOG workflow steps
1 parent 1826339 commit d3dc852

File tree

3 files changed

+29
-3
lines changed

3 files changed

+29
-3
lines changed

.github/workflows/release.yml

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -408,16 +408,39 @@ jobs:
408408
done
409409
git push
410410
411+
publish-crates-io:
412+
needs:
413+
- plan
414+
- host
415+
runs-on: "ubuntu-22.04"
416+
env:
417+
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
418+
if: ${{ !fromJson(needs.plan.outputs.val).announcement_is_prerelease || fromJson(needs.plan.outputs.val).publish_prereleases }}
419+
steps:
420+
- uses: actions/checkout@v4
421+
with:
422+
persist-credentials: false
423+
- name: Install Rust
424+
uses: dtolnay/rust-toolchain@stable
425+
- name: Publish to crates.io
426+
run: |
427+
echo "Publishing xleak to crates.io..."
428+
cargo publish --token "${CARGO_REGISTRY_TOKEN}" || {
429+
echo "::warning::cargo publish failed - version may already exist on crates.io"
430+
exit 0
431+
}
432+
411433
announce:
412434
needs:
413435
- plan
414436
- host
415437
- publish-homebrew-formula
416438
- publish-scoop-manifest
439+
- publish-crates-io
417440
# use "always() && ..." to allow us to wait for all publish jobs while
418441
# still allowing individual publish jobs to skip themselves (for prereleases).
419442
# "host" however must run to completion, no skipping allowed!
420-
if: ${{ always() && needs.host.result == 'success' && (needs.publish-homebrew-formula.result == 'skipped' || needs.publish-homebrew-formula.result == 'success') && (needs.publish-scoop-manifest.result == 'skipped' || needs.publish-scoop-manifest.result == 'success') }}
443+
if: ${{ always() && needs.host.result == 'success' && (needs.publish-homebrew-formula.result == 'skipped' || needs.publish-homebrew-formula.result == 'success') && (needs.publish-scoop-manifest.result == 'skipped' || needs.publish-scoop-manifest.result == 'success') && (needs.publish-crates-io.result == 'skipped' || needs.publish-crates-io.result == 'success') }}
421444
runs-on: "ubuntu-22.04"
422445
env:
423446
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1414
- VIM mode `$` keybinding now correctly expects SHIFT modifier on Windows
1515

1616
### Added
17-
- Automated crates.io publishing via cargo-dist for all future releases
17+
- Automated crates.io publishing via custom GitHub Action for all future releases
1818

1919
## [0.2.4] - 2025-12-04
2020

RELEASE_CHECKLIST.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ Use this checklist when preparing a new release of xleak. You can also create a
77
- [ ] All tests passing: `cargo test`
88
- [ ] No clippy warnings: `cargo clippy`
99
- [ ] Code is formatted: `cargo fmt --check`
10-
- [ ] CHANGELOG.md updated with new version changes
10+
- [ ] CHANGELOG.md updated:
11+
- [ ] Move items from `[Unreleased]` to new `[X.Y.Z] - YYYY-MM-DD` section
12+
- [ ] Keep `[Unreleased]` section empty for future changes
13+
- [ ] Verify changelog entries are accurate and complete
1114
- [ ] Version bumped in `Cargo.toml`
1215
- [ ] Test binary works: `cargo run --release -- test_data.xlsx`
1316

0 commit comments

Comments
 (0)