The signed release showed only its background colour and never started the sidecar. Tauri's freezePrototype freezes Object.prototype before the bundle runs; d3-color and d3-format (under the visx charts) assign `constructor` / `toString` on plain objects while loading, which throws on a frozen prototype, so the bundle stopped before React drew anything. The saved state was not the cause. - build/freeze-safe.ts: Vite plugin that rewrites those assignments in dependencies into a helper that defines the property when the frozen prototype would refuse it - error boundaries for the window, each screen and each app tab (Copy details, Reload, Reset saved state with a backup); public/boot.js shows the same panel when the bundle fails or the window stays empty - logs/host.log (start, saved state, sidecar start/stop, panics) and logs/webview.log (log_webview), rotated, home as ~, keys, tokens and e-mail addresses replaced - state.json `version` 2 with an explicit 1 -> 2 migration (original kept as state.json.v1.bak), per-entry tolerant parsing, partial settings keep their fields, unreadable files kept aside - folders that are gone: "Folder not found" with Locate... (project_locate) / Remove; portfolio reads skip them - tools/desktop-boot-check.ts: the built window with the release CSP and the frozen prototype, a mocked host from the state fixtures (empty, D1 with folders gone, D3) and the real sidecar, through every screen; in bun run ci, the Forgejo CI workflow and the macOS release
58 lines
2.3 KiB
YAML
58 lines
2.3 KiB
YAML
# bun run ci on every push to main and every pull request into main: adapters, desktop version, tests, typecheck,
|
|
# desktop i18n / typecheck / build, desktop boot check (headless Chromium), desktop Rust tests and clippy, scrub. Runs on the VDS runner (docs/desktop-release.md).
|
|
# Publishes nothing: site/ is still published by Jenkins.
|
|
name: ci
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
branches: [main]
|
|
workflow_dispatch:
|
|
|
|
env:
|
|
BUN_VERSION: '1.4.0'
|
|
CARGO_TERM_COLOR: never
|
|
CARGO_INCREMENTAL: '0'
|
|
|
|
jobs:
|
|
ci:
|
|
# runner label: ubuntu-22.04:docker://ghcr.io/catthehacker/ubuntu:act-22.04
|
|
runs-on: ubuntu-22.04
|
|
# the self-hosted runner only runs code from this repo: pull requests from forks are skipped
|
|
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: System packages (Tauri on Linux)
|
|
run: |
|
|
sudo apt-get update -qq
|
|
sudo apt-get install -y -qq --no-install-recommends libwebkit2gtk-4.1-dev libgtk-3-dev \
|
|
libayatana-appindicator3-dev librsvg2-dev libsoup-3.0-dev libjavascriptcoregtk-4.1-dev libssl-dev libxdo-dev \
|
|
build-essential curl unzip pkg-config >/dev/null
|
|
- uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
~/.bun/install/cache
|
|
~/.cargo/registry/index
|
|
~/.cargo/registry/cache
|
|
~/.cargo/git/db
|
|
apps/desktop/src-tauri/target
|
|
key: ci-${{ runner.os }}-${{ hashFiles('bun.lock', 'apps/desktop/src-tauri/Cargo.lock') }}
|
|
restore-keys: ci-${{ runner.os }}-
|
|
- name: Bun and Rust
|
|
run: |
|
|
P="${FORGEJO_PATH:-$GITHUB_PATH}"
|
|
curl -fsSL https://bun.sh/install | bash -s "bun-v${BUN_VERSION}" >/dev/null
|
|
echo "$HOME/.bun/bin" >> "$P"
|
|
command -v rustup || curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --component clippy
|
|
echo "$HOME/.cargo/bin" >> "$P"
|
|
- name: Install
|
|
run: |
|
|
rustup component add clippy
|
|
bun --version && cargo --version
|
|
bun install --frozen-lockfile
|
|
- name: Headless Chromium (desktop boot check)
|
|
run: bunx playwright install --with-deps chromium
|
|
- name: bun run ci
|
|
run: bun run ci
|