Desktop (Tauri) / Tauri desktop (Linux) (push) Successful in 3m41s
Native packages the installer can actually fetch, before task 2014 wires up the fetching. Arch (task 2022, re-scoped): the source PKGBUILD is gone — asking every user to install rust+node and compile for minutes isn't distribution. Replaced by desktop/packaging/arch/package-prebuilt.sh, which wraps the binary the Linux job already built into a .pkg.tar.zst. No second Rust build, no Arch CI image: the binary bundles nothing and resolves webkit/gtk/soup by soname, identical on both distros, with SQLite compiled in and glibc used in the safe built-old/run-new direction. CI is Debian and has no pacman, so the step logs .PKGINFO plus the full file listing for audit instead of pretending to verify. Debian (task 2074): install.sh hands the .deb to every Debian/Ubuntu user and nothing had ever inspected it. tauri.conf.json now declares libwebkit2gtk-4.1-0 + libgtk-3-0 explicitly rather than trusting inference — and deliberately declares no appindicator or sqlite dep, since tauri is built with features=[] and rusqlite is "bundled". desktop/packaging/deb/verify.sh prints the generated control file, cross-checks it against what the ELF actually needs via dpkg-shlibdeps, confirms every declared dep exists in apt, and clean-container installs when a docker CLI is available. Both artifacts join the run artifact and the tagged release; install.sh grows a pacman branch so Arch/CachyOS gets a native install instead of the AppImage fallback. Still no release cut (rule 2). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SreJkbxB4gx8pPsu8QbLPi
4.1 KiB
4.1 KiB
CI Requirements — ThoughtSync
Spec lives in
docs/process.mdin the CI-Runner repo.
Runtime image
git.fabledsword.com/bvandeusen/ci-python:3.14
Selected via container.image (not a runs-on label) on all four jobs in
.forgejo/workflows/ci.yml: typecheck (Vue/TS), lint (ruff), test (pytest),
build (docker buildx).
Image deps used
- python 3.12+ (the runtime
Dockerfiletargets python:3.12-slim; tests run on the image's 3.14 — both >=3.12, so results stay representative) - node 24 —
npm ci+vue-tscin the typecheck job, and the frontend builder stage inside the productionDockerfile. (Also required by the JS-basedactions/checkoutaction — a Node-less runner fails every job at checkout.) - ruff — lint job runs
ruff check src/with zero install overhead - uv — test job creates the venv (
uv venv /opt/venv) and installs the package with dev deps - docker CLI + buildx — build job pushes the dev/release image to the Forgejo registry
Per-job tool installs
Nothing installed at job time beyond what the image provides — all four jobs run
entirely on ci-python:3.14.
Notes
- No
actions/cache. Deliberately omitted for npm/uv: it's a GitHub-fetched JS action and on a cold runner concurrent jobs race fetching it. We lean on the pinnedci-pythonimage's pre-installed toolchain instead;npm ci/uv pip installcold cost is a non-blocker. - Build gates on
typecheck+lintonly. Thetestjob runs in parallel for visibility but does not block the dev image push. DB-backed / integration tests run against the dev image manually — ThoughtSync's unit tests are DB-free (no Postgres service lane in CI yet). devpush ->:dev+:<sha>;v*tag ->:latest+:<version>+:<sha>(family rule 46).- The production runtime
Dockerfiletracks python:3.12 so test results stay representative of the deployed image.
Desktop (Tauri) lane — separate workflow
The Tauri desktop client (desktop/) builds in its own workflow,
.forgejo/workflows/desktop.yml, NOT in ci.yml — it's a heavy Rust + AppImage
build (~20–40 min) that should only run on desktop/** changes, not on every
backend/frontend push.
- Image:
git.fabledsword.com/bvandeusen/ci-tauri:1.97(Rust + Node + WebKitGTK 4.1 + Tauri v2 Linux deps +tauri-cli). Selected viacontainer.image;runs-on: python-ciis only a scheduling label. - Steps: build the shared frontend (embedded by
generate_context!) →cargo tauri icon app-icon.png(platform icon set from the committed 1024px source) →cargo fmt --check→cargo clippy -D warnings→cargo test→cargo tauri build(produces.deb+.AppImage) → de-bundle the AppImage's graphics libs → verify the.deb→ repackage for pacman. APPIMAGE_EXTRACT_AND_RUN=1is set: AppImage tooling FUSE-mounts by default and CI containers have no/dev/fuse.- Packaging tools used from the image (none installed at job time, rule 5):
dpkg-deb/dpkg-query/apt-cacheanddpkg-shlibdeps(fromdpkg-dev, pulled in bybuild-essential) fordesktop/packaging/deb/verify.sh;tar+ a compressor fordesktop/packaging/arch/package-prebuilt.sh. Both scripts degrade gracefully rather than hard-failing on an absent optional tool:bsdtar(libarchive-tools) is used for the pacman package's.MTREEwhen present and skipped when not, compression falls back zstd → xz → gzip, and the.debclean-container install test runs only if a docker CLI is available. Addinglibarchive-tools+zstd+ a docker CLI toci-tauriwould upgrade those degraded paths, but none of them block a green build. - Not verifiable in CI: the runner is Debian, so the pacman package cannot be
pacman -U-tested here. That step logs.PKGINFO+ the full file listing so the package is auditable from the run log; a real Arch install is the operator's confirm. - No Postgres lane (unchanged): the desktop app's local store + sync behavior is verified on the operator's machine, not in CI.