Files
thoughtsync/.forgejo/workflows/desktop.yml
T
bvandeusenandClaude Opus 4.8 7ca09e9a01
Desktop (Tauri) / Tauri desktop (Linux) (push) Successful in 3m9s
desktop CI: pin upload-artifact@v3 (Forgejo rejects v4 protocol)
The build produces the .deb + .AppImage fine; upload-artifact@v4 failed with
GHESNotSupportedError (Forgejo has no v4 artifact API). v3 uses the older protocol
the instance accepts, so the bundles become downloadable from the run for
hand-testing.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FRgehjoz7Yv8LkUfADxACm
2026-07-24 13:33:06 -04:00

84 lines
3.1 KiB
YAML

# Tauri desktop (Linux) build — SEPARATE from ci.yml on purpose: this is a heavy
# Rust + AppImage build (~20-40 min) that should NOT run on backend/frontend-only
# pushes. Scoped to desktop/** (+ this file). Produces the .deb and .AppImage.
#
# Toolchain comes from the ci-tauri image (Rust + Node + WebKitGTK 4.1 + tauri-cli);
# runs-on is just a registered scheduling label (Label Model B), not a per-purpose
# runner. The frontend is built here because tauri's generate_context! embeds it.
name: Desktop (Tauri)
on:
push:
branches: [dev, main]
tags: ["v*"]
paths:
- "desktop/**"
- ".forgejo/workflows/desktop.yml"
workflow_dispatch:
concurrency:
group: desktop-${{ github.ref }}
cancel-in-progress: ${{ !startsWith(github.ref, 'refs/tags/') }}
permissions:
contents: read
jobs:
build:
name: Tauri desktop (Linux)
if: github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')
runs-on: python-ci
container:
image: git.fabledsword.com/bvandeusen/ci-tauri:1.97
env:
# AppImage tooling (linuxdeploy) FUSE-mounts itself by default; CI containers
# have no /dev/fuse, so tell it to extract-and-run instead. Without this the
# AppImage bundle step fails with a FUSE error.
APPIMAGE_EXTRACT_AND_RUN: "1"
steps:
- uses: actions/checkout@v6
# tauri's generate_context! embeds the built frontend at compile time, so the
# frontend must exist before any cargo compile (clippy/test/build), not just
# at bundle time.
- name: Build the shared frontend
run: npm ci && npm run build
working-directory: frontend
# Generate the platform icon set from the committed 1024px source PNG.
- name: Generate app icons
run: cargo tauri icon app-icon.png
working-directory: desktop/src-tauri
- name: Rust format check
run: cargo fmt --check
working-directory: desktop/src-tauri
- name: Clippy
run: cargo clippy --all-targets -- -D warnings
working-directory: desktop/src-tauri
- name: Test
run: cargo test
working-directory: desktop/src-tauri
# Frontend already built above; skip the beforeBuildCommand rebuild.
- name: Tauri build (deb + AppImage)
run: cargo tauri build --config '{"build":{"beforeBuildCommand":""}}'
working-directory: desktop/src-tauri
# Make the built .deb + .AppImage downloadable from the run (for hand-testing).
# continue-on-error: the Forgejo artifact backend may not be configured yet; a
# failed upload must not fail the build itself.
# Forgejo doesn't support the v4 artifact protocol (@actions/artifact v2+),
# so pin v3, which uses the older protocol the instance accepts.
- name: Upload bundles
continue-on-error: true
uses: actions/upload-artifact@v3
with:
name: thoughtsync-linux
path: |
desktop/src-tauri/target/release/bundle/appimage/*.AppImage
desktop/src-tauri/target/release/bundle/deb/*.deb
if-no-files-found: warn