This document outlines the steps to publish Naru to GitHub and crates.io.
The GitHub release is automatically triggered when pushing a version tag:
# Tag is already pushed: v0.6.6
# GitHub Actions will:
# 1. Build binaries for Linux, macOS (x64 & ARM), and Windows
# 2. Create a GitHub Release with CHANGELOG.md as description
# 3. Attach all compiled binaries to the releaseVisit: https://github.com/Luvion1/naru/actions
-
Create crates.io account (if not already done):
cargo login # Visit https://crates.io/me to get your API token # Paste the token when prompted
-
Verify package readiness:
cargo package # Should complete without errors
# Dry run first (recommended)
cargo publish --dry-run
# Actual publish
cargo publish- Check crates.io page: https://crates.io/crates/naru-config
- Verify installation:
cargo install naru-config naru-config --version
- Update version in
Cargo.toml - Update
CHANGELOG.mdwith new features - Update test count in
README.md - Run
cargo test- all tests must pass - Run
cargo clippy -- -D warnings- no warnings - Run
cargo fmt --all -- --check- properly formatted - Commit changes with descriptive message
- Create annotated tag:
git tag -a vX.Y.Z -m "Release vX.Y.Z" - Push to GitHub:
git push origin master && git push origin vX.Y.Z - Publish to crates.io:
cargo publish
The release workflow automatically:
- Builds for 4 platforms (Linux x64, macOS x64, macOS ARM, Windows x64)
- Creates a GitHub Release with the tag name
- Uses
CHANGELOG.mdas the release description - Attaches all compiled binaries
Current package info (from Cargo.toml):
- Name: naru-config
- License: MIT
- Repository: https://github.com/Luvion1/naru
- Keywords: config, encryption, security, aes, cli
- Categories: command-line-utilities, cryptography
# Check for uncommitted changes
git status
# Verify all files are tracked
cargo package --list# Check if version already exists
# Visit: https://crates.io/crates/naru-config/versions
# Increment version in Cargo.toml if needed- Check the Actions tab on GitHub
- Review error logs
- Fix issues locally (test, clippy, fmt)
- Push fix and re-tag if necessary