Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
280c493
chore: improve desktop build workflow
Noxiven Oct 16, 2026
af02197
fix: run releases in the source tag context
Noxiven Oct 16, 2026
3e52469
chore: bump project version to 0.4.6-beta.1
Noxiven Oct 16, 2026
f1648ea
fix: sync Cargo.lock root package version for consistent --locked builds
Noxiven Oct 16, 2026
3d84877
fix: keep binary tool output from leaving tool steps stuck as calling
chenyme Oct 16, 2026
a15f12b
ci: upgrade workflow action versions
Noxiven Oct 16, 2026
240919e
fix: verify DMG signer certificate team ID
Noxiven Oct 16, 2026
3650cc7
ci: build macOS targets on native runners
Noxiven Oct 16, 2026
0888578
docs: clarify macOS build process and caching logic
Noxiven Oct 16, 2026
9c170bb
fix: ensure release publication verifies tag and avoids workflow-writ…
Noxiven Oct 16, 2026
fdc6a16
fix: add per-model preference for Base64 image results
Stella-sea Oct 18, 2026
ecf1eb4
Merge pull request #891 from DEEIX-AI/chore_release_desktop
chenyme Oct 19, 2026
d426939
Merge branch 'dev' into tools_ui
chenyme Oct 19, 2026
584f363
chore: remove unused dependencies and update tauri-plugin-updater con…
chenyme Oct 19, 2026
b893044
Merge pull request #895 from DEEIX-AI/dependencies
chenyme Oct 19, 2026
ec198a5
Merge branch 'dev' into tools_ui
chenyme Oct 19, 2026
074156e
Merge pull request #892 from DEEIX-AI/tools_ui
chenyme Oct 19, 2026
a36be2a
fix: allow mouse wheel scrolling in admin protocol dropdown
QAbot-zh Oct 19, 2026
6d02c5f
Merge branch 'dev' into fix/prefer-base64-image-results
Stella-sea Oct 19, 2026
76ce178
refactor: remove image prefer base64 functionality and related UI com…
chenyme Oct 21, 2026
dad45ab
fix: update Popover to modal for improved mouse wheel scrolling in pe…
chenyme Oct 21, 2026
05d2351
Merge pull request #894 from Stella-sea/fix/prefer-base64-image-results
chenyme Oct 21, 2026
2f40afc
Merge branch 'dev' into patch-1
chenyme Oct 21, 2026
0fa3802
Merge pull request #896 from QAbot-zh/patch-1
chenyme Oct 21, 2026
067dc03
fix: update Go and x/net security patches
GeorgeXie2333 Oct 21, 2026
5933def
chore: update Node.js version to 26.12.1 and adjust dependencies for …
chenyme Oct 22, 2026
3baead8
fix: bump rustls-webpki and
chenyme Oct 22, 2026
3971e79
Merge pull request #897 from GeorgeXie2333/fix/go-security-updates
chenyme Oct 22, 2026
319acca
chore: bump version to 0.4.6
chenyme Oct 22, 2026
cd58a60
Merge pull request #898 from DEEIX-AI/version
chenyme Oct 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions .github/actions/desktop-setup/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
name: Desktop build setup
description: Restore target-specific toolchains and caches, and consume the shared web/catalog artifacts.

inputs:
target:
description: Rust target triple; also separates cross-compiled Go and Rust caches.
required: true
source-sha:
description: Immutable source commit used to refresh the Go compilation cache.
required: true

runs:
using: composite
steps:
- name: Verify source commit
shell: bash
env:
SOURCE_SHA: ${{ inputs.source-sha }}
run: node apps/desktop/scripts/desktop-source.mjs
- uses: pnpm/action-setup@v5
with:
version: 10.17.0
- uses: actions/setup-node@v5
with:
node-version-file: .nvmrc
cache: pnpm
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: 1.99.1
targets: ${{ inputs.target }}
- uses: Swatinem/rust-cache@v2
with:
workspaces: apps/desktop/src-tauri
shared-key: desktop-release-${{ inputs.target }}
- uses: actions/setup-go@v6
id: go
with:
go-version-file: backend/go.mod
cache: false
- name: Locate Go caches
id: go-paths
shell: bash
run: |
echo "build=$(go env GOCACHE)" >> "$GITHUB_OUTPUT"
echo "modules=$(go env GOMODCACHE)" >> "$GITHUB_OUTPUT"
# Both macOS targets run on arm64, so key compiled packages by target
# triple; the source SHA refreshes builds while retaining dependency caches.
- name: Cache Go sidecar build
uses: actions/cache@v5
with:
path: |
${{ steps.go-paths.outputs.build }}
${{ steps.go-paths.outputs.modules }}
key: desktop-go-${{ runner.os }}-${{ inputs.target }}-${{ steps.go.outputs.go-version }}-${{ hashFiles('backend/go.sum') }}-${{ inputs.source-sha }}
restore-keys: |
desktop-go-${{ runner.os }}-${{ inputs.target }}-${{ steps.go.outputs.go-version }}-${{ hashFiles('backend/go.sum') }}-
desktop-go-${{ runner.os }}-${{ inputs.target }}-${{ steps.go.outputs.go-version }}-
- name: Install desktop CLI
shell: bash
run: pnpm --filter @deeix/desktop install --frozen-lockfile
- name: Download frontend
uses: actions/download-artifact@v7
with:
name: desktop-web
path: apps/web/out
- name: Download catalog snapshots
uses: actions/download-artifact@v7
with:
name: desktop-catalog
path: backend/internal/infra/catalogdata/data
- name: Check C compiler and frontend
shell: bash
run: |
gcc --version
test -f apps/web/out/index.html
45 changes: 22 additions & 23 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ concurrency:

env:
PNPM_VERSION: 10.17.0
NODE_VERSION: 24
# Incremental artefacts are useless across CI runs and bloat the Rust cache.
CARGO_INCREMENTAL: 0

Expand All @@ -36,9 +35,9 @@ jobs:
docker: ${{ steps.filter.outputs.docker }}
lockfiles: ${{ steps.filter.outputs.lockfiles }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- id: filter
uses: dorny/paths-filter@v3
uses: dorny/paths-filter@v4
with:
filters: |
shared: &shared
Expand Down Expand Up @@ -77,7 +76,7 @@ jobs:
if: github.event_name == 'pull_request'
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
with:
fetch-depth: 0
- name: Check commit subjects
Expand Down Expand Up @@ -113,8 +112,8 @@ jobs:
run:
working-directory: backend
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
- uses: actions/checkout@v5
- uses: actions/setup-go@v6
with:
go-version-file: backend/go.mod
cache-dependency-path: backend/go.sum
Expand All @@ -140,15 +139,15 @@ jobs:
if: needs.changes.outputs.web == 'true'
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/checkout@v5
- uses: pnpm/action-setup@v5
with:
version: ${{ env.PNPM_VERSION }}
- uses: actions/setup-node@v4
- uses: actions/setup-node@v5
with:
node-version: ${{ env.NODE_VERSION }}
node-version-file: .nvmrc
cache: pnpm
- uses: actions/setup-go@v5
- uses: actions/setup-go@v6
with:
go-version-file: backend/go.mod
cache-dependency-path: backend/go.sum
Expand All @@ -159,7 +158,7 @@ jobs:
- name: Test
run: pnpm turbo run test --filter=./packages/*
- name: Cache Next.js build
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: apps/web/.next/cache
# Source hash excludes installed and generated trees, which exist by the time this step runs.
Expand All @@ -178,7 +177,7 @@ jobs:
run:
working-directory: apps/desktop/src-tauri
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
Expand Down Expand Up @@ -213,11 +212,11 @@ jobs:
if: needs.changes.outputs.python == 'true'
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: astral-sh/ruff-action@v3
- uses: actions/checkout@v5
- uses: astral-sh/ruff-action@v4.1.0
with:
args: check deploy/services backend/tools
- uses: astral-sh/ruff-action@v3
- uses: astral-sh/ruff-action@v4.1.0
with:
args: format --check deploy/services backend/tools

Expand All @@ -227,13 +226,13 @@ jobs:
if: needs.changes.outputs.docker == 'true'
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
- uses: actions/checkout@v5
- uses: docker/setup-buildx-action@v4
# Builds the default Dockerfile target, the path users take; release images use the prebuilt
# web assets (see .github/workflows/image.yml). mode=min keeps this job from filling the
# repository-wide cache quota with the multi-GB install and compile layers.
- name: Build image (no push)
uses: docker/build-push-action@v6
uses: docker/build-push-action@v7
with:
context: .
push: false
Expand All @@ -246,13 +245,13 @@ jobs:
if: needs.changes.outputs.lockfiles == 'true' || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/checkout@v5
- uses: pnpm/action-setup@v5
with:
version: ${{ env.PNPM_VERSION }}
- uses: actions/setup-node@v4
- uses: actions/setup-node@v5
with:
node-version: ${{ env.NODE_VERSION }}
node-version-file: .nvmrc
cache: pnpm
- uses: dtolnay/rust-toolchain@stable
- name: Install
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ jobs:
build-mode: none
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/desktop-channel.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
if: github.event.release.tag_name != 'desktop-beta'
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Refresh
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Expand Down
93 changes: 93 additions & 0 deletions .github/workflows/desktop-linux.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
name: Desktop · Linux x64

on:
workflow_call:
inputs:
source-sha:
required: true
type: string
channel:
required: true
type: string

permissions:
contents: read

jobs:
build:
runs-on: ubuntu-24.04
timeout-minutes: 45
env:
CARGO_INCREMENTAL: 0
TARGET: x86_64-unknown-linux-gnu
CHANNEL: ${{ inputs.channel }}
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v5
with:
ref: ${{ github.sha }}
- uses: ./.github/actions/desktop-setup
with:
target: ${{ env.TARGET }}
source-sha: ${{ inputs.source-sha }}
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
- name: Build server sidecar
run: node apps/desktop/scripts/build-sidecar.mjs --target "$TARGET"
- name: Configure desktop build
run: |
node apps/desktop/scripts/release-config.mjs --channel "$CHANNEL" --repository "$GITHUB_REPOSITORY" \
--prebuilt-frontend --output "$RUNNER_TEMP/desktop-config.json"
- name: Compile desktop executable
run: |
pnpm --filter @deeix/desktop exec tauri build --no-bundle --target "$TARGET" \
--config "$RUNNER_TEMP/desktop-config.json" -- --locked --timings
- name: Exclude Wayland libraries from AppImage
run: bash apps/desktop/scripts/prepare-linuxdeploy-wrapper.sh
- name: Bundle deb and AppImage
env:
LINUXDEPLOY_DEBUG_LOG: ${{ runner.temp }}/linuxdeploy.log
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
run: |
pnpm --filter @deeix/desktop exec tauri bundle --target "$TARGET" --bundles deb,appimage \
--config "$RUNNER_TEMP/desktop-config.json"
- name: Show linuxdeploy log
if: always()
run: cat "$RUNNER_TEMP/linuxdeploy.log" 2>/dev/null || echo "(no linuxdeploy log)"
- name: Verify AppImage
run: |
shopt -s nullglob
images=(apps/desktop/src-tauri/target/"$TARGET"/release/bundle/appimage/*.AppImage)
((${#images[@]} == 1)) || { echo "::error::expected one AppImage"; exit 1; }
workdir="$(mktemp -d)"
trap 'rm -rf "$workdir"' EXIT
(cd "$workdir" && "$GITHUB_WORKSPACE/${images[0]}" --appimage-extract >/dev/null 2>&1)
test -d "$workdir/squashfs-root/usr/lib"
if find "$workdir/squashfs-root/usr/lib" -name 'libwayland*' -print -quit | grep -q .; then
echo "::error::AppImage still bundles Wayland libraries"
exit 1
fi
- name: Stage release assets
run: |
node apps/desktop/scripts/collect-release-assets.mjs --platform linux-x64 \
--bundle "apps/desktop/src-tauri/target/$TARGET/release/bundle" --out "$RUNNER_TEMP/release-assets"
- uses: actions/upload-artifact@v6
with:
name: desktop-release-linux-x64
path: ${{ runner.temp }}/release-assets
compression-level: 0
if-no-files-found: error
overwrite: true
- name: Upload compilation timings
if: always()
uses: actions/upload-artifact@v6
with:
name: desktop-timings-linux-x64
path: apps/desktop/src-tauri/target/cargo-timings
overwrite: true
retention-days: 7
Loading
Loading