Files
openwork/.gitignore
ben 7a53c2964c feat(desktop): Tauri → Electron migration release kit (#1526)
Ships the last-missing piece of the Electron migration. After this PR
merges there are three one-shot scripts under scripts/migration/ that
carry the whole lifecycle from "cut v0.12.0" through "delete src-tauri":

  01-cut-migration-release.mjs   # bumps versions, writes the release env
                                 # fragment, tags, pushes.
  02-validate-migration.mjs      # guided smoke test against a cut release.
  03-post-migration-cleanup.mjs  # deletes src-tauri, flips defaults,
                                 # scrubs Tauri docs (dry-run by default).

Code landing in the same PR (dormant until a release sets
VITE_OPENWORK_MIGRATION_RELEASE=1):

- apps/desktop/src-tauri/src/commands/migration.rs gains
  migrate_to_electron() — downloads the matching Electron .zip, verifies
  the Apple signature, swaps the .app bundle in place via a detached
  shell script, relaunches, and exits. Windows + Linux branches are
  stubbed with clear TODOs for the follow-up.
- apps/app/src/app/lib/migration.ts grows migrateToElectron() + a
  "later" defer helper.
- apps/app/src/react-app/shell/migration-prompt.tsx adds the one-time
  "OpenWork is moving to a new engine" modal. Mounted from
  providers.tsx. Gated on isTauriRuntime() AND the build-time flag, so
  Electron users and all non-migration-release builds never render it.
- apps/app/vite.config.ts loads apps/app/.env.migration-release when
  present so the prompt gets the release-specific download URLs.
- .gitignore allows the migration-release fragment to be committed only
  on the tagged migration-release commit (removed in cleanup step).

Release workflow:
- .github/workflows/release-macos-aarch64.yml gains a publish-electron
  job alongside the Tauri jobs. Gated on RELEASE_PUBLISH_ELECTRON repo
  var OR the new publish_electron workflow_dispatch input (default
  false). Uses the existing Apple Dev ID secrets — no new credential
  story. Produces latest-mac.yml alongside Tauri's latest.json so a
  v0.12.0 release serves both updaters.

Verified:
  pnpm --filter @openwork/app typecheck   ✓
  cargo check --manifest-path apps/desktop/src-tauri/Cargo.toml   ✓
  node --check on all mjs scripts   ✓
  python yaml parse of release-macos-aarch64.yml   ✓

Not verified (needs a real release cycle):
  end-to-end migration from a signed Tauri .app to a signed Electron
  .app through the detached-script install swap.

Co-authored-by: Benjamin Shafii <benjamin@openworklabs.com>
2026-04-22 18:52:30 -07:00

61 lines
1.1 KiB
Plaintext

.turbo/
node_modules/
packages/*/node_modules/
apps/*/node_modules/
ee/apps/*/node_modules/
ee/packages/*/node_modules/
.next/
out/
dist/
packages/*/dist/
apps/*/dist/
ee/apps/*/dist/
ee/packages/*/dist/
tmp/
# Local git worktrees
_worktrees/
# Tauri/Rust
packages/desktop/src-tauri/target/
packages/desktop/src-tauri/sidecars/
apps/desktop/src-tauri/target/
apps/desktop/src-tauri/sidecars/
# Env
.env
.env.*
!.env.example
# The migration-release fragment is committed only on the tagged
# migration-release commit and removed by 03-post-migration-cleanup.mjs.
# Allow git to see it so `cut-migration-release` can commit it.
!.env.migration-release
# Bun build artifacts
*.bun-build
apps/server/cli
apps/server-v2/openapi/openapi.json
packages/openwork-server-sdk/generated/
# pnpm store (created by Docker volume mounts)
.pnpm-store/
# Docker dev workspace (ephemeral mount point)
packaging/docker/workspace/
# OS
.DS_Store
# OpenCode mirror
vendor/opencode/
# OpenCode local deps
.opencode/node_modules/
.opencode/bun.lock
# OpenWork workspace-local artifacts
.opencode/openwork/
.vercel
.env*.local
.claude/*