Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
4f77475
feat(desktop): replace Tauri with a Rust IPC runtime
richiemcilroy Aug 12, 2026
fa925ef
feat(desktop): add the Electron shell and renderer bridge
richiemcilroy Aug 12, 2026
3a57117
ci(desktop): build and publish Electron releases
richiemcilroy Aug 12, 2026
1dec47e
docs: add Electron and Tauri benchmark
richiemcilroy Aug 12, 2026
777479b
chore(desktop): format Electron migration files
richiemcilroy Aug 12, 2026
ba952c8
fix: protect published release tags
richiemcilroy Aug 13, 2026
c75998b
fix: make release tags immutable
richiemcilroy Aug 13, 2026
491c2ac
fix: preserve basename suffix semantics
richiemcilroy Aug 13, 2026
e090512
fix: avoid logging user identifiers
richiemcilroy Aug 13, 2026
eb048ee
style: format Loom storage access
richiemcilroy Aug 13, 2026
4d1a993
fix: harden Loom URL handling
richiemcilroy Aug 13, 2026
4233b70
ci: harden desktop validation
richiemcilroy Aug 13, 2026
9db0c2b
fix: revalidate draft before asset uploads
richiemcilroy Aug 13, 2026
2aebf16
fix: stage release assets before promotion
richiemcilroy Aug 13, 2026
13a1d43
style: organize release asset imports
richiemcilroy Aug 13, 2026
5736e49
fix: create release tag on promotion
richiemcilroy Aug 13, 2026
98acc87
perf: shrink Electron package footprint
richiemcilroy Aug 13, 2026
32d5b61
perf: reduce Electron host overhead
richiemcilroy Aug 13, 2026
ad0ffb8
perf: defer nonessential renderer work
richiemcilroy Aug 13, 2026
f11a0ff
perf: bound editor playback memory
richiemcilroy Aug 13, 2026
679a64f
fix: scope release staging to commits
richiemcilroy Aug 13, 2026
e739e32
perf: retain decoded frames on the GPU
richiemcilroy Aug 13, 2026
c9aa93e
perf: reduce Electron editor resource usage
richiemcilroy Aug 13, 2026
eb98994
docs: update Electron performance benchmark
richiemcilroy Aug 13, 2026
ca5c360
docs: refresh final Electron benchmark
richiemcilroy Aug 13, 2026
4aa2d3a
fix: revalidate release before promotion
richiemcilroy Aug 13, 2026
26be4fa
fix: require immutable desktop releases
richiemcilroy Aug 13, 2026
8b56f79
fix: validate release policy without admin token
richiemcilroy Aug 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 0 additions & 1 deletion .github/actions/install-desktop-deps/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ runs:
run: |
sudo apt update
sudo apt install -y --no-install-recommends \
libwebkit2gtk-4.1-dev \
build-essential \
pkg-config \
curl \
Expand Down
Binary file added .github/assets/electron-vs-tauri-performance.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
94 changes: 44 additions & 50 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
name: "CI"

permissions:
contents: read

on:
push:
branches:
Expand All @@ -19,14 +23,14 @@ jobs:
runs-on: ubuntu-latest
outputs:
rust: ${{ steps.filter.outputs.rust }}
tauri-plugins: ${{ steps.filter.outputs.tauri-plugins }}
desktop: ${{ steps.filter.outputs.desktop }}
branch: ${{ steps.branch.outputs.branch }}
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Check for changes
uses: dorny/paths-filter@v2
uses: dorny/paths-filter@v3
id: filter
with:
filters: |
Expand All @@ -37,17 +41,14 @@ jobs:
- '.github/**'
- 'apps/cli/**'
- 'crates/**'
- 'apps/desktop/src-tauri/**'
- 'apps/desktop/src-backend/**'
- 'Cargo.toml'
- 'Cargo.lock'
tauri-plugins:
- 'Cargo.lock'
- 'pnpm-lock.yaml'

- name: Output branch name
id: branch
run: |
echo "branch=${{ env.BRANCH_NAME }}" >> $GITHUB_OUTPUT
echo "branch=${{ env.BRANCH_NAME }}" >> "$GITHUB_OUTPUT"

typecheck:
name: Typecheck
Expand Down Expand Up @@ -147,24 +148,22 @@ jobs:

- name: Create .env file in root
run: |
echo "VITE_ENVIRONMENT=production" >> .env
echo "CAP_DESKTOP_SENTRY_URL=https://6a3b6a09e6ae976c2ad6fff710e88748@o4506859771527168.ingest.us.sentry.io/4508330917101568" >> .env
echo "NEXT_PUBLIC_WEB_URL=${{ secrets.NEXT_PUBLIC_WEB_URL }}" >> .env
echo 'NEXTAUTH_URL=${{ secrets.NEXT_PUBLIC_WEB_URL }}' >> .env
echo 'VITE_OPENPANEL_CLIENT_ID=${{ secrets.VITE_OPENPANEL_CLIENT_ID }}' >> .env
echo 'VITE_OPENPANEL_API_URL=${{ secrets.VITE_OPENPANEL_API_URL }}' >> .env
echo 'VITE_SERVER_URL=${{ secrets.NEXT_PUBLIC_WEB_URL }}' >> .env

cat .env >> $GITHUB_ENV
{
echo "VITE_ENVIRONMENT=production"
echo "CAP_DESKTOP_SENTRY_URL=https://6a3b6a09e6ae976c2ad6fff710e88748@o4506859771527168.ingest.us.sentry.io/4508330917101568"
echo "NEXT_PUBLIC_WEB_URL=${{ secrets.NEXT_PUBLIC_WEB_URL }}"
echo 'NEXTAUTH_URL=${{ secrets.NEXT_PUBLIC_WEB_URL }}'
echo 'VITE_OPENPANEL_CLIENT_ID=${{ secrets.VITE_OPENPANEL_CLIENT_ID }}'
echo 'VITE_OPENPANEL_API_URL=${{ secrets.VITE_OPENPANEL_API_URL }}'
echo 'VITE_SERVER_URL=${{ secrets.NEXT_PUBLIC_WEB_URL }}'
} >> .env

cat .env >> "$GITHUB_ENV"

- name: Run setup
shell: bash
run: node scripts/setup.js

- name: Build desktop binaries
shell: bash
run: ./scripts/build-desktop-binaries.sh ${{ matrix.settings.target }}

- name: Run Clippy
run: cargo clippy --workspace --all-features --locked -- -D warnings

Expand Down Expand Up @@ -199,6 +198,10 @@ jobs:
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
# CI validates release-mode compilation and packaging without paying the
# production profile's full-LTO cost on every pull request.
CARGO_PROFILE_RELEASE_LTO: "false"
CARGO_PROFILE_RELEASE_CODEGEN_UNITS: "16"
steps:
- name: Checkout repository
uses: actions/checkout@v4
Expand All @@ -216,20 +219,19 @@ jobs:

- name: Create .env file in root
run: |
echo "VITE_ENVIRONMENT=production" >> .env
echo "CAP_DESKTOP_SENTRY_URL=https://6a3b6a09e6ae976c2ad6fff710e88748@o4506859771527168.ingest.us.sentry.io/4508330917101568" >> .env
echo "NEXT_PUBLIC_WEB_URL=${{ secrets.NEXT_PUBLIC_WEB_URL }}" >> .env
echo 'NEXTAUTH_URL=${{ secrets.NEXT_PUBLIC_WEB_URL }}' >> .env
echo 'VITE_OPENPANEL_CLIENT_ID=${{ secrets.VITE_OPENPANEL_CLIENT_ID }}' >> .env
echo 'VITE_OPENPANEL_API_URL=${{ secrets.VITE_OPENPANEL_API_URL }}' >> .env
echo 'VITE_SERVER_URL=${{ secrets.NEXT_PUBLIC_WEB_URL }}' >> .env
{
echo "VITE_ENVIRONMENT=production"
echo "CAP_DESKTOP_SENTRY_URL=https://6a3b6a09e6ae976c2ad6fff710e88748@o4506859771527168.ingest.us.sentry.io/4508330917101568"
echo "NEXT_PUBLIC_WEB_URL=${{ secrets.NEXT_PUBLIC_WEB_URL }}"
echo 'NEXTAUTH_URL=${{ secrets.NEXT_PUBLIC_WEB_URL }}'
echo 'VITE_OPENPANEL_CLIENT_ID=${{ secrets.VITE_OPENPANEL_CLIENT_ID }}'
echo 'VITE_OPENPANEL_API_URL=${{ secrets.VITE_OPENPANEL_API_URL }}'
echo 'VITE_SERVER_URL=${{ secrets.NEXT_PUBLIC_WEB_URL }}'
} >> .env

- name: Copy .env to apps/desktop
run: cp .env apps/desktop/.env

- name: Output .env file
run: cat apps/desktop/.env

- name: Run cap-setup
shell: bash
run: pnpm -w cap-setup
Expand All @@ -242,27 +244,19 @@ jobs:

- name: Build app
working-directory: apps/desktop
run: pnpm tauri build --debug --target ${{ matrix.settings.target }} --no-bundle
shell: bash
run: |
pnpm run preparescript
pnpm build
pnpm build:electron-main
if [[ "$RUNNER_OS" == "macOS" ]]; then
pnpm exec electron-builder --dir --mac --arm64
else
pnpm exec electron-builder --dir --win --x64
fi
env:
RUST_TARGET_TRIPLE: ${{ matrix.settings.target }}

tauri-plugins:
name: Verify Tauri plugin versions
runs-on: ubuntu-latest
needs: changes
if: needs.changes.outputs.tauri-plugins == 'true'
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup node
uses: actions/setup-node@v3
with:
node-version: 20

- name: Run verify
shell: bash
run: node scripts/check-tauri-plugin-versions.js
CSC_IDENTITY_AUTO_DISCOVERY: false

rust-cache:
name: Rust cache
Expand Down Expand Up @@ -294,7 +288,7 @@ jobs:
save-cache: true

- name: Setup node
uses: actions/setup-node@v3
uses: actions/setup-node@v4
with:
node-version: 24

Expand Down
Loading
Loading