# Contributing to GRM For the full contributing guide, see the [Contributing wiki page](https://git.oblachno.oblachno.fyi/oblachno-oss/grm/wiki/Contributing). Thank you for contributing to Gitea Runner Manager (GRM)! ## Branch Naming All feature branches **must** include a `GRM-N` prefix corresponding to the Vikunja task identifier. Examples: - `GRM-19` - `GRM-19-fix-bug` - `GRM-42-add-update-command` The `GRM-N` prefix is mandatory — CI extracts it for merge messages and Vikunja updates. ## Commit Format ### Feature branches Use **conventional commits** on feature branches: ```text feat: add new command fix: resolve timeout issue chore: update dependencies docs: improve README ``` Allowed types: `feat`, `fix`, `chore`, `docs`, `style`, `refactor`, `perf`, `test`, `ci`, `build`, `revert`, `BREAKING CHANGE`. **Do NOT** include the `GRM-N:` prefix in commit messages on feature branches. ### Master branch (squash merges) Squash commits on `master` must follow: ```text GRM-N: ``` Example: `GRM-24: fix: resolve molecule idempotence`. This format is enforced by the auto-merge workflow, which validates the PR title is a conventional commit before squash-merging and prepending the task ID. ## Local Testing ```bash make test-all # Runs pytest-cov + molecule make lint-all # Runs ruff, pyright, bandit, ansible-lint, checkmake make lint-bandit # Security scan with bandit make pytest-cov # Unit tests with 100% coverage enforcement make molecule # All 6 molecule scenarios ``` ## Code Quality - **ruff**: Line length 120 - **pyright**: Strict mode - **bandit**: Security scan for Python code (no high/medium severity issues) - **Test coverage**: 100% required - **ansible-lint**: For all Ansible content