Files
grm/CONTRIBUTING.md
T
emil ea2f0cc600
Post-merge / detect-type (push) Successful in 51s
Post-merge / release (push) Successful in 54s
Post-merge / validate-commit-msg (push) Successful in 1m5s
Post-merge / publish (push) Has been skipped
Post-merge / badges (push) Successful in 1m17s
Post-merge / vikunja (push) Successful in 1m26s
Post-merge / configure-repo (push) Successful in 1m12s
Post-merge / sync-wiki (push) Successful in 1m34s
GRM-117: fix: fix wiki link URLs, heading hierarchy, quote pip install vars
2026-06-28 17:07:11 +00:00

1.7 KiB

Contributing to GRM

For the full contributing guide, see the Contributing wiki page.

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:

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:

GRM-N: <conventional commit message>

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

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