Add dist workflows and streamline CI #10

Merged
mburchard merged 14 commits from feature/ci-workflows into main 2026-03-10 07:03:45 +00:00
Owner

Summary

  • Add platform-specific dist workflows: Linux AppImage (Forgejo), macOS DMG and Windows Squirrel (GitHub)
  • Streamline all workflows: corepack before setup-node, cache: pnpm, concurrency groups
  • Point repository URLs in package.json to Forgejo as the leading system

Test plan

  • Forgejo CI passes with cache: pnpm (fallback to manual caching if not)
  • Manual trigger of dist-linux.yml produces an AppImage artifact
  • Manual trigger of dist-macos.yml and dist-windows.yml on GitHub (after merge + push)
## Summary - Add platform-specific dist workflows: Linux AppImage (Forgejo), macOS DMG and Windows Squirrel (GitHub) - Streamline all workflows: corepack before setup-node, `cache: pnpm`, concurrency groups - Point repository URLs in package.json to Forgejo as the leading system ## Test plan - [ ] Forgejo CI passes with `cache: pnpm` (fallback to manual caching if not) - [ ] Manual trigger of dist-linux.yml produces an AppImage artifact - [ ] Manual trigger of dist-macos.yml and dist-windows.yml on GitHub (after merge + push)
Add dist workflows and streamline CI
All checks were successful
CI / ci (pull_request) Successful in 1m51s
cfb83c0792
- dist-linux.yml (Forgejo): AppImage via electron-builder, release asset + artifact fallback
- dist-macos.yml (GitHub): DMG via electron-builder on macos-latest
- dist-windows.yml (GitHub): Squirrel installer via electron-builder on windows-latest
- Streamline all workflows: corepack before setup-node, cache: pnpm, concurrency groups
- Point repository URLs in package.json to Forgejo
Update README and flatten common module structure
Some checks failed
CI / ci (pull_request) Successful in 1m44s
Dist Linux / dist-linux (release) Failing after 3s
76080b92a1
- Add CI badge (Forgejo), license badge, target screen docs, and distribution section to README
- Update bit-log link from GitHub to Forge
- Move common/src/core/ files (ipc, versions, window) to common/src/ top level,
  eliminating the inconsistent core/ subdirectory
- Update all imports across electron, electron-preload, app, and common modules
- Fix documentation table path for window.ts
Fix dist-linux release upload action
Some checks failed
CI / ci (pull_request) Successful in 1m45s
Dist Linux / dist-linux (release) Failing after 1m35s
94f54b5c5c
- Replace non-existent forgejo/upload-release-action with actions/forgejo-release@v2
- Use explicit upload parameters (direction, url, repo, tag, release-dir)
Add --publish never to all dist workflows
Some checks failed
CI / ci (pull_request) Successful in 1m45s
Dist Linux / dist-linux (release) Failing after 2m38s
0eca56d8a1
- electron-builder auto-publishes when it detects a git tag, but cannot
  parse the Forge repository URL and fails
- Release asset uploads are handled by the workflow actions, not by
  electron-builder
Disable electron-builder publish to fix dist builds
Some checks failed
CI / ci (pull_request) Successful in 1m45s
Dist Linux / dist-linux (release) Failing after 2m49s
64e1cac84b
- Set publish: null in electron-builder config to prevent update info
  generation, which fails because the Forge repository URL is not
  recognized as a supported publish provider
- Remove redundant --publish never from all dist workflows
Replace forgejo-release action with curl upload
All checks were successful
CI / ci (pull_request) Successful in 1m45s
Dist Linux / dist-linux (release) Successful in 3m14s
5c7f72682b
- forgejo-release@v2 ships an x86_64 tea binary that cannot run on
  the ARM64 runner
- Use the Forgejo API directly via curl, which works on any architecture
Modernise tooling config and harden CI workflows
Some checks failed
CI / ci (pull_request) Failing after 49s
61c6d72da2
- Replace tsconfig isolatedModules with verbatimModuleSyntax, add allowImportingTsExtensions,
  move vite/client types from triple-slash directive into tsconfig type arrays
- Add ESLint rules for object-property-newline and Vue template formatting (attribute linebreak,
  closing bracket, indent, max-attributes-per-line)
- Harden all CI workflows with persist-credentials: false on checkout, enforce zero ESLint
  warnings in CI with --max-warnings 0
- Move dist-linux workflow from Forgejo to GitHub Actions to produce x64 AppImage builds
- Remove unused Vue lint rules (no Vue files in project), fix e18e/prefer-static-regex
  by moving regex literals to module scope (RotatingFileAppender, WindowController, vite.config)
- Add verbatimModuleSyntax and allowImportingTsExtensions to tsconfig.base.json, move
  vite/client types from triple-slash directive to tsconfig, remove obsolete isolatedModules
- Update dependencies (pnpm-lock.yaml)
- Add safeClone utility for transparent IPC argument sanitisation at the transport boundary,
  handling non-cloneable types (DOM nodes, Events, Symbols, Functions, Errors, RegExp, circular
  references, Map/Set, class instances) with depth limiting
- Integrate safeClone into preload (send/invoke) and main process (broadcast/sendToRenderer)
- Remove backward-compatibility barrel file definitions.ts, consolidate all IPC exports into
  ipc.ts with combined IpcChannels constant and extensible IpcChannel union type
- Add comprehensive safeClone test suite (40 tests, jsdom environment for DOM/Event coverage)
- Add v8 ignore markers for untestable defensive branches in preload wiring
- Update README with safeClone documentation and Linux build location
- Make setMainWindowId accept undefined so the app window can be explicitly cleared or
  reassigned; auto-clear mainWindowId in dispose() when the current app window is destroyed
- Update displayDemo to receive WindowController instead of BrowserWindow, promote the demo
  window as app window while active and restore the previous ID on close
- Expand ipc.spec.ts: add tests for handleFromRenderer (duplicate handler warning),
  onFromRenderer, onceFromRenderer, offFromRenderer, and broadcast (registry iteration,
  destroyed-window skip)
- Expand WindowController.spec.ts: show-timeout with visible window, unchanged pack height
  skip, display without label, mainWindowId not set; reset mainWindowId in afterEach for
  test isolation
- Add throttle cancel-without-timer test in utils.spec.ts
- Document main process debugging via --inspect/--inspect-brk with step-by-step
  setup for IntelliJ/WebStorm and VS Code
- Document renderer debugging via built-in Chromium DevTools and optional
  remote debugging port for IDE integration
- Add acceptFirstMouse as top-level BrowserWindow option so clicks on unfocused
  windows register immediately without requiring a separate focus click first
- Add vite/client to tsconfig.node.json so import.meta.env is recognised in the
  electron module (fixes TS2339 in IDEs using project references)
- Set user-select: none on body to prevent accidental text selection
- Allow user-select: text on input, textarea, pre and code elements
Add persistent main window bounds with TOML settings
All checks were successful
CI / ci (pull_request) Successful in 1m55s
CI / ci (push) Successful in 1m56s
df9dacce8e
- New settings module (UserSettings.ts) with TOML-based persistence via smol-toml,
  configurable for customer projects (defaults, fileName, directory as parameters)
- MainWindow.ts encapsulates domain logic: minimum dimensions (200px), display visibility
  check with title bar overlap, relocation to primary display when off-screen
- Debounced bounds tracking (500ms) for move/resize/maximize with flush on window close;
  maximised windows store the last normal bounds instead of the display size
- main.ts significantly simplified: load settings, resolve bounds, create window
- Full test coverage: 12 tests for UserSettings, 23 tests for MainWindow
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
mburchard/vite-electron-starter!10
No description provided.