원클릭으로
release-application-rs
// Use when releasing the application-rs Rust backend workspace, bumping workspace version, updating CHANGELOG, or creating Docker image tags
// Use when releasing the application-rs Rust backend workspace, bumping workspace version, updating CHANGELOG, or creating Docker image tags
| name | release-application-rs |
| description | Use when releasing the application-rs Rust backend workspace, bumping workspace version, updating CHANGELOG, or creating Docker image tags |
The Rust backend in this monorepo is a Cargo workspace that builds a Docker image via GitHub Actions on tag push. It does NOT publish to crates.io (publish = false).
Core principle: Bump version & changelog → Create PR → User manually merges → Tag & push (triggers Docker build).
⚠️ MUST create PR. Never push directly to main. ⚠️ MUST NOT auto-merge the PR. The user must review and merge manually.
main branchcargo check, cargo fmt --check, cargo clippy)# Must run from application-rs/ directory
cd application-rs
# Current workspace version
grep '^version = ' Cargo.toml
# Recent tags for application-api
git tag -l 'application-api/*' | sort -V | tail -5
# Check git status
git status --short
git branch --show-current
Tag format: application-api/v<VERSION> (triggers .github/workflows/build-image.yml)
If dirty: Stop. Commit or stash changes first.
Update application-rs/Cargo.toml (workspace root only):
[workspace.package]
version = "X.Y.Z" # Bump this
Since all sub-crates use version.workspace = true, only the workspace root needs updating. Always run cargo update (or any build command) to regenerate Cargo.lock, then commit it.
Update application-rs/CHANGELOG.md:
Follow Keep a Changelog format:
## [X.Y.Z] - YYYY-MM-DD
### Added
- New feature description (#PR) ([commit](https://github.com/yansongda/application/commit/abc123))
### Changed
- Behavior changes (#PR) ([commit](https://github.com/yansongda/application/commit/def456))
### Fixed
- Bug fixes (#PR) ([commit](https://github.com/yansongda/application/commit/ghi789))
Format checklist:
## [X.Y.Z] - YYYY-MM-DD (NOT ## vX.Y.Z)### Added, ### Changed, ### FixedGet commits since last release:
cd application-rs
git log <PREV_TAG>..HEAD --pretty=format:"- %s ([%h](https://github.com/yansongda/application/commit/%h))"
Before creating PR, ensure all checks pass:
cd application-rs
cargo check --all-features
cargo fmt --all -- --check
cargo clippy -- -D warnings
git checkout -b release/application-rs-vX.Y.Z
git add application-rs/Cargo.toml application-rs/Cargo.lock application-rs/CHANGELOG.md
git commit -m "release(application-rs): vX.Y.Z"
git push origin release/application-rs-vX.Y.Z
gh pr create --title "release(application-rs): vX.Y.Z" --body "Release application-rs vX.Y.Z"
Wait for the user to manually review and merge the PR. NEVER auto-merge.
git checkout main && git pull origin main
# Create tag with application-api prefix
git tag application-api/vX.Y.Z
git push origin application-api/vX.Y.Z
⚠️ Tag format must match workflow trigger:
.github/workflows/build-image.yml checks startsWith(github.ref, 'refs/tags/application-api')application-api/vX.Y.Z/ to - for Docker image tags automaticallybuild-image.yml workflow runs successfully| Step | Action | Purpose |
|---|---|---|
| 1. Check | git status, git tag, check version | Verify clean state |
| 2. Bump | Edit Cargo.toml, CHANGELOG.md | Update version and changelog |
| 3. Verify | cargo check, cargo fmt, cargo clippy | Ensure code quality |
| 4. PR | Create PR, wait for merge | Review & approve |
| 5. Tag | git tag application-api/vX.Y.Z | Trigger Docker build |
| 6. Verify | Check GitHub Actions | Confirm image built |
Wrong tag format
v1.0.0 won't trigger the workflowapplication-api/v1.0.0Bumping individual crate versions
application-api/Cargo.toml directly when it uses version.workspace = trueCargo.tomlForgetting to run Rust checks
cargo fmt or cargo clippy errorsTagging before PR merge
git pull origin main after merge before taggingDirect-pushing to main
application-rs/
Cargo.toml # Workspace root - bump version here
Cargo.lock # Commit if changed
CHANGELOG.md # Update with new release notes
application-api/ # Binary crate (HTTP API)
application-database/# Database layer
application-kernel/ # Core types, config, errors
application-macro/ # Procedural macros
application-util/ # HTTP client, 3rd party integrations
All crates share the workspace version via version.workspace = true.
Never:
cargo fmt / cargo clippy checksv1.0.0 instead of application-api/v1.0.0)Always:
Cargo.toml onlyapplication-api/vX.Y.Z tag format