Package Exports
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (rust_template) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Rust Project Template
๐ 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 | ็น้ซไธญๆ | ็ฎไฝไธญๆ
โจ Highlights
- Modern Cargo layout (
src/lib.rs
,src/main.rs
,tests/
) - 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
Prerequisites: Rust toolchain (rustup
), Docker (optional)
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
๐ณ 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/master
and 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, Trivy vulnerability scanning) - 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 build
to confirm compilation is successfulBefore opening a PR, please run locally:
cargo fmt --all -- --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test
๐ License
MIT โ see LICENSE
.