DEVX-1: chore: re-trigger CI after Vikunja task title update
Post-merge / detect-type (push) Successful in 14s
Post-merge / validate-commit-msg (push) Successful in 9s
Post-merge / vikunja (push) Successful in 15s
Post-merge / configure-repo (push) Successful in 17s
Post-merge / sync-wiki (push) Successful in 59s
Post-merge / release (push) Failing after 1m6s
Post-merge / badges (push) Successful in 36s

This commit was merged in pull request #4.
This commit is contained in:
2026-06-22 16:28:21 +00:00
parent 6ebb48f9e8
commit 1a80967967
5 changed files with 24 additions and 11 deletions
+3 -1
View File
@@ -218,9 +218,11 @@ def main(branch: str, pr_title: str, repo: str, pr_number: str) -> None:
# Head branch is behind master — pull master and rebase, then retry
click.echo(_("Head branch is behind master. Pulling and rebasing..."))
try:
run_cmd(["git", "config", "user.name", "devx-ci-bot"])
run_cmd(["git", "config", "user.email", "devx-ci-bot@oblachno.fyi"])
run_cmd(["git", "fetch", "origin", "master"])
run_cmd(["git", "rebase", "origin/master"])
run_cmd(["git", "push", "--force-with-lease"])
run_cmd(["git", "push", "--force-with-lease", "origin", f"HEAD:{branch}"])
click.echo(_("Rebased and pushed. Retrying merge..."))
client.merge_pr(pr_number, merge_title)
except (APIError, Exception) as retry_err:
+5
View File
@@ -215,6 +215,11 @@ def run_tests() -> None:
click.echo(_("Running tests..."))
tests = run_cmd(["make", "pytest-cov"], check=False)
if tests.returncode != 0:
# Print test output for debugging (capture=True hides it otherwise)
if tests.stdout:
click.echo(tests.stdout)
if tests.stderr:
click.echo(tests.stderr, err=True)
raise click.ClickException(
_(
"Tests failed — refusing to release. Fix test failures first.\n{stderr}",
+12 -9
View File
@@ -13,6 +13,7 @@ from __future__ import annotations
import re
import subprocess # nosec B404
import sys
from pathlib import Path
import click
@@ -185,11 +186,12 @@ def generate_badges(output_dir: Path) -> dict[str, dict[str, str | int]]:
# 1. Code coverage + test count (single pytest-cov run)
rc, stdout, stderr = run_command(
[
".venv/bin/pytest",
sys.executable,
"-m",
"pytest",
"tests/",
"-v",
"--cov=src",
"--cov=scripts",
"--cov=src/devx",
"--cov-report=term-missing",
"--cov-fail-under=0",
]
@@ -211,8 +213,9 @@ def generate_badges(output_dir: Path) -> dict[str, dict[str, str | int]]:
# 2. Documentation coverage
rc, stdout, _ = run_command(
[
".venv/bin/python3",
"scripts/ci/doc_coverage.py",
sys.executable,
"-m",
"devx.ci.doc_coverage",
]
)
doc_pct = extract_doc_coverage(stdout)
@@ -222,10 +225,10 @@ def generate_badges(output_dir: Path) -> dict[str, dict[str, str | int]]:
badges["docs"] = make_badge("docs", "unknown", "red")
# 3. Code quality (ruff + pyright + bandit all pass)
lint_rc, _, _ = run_command([".venv/bin/ruff", "check", "src/", "tests/", "scripts/"])
format_rc, _, _ = run_command([".venv/bin/ruff", "format", "--check", "src/", "tests/", "scripts/"])
type_rc, _, _ = run_command([".venv/bin/pyright"])
bandit_rc, _, _ = run_command([".venv/bin/bandit", "-r", "src/", "scripts/"])
lint_rc, _, _ = run_command([sys.executable, "-m", "ruff", "check", "src/", "tests/"])
format_rc, _, _ = run_command([sys.executable, "-m", "ruff", "format", "--check", "src/", "tests/"])
type_rc, _, _ = run_command([sys.executable, "-m", "pyright"])
bandit_rc, _, _ = run_command([sys.executable, "-m", "bandit", "-r", "src/"])
all_pass = all(rc == 0 for rc in [lint_rc, format_rc, type_rc, bandit_rc])
badges["quality"] = make_badge("code quality", "A" if all_pass else "F", "brightgreen" if all_pass else "red")