Commit Graph
130 Commits
Author SHA1 Message Date
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
emilandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> bbf0c81c32 DEVX-118: feat: enhance documentation-as-code with badges, version refs, Vale
- Fix badge system: clean .badges dir from orphan branch, add version
  verification, make badges job depend on release (avoids stale version
  badge race condition)
- Add check_doc_versions.py: lint tool that verifies docs version
  references match current __version__, with --fix for auto-update
- Integrate check_doc_versions into release process (auto-updates docs
  on every release commit)
- Add Vale prose linter integration: .vale.ini, custom styles for
  terminology and code block language, CI step, make target
- Fix stale version references in docs (0.27.0 → 0.33.4)
- Fix e.g. → for example in docs (Google.Latin Vale rule)
- Add CI steps for check_doc_versions and Vale to quality workflow
- Add make targets: devx-check-doc-versions, devx-vale

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

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-06 10:03:47 +02:00
emil e796b06a91 DEVX-117: refactor: remove project-specific references from devx 2026-07-06 06:17:52 +00:00
emil d623a64344 DEVX-115: fix: make wiki sync resilient to API timeouts and stale page lists 2026-07-06 04:55:06 +00:00
emil 9f02ccb40d DEVX-113: fix: abort sync_wiki when list_wiki_pages fails 2026-07-05 19:17:10 +00:00
emil 20ea80135c DEVX-112: fix: build images after post-merge publish, not on push 2026-07-05 14:46:33 +00:00
emil 2c0118111d DEVX-111: feat: add check_api_identity_checks, setup_ssh_key, and api utils 2026-07-05 14:11:58 +00:00
emil d59de06652 DEVX-110: feat: extract docker-login, tofu-ops, check-deps, install-tofu to Python tools 2026-07-01 23:00:28 +00:00
emil 77c1af8ed3 DEVX-110: feat: centralize venv management in devx.mak 2026-07-01 22:34:49 +00:00
emil 85b5ec1485 DEVX-108: feat: add standard label creation to configure_repo 2026-07-01 14:03:48 +00:00