Files
devx/docs/tech/ci-cd-workflow.md
T
emil 31bfd23fea
Post-merge / detect-type (push) Successful in 17s
Post-merge / validate-commit-msg (push) Successful in 16s
Post-merge / vikunja (push) Successful in 12s
Post-merge / configure-repo (push) Failing after 13s
Post-merge / release (push) Failing after 1m5s
Post-merge / sync-wiki (push) Successful in 1m2s
Post-merge / badges (push) Failing after 28s
DEVX-1: fix: use python3 and venv python in workflows and Makefile
2026-06-22 15:52:45 +00:00

86 lines
3.5 KiB
Markdown

# CI/CD Workflow
devx uses Gitea Actions for CI/CD automation. The workflow replicates GRM's automated pipeline but without molecule tests.
## Workflows
### CI (`ci.yml`)
Runs on pull requests. Jobs:
1. **quality** — lint (ruff, pyright, bandit, actionlint), unit tests with 100% coverage, test speed check, doc coverage, translation check, dependency scan
2. **detect-changes** — classify changes as user-facing or workflow-only
3. **release-dry-run** — dry-run the release script (only if user-facing changes)
4. **pr-review** — automated PR review
5. **auto-merge** — squash-merge PR when all checks pass
### Post-merge (`post-merge.yml`)
Runs on every push to master. Jobs:
1. **detect-type** — check if commit is a release commit
2. **validate-commit-msg** — validate conventional commit format
3. **release** — calculate next version, update changelog, tag, push
4. **sync-wiki** — sync docs to Gitea wiki
5. **badges** — generate and push quality badges
6. **vikunja** — mark Vikunja task as done
7. **configure-repo** — ensure branch protection and labels
### Publish (`publish.yml`)
Runs on tag pushes (`v*`). Builds the package, publishes to Gitea PyPI registry, and creates a Gitea release.
## CI Scripts
### auto_merge.py
Auto-merge PR when all CI checks pass. Reads task ID from `.taskid`, validates PR title format, checks Vikunja task exists, squash-merges with `DEVX-N <conventional commit>` title.
### release.py
Automated release using git-cliff. Calculates next semver version from conventional commits, updates `__version__` in `__init__.py`, updates `CHANGELOG.md`, runs lint and tests, commits with `release: vX.Y.Z [skip ci]`, creates annotated tag, pushes.
### publish.py
Builds package with `python -m build`, publishes to Gitea PyPI registry via twine, creates Gitea release with git-cliff-generated notes.
### pr_review.py
Automated PR review. Checks architecture compliance, best practices, security, i18n, resource management, documentation, test coverage, and commit conventions. Posts inline comments and structured review.
### notify_failure.py
Creates a Gitea issue when a CI workflow fails. Uses tea CLI for issue creation with failure labels.
### post_merge.py
Updates Vikunja task after a merge to master. Extracts task ID from commit message, marks task as done, posts a comment with the merge SHA.
### classify_changes.py
Classifies git changes as user-facing or workflow-only. Used to skip releases for infrastructure-only changes. Patterns are configurable.
### discover_runners.py
Discovers available Gitea Actions runners at repo, org, and instance levels. Generates a dynamic matrix for parallel job distribution.
### detect_release_commit.py
Detects whether the latest git commit is a release commit. Writes `is-release=true` or `is-release=false` to GitHub output.
### push_badges.py
Generates SVG badge files from project metrics (tests, coverage, quality, version). Pushes to `badges` branch and updates README with cache-busting commit SHA URLs.
### distribute_molecule.py
Distributes molecule (scenario, platform) pairs across N parallel runners. Discovers scenarios under `ansible/roles/*/molecule/`.
### molecule_ci_guard.py
Runs molecule tests sequentially while polling Gitea for other runner failures. Aborts if another runner fails the same job.
### validate_commit_msg.py
Validates commit messages. On feature branches: conventional commits only (no `DEVX-N` prefix). On master: must have `DEVX-N` prefix from auto-merge.