2.3 KiB
2.3 KiB
devx-workflow
Quick reference for devx tools when working on this repo.
PR Workflow (use these, not raw git/tea/MCP)
| Task | Command |
|---|---|
| Create Vikunja task | make create-task -- --title "..." --description "..." |
| Create PR | make create-pr |
| Push + create PR | make push-with-pr |
| Check CI status | make devx-pr-status or make devx-pr-status PR=42 WAIT=1 |
| Fetch CI failure logs | make devx-pr-logs or make devx-pr-logs PR=42 JOB=quality TAIL=50 |
| Add ready-to-merge label | make devx-pr-label or make devx-pr-label PR=42 |
| Rebase current branch | make rebase |
| Rebase PR via API | make pr-rebase or make pr-rebase PR=42 |
Auto-merge Behavior
When the ready-to-merge label is added and all CI checks pass:
- Auto-merge validates PR title format (
GRM-N: <vikunja task title>) - If branch is behind master, auto-merge rebases via Gitea API automatically
- The rebase triggers a new CI run; the next auto-merge attempt merges
- No manual rebase needed unless the API rebase fails
Pre-merge Check
CI runs a pre-merge-check job early (after quality + detect-changes)
that validates branch format, PR title, and Vikunja task match.
This fails fast before expensive molecule tests run.
Spec-Driven CI Gates (Pre-merge)
Every PR must pass these gates before merge:
| Gate | Module | What it checks |
|---|---|---|
| Spec validation | devx.ci.validate_spec |
Spec file exists at docs/specs/<TASK-ID>.md, has REQ-IDs, all ACs checked |
| PR size | devx.ci.check_pr_size |
Max 500 lines / 10 files (excludes CHANGELOG, badges, locks) |
Full molecule tests still run on every PR (6 scenarios, all platforms).
Post-merge Auto-publish + Dependency PR
After merge to master, post-merge.yml:
- Runs release (git-cliff semver, tags, publishes to Gitea PyPI)
- Auto-creates an infra dependency PR (
devx.ci.create_dependency_pr) to bump the pinned grm version ininfra/pyproject.toml - Syncs wiki, updates Vikunja task, pushes badges
Key Rules
- Never manually merge via API — always use auto-merge with
ready-to-mergelabel - Branch naming:
GRM-N-short-description(N = Vikunja task ID) - Commit format: conventional commits (
feat:,fix:,docs:, etc.) - PR title:
GRM-N: <vikunja task title>(auto-derived bymake create-pr)