Skip to main content

commit-changes

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".

Datos de origen

Repositorio
torrust/torrust-tracker-deployer
Última actividad en el origen
13 de abril de 2026 a las 09:48
Idioma detectado de SKILL.md
inglés
Estrellas
4
Forks
2

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
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
{"author":"torrust","version":"1.0"}
# Committing Changes 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. ## Quick Reference ```bash # 1. Run pre-commit checks (MANDATORY) ./scripts/pre-commit.sh # 2. Stage changes git add <files> # 3. Commit with conventional format and GPG signature (MANDATORY) git commit -S -m "{type}: [#{issue}] {description}" ``` ## Conventional Commit Format We follow [Conventional Commits](https://www.conventionalcommits.org/) specification. ### Commit Message Structure ```text <type>[optional scope]: <description> [optional body] [optional footer(s)] ``` ### Issue Number Convention 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` - **Without issue branch**: `{type}: {description}` - Example: `docs: update deployment guide` ### Commit Types | 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` | ## GPG Commit Signing (MANDATORY) **All commits must be GPG signed.** Use the `-S` flag: ```bash git commit -S -m "your commit message" ``` Ensure GPG is configured (see Troubleshooting section if signing fails). ## Pre-commit Verification (MANDATORY) **Before committing any changes**, you **MUST** run: ```bash ./scripts/pre-commit.sh ``` This script runs all mandatory checks: 1. **Unused dependencies**: `cargo machete` 2. **All linters**: `cargo run --bin linter all` (stable & nightly) 3. **Tests**: `cargo test` 4. **Documentation builds**: `cargo doc --no-deps --bins --examples --workspace --all-features` 5. **E2E infrastructure tests**: `cargo run --bin e2e-infrastructure-lifecycle-tests` 6. **E2E deployment tests**: `cargo run --bin e2e-deployment-workflow-tests` **All checks must pass** before committing. Fix any reported issues. ### Running Individual Linters (for debugging) ```bash 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 checking ``` ## Commit Examples ### Feature with Issue Number ```bash git commit -m "feat: [#42] add support for Ubuntu 22.04 in cloud-init" ``` ### Bug Fix with Issue Number ```bash git commit -m "fix: [#15] resolve ansible inventory parsing error" ``` ### Documentation Update ```bash git commit -m "docs: [#8] add troubleshooting section to README" ``` ### With Scope (optional) ```bash git commit -m "fix(ansible): [#15] correct inventory file path resolution" ``` ### Breaking Change (note the !) ```bash git commit -m "feat!: [#42] change default container provider from multipass to lxd" ``` ### Multi-line with Body and Footer ```bash 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" ``` ## Hashtag Usage Warning **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 #23` in 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) ### Common Mistakes to Avoid ```bash # 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" ``` ## Commit Quality Guidelines ### Good Commits (✅) - **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:** ```text 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 ``` ### Commits to Avoid (❌) - **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 ## Complete Workflow Example ```bash # 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 and GPG signature (MANDATORY) git commit -S -m "feat: [#42] add new CLI command" # 6. Push to remote git push origin 42-add-new-cli-command ``` ## Troubleshooting ### GPG Signing Fails **Problem**: `git commit -S` fails with "gpg failed to sign the data" **Solution**: 1. Verify GPG is installed: `gpg --version` 2. List your GPG keys: `gpg --list-keys` 3. If no keys exist, create one: `gpg --gen-key` 4. Configure Git to use your GPG key: `git config --global user.signingkey <YOUR_KEY_ID>` 5. Test signing: `echo "test" | gpg --clearsign` 6. Retry commit: `git commit -S -m "your message"` If still failing, check that your GPG agent is running and has proper pinentry configured. ### Pre-commit Script Fails **Problem**: One or more checks fail in `./scripts/pre-commit.sh` **Solution**: 1. Read the error output carefully 2. Fix the specific issue (e.g., run `cargo fmt` for formatting) 3. Re-run `./scripts/pre-commit.sh` 4. Repeat until all checks pass ### E2E Tests Take Too Long **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: ```bash cargo run --bin e2e-complete-workflow-tests ``` Note: This is only supported in local environments with proper LXD networking and cannot run on GitHub Actions. ### Linter Fails on Nightly Toolchain **Problem**: `cargo run --bin linter all` fails on nightly Rust **Solution**: 1. Ensure you have the nightly toolchain: `rustup toolchain install nightly` 2. Update toolchains: `rustup update` 3. Re-run the linter ## Related Documentation - **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` ## Key Reminders 1. **Always sign commits with `-S`** - GPG signing is mandatory for audit trail 2. **Always run `./scripts/pre-commit.sh` before committing** - This is non-negotiable 3. **Use issue numbers consistently** - Follow the `[#{issue}]` format 4. **Be careful with hashtags** - Only use `#NUMBER` when referencing issues 5. **Keep commits atomic** - One logical change per commit 6. **Write descriptive messages** - Future you will thank present you
Ver en GitHub