Public Access
DEVX-126: ci: consolidate CI and post-merge workflows
This commit was merged in pull request #190.
This commit is contained in:
+48
-43
@@ -337,7 +337,7 @@ Configures repository branch protection and labels via the Gitea REST API.
|
||||
Sets up master branch protection (required status checks, block on rejected
|
||||
reviews, block on outdated branch) and creates standard labels. Status check
|
||||
contexts are read from `DEVX_STATUS_CHECKS` or default to
|
||||
`CI / quality (pull_request)`.
|
||||
`CI / validate (pull_request)`.
|
||||
|
||||
### `generate_badges.py`
|
||||
|
||||
@@ -456,13 +456,14 @@ Developer pushes and creates PR (title: "DEVX-N: <vikunja task title>")
|
||||
▼
|
||||
CI workflow (ci.yml) triggers:
|
||||
│
|
||||
├── quality (lint, tests, coverage, test speed, doc coverage,
|
||||
│ translation check, dependency scan, workflow dry-run)
|
||||
│
|
||||
├── detect-changes (classify_changes.py → user-facing or workflow-only)
|
||||
│ └── if user-facing → release-dry-run (release.py --dry-run)
|
||||
│
|
||||
├── pr-review (pr_review.py → posts COMMENT or REQUEST_CHANGES)
|
||||
├── validate (single job: quality + detect-changes +
|
||||
│ release-dry-run + pr-review + pre-merge validation)
|
||||
│ ├── quality steps (lint, tests, coverage, test speed, doc coverage,
|
||||
│ │ translation check, dependency scan, workflow dry-run)
|
||||
│ ├── detect-changes (classify_changes.py → user-facing or workflow-only)
|
||||
│ │ └── if user-facing → release-dry-run (release.py --dry-run)
|
||||
│ ├── pre-merge validation (check_auto_merge_ready.py)
|
||||
│ └── pr-review (pr_review.py → posts COMMENT or REQUEST_CHANGES)
|
||||
│
|
||||
└── auto-merge (auto_merge.py)
|
||||
├── validate PR title format
|
||||
@@ -483,50 +484,54 @@ Push to master (squash-merge commit: "DEVX-N <conventional commit>")
|
||||
▼
|
||||
Post-merge workflow (post-merge.yml) triggers:
|
||||
│
|
||||
├── detect-type (detect_release_commit.py)
|
||||
│ └── is-release? → skip all jobs except badges
|
||||
├── detect-and-configure (single job)
|
||||
│ ├── configure-repo (configure_repo.py)
|
||||
│ ├── detect-type (detect_release_commit.py)
|
||||
│ │ └── is-release? → skip all steps except badges
|
||||
│ └── validate-commit-msg (validate_commit_msg.py --branch master)
|
||||
│
|
||||
├── validate-commit-msg (validate_commit_msg.py --branch master)
|
||||
│
|
||||
├── release (release.py)
|
||||
│ ├── classify_changes.py → skip if workflow-only
|
||||
│ ├── git-cliff → calculate next version
|
||||
│ ├── update __version__ in __init__.py
|
||||
│ ├── update CHANGELOG.md
|
||||
│ ├── run make lint-ruff && make pytest-cov
|
||||
│ ├── commit "release: vX.Y.Z [skip ci]"
|
||||
│ ├── create annotated tag vX.Y.Z
|
||||
│ └── push commit + tag to master
|
||||
│ │
|
||||
│ ▼
|
||||
│ Tag push triggers publish workflow (see below)
|
||||
│
|
||||
├── sync-wiki (sync_wiki.py --strict)
|
||||
│ └── sync docs/ to Gitea wiki with integrity check
|
||||
│
|
||||
├── badges (push_badges.py) [ALWAYS runs, even on release commits]
|
||||
│ ├── fetch latest master
|
||||
│ ├── generate_badges.py → SVG files
|
||||
│ ├── push to orphan badges branch
|
||||
│ └── update README.md + docs/index.md with cache-busting URLs
|
||||
│
|
||||
├── vikunja (post_merge.py)
|
||||
│ ├── extract task ID from commit message
|
||||
│ ├── mark Vikunja task as done
|
||||
│ └── post comment with merge SHA
|
||||
│
|
||||
└── configure-repo (configure_repo.py)
|
||||
└── ensure branch protection and labels
|
||||
└── release-and-maintain (needs detect-and-configure)
|
||||
├── release (release.py) [skip if release commit or workflow-only]
|
||||
│ ├── classify_changes.py → skip if workflow-only
|
||||
│ ├── git-cliff → calculate next version
|
||||
│ ├── update __version__ in __init__.py
|
||||
│ ├── update CHANGELOG.md
|
||||
│ ├── run make lint-ruff && make pytest-cov
|
||||
│ ├── commit "release: vX.Y.Z [skip ci]"
|
||||
│ ├── create annotated tag vX.Y.Z
|
||||
│ └── push commit + tag to master
|
||||
│ │
|
||||
│ ▼
|
||||
│ publish (publish.py) [if release created a tag]
|
||||
│ ├── build package (python -m build)
|
||||
│ ├── publish to Gitea PyPI registry (twine upload)
|
||||
│ │ OR publish to standard PyPI (if PYPI_TOKEN set)
|
||||
│ │ OR skip publish (if --skip-build)
|
||||
│ └── create Gitea release with git-cliff notes
|
||||
│
|
||||
├── sync-wiki (sync_wiki.py --strict) [skip if automated]
|
||||
│ └── sync docs/ to Gitea wiki with integrity check
|
||||
│
|
||||
├── vikunja (post_merge.py) [skip if automated]
|
||||
│ ├── extract task ID from commit message
|
||||
│ ├── mark Vikunja task as done
|
||||
│ └── post comment with merge SHA
|
||||
│
|
||||
└── badges (push_badges.py) [ALWAYS runs, even on release commits]
|
||||
├── fetch latest master
|
||||
├── generate_badges.py → SVG files
|
||||
├── push to orphan badges branch
|
||||
└── update README.md + docs/index.md with cache-busting URLs
|
||||
```
|
||||
|
||||
### Publish flow
|
||||
|
||||
```text
|
||||
Tag push (vX.Y.Z) triggers publish workflow (publish.yml):
|
||||
Within release-and-maintain job (after release step creates a tag):
|
||||
│
|
||||
▼
|
||||
├── install build, twine, git-cliff, tea
|
||||
├── configure tea login
|
||||
├── checkout release tag
|
||||
│
|
||||
└── publish (publish.py)
|
||||
├── build package (python -m build)
|
||||
|
||||
Reference in New Issue
Block a user