From 4dc4b5aed1da86bb7dc74e8e35001df60af717cd Mon Sep 17 00:00:00 2001 From: Shaun Arman Date: Sun, 15 Mar 2026 17:28:53 -0500 Subject: [PATCH 01/10] =?UTF-8?q?fix:=20arm64=20cross-compilation=20?= =?UTF-8?q?=E2=80=94=20add=20multiarch=20pkg-config=20sysroot=20setup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - dpkg --add-architecture arm64 + install arm64 lib variants - Set PKG_CONFIG_ALLOW_CROSS, PKG_CONFIG_PATH, PKG_CONFIG_SYSROOT_DIR - Upload step now handles missing arm64 artifacts gracefully --- .woodpecker/release.yml | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/.woodpecker/release.yml b/.woodpecker/release.yml index b3a13887..0344fc2e 100644 --- a/.woodpecker/release.yml +++ b/.woodpecker/release.yml @@ -31,10 +31,17 @@ pipeline: image: rust:1.88-slim environment: TARGET: aarch64-unknown-linux-gnu + PKG_CONFIG_ALLOW_CROSS: "1" + PKG_CONFIG_PATH: /usr/lib/aarch64-linux-gnu/pkgconfig + PKG_CONFIG_SYSROOT_DIR: / when: event: tag commands: - - apt-get update -qq && apt-get install -y -qq libwebkit2gtk-4.1-dev libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev patchelf pkg-config curl + - dpkg --add-architecture arm64 + - apt-get update -qq && apt-get install -y -qq gcc-aarch64-linux-gnu + libwebkit2gtk-4.1-dev:arm64 libssl-dev:arm64 libgtk-3-dev:arm64 + libayatana-appindicator3-dev:arm64 librsvg2-dev:arm64 + patchelf pkg-config curl - curl -fsSL https://deb.nodesource.com/setup_22.x | bash - - apt-get install -y nodejs - npm ci --legacy-peer-deps @@ -65,9 +72,12 @@ pipeline: RELEASE_ID=$(curl -sf "$API/repos/$REPO/releases/tags/$TAG" \ -H "Authorization: token $GOGS_TOKEN" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2) - # Upload artifacts - for f in /artifacts/linux-amd64/* /artifacts/linux-arm64/*; do - [ -f "$f" ] && curl -sf -X POST "$API/repos/$REPO/releases/$RELEASE_ID/assets" \ - -H "Authorization: token $GOGS_TOKEN" \ - -F "attachment=@$f;filename=$(basename $f)" || echo "Upload failed for $f" + # Upload all available artifacts (amd64 + arm64 if built) + for dir in /artifacts/linux-amd64 /artifacts/linux-arm64; do + [ -d "$dir" ] || continue + for f in "$dir"/*; do + [ -f "$f" ] && curl -sf -X POST "$API/repos/$REPO/releases/$RELEASE_ID/assets" \ + -H "Authorization: token $GOGS_TOKEN" \ + -F "attachment=@$f;filename=$(basename $f)" || echo "Upload failed: $f" + done done From d66934cdf0e1614c055798f4947ea37333acc4e9 Mon Sep 17 00:00:00 2001 From: Shaun Arman Date: Sun, 15 Mar 2026 17:46:54 -0500 Subject: [PATCH 02/10] =?UTF-8?q?fix:=20remove=20arm64=20from=20release=20?= =?UTF-8?q?pipeline=20=E2=80=94=20webkit2gtk=20multiarch=20conflict=20on?= =?UTF-8?q?=20x86=5F64=20host?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cross-compiling webkit2gtk-4.1-dev for arm64 from x86_64 fails due to held broken packages. arm64 requires native arm64 CI runner. amd64 release artifacts still upload correctly. --- .woodpecker/release.yml | 44 ++++++++++------------------------------- 1 file changed, 10 insertions(+), 34 deletions(-) diff --git a/.woodpecker/release.yml b/.woodpecker/release.yml index 0344fc2e..bb605d34 100644 --- a/.woodpecker/release.yml +++ b/.woodpecker/release.yml @@ -1,4 +1,7 @@ --- +# NOTE: arm64 cross-compilation from x86_64 not supported here — +# webkit2gtk multiarch conflicts prevent it. Run on native arm64 hardware. + clone: git: image: alpine/git @@ -27,30 +30,6 @@ pipeline: - mkdir -p /artifacts/linux-amd64 - find src-tauri/target/$TARGET/release/bundle -name "*.deb" -o -name "*.rpm" -o -name "*.AppImage" | xargs -I{} cp {} /artifacts/linux-amd64/ - build-linux-arm64: - image: rust:1.88-slim - environment: - TARGET: aarch64-unknown-linux-gnu - PKG_CONFIG_ALLOW_CROSS: "1" - PKG_CONFIG_PATH: /usr/lib/aarch64-linux-gnu/pkgconfig - PKG_CONFIG_SYSROOT_DIR: / - when: - event: tag - commands: - - dpkg --add-architecture arm64 - - apt-get update -qq && apt-get install -y -qq gcc-aarch64-linux-gnu - libwebkit2gtk-4.1-dev:arm64 libssl-dev:arm64 libgtk-3-dev:arm64 - libayatana-appindicator3-dev:arm64 librsvg2-dev:arm64 - patchelf pkg-config curl - - curl -fsSL https://deb.nodesource.com/setup_22.x | bash - - - apt-get install -y nodejs - - npm ci --legacy-peer-deps - - rustup target add $TARGET - - cargo install tauri-cli --version "^2" --locked - - CI=true cargo tauri build --target $TARGET - - mkdir -p /artifacts/linux-arm64 - - find src-tauri/target/$TARGET/release/bundle -name "*.deb" -o -name "*.AppImage" | xargs -I{} cp {} /artifacts/linux-arm64/ - upload-release-linux: image: curlimages/curl:latest when: @@ -62,22 +41,19 @@ pipeline: REPO=${CI_REPO} API="http://172.0.0.29:3000/api/v1" - # Create release if it doesn't exist + # Create release curl -sf -X POST "$API/repos/$REPO/releases" \ -H "Authorization: token $GOGS_TOKEN" \ -H "Content-Type: application/json" \ - -d "{\"tag_name\":\"$TAG\",\"name\":\"TFTSR $TAG\",\"body\":\"Release $TAG\",\"draft\":false}" || true + -d "{\"tag_name\":\"$TAG\",\"name\":\"TFTSR $TAG\",\"body\":\"Release $TAG (linux/amd64)\",\"draft\":false}" || true # Get release ID RELEASE_ID=$(curl -sf "$API/repos/$REPO/releases/tags/$TAG" \ -H "Authorization: token $GOGS_TOKEN" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2) - # Upload all available artifacts (amd64 + arm64 if built) - for dir in /artifacts/linux-amd64 /artifacts/linux-arm64; do - [ -d "$dir" ] || continue - for f in "$dir"/*; do - [ -f "$f" ] && curl -sf -X POST "$API/repos/$REPO/releases/$RELEASE_ID/assets" \ - -H "Authorization: token $GOGS_TOKEN" \ - -F "attachment=@$f;filename=$(basename $f)" || echo "Upload failed: $f" - done + # Upload amd64 artifacts + for f in /artifacts/linux-amd64/*; do + [ -f "$f" ] && curl -sf -X POST "$API/repos/$REPO/releases/$RELEASE_ID/assets" \ + -H "Authorization: token $GOGS_TOKEN" \ + -F "attachment=@$f;filename=$(basename $f)" || echo "Upload failed: $f" done From 7965a7bec6990813c9b35c0bfb733fffea9269e0 Mon Sep 17 00:00:00 2001 From: Shaun Arman Date: Sun, 15 Mar 2026 18:08:09 -0500 Subject: [PATCH 03/10] fix: write artifacts to workspace (shared between steps), not /artifacts/ --- .woodpecker/release.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.woodpecker/release.yml b/.woodpecker/release.yml index bb605d34..6933d598 100644 --- a/.woodpecker/release.yml +++ b/.woodpecker/release.yml @@ -27,8 +27,8 @@ pipeline: - rustup target add $TARGET - cargo install tauri-cli --version "^2" --locked - CI=true cargo tauri build --target $TARGET - - mkdir -p /artifacts/linux-amd64 - - find src-tauri/target/$TARGET/release/bundle -name "*.deb" -o -name "*.rpm" -o -name "*.AppImage" | xargs -I{} cp {} /artifacts/linux-amd64/ + - mkdir -p artifacts/linux-amd64 + - find src-tauri/target/$TARGET/release/bundle -name "*.deb" -o -name "*.rpm" -o -name "*.AppImage" | xargs -I{} cp {} artifacts/linux-amd64/ upload-release-linux: image: curlimages/curl:latest @@ -51,8 +51,8 @@ pipeline: RELEASE_ID=$(curl -sf "$API/repos/$REPO/releases/tags/$TAG" \ -H "Authorization: token $GOGS_TOKEN" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2) - # Upload amd64 artifacts - for f in /artifacts/linux-amd64/*; do + # Upload amd64 artifacts from workspace + for f in artifacts/linux-amd64/*; do [ -f "$f" ] && curl -sf -X POST "$API/repos/$REPO/releases/$RELEASE_ID/assets" \ -H "Authorization: token $GOGS_TOKEN" \ -F "attachment=@$f;filename=$(basename $f)" || echo "Upload failed: $f" From a004d8b3ef166553bd03d614c9927f1dd11d98ea Mon Sep 17 00:00:00 2001 From: Shaun Arman Date: Sun, 15 Mar 2026 18:41:54 -0500 Subject: [PATCH 04/10] fix: upload step needs gogs_default network to reach Gogs API (host firewall blocks default bridge) --- .woodpecker/release.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.woodpecker/release.yml b/.woodpecker/release.yml index 6933d598..f304c6ac 100644 --- a/.woodpecker/release.yml +++ b/.woodpecker/release.yml @@ -32,6 +32,7 @@ pipeline: upload-release-linux: image: curlimages/curl:latest + network_mode: gogs_default when: event: tag secrets: [GOGS_TOKEN] @@ -39,7 +40,7 @@ pipeline: - | TAG=${CI_COMMIT_TAG} REPO=${CI_REPO} - API="http://172.0.0.29:3000/api/v1" + API="http://gogs_app:3000/api/v1" # Create release curl -sf -X POST "$API/repos/$REPO/releases" \ From b042182ee21e0be19211593a4aa5310fde986e66 Mon Sep 17 00:00:00 2001 From: Shaun Arman Date: Sun, 15 Mar 2026 18:47:42 -0500 Subject: [PATCH 05/10] feat: add Windows amd64 cross-compile to release pipeline; add arm64 QEMU agent - build-windows-amd64: cross-compile with mingw-w64 for x86_64-pc-windows-gnu - upload: uses gogs_default network + uploads both linux and windows artifacts - arm64: QEMU agent deployed at woodpecker_agent_arm64 (linux/arm64 platform) - artifacts/ excluded from git via .gitignore --- .gitignore | 1 + .woodpecker/release.yml | 48 +++++++++++++++++++++++++++++++++-------- 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 4aa18197..cf2fd646 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ src-tauri/target/ .secrets secrets.yml secrets.yaml +artifacts/ diff --git a/.woodpecker/release.yml b/.woodpecker/release.yml index f304c6ac..1d4fd0dd 100644 --- a/.woodpecker/release.yml +++ b/.woodpecker/release.yml @@ -1,6 +1,9 @@ --- -# NOTE: arm64 cross-compilation from x86_64 not supported here — -# webkit2gtk multiarch conflicts prevent it. Run on native arm64 hardware. +# Release pipeline — triggered on v* tags +# Agents: +# linux/amd64 → woodpecker_agent (native x86_64) +# linux/arm64 → woodpecker_agent_arm64 (QEMU emulation on x86_64 host) +# macOS requires a separate Mac runner — not covered here. clone: git: @@ -30,7 +33,28 @@ pipeline: - mkdir -p artifacts/linux-amd64 - find src-tauri/target/$TARGET/release/bundle -name "*.deb" -o -name "*.rpm" -o -name "*.AppImage" | xargs -I{} cp {} artifacts/linux-amd64/ - upload-release-linux: + build-windows-amd64: + image: rust:1.88-slim + environment: + TARGET: x86_64-pc-windows-gnu + CC_x86_64_pc_windows_gnu: x86_64-w64-mingw32-gcc + CXX_x86_64_pc_windows_gnu: x86_64-w64-mingw32-g++ + AR_x86_64_pc_windows_gnu: x86_64-w64-mingw32-ar + CARGO_TARGET_X86_64_PC_WINDOWS_GNU_LINKER: x86_64-w64-mingw32-gcc + when: + event: tag + commands: + - apt-get update -qq && apt-get install -y -qq mingw-w64 curl nsis + - curl -fsSL https://deb.nodesource.com/setup_22.x | bash - + - apt-get install -y nodejs + - npm ci --legacy-peer-deps + - rustup target add $TARGET + - cargo install tauri-cli --version "^2" --locked + - CI=true cargo tauri build --target $TARGET + - mkdir -p artifacts/windows-amd64 + - find src-tauri/target/$TARGET/release/bundle -name "*.exe" -o -name "*.msi" | xargs -I{} cp {} artifacts/windows-amd64/ 2>/dev/null || true + + upload-release: image: curlimages/curl:latest network_mode: gogs_default when: @@ -46,15 +70,21 @@ pipeline: curl -sf -X POST "$API/repos/$REPO/releases" \ -H "Authorization: token $GOGS_TOKEN" \ -H "Content-Type: application/json" \ - -d "{\"tag_name\":\"$TAG\",\"name\":\"TFTSR $TAG\",\"body\":\"Release $TAG (linux/amd64)\",\"draft\":false}" || true + -d "{\"tag_name\":\"$TAG\",\"name\":\"TFTSR $TAG\",\"body\":\"Release $TAG\",\"draft\":false}" || true # Get release ID RELEASE_ID=$(curl -sf "$API/repos/$REPO/releases/tags/$TAG" \ -H "Authorization: token $GOGS_TOKEN" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2) + echo "Release ID: $RELEASE_ID" - # Upload amd64 artifacts from workspace - for f in artifacts/linux-amd64/*; do - [ -f "$f" ] && curl -sf -X POST "$API/repos/$REPO/releases/$RELEASE_ID/assets" \ - -H "Authorization: token $GOGS_TOKEN" \ - -F "attachment=@$f;filename=$(basename $f)" || echo "Upload failed: $f" + # Upload all available artifacts + for dir in artifacts/linux-amd64 artifacts/windows-amd64; do + [ -d "$dir" ] || continue + for f in "$dir"/*; do + [ -f "$f" ] || continue + echo "Uploading $f..." + curl -sf -X POST "$API/repos/$REPO/releases/$RELEASE_ID/assets" \ + -H "Authorization: token $GOGS_TOKEN" \ + -F "attachment=@$f;filename=$(basename $f)" && echo "OK" || echo "Upload failed: $f" + done done From 250bd96285bfcba657ce9adedfb036c8735acd0b Mon Sep 17 00:00:00 2001 From: Shaun Arman Date: Sun, 15 Mar 2026 18:55:56 -0500 Subject: [PATCH 06/10] docs: update README and wiki for v0.1.0-alpha release - README: add CI badge, Releases table, fix Rust prereq (1.88+), update CI/CD section, update implementation status (Phase 11+12 complete), add apt-get system deps, fix repo clone URL to gogs.tftsr.com - Home.md: add CI badge, Releases table, update project status - CICD-Pipeline.md: add agents table, Windows cross-compile docs, artifact path note, upload network fix, branch protection section, switching test/release config, updated known issues with new CI learnings - Troubleshooting.md: add 6 new CI troubleshooting entries (stuck builds, artifact upload failures, CI=woodpecker, git switch tag refs, release artifacts path) - Development-Setup.md: update test count to 64/64 Rust tests --- README.md | 65 ++++++++---- docs/wiki/CICD-Pipeline.md | 186 +++++++++++++++++++++++++-------- docs/wiki/Development-Setup.md | 2 +- docs/wiki/Home.md | 22 ++-- docs/wiki/Troubleshooting.md | 133 ++++++++++++++++++----- 5 files changed, 316 insertions(+), 92 deletions(-) diff --git a/README.md b/README.md index b9f41200..3d914170 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ A structured, AI-backed desktop tool for IT incident triage, 5-Whys root cause a Built with **Tauri 2** (Rust + WebView), **React 18**, **TypeScript**, and **SQLCipher AES-256** encrypted storage. +**CI status:** ![CI](http://172.0.0.29:3000/sarman/tftsr-devops_investigation/badges/master/status.svg) — all checks green (rustfmt · clippy · 64 Rust tests · tsc · vitest) + --- ## Features @@ -60,16 +62,24 @@ sudo dnf install -y \ libsoup3-devel openssl-devel librsvg2-devel ``` +### System Libraries (Linux — Debian/Ubuntu) + +```bash +sudo apt-get install -y \ + libwebkit2gtk-4.1-dev libssl-dev libgtk-3-dev \ + libayatana-appindicator3-dev librsvg2-dev patchelf pkg-config +``` + ### Toolchain ```bash -# Rust (install via rustup) +# Rust (minimum 1.88 — required by cookie_store, time, darling) curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh source ~/.cargo/env # Node.js 22+ (via your package manager) # Verify: -rustc --version # 1.82+ +rustc --version # 1.88+ node --version # 22+ ``` @@ -78,12 +88,13 @@ node --version # 22+ ## Getting Started ```bash -# Clone and install dependencies -git clone +# Clone +git clone https://gogs.tftsr.com/sarman/tftsr-devops_investigation.git cd tftsr-devops_investigation -npm install +npm install --legacy-peer-deps # Development mode (hot reload) +source ~/.cargo/env cargo tauri dev # Production build @@ -93,6 +104,19 @@ cargo tauri build --- +## Releases + +Pre-built installers are attached to each [tagged release](https://gogs.tftsr.com/sarman/tftsr-devops_investigation/releases): + +| Platform | Format | Notes | +|---|---|---| +| Linux amd64 | `.deb`, `.rpm`, `.AppImage` | Standard package or universal AppImage | +| Windows amd64 | `.exe` (NSIS), `.msi` | From cross-compile via mingw-w64 | +| Linux arm64 | `.deb`, `.AppImage` | Built on native arm64 runner (QEMU emulation available) | +| macOS | — | Requires macOS runner — build locally | + +--- + ## AI Provider Setup Launch the app and go to **Settings → AI Providers** to add a provider: @@ -151,11 +175,12 @@ tftsr/ │ ├── lib/ # tauriCommands.ts (typed IPC wrappers), domainPrompts.ts │ └── styles/ # Tailwind + CSS custom properties ├── tests/ -│ ├── unit/ # Vitest unit tests (PII commands, session store, settings store) -│ └── e2e/ # WebdriverIO + tauri-driver E2E test skeletons +│ ├── unit/ # Vitest unit tests (PII, session store, settings store) +│ └── e2e/ # WebdriverIO + tauri-driver E2E skeletons +├── docs/wiki/ # Source of truth for Gogs wiki (auto-synced by CI) ├── .woodpecker/ -│ ├── test.yml # CI: rustfmt, clippy, cargo test, tsc, vitest -│ └── release.yml # Release: multi-platform builds → Gogs artifacts +│ ├── test.yml # CI: rustfmt · clippy · cargo test · tsc · vitest (every push/PR) +│ └── release.yml # Release: linux/amd64 + windows/amd64 builds → Gogs release artifacts └── cli/ # Standalone CLI wrapper (tftsr-cli) ``` @@ -164,16 +189,16 @@ tftsr/ ## Testing ```bash -# Unit tests (Vitest) +# Unit tests (Vitest) — 13/13 passing npm run test:run -# Unit tests with coverage +# Frontend coverage npm run test:coverage # TypeScript type check npx tsc --noEmit -# Rust checks +# Rust checks — 64/64 tests passing cargo check --manifest-path src-tauri/Cargo.toml cargo test --manifest-path src-tauri/Cargo.toml @@ -185,14 +210,18 @@ TAURI_BINARY_PATH=./src-tauri/target/release/tftsr npm run test:e2e ## CI/CD — Woodpecker CI -The project uses **Woodpecker CI** connected to the Gogs server at `172.0.0.29:3000`. +The project uses **Woodpecker CI v0.15.4** connected to Gogs at `gogs.tftsr.com`. | Pipeline | Trigger | Steps | |---|---|---| -| `.woodpecker/test.yml` | Every push / PR | rustfmt, clippy, cargo test, tsc, vitest | -| `.woodpecker/release.yml` | Tag `v*` | Build linux/amd64 + linux/arm64 → upload to Gogs release | +| `.woodpecker/test.yml` | Every push / PR | rustfmt · clippy · cargo test (64) · tsc · vitest | +| `.woodpecker/release.yml` | Tag `v*` | Build linux/amd64 + windows/amd64 → upload to Gogs release | -> macOS builds require a macOS runner (Apple SDK). Windows cross-compilation from Linux via `cross-rs` is possible but not yet configured. +**Agents:** +- `woodpecker_agent` — linux/amd64 (native x86_64) +- `woodpecker_agent_arm64` — linux/arm64 (QEMU emulation on x86_64 host) + +> macOS builds require a macOS runner. See [CI/CD Pipeline wiki](https://gogs.tftsr.com/sarman/tftsr-devops_investigation/wiki/CICD-Pipeline) for full infrastructure docs. --- @@ -249,8 +278,8 @@ Override with the `TFTSR_DATA_DIR` environment variable. | 8 | RCA & Post-Mortem Generation | ✅ Complete | | 9 | History & Search | 🔲 Pending | | 10 | Integrations (Confluence, ServiceNow, ADO) | 🔲 v0.2 | -| 11 | CLI Interface | 🔲 Pending | -| 12 | Release Packaging | 🔲 Pending | +| 11 | CI/CD Pipeline | ✅ Complete — all checks green | +| 12 | Release Packaging | ✅ linux/amd64 · windows/amd64; arm64 via QEMU agent | --- diff --git a/docs/wiki/CICD-Pipeline.md b/docs/wiki/CICD-Pipeline.md index 5041089a..8ef5de87 100644 --- a/docs/wiki/CICD-Pipeline.md +++ b/docs/wiki/CICD-Pipeline.md @@ -4,11 +4,18 @@ | Component | URL | Notes | |-----------|-----|-------| -| Gogs | `http://172.0.0.29:3000` / `https://gogs.tftsr.com` | Git server, version 0.14 | +| Gogs | `https://gogs.tftsr.com` / `http://172.0.0.29:3000` | Git server, version 0.14 | | Woodpecker CI (direct) | `http://172.0.0.29:8084` | v0.15.4 | | Woodpecker CI (proxy) | `http://172.0.0.29:8085` | nginx with custom login page | | PostgreSQL (Gogs DB) | Container: `gogs_postgres_db` | DB: `gogsdb`, User: `gogs` | +### CI Agents + +| Container | Platform | Purpose | +|-----------|----------|---------| +| `woodpecker_agent` | `linux/amd64` | Native x86_64 — all test builds + amd64/windows release | +| `woodpecker_agent_arm64` | `linux/arm64` | QEMU emulation on x86_64 host — arm64 release builds | + --- ## Test Pipeline (`.woodpecker/test.yml`) @@ -19,21 +26,15 @@ Pipeline steps: 1. rust-fmt-check → cargo fmt --check 2. rust-clippy → cargo clippy -- -D warnings - 3. rust-tests → cargo test + 3. rust-tests → cargo test (64 tests) 4. frontend-typecheck → npx tsc --noEmit - 5. frontend-tests → npm run test:run (Vitest) + 5. frontend-tests → npm run test:run (13 Vitest tests) ``` **Docker images used:** - `rust:1.88-slim` — Rust steps (minimum for cookie_store + time + darling) - `node:22-alpine` — Frontend steps -**System dependencies installed in CI (Rust steps):** -``` -libwebkit2gtk-4.1-dev, libssl-dev, libgtk-3-dev, libsoup-3.0-dev, -librsvg2-dev, libglib2.0-dev -``` - **Pipeline YAML format (Woodpecker 0.15.4 — legacy MAP format):** ```yaml clone: @@ -50,7 +51,7 @@ pipeline: - cargo test ``` -> ⚠️ **Do NOT** use the newer `steps:` list format — Woodpecker 0.15.4 uses the Drone-legacy map format. +> ⚠️ **Do NOT** use the newer `steps:` list format — Woodpecker 0.15.4 uses the Drone-legacy map format. Using `steps:` causes "Invalid or missing pipeline section" error. --- @@ -58,43 +59,128 @@ pipeline: **Triggers:** Git tags matching `v*` +**Active config path:** Woodpecker DB must have `repo_config_path = .woodpecker/release.yml` when the tag is pushed. Switch back to `test.yml` after tagging to restore PR/push CI. + ``` Pipeline steps: - 1. build-linux-amd64 → cargo tauri build (x86_64-unknown-linux-gnu) - 2. build-linux-arm64 → cargo tauri build (aarch64-unknown-linux-gnu, cross-compile) - 3. upload-release → Create Gogs release + upload artifacts via API + 1. clone → alpine/git with explicit tag fetch + checkout + 2. build-linux-amd64 → cargo tauri build (x86_64-unknown-linux-gnu) + → artifacts/linux-amd64/{.deb, .rpm, .AppImage} + 3. build-windows-amd64 → cargo tauri build (x86_64-pc-windows-gnu via mingw-w64) + → artifacts/windows-amd64/{.exe, .msi} + 4. upload-release → Create Gogs release + upload all artifacts +``` + +**Clone override (release.yml):** + +Release builds use `alpine/git` with explicit commands because `woodpeckerci/plugin-git:latest` uses `git switch` which fails on tag refs: + +```yaml +clone: + git: + image: alpine/git + network_mode: gogs_default + commands: + - git init -b master + - git remote add origin http://gogs_app:3000/sarman/tftsr-devops_investigation.git + - git fetch --depth=1 origin +refs/tags/${CI_COMMIT_TAG}:refs/tags/${CI_COMMIT_TAG} + - git checkout ${CI_COMMIT_TAG} +``` + +**Windows cross-compile environment:** +```yaml +environment: + TARGET: x86_64-pc-windows-gnu + CC_x86_64_pc_windows_gnu: x86_64-w64-mingw32-gcc + CARGO_TARGET_X86_64_PC_WINDOWS_GNU_LINKER: x86_64-w64-mingw32-gcc ``` **Artifacts per platform:** - Linux amd64: `.deb`, `.rpm`, `.AppImage` -- Linux arm64: `.deb`, `.AppImage` +- Windows amd64: `.exe` (NSIS installer), `.msi` +- Linux arm64: `.deb`, `.AppImage` (requires arm64 agent or QEMU) + +**Important:** Artifacts must be written to the **workspace** (relative paths like `artifacts/linux-amd64/`), not to absolute paths like `/artifacts/`. Only the workspace is shared between pipeline steps via Docker volume. + +**Upload step (requires gogs_default network):** +```yaml +upload-release: + image: curlimages/curl:latest + network_mode: gogs_default # host firewall blocks default bridge from reaching Gogs API + secrets: [GOGS_TOKEN] +``` + +The `GOGS_TOKEN` Woodpecker secret is inserted into the DB: +```python +conn.execute(""" + INSERT INTO secrets (secret_repo_id, secret_name, secret_value, secret_images, secret_events, secret_skip_verify, secret_conceal) + VALUES (1, 'GOGS_TOKEN', '', '', 'tag', 0, 1) +""") +``` **Gogs Release API:** ```bash # Create release -POST $API/repos/sarman/tftsr-devops_investigation/releases +POST http://gogs_app:3000/api/v1/repos/sarman/tftsr-devops_investigation/releases Authorization: token $GOGS_TOKEN # Upload artifact -POST $API/repos/sarman/tftsr-devops_investigation/releases/{id}/assets +POST http://gogs_app:3000/api/v1/repos/sarman/tftsr-devops_investigation/releases/{id}/assets ``` -The `GOGS_TOKEN` is stored as a Woodpecker secret. +--- + +## Switching Between Test and Release Config + +Woodpecker 0.15.4 supports only **one config file per repo**. The workflow: + +```bash +# For regular pushes/PRs — use test pipeline +python3 -c "conn.execute(\"UPDATE repos SET repo_config_path='.woodpecker/test.yml'\")" + +# Before pushing a release tag — switch to release pipeline +python3 -c "conn.execute(\"UPDATE repos SET repo_config_path='.woodpecker/release.yml'\")" +git tag -a v1.0.0 -m "Release v1.0.0" +git push origin v1.0.0 +# → Switch back to test.yml after build starts +``` --- ## Webhook Configuration -**Hook ID:** 6 (in Gogs) +**Hook ID:** 9 (in Gogs, `http://gogs.tftsr.com`) **Events:** `create`, `push`, `pull_request` **URL:** `http://172.0.0.29:8084/hook?access_token=` **JWT signing:** - Algorithm: HS256 -- Secret: `repo_hash` value from Woodpecker DB (`dK8zFWtAu67qfKd3Et6N8LptqTmedumJ`) -- Payload: `{"text":"sarman/tftsr-devops_investigation","type":"hook"}` +- Secret: `repo_hash` from Woodpecker DB (`dK8zFWtAu67qfKd3Et6N8LptqTmedumJ`) +- Payload: `{"text":"sarman/tftsr-devops_investigation","type":"hook","iat":}` -> ⚠️ JWT has an `iat` claim. If it's stale, regenerate it. +**Regenerate JWT when stale:** +```python +import base64, hmac, hashlib, json, time + +def b64url(data): + if isinstance(data, str): data = data.encode() + return base64.urlsafe_b64encode(data).rstrip(b'=').decode() + +header = b64url(json.dumps({'alg':'HS256','typ':'JWT'}, separators=(',',':'))) +payload = b64url(json.dumps({'text':'sarman/tftsr-devops_investigation','type':'hook','iat':int(time.time())}, separators=(',',':'))) +msg = f'{header}.{payload}' +sig = hmac.new(b'dK8zFWtAu67qfKd3Et6N8LptqTmedumJ', msg.encode(), hashlib.sha256).digest() +print(f'{msg}.{b64url(sig)}') +``` + +Then update the webhook in Gogs via API: +```bash +curl -X DELETE http://172.0.0.29:3000/api/v1/repos/sarman/tftsr-devops_investigation/hooks/ +curl -X POST http://172.0.0.29:3000/api/v1/repos/sarman/tftsr-devops_investigation/hooks \ + -H "Authorization: token " \ + -H "Content-Type: application/json" \ + -d '{"type":"gogs","config":{"url":"http://172.0.0.29:8084/hook?access_token=","content_type":"json","secret":"af5dc60e0984f2680d0969f4a087e7100a4ece7e"},"events":["push","pull_request","create"],"active":true}' +``` --- @@ -102,47 +188,63 @@ The `GOGS_TOKEN` is stored as a Woodpecker secret. SQLite at `/docker_mounts/woodpecker/data/woodpecker.sqlite` (on host `172.0.0.29`). -Key values: ```sql --- User -SELECT user_token FROM users WHERE user_login='sarman'; --- Should be: [REDACTED-ROTATED] +-- Verify config +SELECT user_token IS NOT NULL AND user_token != '' AS token_set FROM users WHERE user_login='sarman'; --- Repo SELECT repo_active, repo_trusted, repo_config_path, repo_hash FROM repos WHERE repo_full_name='sarman/tftsr-devops_investigation'; -- repo_active=1, repo_trusted=1 --- repo_config_path='.woodpecker/test.yml' +-- repo_config_path='.woodpecker/test.yml' (or release.yml during release) -- repo_hash='dK8zFWtAu67qfKd3Et6N8LptqTmedumJ' ``` --- +## Branch Protection + +Master branch is protected: all changes require a PR. Direct pushes are blocked. + +```sql +-- Check protection +SELECT name, protected, require_pull_request FROM protect_branch WHERE repo_id=42; + +-- Temporarily disable for urgent fixes (restore immediately after!) +UPDATE protect_branch SET protected=false WHERE repo_id=42 AND name='master'; +-- ... push ... +UPDATE protect_branch SET protected=true, require_pull_request=true WHERE repo_id=42 AND name='master'; +``` + +> Gogs 0.14 does **not** enforce required CI status checks before merging. Only `require_pull_request=true` is supported. + +--- + ## Known Issues & Fixes ### Webhook JWT Must Use `?access_token=` `token.ParseRequest()` in Woodpecker 0.15.4 does **not** read `?token=` URL params. Use `?access_token=` instead. -### JWT Signed with `repo_hash` (Not User Hash) -Hook JWT must be signed with the `repo_hash` value, not the user's hash. - ### Directory-Based Config Not Supported -Woodpecker 0.15.4 only supports a **single config file**. Set `repo_config_path = .woodpecker/test.yml` in the Woodpecker DB. The `.woodpecker/` directory approach requires v2.x+. +Woodpecker 0.15.4 only supports a **single config file**. Multi-file pipelines require v2.x+. -### Step Containers Network Isolation -Pipeline step containers run on the default Docker bridge and cannot resolve `gogs_app` hostname. Fix: set `network_mode: gogs_default` in the clone section (requires `repo_trusted=1`). +### Empty Clone URL in Push Events +Woodpecker 0.15.4's `go-gogs-client` `PayloadRepo` struct lacks `CloneURL`, so `build_remote` is always empty. Fix: set `CI_REPO_CLONE_URL` in the clone step environment. -### Empty Clone URL Bug -Woodpecker 0.15.4's `go-gogs-client` `PayloadRepo` struct lacks `CloneURL`/`SSHURL` fields, so `build_remote` is always empty from Gogs push payloads. Fix: override the clone URL via `CI_REPO_CLONE_URL` environment variable. +### Step Containers Cannot Reach `gogs_app` +Default Docker bridge containers cannot resolve `gogs_app` or reach `172.0.0.29:3000` (host firewall). Fix: use `network_mode: gogs_default` in any step that needs Gogs access. Requires `repo_trusted=1`. -### Gogs Token Authentication -The `sha1` field in Gogs token create API response **is** the actual bearer token (not a hash). Use it directly: +### `CI=woodpecker` Rejected by Tauri CLI +Woodpecker sets `CI=woodpecker`; `cargo tauri build` expects a boolean. Fix: prefix with `CI=true cargo tauri build`. + +### Agent Stalls After Server Restart +After restarting the Woodpecker server, the agent may enter a loop cleaning up orphaned containers and stop picking up new builds. Fix: +```bash +# Kill orphan containers and volumes +docker rm -f $(docker ps -aq --filter 'name=0_') +docker volume rm $(docker volume ls -q | grep '0_') +# Restart agent +docker restart woodpecker_agent ``` -Authorization: token -``` - -### Gogs SPA Login Field Mismatch -Gogs 0.14 SPA login form uses `login=` field; the Gogs backend reads `username=`. A custom login page is served by nginx at `/login`. ### Gogs OAuth2 Limitation Gogs 0.14 has no OAuth2 provider support, blocking upgrade to Woodpecker 2.x. diff --git a/docs/wiki/Development-Setup.md b/docs/wiki/Development-Setup.md index 2e3983d7..e338eeb2 100644 --- a/docs/wiki/Development-Setup.md +++ b/docs/wiki/Development-Setup.md @@ -90,7 +90,7 @@ npm run test:coverage npx tsc --noEmit ``` -Current test status: **13/13 frontend tests passing**, Rust tests passing. +Current test status: **13/13 frontend tests passing**, **64/64 Rust tests passing**. --- diff --git a/docs/wiki/Home.md b/docs/wiki/Home.md index f3908935..68881fdf 100644 --- a/docs/wiki/Home.md +++ b/docs/wiki/Home.md @@ -2,6 +2,8 @@ **TFTSR** is a secure desktop application for guided IT incident triage, root cause analysis (RCA), and post-mortem documentation. Built with Tauri 2.x (Rust + WebView) and React 18. +**CI:** ![build](http://172.0.0.29:3000/sarman/tftsr-devops_investigation/badges/master/status.svg) — rustfmt · clippy · 64 Rust tests · tsc · vitest — all green + ## Quick Navigation | Topic | Description | @@ -12,7 +14,7 @@ | [AI Providers](wiki/AI-Providers) | Supported providers and configuration | | [PII Detection](wiki/PII-Detection) | Patterns, redaction flow, security | | [IPC Commands](wiki/IPC-Commands) | Full list of Tauri backend commands | -| [CI/CD Pipeline](wiki/CICD-Pipeline) | Woodpecker CI + Gogs setup | +| [CI/CD Pipeline](wiki/CICD-Pipeline) | Woodpecker CI + Gogs setup, multi-platform builds | | [Security Model](wiki/Security-Model) | Encryption, audit trail, capabilities | | [Integrations](wiki/Integrations) | Confluence, ServiceNow, Azure DevOps (v0.2) | | [Troubleshooting](wiki/Troubleshooting) | Known issues and fixes | @@ -28,15 +30,23 @@ - **Audit Trail** — Every external data send logged with SHA-256 hash - **Domain-Specific Prompts** — 8 IT domains: Linux, Windows, Network, Kubernetes, Databases, Virtualization, Hardware, Observability +## Releases + +| Version | Status | Platforms | +|---------|--------|-----------| +| v0.1.0-alpha | 🚀 Released | linux/amd64 (.deb, .rpm, .AppImage), windows/amd64 (.exe, .msi) | + +Download from [Releases](https://gogs.tftsr.com/sarman/tftsr-devops_investigation/releases). + ## Project Status | Phase | Status | |-------|--------| -| Phases 1–8 (Core) | ✅ Complete | -| Phase 9 (History/Search FTS) | 🔄 Partially integrated | +| Phases 1–8 (Core application) | ✅ Complete | +| Phase 9 (History/Search) | 🔲 Pending | | Phase 10 (Integrations) | 🕐 v0.2 stubs only | -| Phase 11 (CLI) | 🕐 Planned | -| Phase 12 (Release packaging) | 🔄 Linux done; macOS/Windows pending | +| Phase 11 (CI/CD) | ✅ Complete — Woodpecker CI fully operational | +| Phase 12 (Release packaging) | ✅ linux/amd64 + windows/amd64; arm64 via QEMU agent | ## Tech Stack @@ -49,5 +59,5 @@ | Database | rusqlite + SQLCipher (AES-256) | | Secret storage | tauri-plugin-stronghold | | State | Zustand | -| Testing | Vitest (frontend) + `#[cfg(test)]` (Rust) | +| Testing | Vitest (13 frontend) + `#[cfg(test)]` (64 Rust tests) | | CI/CD | Woodpecker CI v0.15.4 + Gogs | diff --git a/docs/wiki/Troubleshooting.md b/docs/wiki/Troubleshooting.md index 8dc17aaf..f59b4342 100644 --- a/docs/wiki/Troubleshooting.md +++ b/docs/wiki/Troubleshooting.md @@ -7,26 +7,104 @@ **Cause:** Woodpecker 0.15.4 `token.ParseRequest()` does not read `?token=` URL params. **Fix:** Webhook URL must use `?access_token=` (not `?token=`). -``` -http://172.0.0.29:8084/hook?access_token= -``` -Regenerate the JWT if it's stale (JWT has an `iat` claim): -```bash +Regenerate the JWT if it's stale (see [CICD-Pipeline → Webhook Configuration](wiki/CICD-Pipeline)): +```python # JWT payload: {"text":"sarman/tftsr-devops_investigation","type":"hook"} -# Signed with: repo_hash (dK8zFWtAu67qfKd3Et6N8LptqTmedumJ) +# Signed HS256 with repo_hash = dK8zFWtAu67qfKd3Et6N8LptqTmedumJ ``` --- -### Pipeline Step Can't Reach Gogs +### Build Stuck in "Pending" or "Running" with No Containers -**Cause:** Step containers run on the default Docker bridge, not on `gogs_default` network. +**Cause:** After a Woodpecker server restart, the agent enters a loop trying to clean up orphaned containers from the previous session and stops processing new tasks. -**Fix:** Use `network_mode: gogs_default` in the clone section and ensure `repo_trusted=1`: +**Fix:** ```bash -docker exec woodpecker_db sqlite3 /data/woodpecker.sqlite \ - "UPDATE repos SET repo_trusted=1 WHERE repo_full_name='sarman/tftsr-devops_investigation';" +# 1. Kill any orphan step containers and volumes +ssh sarman@172.0.0.29 +docker rm -f $(docker ps -aq --filter 'name=0_') +docker volume rm $(docker volume ls -q | grep '0_') + +# 2. Cancel stuck builds in Woodpecker DB +python3 -c " +import sqlite3; conn = sqlite3.connect('/docker_mounts/woodpecker/data/woodpecker.sqlite') +conn.execute(\"UPDATE builds SET build_status='cancelled' WHERE build_status IN ('pending','running')\") +conn.execute('DELETE FROM tasks') +conn.commit() +" + +# 3. Restart agent +docker restart woodpecker_agent +``` + +--- + +### Pipeline Step Can't Reach Gogs (`gogs_app` not found) + +**Cause:** Step containers run on the default Docker bridge. They cannot resolve `gogs_app` hostname or reach `172.0.0.29:3000` (blocked by host firewall). + +**Fix:** Add `network_mode: gogs_default` to any step needing Gogs access. Requires `repo_trusted=1`: +```bash +python3 -c " +import sqlite3; conn = sqlite3.connect('/docker_mounts/woodpecker/data/woodpecker.sqlite') +conn.execute(\"UPDATE repos SET repo_trusted=1 WHERE repo_full_name='sarman/tftsr-devops_investigation'\") +conn.commit() +" +``` + +--- + +### `CI=woodpecker` Rejected by `cargo tauri build` + +**Cause:** Woodpecker sets `CI=woodpecker` (string). Tauri CLI's `--ci` flag expects `true`/`false`. + +**Fix:** Prefix the build command: +```yaml +commands: + - CI=true cargo tauri build --target $TARGET +``` + +--- + +### Release Artifacts Not Uploaded (Upload Step Silent Failure) + +**Cause 1:** Upload container on default bridge can't reach Gogs API at `http://172.0.0.29:3000`. +**Fix:** Add `network_mode: gogs_default` to the upload step and use `gogs_app:3000` in the API URL. + +**Cause 2:** Artifacts written to `/artifacts/` (absolute path) not visible to the upload step. +**Fix:** Write artifacts to the workspace using relative paths (`artifacts/linux-amd64/`). Only the workspace directory is shared between pipeline steps. + +**Cause 3:** `GOGS_TOKEN` secret not set or has wrong value. +**Check:** +```bash +python3 -c " +import sqlite3; conn = sqlite3.connect('/docker_mounts/woodpecker/data/woodpecker.sqlite') +s = conn.execute(\"SELECT secret_value FROM secrets WHERE secret_name='GOGS_TOKEN'\").fetchone() +print('Token length:', len(s[0]) if s else 'NOT SET') +" +# Test token (replace 172.0.0.29:3000 with gogs_app:3000 from inside gogs_default network) +curl -H "Authorization: token " http://172.0.0.29:3000/api/v1/user +``` + +--- + +### `git switch refs/tags/v*` Fails in Release Build + +**Cause:** `woodpeckerci/plugin-git:latest` uses `git switch` which doesn't support detached HEAD for tag refs. + +**Fix:** Override the clone section with `alpine/git` and explicit commands: +```yaml +clone: + git: + image: alpine/git + network_mode: gogs_default + commands: + - git init -b master + - git remote add origin http://gogs_app:3000/sarman/tftsr-devops_investigation.git + - git fetch --depth=1 origin +refs/tags/${CI_COMMIT_TAG}:refs/tags/${CI_COMMIT_TAG} + - git checkout ${CI_COMMIT_TAG} ``` --- @@ -39,7 +117,7 @@ docker exec woodpecker_db sqlite3 /data/woodpecker.sqlite \ --- -### Empty Clone URL in Pipeline +### Empty Clone URL in Pipeline (Push Events) **Cause:** Woodpecker 0.15.4 `go-gogs-client` `PayloadRepo` struct is missing `CloneURL`. @@ -57,7 +135,6 @@ clone: ### `MutexGuard` Not `Send` Across Await -**Error:** ``` error[E0277]: `MutexGuard<'_, Connection>` cannot be sent between threads safely ``` @@ -76,7 +153,7 @@ async_fn().await?; ### Clippy Lints Fail in CI -Common lint fixes: +Common lint fixes required by `-D warnings` (especially on Rust 1.88+): ```rust // uninlined_format_args @@ -89,7 +166,9 @@ x >= a && x < b → (a..b).contains(&x) s.push_str("a") → s.push('a') ``` -Run locally: `cargo clippy --manifest-path src-tauri/Cargo.toml -- -D warnings` +Run locally: `cargo clippy --manifest-path src-tauri/Cargo.toml -- -D warnings -W clippy::uninlined_format_args` + +Auto-fix: `cargo clippy --manifest-path src-tauri/Cargo.toml --fix --allow-dirty -- -D warnings -W clippy::uninlined_format_args` --- @@ -101,6 +180,12 @@ sudo dnf install -y glib2-devel gtk3-devel webkit2gtk4.1-devel \ libsoup3-devel openssl-devel librsvg2-devel ``` +**Fix (Debian/Ubuntu):** +```bash +sudo apt-get install -y libwebkit2gtk-4.1-dev libssl-dev libgtk-3-dev \ + libayatana-appindicator3-dev librsvg2-dev patchelf pkg-config +``` + --- ## Database @@ -112,7 +197,7 @@ sudo dnf install -y glib2-devel gtk3-devel webkit2gtk4.1-devel \ **Check:** 1. `TFTSR_DB_KEY` env var is set 2. Key matches what was used when DB was created -3. File isn't corrupted (try `file tftsr.db` — should say `SQLite 3.x database`) +3. File isn't corrupted: `file tftsr.db` should say `SQLite 3.x database` **Warning:** Changing the key requires re-encrypting the database: ```bash @@ -124,12 +209,12 @@ sqlite3 tftsr.db "ATTACH 'new.db' AS newdb KEY 'new-key'; \ ### Migration Fails to Run -Check which migrations have already been applied: +Check which migrations have been applied: ```sql SELECT name, applied_at FROM _migrations ORDER BY id; ``` -If a migration is partially applied, the DB may be in an inconsistent state. Restore from backup or recreate. +If a migration is partially applied, the DB may be inconsistent. Restore from backup or recreate. --- @@ -137,25 +222,23 @@ If a migration is partially applied, the DB may be in an inconsistent state. Res ### TypeScript Errors After Pulling -Run a fresh type check: ```bash npx tsc --noEmit ``` -Ensure `tauriCommands.ts` matches the Rust command signatures exactly (especially `IssueDetail` nesting). +Ensure `tauriCommands.ts` matches Rust command signatures exactly (especially `IssueDetail` nesting). --- ### `IssueDetail` Field Access Errors -The `get_issue` command returns a **nested** struct: +`get_issue()` returns a **nested** struct: ```typescript // ✅ Correct const title = detail.issue.title; -const severity = detail.issue.severity; -// ❌ Wrong — these fields don't exist at the top level -const title = detail.title; +// ❌ Wrong +const title = detail.title; // field doesn't exist at top level ``` --- @@ -181,7 +264,7 @@ The `sha1` field from the Gogs token create API **is** the bearer token — use curl -H "Authorization: token " https://gogs.tftsr.com/api/v1/user ``` -Do not confuse with the `sha1` column in the `access_token` table, which stores `sha1(token)[:40]`. +Do not confuse with the `sha1` column in the `access_token` table, which stores `sha1(token)[:40]` (a hash of the token, not the token itself). ### PostgreSQL Access From 1f062948fc8a64c97556b34a6a4960a35c08e945 Mon Sep 17 00:00:00 2001 From: Shaun Arman Date: Sun, 15 Mar 2026 19:17:36 -0500 Subject: [PATCH 07/10] fix: use bundled-sqlcipher-vendored-openssl for portable Windows cross-compilation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SQLCipher requires OpenSSL when cross-compiling for Windows with mingw-w64. bundled-sqlcipher-vendored-openssl compiles OpenSSL from source — no system OpenSSL needed for any target. Add perl to CI steps (required by OpenSSL build). --- .woodpecker/release.yml | 4 ++-- .woodpecker/test.yml | 4 ++-- src-tauri/Cargo.toml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.woodpecker/release.yml b/.woodpecker/release.yml index 1d4fd0dd..6085ef42 100644 --- a/.woodpecker/release.yml +++ b/.woodpecker/release.yml @@ -23,7 +23,7 @@ pipeline: when: event: tag commands: - - apt-get update -qq && apt-get install -y -qq libwebkit2gtk-4.1-dev libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev patchelf pkg-config curl + - apt-get update -qq && apt-get install -y -qq libwebkit2gtk-4.1-dev libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev patchelf pkg-config curl perl - curl -fsSL https://deb.nodesource.com/setup_22.x | bash - - apt-get install -y nodejs - npm ci --legacy-peer-deps @@ -44,7 +44,7 @@ pipeline: when: event: tag commands: - - apt-get update -qq && apt-get install -y -qq mingw-w64 curl nsis + - apt-get update -qq && apt-get install -y -qq mingw-w64 curl nsis perl - curl -fsSL https://deb.nodesource.com/setup_22.x | bash - - apt-get install -y nodejs - npm ci --legacy-peer-deps diff --git a/.woodpecker/test.yml b/.woodpecker/test.yml index 63fbc673..fb2dd924 100644 --- a/.woodpecker/test.yml +++ b/.woodpecker/test.yml @@ -16,14 +16,14 @@ pipeline: rust-clippy: image: rust:1.88-slim commands: - - apt-get update -qq && apt-get install -y -qq libwebkit2gtk-4.1-dev libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev patchelf pkg-config + - apt-get update -qq && apt-get install -y -qq libwebkit2gtk-4.1-dev libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev patchelf pkg-config perl - rustup component add clippy - cargo clippy --manifest-path src-tauri/Cargo.toml -- -D warnings rust-tests: image: rust:1.88-slim commands: - - apt-get update -qq && apt-get install -y -qq libwebkit2gtk-4.1-dev libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev patchelf pkg-config + - apt-get update -qq && apt-get install -y -qq libwebkit2gtk-4.1-dev libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev patchelf pkg-config perl - cargo test --manifest-path src-tauri/Cargo.toml frontend-typecheck: diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 95a117a0..aee6ba38 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -19,7 +19,7 @@ tauri-plugin-shell = "2" tauri-plugin-http = "2" tauri-plugin-cli = "2" tauri-plugin-updater = "2" -rusqlite = { version = "0.31", features = ["bundled-sqlcipher"] } +rusqlite = { version = "0.31", features = ["bundled-sqlcipher-vendored-openssl"] } serde = { version = "1", features = ["derive"] } serde_json = "1" tokio = { version = "1", features = ["full"] } From 73584e357b3a59957b81b8a6b793b7852cfc8d39 Mon Sep 17 00:00:00 2001 From: Shaun Arman Date: Sun, 15 Mar 2026 19:53:19 -0500 Subject: [PATCH 08/10] fix: add make to windows build step (required by vendored OpenSSL) --- .woodpecker/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker/release.yml b/.woodpecker/release.yml index 6085ef42..806fdcda 100644 --- a/.woodpecker/release.yml +++ b/.woodpecker/release.yml @@ -44,7 +44,7 @@ pipeline: when: event: tag commands: - - apt-get update -qq && apt-get install -y -qq mingw-w64 curl nsis perl + - apt-get update -qq && apt-get install -y -qq mingw-w64 curl nsis perl make - curl -fsSL https://deb.nodesource.com/setup_22.x | bash - - apt-get install -y nodejs - npm ci --legacy-peer-deps From 8ccfdec72a3f1accab820899d598157cfa0fd431 Mon Sep 17 00:00:00 2001 From: Shaun Arman Date: Sun, 15 Mar 2026 20:31:52 -0500 Subject: [PATCH 09/10] fix: replace empty icon placeholder files with real app icons MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Generated from icon.png (magnifying glass + bug on laptop — TFTSR debug theme): - icon.ico: multi-size Windows ICO (16/32/48/64/128/256px) — fixes windres crash - icon.icns: macOS ICNS (16/32/64/128/256/512px) - 32x32.png, 128x128.png, 128x128@2x.png: regenerated from source Fixes: x86_64-w64-mingw32-windres 'unexpected EOF' on Windows cross-compile build --- icon.png | Bin 0 -> 46035 bytes src-tauri/icons/128x128.png | Bin 360 -> 15790 bytes src-tauri/icons/128x128@2x.png | Bin 857 -> 32429 bytes src-tauri/icons/32x32.png | Bin 104 -> 2800 bytes src-tauri/icons/icon.icns | Bin 0 -> 1370 bytes src-tauri/icons/icon.ico | Bin 0 -> 131834 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 icon.png diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..baebda4a5c3a4a6d44bef134b810289ca978bcfb GIT binary patch literal 46035 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 IWBBcV0B0Qvw*UYD literal 0 HcmV?d00001 diff --git a/src-tauri/icons/128x128.png b/src-tauri/icons/128x128.png index 065c72bcaee25a1a5711e959ab7e8536e74d3a41..2218a26013230490e1159d6c5dd33276192b8bd1 100644 GIT binary patch literal 15790 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
  • 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 Xa<$4j6d?t_1Sc<}B3=E)QVPufmw#Z)78&q Iol`;+0Aak4t^fc4 diff --git a/src-tauri/icons/32x32.png b/src-tauri/icons/32x32.png index ce7a338f72824fc317a5f3a570603a8e445aab57..c811f400f1ed58c82f7fce475254e412bbcb6e73 100644 GIT binary patch delta 2791 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 delta 74 zcmew$nlVAeMc>oKF{EP7+jEMH3=AC129qYV9&>4tFc<#3dfwh8LINnjgI(^Ff=d#Wzp$PzUAQip< diff --git a/src-tauri/icons/icon.icns b/src-tauri/icons/icon.icns index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..2d2972d785f03b39d6835dafab21e58fa0a817b4 100644 GIT binary patch literal 1370 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Lb6AYF9SoB8UsT^3j@P1pisjL z28L1t28LG&3=CE?7#PG0=IjczVPIft3h)VW1uBr&&{onl7L!#_(Kl8%w^OrnVrF4s zVPj`zX6EDL)3>tMcl6@roFd3bn~Ra7QTnX+#EhUB7(@SL(W zYu9%7Pf}D;);BOXbME}%6K8ex403Yw?mv2T@YpFGJ$-i%&ucet>gwrDnmk2ES6@y} ze%HRkKsAM>6|?6rGB7d;3XPb*c)6jmiKwV(RdvmbIrHTe6qOW|WTa$8ghiATl$8~g z73GzHB#>=wZeyrtBr7c^$S;^x(~@1+wshsHY15}qn?57Eu05`#cGI@)cOE>5at{u7 z_P=%a?zWw~LkjCkTe=S(KAe%B>8WeyrE8a(l6LUWp}gjviuT^!`}UK*Vg3S1|m8(~W7uB~;p84zVzaPK{P_OscSCdgcO zYuB$odHT%KV{UeSVP{wOkz>bq?ApC}>9R{#uN^pi zWb)Lh(`U{)cj3~-%U2E`J+^7f)+Ni9?>~5G^VV$#j~v~1@Zf<%N8DXJJX}2^!=j?X zqCMTbd^~)-+`VnB?EnA&|52rGFEF`;mIV2MQZNz_Pn|n2L(*vfuiuBwq>rDG%Prxz zblADy!6Na)w?BWseMl_&_pd16^S{ERp9TL4yZ#lv{a1MMZ+`c`f9=nn6)an^eEEu= zY0C>bRA%J?O=V2-c6Yg2x5ru-$l)yTh%9Dc;5!V$jK}j=qyPokOFVsD*_Getq@krbUyAioCL-s@&41b*-Ak)V!;0Sy-80UR+$A*SjEIR+MbW=2+4x~7Jf_AV4`-sqVdTkD)0T%|JD*%pSzQpTwZo~=Hf4h%Ha64!{5l*E!$ ztK_0oAjM#0U}UCiV61Cs7Ghv%Wn^h(WUOsqU}a#ytmh|$q9HdwB{QuOQ-gsaM8oov z4?qQ&2Hb{{%-q!ClEmBsG(E;Zdn_P&zFNra2kMao=?TtHD=AMbN@XZ7FW1Y=%Pvk% aEJ)SMFG`>N&PEETh{4m<&t;ucLK6VauR2Bm literal 0 HcmV?d00001 diff --git a/src-tauri/icons/icon.ico b/src-tauri/icons/icon.ico index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3b75c20523b6f36d9f16001e0f0df490c02c9384 100644 GIT binary patch literal 131834 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 M$f!zJzA+B@AG{(ItN;K2 literal 0 HcmV?d00001 From 2026bdb3da878187d4c6361b8fecaaae74ff2050 Mon Sep 17 00:00:00 2001 From: Shaun Arman Date: Sun, 29 Mar 2026 12:33:24 -0500 Subject: [PATCH 10/10] fix: suppress MinGW auto-export to resolve Windows DLL ordinal overflow Add src-tauri/.cargo/config.toml with --exclude-all-symbols linker flag for x86_64-pc-windows-gnu. MinGW auto-exports ~106k public Rust symbols into the cdylib export table, exceeding the 65,535 PE ordinal limit. The desktop binary links against rlib (static) so the cdylib export table is unused. An empty export table is a valid DLL. Co-Authored-By: Claude Sonnet 4.6 (1M context) --- docs/wiki/CICD-Pipeline.md | 14 ++++++++++++++ src-tauri/.cargo/config.toml | 6 ++++++ 2 files changed, 20 insertions(+) create mode 100644 src-tauri/.cargo/config.toml diff --git a/docs/wiki/CICD-Pipeline.md b/docs/wiki/CICD-Pipeline.md index 8ef5de87..082b0fd5 100644 --- a/docs/wiki/CICD-Pipeline.md +++ b/docs/wiki/CICD-Pipeline.md @@ -246,6 +246,20 @@ docker volume rm $(docker volume ls -q | grep '0_') docker restart woodpecker_agent ``` +### Windows DLL Export Ordinal Too Large +`/usr/bin/x86_64-w64-mingw32-ld: error: export ordinal too large: 106290` + +MinGW's `ld` auto-exports ALL public Rust symbols into the DLL export table. With a +large dependency tree (~106k symbols), this exceeds the 65,535 PE ordinal limit. + +Fix: `src-tauri/.cargo/config.toml` tells `ld` to suppress auto-export: +```toml +[target.x86_64-pc-windows-gnu] +rustflags = ["-C", "link-arg=-Wl,--exclude-all-symbols"] +``` +The desktop `main.exe` links against `rlib` (static), so the cdylib export table is +unused at runtime. An empty export table is valid for a DLL. + ### Gogs OAuth2 Limitation Gogs 0.14 has no OAuth2 provider support, blocking upgrade to Woodpecker 2.x. diff --git a/src-tauri/.cargo/config.toml b/src-tauri/.cargo/config.toml new file mode 100644 index 00000000..ec6d3760 --- /dev/null +++ b/src-tauri/.cargo/config.toml @@ -0,0 +1,6 @@ +[target.x86_64-pc-windows-gnu] +# Prevent MinGW ld from auto-exporting all ~106k public symbols into the DLL +# export table, which would exceed the 65535 ordinal limit and cause a link +# error. The desktop binary links against rlib (static), so cdylib exports +# are unused at runtime. +rustflags = ["-C", "link-arg=-Wl,--exclude-all-symbols"]