Commit Graph
139 Commits
Author SHA1 Message Date
kireto 27ea8903eb DEVX-162: fix: read Gitea repo-variable data field; fail closed on unknown nightly status 2026-09-17 09:41:36 +00:00
emil Userandkireto c00e9e3d7b DEVX-166: fix: exclude docs/plans/* from PR size check
Co-authored-by: emil User <emil.simeonov@tutanota.com>
2026-08-26 18:10:34 +00:00
emil Userandkireto e96f63cb40 DEVX-165: fix: accept deps: as valid conventional commit type
Co-authored-by: emil User <emil.simeonov@tutanota.com>
2026-08-26 18:03:57 +00:00
kireto 149e8846b8 DEVX-163: fix: use stderr=STDOUT to capture all docker push output in one stream 2026-08-26 14:09:59 +00:00
kireto 62412755cb DEVX-163: fix: check stdout for HTTP 500 in _run_push (docker sends to stdout) 2026-08-26 13:40:24 +00:00
kireto 2d7b4bdac3 DEVX-162: fix: serialize registry uploads and retry on HTTP 500 2026-08-26 13:12:45 +00:00
emil Userandkireto 34c7f3782c DEVX-160: refactor: remove cross-repo contract tests from devx
Co-authored-by: emil User <emil.simeonov@tutanota.com>
2026-08-26 08:26:05 +00:00
emil Userandkireto 816f27ed7a DEVX-159: fix: push-first strategy in build_image to avoid losing latest tag
Co-authored-by: emil User <emil.simeonov@tutanota.com>
2026-08-26 07:46:35 +00:00
emoandkireto f94ce03a04 DEVX-158: fix: delete existing manifest before push (Gitea #31964 workaround)
Co-authored-by: emo <emo@oblachno.com>
2026-08-25 17:26:04 +00:00
emil User 11c4a1fc9e DEVX-155: Replace pr_review with spec-driven CI gates and pr-review skill 2026-08-24 20:39:09 +00:00
emilandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> 1dc27d6e4b DEVX-155: fix: trust /var/run/docker.sock with free=0 when no inner dockerd exists
The host's rootless Docker socket is mounted as /var/run/docker.sock
inside CI containers. Its data root is on the host filesystem (not
accessible from inside the container), so _get_docker_free_bytes
returns 0. Previously the code didn't trust this and started a local
dockerd on /dev/shm (too small). Now checks pgrep for dockerd processes
— if none found inside the container, the socket is the host's Docker
and should be trusted.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-08-15 02:29:55 +02:00
emilandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> cdbee0a317 DEVX-155: fix: kill dockerd by PID when pkill fails, use /dev/shm for alive daemon
Add pgrep diagnostics before/after pkill to identify lingering dockerd
processes. If pkill fails and pgrep still finds dockerd, kill by PID
directly via os.kill. When inner dockerd can't be killed (still alive),
use /dev/shm as data root since the overlay is still full.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-08-15 02:12:46 +02:00
emilandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> 3ac3e613e9 DEVX-155: fix: kill inner dockerd with SIGKILL, use alt socket if alive
The inner dockerd started by the CI image doesn't respond to SIGTERM.
Use pkill -9 to force-kill it, then verify it's actually dead by
running docker info. If the old daemon is still alive (can't be killed),
use /dev/shm/docker.sock as an alternate socket path to avoid conflicts.

Also moved the data root cleanup after the kill verification, so we
don't delete files while the old daemon might still be writing to them.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-08-15 01:25:37 +02:00
emilandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> a2d47b7efc DEVX-155: fix: start local dockerd instead of using low-space inner dockerd
When no socket has sufficient space, don't fall back to the low-space
inner dockerd (which will fail on image pulls). Instead, kill the inner
dockerd, clean up its data root to free space, and start a local
dockerd on /dev/shm with vfs storage driver.

Also adds pkill of the inner dockerd and cleanup of its data root
(overlay2, image, volumes, containers) before starting the local
dockerd, to free up the 2.4GB used by the inner dockerd's data.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-08-15 00:41:27 +02:00
emilandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> 0e25810b84 DEVX-155: fix: prefer /run/host-docker.sock over inner dockerd
The start_docker.py script was checking /var/run/docker.sock first,
which inside CI containers is an inner dockerd (v29.5.3) with data
root on the container's 38G overlay (often 100% full). When
_get_docker_free_bytes() returned 0 (data root path not accessible
from inside container), the script assumed it was the host Docker
with plenty of space and returned True immediately — without trying
the host's rootless Docker socket at /run/host-docker.sock.

Fix: try /run/host-docker.sock FIRST (before /var/run/docker.sock).
The host socket is mounted by the gitea runner config and has access
to the host's full filesystem (455G). Only trust free_bytes == 0
(= data root not accessible from container) for /run/host-docker.sock,
since the host's root dir is genuinely outside the container. For
other sockets (inner dockerd), free_bytes == 0 means the path doesn't
exist inside the container — don't trust it.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-08-14 23:15:03 +02:00
emilandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> 1470cdae27 DEVX-155: fix: use host Docker when root dir is inaccessible (free=0)
The CI container can't access the host Docker's data root
(/home/grm-ci-runner-X/.local/share/docker) to check disk space.
When free_bytes=0, the root dir is on the host filesystem (455G).
Always use host Docker in that case instead of starting a local
dockerd on the 16G /dev/shm tmpfs (which fills up with images).

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-08-14 21:15:23 +02:00
emilandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> 5e1337e524 DEVX-155: fix: use /dev/shm/docker.sock socket for local dockerd
The existing dockerd holds /var/run/docker.sock and can't be killed
from inside the container (different PID namespace). Use a new socket
path /dev/shm/docker.sock and data root /dev/shm/docker (16G tmpfs).

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-08-14 20:30:58 +02:00
emilandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> c61e4b3cab DEVX-155: fix: kill existing dockerd before starting /dev/shm/docker daemon
The CI container's pre-existing dockerd (v29.5.3) uses the default
data root on the 38G overlay (100% full). Kill it before starting
the new dockerd with --data-root /dev/shm/docker (16G tmpfs).

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-08-14 20:05:36 +02:00
gitea-actions-botemilDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
23bd480e80 DEVX-155: fix: prefer rootless Docker socket over low-space inner DinD daemon
When a CI container has an inner dockerd (DinD) writing to the
container's overlay (e.g. 38 GB), image pulls fail with ENOSPC.
start_docker.py now checks the daemon's free disk space and tries
rootless sockets (which have access to the host's full filesystem)
when the default socket has less than 20 GB free.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-08-14 17:27:58 +02:00
emil Userandemo eeb291564d DEVX-154: feat: add 5 standalone lint scripts from infra
Co-authored-by: emil User <emil.simeonov@tutanota.com>
2026-08-09 22:07:38 +00:00
emil Userandemo 3d4b4940ff DEVX-153: feat: sync missing features from v0.49.x line to master
Co-authored-by: emil User <emil.simeonov@tutanota.com>
2026-08-09 01:09:20 +00:00
emil Userandemo bd4530094e DEVX-152: fix: remove dead translation keys and add missing one
Co-authored-by: emil User <emil.simeonov@tutanota.com>
2026-08-09 00:59:55 +00:00
emil Userandemo 30389ff3e7 DEVX-150: feat(setup): mirror Ansible collections from Gitea registry with auth
Co-authored-by: emil User <emil.simeonov@tutanota.com>
2026-08-08 21:25:00 +00:00
kiretoandemo ed3bd75367 DEVX-149: fix: unique molecule container names per CI runner
Co-authored-by: kireto <kireto@oblachno.com>
2026-08-05 19:01:54 +00:00
kiretoandemo e35ee2d71a DEVX-148: fix: unique molecule container names per CI runner
Co-authored-by: kireto <kireto@oblachno.com>
2026-08-03 22:57:58 +00:00
emil Userandemo 9bb461e12f DEVX-146: fix: scale check_test_speed limits on CI runners
Co-authored-by: emil User <emil.simeonov@tutanota.com>
2026-08-03 21:40:17 +00:00
emo aa93e894a6 DEVX-1: fix: add User-Agent header to _download in install_tools 2026-08-03 14:40:51 +00:00
emil User d743ba93eb DEVX-144: fix: bake promtool into ci-full image, add download timeout, speed up tests 2026-07-17 02:10:17 +00:00
emil User a02bf6d70e DEVX-143: fix: add retry logic to TeaCLI for transient HTTP errors (502/503/504/429) 2026-07-17 00:44:27 +00:00
emil User a7a8637244 DEVX-142: fix: tea CLI login failure handling, error messages, release retry 2026-07-16 14:26:15 +00:00
emil User c62c560c85 DEVX-141: feat: add promtool to install_tools for alert rule validation 2026-07-14 23:18:29 +00:00
emil User d8ceb6c8a1 DEVX-140: feat: make check_test_isolation configurable via pyproject.toml 2026-07-14 16:29:31 +00:00
emil User ddfbdec956 DEVX-136: feat: add fix_pr_title module and update_pr API method 2026-07-13 23:55:11 +00:00
emil User 02b27dd343 DEVX-134: feat: add I/O function isolation check and skip integration tests 2026-07-13 02:57:54 +00:00
emil User 50dcb67083 DEVX-133: fix: auto-discover molecule root instead of hardcoding gitea-runner 2026-07-13 02:25:59 +00:00
emil User f44b321f37 DEVX-129: test: cover crypto.py line 37 (retry on leading dash) 2026-07-13 01:05:20 +00:00
emil User 77c2f7e043 DEVX-129: feat: test isolation pytest plugin, shift-left quality gates, dep upgrades 2026-07-13 00:57:28 +00:00
emil User d035b620e0 DEVX-127: fix: fall back to CI token when reviewer self-approval is rejected 2026-07-12 16:33:53 +00:00
emil User cb84dae050 DEVX-126: ci: consolidate CI and post-merge workflows 2026-07-12 01:52:40 +00:00
emil User 4cde7de696 DEVX-125: feat: detect double-prefix in Vikunja task title during pre-merge validation 2026-07-11 23:07:45 +00:00
emil ef3b882e5b DEVX-124: feat: extract shared utilities from infra and grm into devx 2026-07-09 11:51:50 +00:00
emil 0228fce5b9 DEVX-123: feat: introduce role-based Gitea API token environment variables 2026-07-08 19:30:10 +00:00
emil ef08513bcf DEVX-122: feat: consolidate docs checks into devx-docs-check target 2026-07-07 22:00:07 +00:00
emil 6a463a93d2 DEVX-121: fix: GiteaClient.set_repo_variable uses PUT instead of PATCH 2026-07-07 15:51:45 +00:00
emil f98534ebe2 DEVX-119: feat: add GiteaClient repo variable methods and parallelize pytest-cov 2026-07-07 11:57:04 +00:00
emilandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> f50c4c1e00 DEVX-118: fix: use Gitea wiki dash-marker filename convention
Gitea appends a ".-" suffix before ".md" for wiki page titles that
contain dashes, to distinguish literal dashes from space-to-dash
conversions. For example, "Getting-Started" becomes
"Getting-Started.-.md", while "Architecture" becomes "Architecture.md".

Previously the code wrote "Getting-Started.md" which Gitea couldn't
recognize as a valid wiki page, causing verification to fail with
"page not found" for 15 of 21 pages.

Also force-push to handle concurrent CI runs that may have pushed to
the wiki repo between our clone and push.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-06 15:21:22 +02:00
emilandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> c97b249935 DEVX-118: fix: add delay before wiki verification to avoid race condition
Gitea needs a few seconds to process pushed wiki commits before a
re-clone will see them. Add a 5s sleep after a successful push before
verification re-clones the wiki.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-06 15:00:02 +02:00
emilandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> f017fec8f5 DEVX-118: fix: configure git identity before commit in sync_wiki
CI environments may lack git user.email/user.name config, causing
git commit to fail with exit code 128. Set identity explicitly before
committing wiki changes.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-06 11:41:36 +02:00
emilandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> 0a5625b70b DEVX-118: refactor: rewrite sync_wiki.py to use git-based approach
Replace the unreliable Gitea wiki API with direct Git operations:
- Clone {repo}.wiki.git, copy docs with link transformation, push
- Faster: single git push vs N API calls
- More reliable: no API timeouts or rate limits
- Atomic: all pages sync in one commit
- Auto-pruning: stale wiki pages removed automatically
- Link transformation: [text](file.md) → [text](file) for wiki format
- 36 new tests covering transform_links, clone, sync_files, commit, verify

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-06 10:26:00 +02:00
emilandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> fb342e7b9d DEVX-118: feat: enrich lint_docs.py with single H1, max depth, line length, code block lang, orphan checks
- Add check_single_h1: each markdown file should have at most one H1
- Add check_max_heading_depth: headings should not exceed H4 (configurable)
- Add check_line_length: warn on lines >120 chars (non-blocking — badge URLs)
- Add check_code_block_languages: fenced code blocks must specify a language
- Add check_orphan_docs: warn on docs not linked from index.md or mapping.json
- Fix all code blocks in docs to specify language (text for plain blocks)
- Fix duplicate H1 in .vale/styles/devx/README.md
- Add 18 new tests for full coverage of new checks

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-06 10:15:54 +02:00