Complete sanitization pass to ensure consistency: **1. Repository/Project Name Changes:** - trcaa-devops_investigation → tftsr-devops_investigation (everywhere) - gogs.trcaa.com → gogs.tftsr.com (all URLs) - ollama-ui.trcaa.com → ollama-ui.tftsr.com **2. Internal CI URLs (must use 172.0.0.29):** - gitea.tftsr.com:3000 → 172.0.0.29:3000 in: - AGENTS.md - README.md - docs/architecture/README.md - docs/wiki/*.md - CI runners cannot reach external DNS **3. Code Simplifications:** - MSIGenAI/TFTSRGenAI → GenAI (src-tauri/src/ai/openai.rs) - Cleaner comments without org-specific references **4. Build System Updates:** - Makefile: GH_TOKEN → GOGS_TOKEN, GH_REPO → GOGS_REPO - Commented out GitHub release upload commands - Fixed lib name: tftsr_lib → trcaa_lib (src/main.rs) **5. Documentation Cleanup:** - CLAUDE.md: Fixed wiki URL, Woodpecker→Gitea Actions - Removed PLAN.md, SECURITY_AUDIT.md (not needed in git) - Removed hackathon docs (HACKATHON-*.md) - Removed v1.0.5/7/8 summary docs (superseded) **6. Preserved:** - TRCAA (all caps) = application name (correct!) - trcaa package name in Cargo.toml (correct!) - trcaa_lib library name (correct!) **Test Results:** 308 Rust + 92 frontend tests passing Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
6.0 KiB
CI Runner Speed Optimization via Pre-baked Images + Caching
Description
Every CI run (both test.yml and auto-tag.yml) was installing system packages from scratch
on each job invocation: apt-get update, Tauri system libs, Node.js via nodesource, and in
the arm64 job — a full rustup install. This was the primary cause of slow builds.
The repository already contains pre-baked builder Docker images (.docker/Dockerfile.*) and a
build-images.yml workflow to push them to the local Gitea registry at gitea.tftsr.com:3000.
These images were never referenced by the actual CI jobs — a critical gap. This work closes
that gap and adds actions/cache@v3 for Cargo and npm.
Acceptance Criteria
Dockerfile.linux-amd64includesrustfmtandclippycomponentsDockerfile.linux-arm64includesrustfmtandclippycomponentstest.ymlRust jobs usegitea.tftsr.com:3000/sarman/tftsr-linux-amd64:rust1.88-node22test.ymlRust jobs have no inlineapt-getorrustup component addstepstest.ymlRust jobs includeactions/cache@v3for~/.cargo/registrytest.ymlfrontend jobs includeactions/cache@v3for~/.npmauto-tag.ymlbuild-linux-amd64uses pre-bakedtftsr-linux-amd64imageauto-tag.ymlbuild-windows-amd64uses pre-bakedtftsr-windows-crossimageauto-tag.ymlbuild-linux-arm64uses pre-bakedtftsr-linux-arm64image- All three build jobs have no
Install dependenciesstep - All three build jobs include
actions/cache@v3for Cargo and npm docs/wiki/CICD-Pipeline.mddocuments pre-baked images, cache keys, and server prerequisitesbuild-images.ymltriggered manually before merging to ensure images exist in registry
Work Implemented
.docker/Dockerfile.linux-amd64
Added RUN rustup component add rustfmt clippy after the existing target add line.
The rust-fmt-check and rust-clippy CI jobs now rely on these being pre-installed
in the image rather than installing them at job runtime.
.docker/Dockerfile.linux-arm64
Added && /root/.cargo/bin/rustup component add rustfmt clippy appended to the
existing rustup installation RUN command (chained with && to keep it one layer).
.gitea/workflows/test.yml
- rust-fmt-check, rust-clippy, rust-tests: switched container image from
rust:1.88-slim→gitea.tftsr.com:3000/sarman/tftsr-linux-amd64:rust1.88-node22. Removedapt-get install gitfrom Checkout steps (git is pre-installed in image). Removedapt-get install libwebkit2gtk-...steps. Removedrustup component add rustfmtandrustup component add clippysteps. Addedactions/cache@v3step for~/.cargo/registry/index,~/.cargo/registry/cache,~/.cargo/git/dbkeyed onCargo.lockhash. - frontend-typecheck, frontend-tests: kept
node:22-alpineimage (no change needed). Addedactions/cache@v3step for~/.npmkeyed onpackage-lock.jsonhash.
.gitea/workflows/auto-tag.yml
- build-linux-amd64: image
rust:1.88-slim→tftsr-linux-amd64:rust1.88-node22. Removed Checkout apt-get install git, removed entire Install dependencies step. Removedrustup target add x86_64-unknown-linux-gnufrom Build step. Added cargo + npm cache. - build-windows-amd64: image
rust:1.88-slim→tftsr-windows-cross:rust1.88-node22. Removed Checkout apt-get install git, removed entire Install dependencies step. Removedrustup target add x86_64-pc-windows-gnufrom Build step. Added cargo (with-windows-suffix key to avoid collision) + npm cache. - build-linux-arm64: image
ubuntu:22.04→tftsr-linux-arm64:rust1.88-node22. Removed Checkout apt-get install git, removed entire Install dependencies step (~40 lines). Removed. "$HOME/.cargo/env"(PATH already set viaENVin Dockerfile). Removedrustup target add aarch64-unknown-linux-gnufrom Build step. Added cargo (with-arm64-suffix key) + npm cache.
docs/wiki/CICD-Pipeline.md
Added two new sections before the Test Pipeline section:
- Pre-baked Builder Images: table of all three images and their contents, rebuild triggers, how-to-rebuild instructions, and the insecure-registries Docker daemon prerequisite for gitea.tftsr.com.
- Cargo and npm Caching: documents the
actions/cache@v3key patterns in use, including the per-platform cache key suffixes for cross-compile jobs. Updated the Test Pipeline section to reference the correct pre-baked image name. Updated the Release Pipeline job table to show which image each build job uses.
Testing Needed
-
Pre-build images (prerequisite): Trigger
build-images.ymlviaworkflow_dispatchon Gitea Actions UI. Confirm all 3 images are pushed and visible in the registry. -
Server prerequisite: Confirm
/etc/docker/daemon.jsonongitea.tftsr.comcontains{"insecure-registries":["gitea.tftsr.com:3000"]}and Docker was restarted after. -
PR test suite: Open a PR with these changes. Verify:
- All 5 test jobs pass (
rust-fmt-check,rust-clippy,rust-tests,frontend-typecheck,frontend-tests) - Job logs show no
apt-getorrustup component addoutput - Cache hit messages appear on second run
- All 5 test jobs pass (
-
Release build: Merge to master. Verify
auto-tag.ymlruns and:- All 3 Linux/Windows build jobs start without Install dependencies step
- Artifacts are produced and uploaded to the Gitea release
- Total release time is significantly reduced (~7 min vs ~25 min before)
-
Expected time savings after caching warms up:
Job Before After rust-fmt-check ~2 min ~20 sec rust-clippy ~4 min ~45 sec rust-tests ~5 min ~1.5 min frontend-typecheck ~2 min ~30 sec frontend-tests ~3 min ~40 sec build-linux-amd64 ~10 min ~3 min build-windows-amd64 ~12 min ~4 min build-linux-arm64 ~15 min ~4 min PR test total (parallel) ~5 min ~1.5 min Release total ~25 min ~7 min