Post-merge / publish (push) Has been skipped
Post-merge / sync-wiki (push) Waiting to run
Post-merge / validate-commit-msg (push) Waiting to run
Post-merge / vikunja (push) Waiting to run
Post-merge / detect-type (push) Waiting to run
Post-merge / release (push) Waiting to run
Post-merge / badges (push) Waiting to run
Post-merge / configure-repo (push) Waiting to run
The rewritten sync_wiki.py (devx 0.35.1) removed the --strict flag. The new git-based approach is strict by default; --verify adds post-sync page verification. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
324 lines
11 KiB
YAML
324 lines
11 KiB
YAML
name: Post-merge
|
|
|
|
# Runs on every push to master. A single workflow with conditional jobs
|
|
# for release, publish, wiki sync, badges, and Vikunja task updates.
|
|
#
|
|
# Job dependency graph:
|
|
#
|
|
# detect-type ──┬── validate-commit-msg (skip if release commit)
|
|
# ├── release (skip if release commit)
|
|
# │ └── publish (needs release — builds & publishes to PyPI)
|
|
# ├── badges (ALWAYS runs — even on release commits)
|
|
# ├── configure-repo (independent — skip if release commit)
|
|
# ├── sync-wiki (skip if release commit — runs for ALL merges)
|
|
# └── vikunja (skip if release commit — runs for ALL merges)
|
|
#
|
|
# sync-wiki and vikunja run for ALL non-release commits, not just when
|
|
# release succeeds. This ensures the wiki and task tracker are updated
|
|
# even for infrastructure-only changes (docs, CI config, etc.).
|
|
#
|
|
# The badges job uses `if: always()` with no is-release condition so it
|
|
# runs on every push to master, including release commits. This ensures
|
|
# badges (tests, coverage, version, etc.) are always current.
|
|
#
|
|
# When release creates a "release: vX.Y.Z" commit and tag, the publish
|
|
# job (which depends on release) builds and publishes the package to the
|
|
# Gitea PyPI registry. The release commit's post-merge run still updates
|
|
# badges (version badge picks up the new version). Other jobs skip.
|
|
|
|
on:
|
|
push:
|
|
branches: [master]
|
|
workflow_dispatch:
|
|
|
|
env:
|
|
CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }}
|
|
CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }}
|
|
|
|
jobs:
|
|
detect-type:
|
|
runs-on: docker
|
|
container: git.oblachno.oblachno.fyi/oblachno-oss/runner-images/ci-base:latest
|
|
timeout-minutes: 10
|
|
outputs:
|
|
is-release: ${{ steps.check.outputs.is-release }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 1
|
|
- name: Set up environment
|
|
env:
|
|
CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }}
|
|
CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }}
|
|
run: make setup-image EXTRAS=ci
|
|
- name: Check if this is a release commit
|
|
id: check
|
|
env:
|
|
PYTHONPATH: src
|
|
run: |
|
|
. .venv/bin/activate 2>/dev/null || true
|
|
python3 -m devx.ci.detect_release_commit
|
|
|
|
validate-commit-msg:
|
|
needs: [detect-type]
|
|
if: needs.detect-type.outputs.is-release == 'false'
|
|
runs-on: docker
|
|
container: git.oblachno.oblachno.fyi/oblachno-oss/runner-images/ci-base:latest
|
|
timeout-minutes: 5
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 1
|
|
- name: Set up environment
|
|
env:
|
|
CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }}
|
|
CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }}
|
|
run: make setup-image EXTRAS=ci
|
|
- name: Validate latest commit message
|
|
env:
|
|
PYTHONPATH: src
|
|
DEVX_TASK_PREFIX: GRM
|
|
run: |
|
|
. .venv/bin/activate 2>/dev/null || true
|
|
git log -1 --format=%B > commit-msg.txt
|
|
python3 -m devx.ci.validate_commit_msg commit-msg.txt --branch master
|
|
rm -f commit-msg.txt
|
|
|
|
release:
|
|
needs: [detect-type]
|
|
if: needs.detect-type.outputs.is-release == 'false'
|
|
runs-on: docker
|
|
container: git.oblachno.oblachno.fyi/oblachno-oss/runner-images/ci-full:latest
|
|
timeout-minutes: 15
|
|
outputs:
|
|
tag: ${{ steps.release-tag.outputs.tag }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
token: ${{ secrets.CI_GITEA_TOKEN }}
|
|
- name: Set up environment
|
|
env:
|
|
CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }}
|
|
CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }}
|
|
run: make setup-image EXTRAS=ci,lint
|
|
- name: Configure git
|
|
run: |
|
|
git config user.name "grm-ci-bot"
|
|
git config user.email "grm-ci-bot@oblachno.fyi"
|
|
- name: Run release
|
|
id: release-tag
|
|
env:
|
|
PYTHONPATH: src
|
|
DEVX_VERSION_FILE: src/grm/__init__.py
|
|
DEVX_TASK_PREFIX: GRM
|
|
DEVX_VIKUNJA_PROJECT_ID: 6
|
|
run: |
|
|
. .venv/bin/activate 2>/dev/null || true
|
|
export PATH="$HOME/.local/bin:$PATH"
|
|
python3 -m devx.ci.release
|
|
- name: Notify on failure
|
|
if: failure()
|
|
env:
|
|
CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }}
|
|
PYTHONPATH: src
|
|
run: |
|
|
. .venv/bin/activate 2>/dev/null || true
|
|
export PATH="$HOME/.local/bin:$PATH"
|
|
python3 -m devx.ci.notify_failure --auto-login \
|
|
--repo "${{ github.repository }}" \
|
|
--run-id "${{ github.run_id }}" \
|
|
--workflow "post-merge/release" \
|
|
--commit "${{ github.sha }}"
|
|
|
|
publish:
|
|
needs: [release]
|
|
if: needs.release.outputs.tag != ''
|
|
runs-on: docker
|
|
container: git.oblachno.oblachno.fyi/oblachno-oss/runner-images/ci-full:latest
|
|
timeout-minutes: 10
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
ref: ${{ needs.release.outputs.tag }}
|
|
- name: Set up environment
|
|
env:
|
|
CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }}
|
|
CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }}
|
|
run: make setup-image EXTRAS=ci,lint
|
|
- name: Build and publish release
|
|
env:
|
|
CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }}
|
|
PYTHONPATH: src
|
|
run: |
|
|
. .venv/bin/activate 2>/dev/null || true
|
|
export PATH="$HOME/.local/bin:$PATH"
|
|
python3 -m devx.ci.publish \
|
|
"${{ needs.release.outputs.tag }}" \
|
|
"${{ github.repository }}" --auto-login
|
|
- name: Notify on failure
|
|
if: failure()
|
|
env:
|
|
CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }}
|
|
PYTHONPATH: src
|
|
run: |
|
|
. .venv/bin/activate 2>/dev/null || true
|
|
export PATH="$HOME/.local/bin:$PATH"
|
|
python3 -m devx.ci.notify_failure --auto-login \
|
|
--repo "${{ github.repository }}" \
|
|
--run-id "${{ github.run_id }}" \
|
|
--workflow "post-merge/publish" \
|
|
--commit "${{ github.sha }}"
|
|
|
|
sync-wiki:
|
|
needs: [detect-type]
|
|
if: needs.detect-type.outputs.is-release == 'false'
|
|
runs-on: docker
|
|
container: git.oblachno.oblachno.fyi/oblachno-oss/runner-images/ci-base:latest
|
|
timeout-minutes: 15
|
|
concurrency:
|
|
group: sync-wiki-${{ github.repository }}
|
|
cancel-in-progress: false
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Set up environment
|
|
env:
|
|
CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }}
|
|
CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }}
|
|
run: make setup-image EXTRAS=ci
|
|
- name: Sync documentation to wiki
|
|
env:
|
|
CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }}
|
|
PYTHONPATH: src
|
|
run: |
|
|
. .venv/bin/activate 2>/dev/null || true
|
|
python3 -m devx.ci.sync_wiki --repo "${{ github.repository }}" --verify
|
|
- name: Notify on failure
|
|
if: failure()
|
|
env:
|
|
CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }}
|
|
PYTHONPATH: src
|
|
run: |
|
|
export PATH="$HOME/.local/bin:$PATH"
|
|
python3 -m devx.ci.notify_failure --auto-login \
|
|
--repo "${{ github.repository }}" \
|
|
--run-id "${{ github.run_id }}" \
|
|
--workflow "post-merge/sync-wiki" \
|
|
--commit "${{ github.sha }}"
|
|
|
|
badges:
|
|
needs: [detect-type]
|
|
if: always()
|
|
runs-on: docker
|
|
container: git.oblachno.oblachno.fyi/oblachno-oss/runner-images/ci-quality:latest
|
|
timeout-minutes: 10
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
ref: master
|
|
token: ${{ secrets.CI_GITEA_TOKEN }}
|
|
- name: Fetch latest master
|
|
run: |
|
|
git fetch origin master
|
|
git reset --hard origin/master
|
|
- name: Set up environment
|
|
env:
|
|
CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }}
|
|
CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }}
|
|
run: make setup-image EXTRAS=lint
|
|
- name: Generate and push badges
|
|
env:
|
|
PRE_COMMIT_ALLOW_NO_CONFIG: "1"
|
|
run: |
|
|
. .venv/bin/activate 2>/dev/null || true
|
|
python3 -m devx.ci.push_badges
|
|
- name: Notify on failure
|
|
if: failure()
|
|
env:
|
|
CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }}
|
|
PYTHONPATH: src
|
|
run: |
|
|
export PATH="$HOME/.local/bin:$PATH"
|
|
python3 -m devx.ci.notify_failure --auto-login \
|
|
--repo "${{ github.repository }}" \
|
|
--run-id "${{ github.run_id }}" \
|
|
--workflow "post-merge/badges" \
|
|
--commit "${{ github.sha }}"
|
|
|
|
vikunja:
|
|
needs: [detect-type]
|
|
if: needs.detect-type.outputs.is-release == 'false'
|
|
runs-on: docker
|
|
container: git.oblachno.oblachno.fyi/oblachno-oss/runner-images/ci-base:latest
|
|
timeout-minutes: 10
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Set up environment
|
|
env:
|
|
CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }}
|
|
CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }}
|
|
run: make setup-image EXTRAS=ci
|
|
- name: Update Vikunja task
|
|
env:
|
|
VIKUNJA_TOKEN: ${{ secrets.VIKUNJA_TOKEN }}
|
|
PYTHONPATH: src
|
|
DEVX_TASK_PREFIX: GRM
|
|
DEVX_VIKUNJA_PROJECT_ID: 6
|
|
run: |
|
|
. .venv/bin/activate 2>/dev/null || true
|
|
python3 -m devx.ci.post_merge --git-sha "${{ github.sha }}"
|
|
- name: Notify on failure
|
|
if: failure()
|
|
env:
|
|
CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }}
|
|
PYTHONPATH: src
|
|
run: |
|
|
export PATH="$HOME/.local/bin:$PATH"
|
|
python3 -m devx.ci.notify_failure --auto-login \
|
|
--repo "${{ github.repository }}" \
|
|
--run-id "${{ github.run_id }}" \
|
|
--workflow "post-merge/vikunja" \
|
|
--commit "${{ github.sha }}"
|
|
|
|
configure-repo:
|
|
needs: [detect-type]
|
|
if: needs.detect-type.outputs.is-release == 'false'
|
|
runs-on: docker
|
|
container: git.oblachno.oblachno.fyi/oblachno-oss/runner-images/ci-base:latest
|
|
timeout-minutes: 10
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Set up environment
|
|
env:
|
|
CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }}
|
|
CI_GITEA_USERNAME: ${{ vars.CI_GITEA_USERNAME }}
|
|
run: make setup-image EXTRAS=ci
|
|
- name: Ensure branch protection and labels
|
|
env:
|
|
CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }}
|
|
PYTHONPATH: src
|
|
DEVX_REPO_NAME: grm
|
|
DEVX_REPO_OWNER: oblachno-oss
|
|
DEVX_STATUS_CHECKS: "CI / quality (pull_request),CI / molecule-tests (1) (pull_request),CI / molecule-tests (2) (pull_request),CI / molecule-tests (3) (pull_request)"
|
|
run: |
|
|
. .venv/bin/activate 2>/dev/null || true
|
|
python3 -m devx.tools.configure_repo
|
|
- name: Notify on failure
|
|
if: failure()
|
|
env:
|
|
CI_GITEA_TOKEN: ${{ secrets.CI_GITEA_TOKEN }}
|
|
PYTHONPATH: src
|
|
run: |
|
|
export PATH="$HOME/.local/bin:$PATH"
|
|
python3 -m devx.ci.notify_failure --auto-login \
|
|
--repo "${{ github.repository }}" \
|
|
--run-id "${{ github.run_id }}" \
|
|
--workflow "post-merge/configure-repo" \
|
|
--commit "${{ github.sha }}"
|