| name | commit-changes | ||||
|---|---|---|---|---|---|
| description | Guide for committing changes in the torrust-tracker-deployer project. Covers conventional commit format, pre-commit verification checks, issue number conventions, and commit quality guidelines. Use when committing code, running pre-commit checks, or following project commit standards. Triggers on "commit", "commit changes", "how to commit", "pre-commit", "commit message", "commit format", or "conventional commits". | ||||
| metadata |
|
This skill guides you through the complete commit process for the Torrust Tracker Deployer project, including conventional commit format, pre-commit checks, and quality standards.
# 1. Run pre-commit checks (MANDATORY)
./scripts/pre-commit.sh
# 2. Stage changes
git add <files>
# 3. Commit with conventional format
git commit -m "{type}: [#{issue}] {description}"We follow Conventional Commits specification.
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
When working on a branch with an issue number, include it in your commit messages:
- With issue branch:
{type}: [#{issue}] {description}- Example:
feat: [#42] add MySQL database support
- Example:
- Without issue branch:
{type}: {description}- Example:
docs: update deployment guide
- Example:
| Type | Description | Example |
|---|---|---|
feat |
New feature or enhancement | feat: [#42] add LXD container provisioning |
fix |
Bug fix | fix: [#15] resolve ansible inventory parsing error |
docs |
Documentation changes | docs: [#8] update installation guide |
style |
Code style changes (formatting, etc.) | style: [#31] apply rustfmt to all source files |
refactor |
Code refactoring | refactor: [#45] simplify linting script structure |
test |
Adding or updating tests | test: [#67] add e2e tests for provisioning |
chore |
Maintenance tasks | chore: [#89] update dependencies |
ci |
CI/CD related changes | ci: [#23] add workflow for testing provisioning |
perf |
Performance improvements | perf: [#52] optimize container startup time |
Before committing any changes, you MUST run:
./scripts/pre-commit.shThis script runs all mandatory checks:
- Unused dependencies:
cargo machete - All linters:
cargo run --bin linter all(stable & nightly) - Tests:
cargo test - Documentation builds:
cargo doc --no-deps --bins --examples --workspace --all-features - E2E infrastructure tests:
cargo run --bin e2e-infrastructure-lifecycle-tests - E2E deployment tests:
cargo run --bin e2e-deployment-workflow-tests
All checks must pass before committing. Fix any reported issues.
cargo run --bin linter markdown # Markdown
cargo run --bin linter yaml # YAML
cargo run --bin linter toml # TOML
cargo run --bin linter clippy # Rust code analysis
cargo run --bin linter rustfmt # Rust formatting
cargo run --bin linter shellcheck # Shell scripts
cargo run --bin linter cspell # Spell checkinggit commit -m "feat: [#42] add support for Ubuntu 22.04 in cloud-init"git commit -m "fix: [#15] resolve ansible inventory parsing error"git commit -m "docs: [#8] add troubleshooting section to README"git commit -m "fix(ansible): [#15] correct inventory file path resolution"git commit -m "feat!: [#42] change default container provider from multipass to lxd"git commit -m "feat: [#23] add automated testing workflow
Add GitHub Actions workflow that tests:
- LXD container provisioning
- Multipass VM provisioning
- Ansible playbook execution
Closes #23"Only use # when intentionally referencing a GitHub issue.
GitHub automatically links #NUMBER patterns to issues, so avoid accidental references:
- ✅ Correct:
feat: [#42] add new feature(intentional reference) - ✅ Correct:
Closes #23in footer (intentional) - ❌ Incorrect:
fix: update config #1 priority(accidentally links to issue #1) - ❌ Incorrect:
docs: add section #3 to guide(accidentally links to issue #3)
# Bad: Accidentally links to issue #1
git commit -m "fix: make feature #1 priority"
# Good: Use alternative wording
git commit -m "fix: make feature top priority"
git commit -m "fix: make feature number one priority"
# Bad: Accidentally links to issue #3
git commit -m "docs: add section #3 about deployment"
# Good: Use alternative formatting
git commit -m "docs: add section 3 about deployment"
git commit -m "docs: add third section about deployment"- Atomic: Each commit represents one logical change
- Descriptive: Clear, concise description of what changed
- Tested: All tests pass
- Linted: All linters pass
- Conventional: Follows conventional commit format
Example of Good Commit History:
feat: [#42] add LXD container provisioning support
fix: [#15] resolve ansible inventory template rendering
docs: [#8] update contributing guidelines
test: [#67] add unit tests for configuration parsing
refactor: [#45] extract common logging utilities
- Too large: Multiple unrelated changes in one commit
- Vague: Messages like "fix stuff" or "updates"
- Broken: Commits that don't build or pass tests
- Non-conventional: Not following the conventional commit format
# 1. Make your changes
vim src/main.rs
# 2. Run pre-commit checks (MANDATORY)
./scripts/pre-commit.sh
# 3. If checks fail, fix issues and re-run
# Repeat until all checks pass
# 4. Stage changes
git add src/main.rs
# 5. Commit with conventional format
git commit -m "feat: [#42] add new CLI command"
# 6. Push to remote
git push origin 42-add-new-cli-commandProblem: One or more checks fail in ./scripts/pre-commit.sh
Solution:
- Read the error output carefully
- Fix the specific issue (e.g., run
cargo fmtfor formatting) - Re-run
./scripts/pre-commit.sh - Repeat until all checks pass
Problem: E2E tests add significant time to the commit process
Context: This is intentional to ensure quality. The split test approach (e2e-infrastructure-lifecycle-tests + e2e-deployment-workflow-tests) is optimized for GitHub Actions compatibility while maintaining comprehensive coverage.
Alternative for Local Development: You can run the full E2E suite manually:
cargo run --bin e2e-complete-workflow-testsNote: This is only supported in local environments with proper LXD networking and cannot run on GitHub Actions.
Problem: cargo run --bin linter all fails on nightly Rust
Solution:
- Ensure you have the nightly toolchain:
rustup toolchain install nightly - Update toolchains:
rustup update - Re-run the linter
- Full Commit Process Guide:
docs/contributing/commit-process.md - Contributing Guide:
docs/contributing/README.md - Branching Conventions:
docs/contributing/branching.md - Pre-commit Script:
scripts/pre-commit.sh - Linting Guide:
docs/contributing/linting.md
- Always run
./scripts/pre-commit.shbefore committing - This is non-negotiable - Use issue numbers consistently - Follow the
[#{issue}]format - Be careful with hashtags - Only use
#NUMBERwhen referencing issues - Keep commits atomic - One logical change per commit
- Write descriptive messages - Future you will thank present you