🚀 A production‑ready Rust project template to bootstrap new projects fast. It includes a clean Cargo layout, Docker, and a complete CI/CD suite.
Click Use this template to start a new repository from this scaffold.
Other Languages: English | 繁體中文 | 简体中文
🎯 Using This Template
IMPORTANT: This is a template repository. Before using it for your project, you must:
- Rename all occurrences of
rust_templateto your project name across the entire codebase - Update metadata in
Cargo.toml,cli/nodejs/package.json, andcli/python/pyproject.toml - Update author information in all package manifests and Dockerfiles
- Update repository URLs in README badges, package manifests, and GitHub workflows
- Rename the Python package directory from
cli/python/src/rust_templateto your project name
For detailed step-by-step instructions, see CLAUDE.md.
Quick verification after setup:
grep -r "rust_template" . --exclude-dir=target --exclude-dir=.git # Should find minimal matches
make fmt && cargo build && cargo test --all # Verify everything works
✨ Highlights
- Modern Cargo layout with unit tests in
src/and integration tests intests/ - Dynamic version information with git metadata (tag, commit hash, build tools)
- Lint & format with clippy and rustfmt
- GitHub Actions: tests, quality, package build, Docker publish, release drafter, Rust-aware labeler, secret scans, semantic PR, weekly dependency update
- Multi-stage Dockerfile producing a minimal runtime image
🚀 Quick Start
Requirements:
- Rust 1.85 or higher (using Edition 2024)
- Docker (optional)
Install Rust via rustup if you haven't already.
make fmt # rustfmt + clippy
make test # cargo test (all targets)
make test-verbose # cargo test (all targets with verbose output)
make coverage # generate LCOV coverage report
make build # cargo build (release mode)
make build-release # cargo build --release
make run # run the release binary
make clean # clean build artifacts and caches
make package # build crate package (allow dirty)
make help # list targets
📌 Version Information
The binary automatically displays dynamic version information including:
- Git tag version (or
Cargo.tomlversion if no tags) - Commit count since last tag
- Short commit hash
- Dirty working directory indicator
- Rust and Cargo versions used for building
Example output:
rust_template v0.1.25-2-gf4ae332-dirty
Built with Rust 1.90.0 and Cargo 1.90.0
This version information is embedded at build time through build.rs and automatically updated based on your git state.
🧪 Testing Layout
This template follows Rust's idiomatic test organization:
- Unit tests live next to the code they verify inside
src/— src/lib.rs wraps them in a#[cfg(test)] mod tests { ... }block and groups them into one sub-module per tested function (tests::add,tests::multiply,tests::version_info, ...). They can exercise private items. - Integration tests live in the top-level tests/ directory. Each file is compiled as its own crate and may only use the public API, and files are split by topic:
- tests/arithmetic.rs — cross-function composition and invariants.
- tests/version.rs — build-time version metadata plumbed through
build.rs.
Run everything with make test (or cargo test --all).
🐳 Docker
docker build -f docker/Dockerfile --target prod -t ghcr.io/<owner>/<repo>:latest .
docker run --rm ghcr.io/<owner>/<repo>:latest
Or using the actual binary name:
docker build -f docker/Dockerfile --target prod -t rust_template:latest .
docker run --rm rust_template:latest
📦 Packaging
make package # build crate package (allow dirty)
# or use cargo directly:
cargo package --locked --allow-dirty
# CARGO_REGISTRY_TOKEN=... cargo publish
CI builds run automatically on tags matching v* and upload the .crate file. Uncomment the publish step in build_package.yml to automate crates.io releases.
🧩 Cross Builds
This template does not ship cross-compile tooling by default. If you need cross or zig-based builds locally, install and configure them per your environment.
GitHub Actions build_release.yml builds multi-platform release binaries on tags matching v* and uploads them to the GitHub Release assets.
Targets:
- x86_64-unknown-linux-gnu, x86_64-unknown-linux-musl
- aarch64-unknown-linux-gnu, aarch64-unknown-linux-musl
- x86_64-apple-darwin, aarch64-apple-darwin
- x86_64-pc-windows-msvc, aarch64-pc-windows-msvc
Assets naming:
<bin>-v<version>-<target>.tar.gz(all platforms)<bin>-v<version>-<target>.zip(Windows additionally)
🔁 CI/CD Workflows
Main Workflows
- Tests (
test.yml): cargo build/test + generate LCOV coverage report and upload artifact - Code Quality (
code-quality-check.yml): rustfmt check + clippy (deny warnings) - Build Package (
build_package.yml): package on tagv*, optional crates.io publish - Publish Docker Image (
build_image.yml): push to GHCR onmain/masterand tagsv* - Build Release (
build_release.yml): Linux release binaries uploaded on tagsv*
Additional Automation
- Auto Labeler (
auto_labeler.yml): automatically label PRs based on branch names and file changes - Code Scan (
code_scan.yml): multi-layer security scanning (GitLeaks, Trufflehog secret scanning, CodeQL code analysis) - Release Drafter (
release_drafter.yml): auto-generate release notes - Semantic PR (
semantic-pull-request.yml): enforce PR title format - Dependabot weekly dependency updates
🤝 Contributing
-
Open issues/PRs
-
Use Conventional Commits for PR titles
-
Keep code formatted and clippy‑clean
-
After every edit, run
cargo buildto confirm compilation is successful -
Before opening a PR, please run locally:
cargo fmt --all -- --checkcargo clippy --all-targets --all-features -- -D warningscargo test
📄 License
MIT — see LICENSE.
Metadata
Release files for rust-template 0.2.12
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| rust_template-0.2.12.tar.gz | 806.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| rust_template-0.2.12-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.6 MB
Release files / rust_template-0.2.12.tar.gz
| Download URL | rust_template-0.2.12.tar.gz |
|---|---|
| Size | 806.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3064eb556f0488bc25c76b8da8ff932207a404d1b494ca7163f9a8e54f2322f5
|
|
BLAKE2b-256 checksum How to use checksums |
a20ea60c6b8d2a888c5a2f766dd2b9a4eb11fd157b5308c5ab7bb18467a38440
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / rust_template-0.2.12-py3-none-any.whl
| Download URL | rust_template-0.2.12-py3-none-any.whl |
|---|---|
| Size | 807.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1a099050aa3c7e4484f4b2707b9c3899152b29d02671903f4cf7606034d233c4
|
|
BLAKE2b-256 checksum How to use checksums |
4b83f6f1f718b1d50bba1d33a950e244a9ff858ff59b55252d920dfdce712528
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|