Commit Graph

81 Commits

Author SHA1 Message Date
432487f4e8 M10: 5/6 recipes green via real !testme; lasuite-docs upgrade failed (retrying)
Some checks reported errors
continuous-integration/drone/push Build is passing
continuous-integration/drone Build was killed
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 09:31:49 +01:00
ed3f087875 M10: real-!testme path proven on custom-html (build #84, 3 stages green via PR)
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 08:35:14 +01:00
4d5f7e25c6 fix: abra app upgrade -o (offline) — was 401'ing fetching tags from the private mirror origin
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 08:31:40 +01:00
a2f3b14745 fix: upstream tag fetch needs explicit refspec (bare --tags errors 'no remote HEAD')
Some checks failed
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is failing
git fetch --tags <url> without a refspec errors 'couldn't find remote ref HEAD'; use
'refs/tags/*:refs/tags/*'. Verified: brings custom-html's 18 upstream version tags into the mirror
PR clone so the upgrade stage finds a previous published version (was skipping).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 08:28:22 +01:00
c277029f84 M10/D10: enable real-!testme path — fetch upstream tags + enroll 6 recipes in POLL_REPOS
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
fetch_recipe (SRC+REF/PR path) now read-only fetches published version tags from the public upstream
into the mirror clone, so the upgrade stage finds a previous published version (mirror PR branches
carry no tags → upgrade would skip). Guardrail-safe: only fetches tags, never pushes to the recipe
repo; plain git so the bot token isn't sent to upstream. Adds the 6 D10 recipes to the bridge
POLL_REPOS so !testme on their PRs triggers runs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 08:21:43 +01:00
27cce50f4c review: M8/D7 PASS — overview matches reality (6 recipes, corroborated build #s), badges, PR outcome reflection
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-27 08:11:32 +01:00
38f83c85ea M8/D7 gate CLAIMED: PR-comment outcome reflection verified; dashboard live
All checks were successful
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 08:04:53 +01:00
2c8ee4297c M8/D7: bridge reflects final pass/fail onto the PR comment + content-hash image tag
Some checks failed
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is failing
After triggering a build, the bridge spawns a watcher thread that polls the Drone build to
completion and edits its run-link PR comment to  passed /  <status> (Gitea PATCH
issues/comments/{id}, verified). post_comment now returns the comment id. Also gives the bridge
image a content-hash tag so the swarm service actually rolls on bridge.py changes (was stuck on
:latest). Completes the D7 'PR comment reflects outcome' requirement.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 08:00:40 +01:00
6bb3df0139 review: M7/D6 PASS — secret-grep clean across logs+dashboard+git; sops rotation doc matches reality
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-27 07:55:33 +01:00
537fd47818 M7/D6 gate CLAIMED: rotation doc + redaction; M6.5 PASS recorded
All checks were successful
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 07:45:19 +01:00
fc07d15800 M7/D6: secrets rotation doc + log redaction filter
All checks were successful
continuous-integration/drone/push Build is passing
docs/secrets.md documents the 3 secret classes (A1 external, A2 internal-generated, B recipe-app),
the sops-nix decryption chain, and rotation procedures for each (cert version bump, sops re-encrypt +
swarm-secret version bump, recipe-app ephemeral). run_recipe_ci streams each stage's output through a
redaction filter that masks any /run/secrets/* value (>=8 chars) before it reaches Drone logs —
belt-and-suspenders over 'harness never prints secrets + abra doesn't echo'. Live streaming + exit
code preserved (locally tested). Recipe-ci clones cc-ci fresh per build, so this applies next run.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 07:44:53 +01:00
b832a8d844 STATUS/BACKLOG: M8 dashboard overview+badges live; remaining = PR-outcome reflection, M7, M9
All checks were successful
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 07:27:40 +01:00
c39d4fb936 M8/D7: dashboard overview + badges live at ci.commoninternet.net (verified via gateway)
All checks were successful
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 07:27:02 +01:00
307c7dc91e review: M6.5 PASS — all 6 recipes 3-stage green (Drone builds corroborated) + D5 (no harness surgery) + bluesky-swap documented
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-27 07:24:43 +01:00
2f3d1df1c7 dashboard: content-hash image tag so stack deploy rolls on code change (not stuck on :latest)
All checks were successful
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 07:24:21 +01:00
9ede87c7cc dashboard: don't list the cc-ci repo itself as a recipe row (Adversary !testme noise)
All checks were successful
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 07:20:42 +01:00
60d917646b M8/D7: results dashboard — overview + SVG badges at ci.commoninternet.net
All checks were successful
continuous-integration/drone/push Build is passing
Stdlib HTTP service (like the bridge): polls the Drone API for recipe-CI builds (event=custom),
groups latest-run-per-recipe, renders a YunoHost-CI-like overview table with pass/fail/running
badges + links to the canonical Drone run, plus /badge/<recipe>.svg. Nix-built OCI image, swarm
service on proxy, traefik Host(ci.commoninternet.net) (the bridge's /hook rule stays higher
priority by length). Reuses the Drone token (read-only). Reconcile oneshot like bridge/drone.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 07:17:12 +01:00
8b4dc16227 M6.5: n8n canonical Drone #63 success — all 6 D10 recipes green via pipeline
All checks were successful
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 07:14:51 +01:00
91b241f89e M6.5 CLAIMED: n8n (recipe #6) full 3-stage green — all 6 D10 recipes done across all categories
All checks were successful
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 07:09:15 +01:00
d4f78e374a BACKLOG: recipe #6 = n8n (bluesky swapped); dedupe M6.5 lines
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 06:49:35 +01:00
1cc225949e M6.5: lasuite-docs canonical Drone #57 success (5 recipes green via pipeline)
All checks were successful
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 06:49:09 +01:00
032f314eff M6.5: enroll n8n (recipe #6, workflow automation) — tests authored (single-service, .n8n volume)
All checks were successful
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 06:48:39 +01:00
689913b140 DECISIONS: D10 #6 bluesky-pds (TLS-passthrough) swapped to n8n — caddy self-ACME conflicts with no-ACME design
All checks were successful
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 06:42:37 +01:00
69c3cf9574 M6.5: lasuite-docs (recipe #5, multi-service+S3) full 3-stage green; TIMEOUT fix; Drone #57 in flight
All checks were successful
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 06:41:01 +01:00
daf67e53b9 M6.5: enroll lasuite-docs (recipe #5, multi-service + S3/MinIO) — install verified green
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
9-service stack (frontend/backend/celery/y-provider/docspec/postgres/redis/minio/nginx) converges
9/9 and serves the SPA; install 2 passed on host. Root-caused a deploy timeout: cold-pulling ~9
large images exceeds abra's default 300s convergence TIMEOUT -> bumped to 900 via EXTRA_ENV (the
generic per-recipe mechanism, no harness surgery). upgrade/backup use a postgres marker (docs/docs)
exercising the pg_backup.sh DB-dump hook; verifying next.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 06:32:23 +01:00
7558654d98 review: reconciliation — all gates M0-M6 PASS (<24h); STATUS CLAIMED strings stale; M6.5 in-flight, no open claim
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-27 06:18:07 +01:00
b2bf51f754 review: M6.5 running evidence — cryptpad #46 + matrix-synapse #51 3-stage corroborated (4 recipes green)
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-27 06:13:51 +01:00
79550d3887 M6.5: matrix-synapse canonical Drone run #51 success (4 recipes now green via pipeline)
All checks were successful
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 05:56:31 +01:00
d5c79773d4 M6.5: matrix-synapse (recipe #4) full 3-stage green on host (postgres-marker DB-hook); Drone #51 in flight
All checks were successful
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 05:46:04 +01:00
d6a8f421a7 M6.5: enroll matrix-synapse (recipe #4, DB+media/large-volume) — install verified green
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
install 2 passed on host (~2.7m): synapse client API 200 + real versions JSON, no extra config
(SYNAPSE_SERVER_NAME=DOMAIN). upgrade/backup author postgres-marker assertions exercising the
recipe's pg_backup.sh dump/restore hook (the meaningful matrix data path); verifying next.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 05:38:40 +01:00
9b5910bef8 review: close A3 (verified teardown reaps env-less orphan via docker fallback); A2 mechanism verified, live janitor sweep pending idle
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-27 05:02:40 +01:00
2a288cac08 M6.5: cryptpad canonical Drone run #46 success (3 recipes now green via pipeline)
All checks were successful
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 05:01:57 +01:00
daa0a7e6c4 M6.5: cryptpad (recipe #3) full 3-stage green on host; record set_env/RESTIC backup fix
All checks were successful
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 04:56:12 +01:00
451cca3ebd fix: set_env newline-safe — RESTIC_REPOSITORY was glued onto a comment line (backups broke)
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
backup-bot-two's .env.sample ends with a newline-less comment, so set_env's bare
append concatenated RESTIC_REPOSITORY onto it (commenting it out). The backupbot
container then lacked RESTIC_REPOSITORY and 'abra app backup create' KeyError'd —
breaking the backup stage for recipes without a custom backup hook (cryptpad).
set_env now ensures a trailing newline before appending (applied to drone.nix too,
same latent bug). Re-verify keycloak backup, which earlier passed off an older deploy.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 04:50:16 +01:00
26cbc06120 review: M6 PASS — custom-html 3-stage + keycloak full 3-stage (build #39 corroborated) + D4 recipe-local (own run) + D5
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-27 04:43:41 +01:00
ebb4c0cbca M6.5: enroll cryptpad (recipe #3, stateful/no-DB) + generic per-recipe EXTRA_ENV
All checks were successful
continuous-integration/drone/push Build is passing
Adds a shared-harness EXTRA_ENV mechanism (recipe_meta.py dict or domain-callable),
applied in deploy_app at every deploy path — no per-recipe harness surgery (D5).
cryptpad uses it for its required distinct SANDBOX_DOMAIN. Tests assert data
survival via a marker file in the backed-up cryptpad_data volume (exec_in_app,
since cryptpad data isn't HTTP-served).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 04:41:44 +01:00
2ade2914c1 STATUS: M3 PASS; keycloak 3-stage green; cryptpad (recipe #3) next with recon
All checks were successful
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 04:12:24 +01:00
180094a366 M6.5: keycloak full 3-stage green via recipe-ci pipeline (build #39, DB data survival)
All checks were successful
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 04:10:35 +01:00
fa410ea4c6 review: D6 leak scan extended to recipe-CI build logs — clean (no app-secret leak)
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-27 04:04:51 +01:00
d6f0f67d49 review: M3 PASS (live: !testme 12s trigger, re-run, !testmexyz no-trigger, org-auth); close A4 (cap=1 mitigates)
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
2026-05-27 03:14:49 +01:00
b477274e67 STATUS/JOURNAL: A4 mitigated by capacity=1; A2/A3 fixed-in-code, awaiting Adversary re-test
All checks were successful
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 03:10:36 +01:00
17e9896516 STATUS/JOURNAL/BACKLOG: recipe-ci integration green (build #33), bridge→Drone→harness wired
All checks were successful
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 03:08:32 +01:00
7aa0346902 harness: backup/restore pass -C -o; catalogue fetch re-clones clean
Some checks failed
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is failing
Two fixes surfaced by the first real recipe-ci run through Drone:
- abra app backup/restore now pass -C -o (current checkout, no remote fetch) like
  every other recipe-touching call — without -o they fetch recipe tags from the
  (private) remote and fail 'authentication required: Unauthorized'.
- fetch_recipe's catalogue path rm's the recipe dir first so a leftover private-mirror
  remote from a prior SRC+REF run can't poison version resolution / backup.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 03:05:03 +01:00
bc8baae2c0 drone: recipe-ci step uses HOME=/root so abra finds /root/.abra config
Some checks failed
continuous-integration/drone Build is failing
continuous-integration/drone/push Build is passing
The exec runner sets HOME to a per-build workspace, leaving ~/.abra empty
(FATA directory is empty: .../home/drone/.abra/servers). Force HOME=/root in the
step so abra and the harness's ~/.abra/recipes resolve to the real config, as the
manual runs did. Safe at capacity=1 (no concurrent build shares /root/.abra).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 03:00:20 +01:00
9d51cb66b7 drone: add recipe-ci pipeline (event=custom) running run_recipe_ci.py
Some checks failed
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is failing
Splits .drone.yml into a push-triggered self-test pipeline and a custom-triggered
recipe-ci pipeline. The bridge fires event=custom builds with RECIPE/REF/PR/SRC
params; recipe-ci runs the shared harness (install/upgrade/backup + recipe-local)
with STAGES set and CCCI_JANITOR_MAX_AGE=0 (safe at capacity=1), concurrency limit 1.
Connects the verified !testme trigger to actual recipe CI (D2/D10 path).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 02:58:35 +01:00
6bdf43febd STATUS: M3 CLAIMED (polling primary verified) + resource-safety section; clear webhook blocker
All checks were successful
continuous-integration/drone/push Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 02:56:28 +01:00
72ff8e213d resource safety: MAX_TESTS=capacity=1 + per-build 60m timeout (orchestrator design change)
All checks were successful
continuous-integration/drone/push Build is passing
Bound live test apps on the single 28GiB node. DRONE_RUNNER_CAPACITY=1 (MAX_TESTS)
caps concurrent builds; Drone auto-queues the rest natively. deploy-drone reconcile
sets the cc-ci repo build timeout to 60m (best-effort PATCH, non-fatal) so a hung
build is killed and frees its slot. Janitor remains the backstop for SIGKILL'd builds.

Verified on host: DRONE_RUNNER_CAPACITY=1; repo timeout=60 via Drone API.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 02:53:29 +01:00
7addb9686c bridge: polling primary + org-membership auth (orchestrator design change)
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
Polling is now the primary, read-only trigger (always-on thread); the /hook
webhook is an optional admin-registered push optimization deduped by comment id.
Authorize commenters via GET /orgs/{owner}/members/{user} (204, read-level) +
optional allowlist, replacing the admin-requiring /collaborators permission
endpoint. Bot never self-registers webhooks. Enroll = POLL_REPOS + tests/<recipe>/.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 02:41:25 +01:00
25b628e959 harness: app_new uses chaos only when no version (version => clean tag checkout)
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 02:05:54 +01:00
38dcdc7750 review: preliminary D6 leak scan of published Drone logs — clean (no infra-secret leaks)
All checks were successful
continuous-integration/drone/push Build is passing
2026-05-27 02:05:28 +01:00