Skip to content
This repository was archived by the owner on Aug 6, 2026. It is now read-only.

feat(code): add Linux AppImage build target - #2130

Merged
gantoine merged 1 commit into
mainfrom
feat/linux-appimage-release
May 28, 2026
Merged

gantoine merged 1 commit into
mainfrom
feat/linux-appimage-release

Conversation

@gantoine

@gantoine gantoine commented May 13, 2026 •

Copy link
Copy Markdown
Member

Summary

  • Adds @reforged/maker-appimage and registers it in forge.config.ts so Forge produces x64 + arm64 Linux AppImages alongside the existing macOS DMG/ZIP and Windows installer.
  • Adds a publish-linux matrix job (ubuntu-latest + ubuntu-24.04-arm) to code-release.yml that installs the AppImage tooling (squashfs-tools, zsync, libfuse2t64) and runs electron-forge publish. finalize-release now depends on this job too.
  • Adds a pnpm --filter code make:linux script that builds the AppImage from macOS via Docker (tar-streamed source, container-side node_modules) for local verification, since electron-forge can't natively cross-build AppImages from darwin.
  • Drive-by: removes a duplicate const { isOnline } = useConnectivity() in SessionView.tsx left behind by a merge collision between fix(sessions): preserve prompt when sending while offline #1971 and fix(sessions): disable message send when offline #2121 — was failing typecheck on main.

Test plan

  • Push a throwaway v0.0.0-linuxtest1 tag and verify publish-linux produces both x64 and arm64 AppImages in the draft GitHub release
  • Confirm finalize-release waits for all three platform jobs before un-drafting
  • Locally: pnpm --filter code make:linux produces an AppImage under apps/code/out/make/ (requires Docker Desktop ≥ 8 GB memory)
  • Launch the produced AppImage on a Linux box and confirm the app boots
  • Verify existing macOS DMG and Windows installer release flows still publish (no changes to those job definitions, but matrix needs was extended)

Notes

  • Linux artifacts are unsigned (no gpg signing wired up); flag for follow-up if signed Linux builds are needed.
  • libfuse2t64 is the Ubuntu 24.04 package name; if ubuntu-latest is bumped past 24.04 in the future, that line may need adjusting.

🤖 Generated with Claude Code

@gantoine gantoine reopened this May 20, 2026
@gantoine
gantoine requested a review from Copilot May 20, 2026 20:36
@gantoine
gantoine marked this pull request as ready for review May 20, 2026 20:36
@gantoine
gantoine requested review from MattPua and charlesvien May 20, 2026 20:37
@greptile-apps

greptile-apps Bot commented May 20, 2026

Copy link
Copy Markdown
Contributor
Prompt To Fix All With AI
Fix the following 2 code review issues. Work through them one at a time, proposing concise fixes.

---

### Issue 1 of 2
.github/workflows/code-release.yml:218-222
**Unused matrix variable `arch`**

The `arch` field is declared in the matrix but is never referenced in any step — `electron-forge publish` detects the native architecture from the runner itself. Having a documented-but-unused variable is superfluous and could mislead future readers into thinking something explicit is being passed to the build command.

### Issue 2 of 2
.github/workflows/code-release.yml:219-222
The x64 runner uses `ubuntu-latest` while the arm64 runner pins `ubuntu-24.04-arm`. The `libfuse2t64` package name is Ubuntu 24.04-specific; if `ubuntu-latest` is ever resolved to a different LTS (22.04 uses `libfuse2`, and a future 26.04 may rename it again), this `apt-get install` step will fail. Using an explicit version for both runners makes the build reproducible and avoids the implicit coupling.

```suggestion
          - runner: ubuntu-24.04
            arch: x64
          - runner: ubuntu-24.04-arm
            arch: arm64
```

Reviews (1): Last reviewed commit: "Merge branch 'main' into feat/linux-appi..." | Re-trigger Greptile

Comment thread .github/workflows/code-release.yml Resolved
Comment thread .github/workflows/code-release.yml Resolved

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a Linux AppImage distribution path for the Electron “Code” app, integrating it into the existing Electron Forge packaging/publishing workflow and CI release pipeline.

Changes:

  • Add @reforged/maker-appimage to Forge config so Linux AppImages are produced (x64 + arm64).
  • Extend the GitHub Actions release workflow with a Linux publish matrix job and update release finalization dependencies.
  • Add a local Docker-based make:linux script and ensure non-macOS window icons are explicitly set at runtime.

Reviewed changes

Copilot reviewed 5 out of 6 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
pnpm-lock.yaml Locks the new AppImage maker dependency and its transitive deps.
apps/code/src/main/window.ts Sets an explicit window icon for Linux/Windows and updates platform window config branching.
apps/code/scripts/build-linux-docker.sh New Docker-based local Linux/AppImage build helper script.
apps/code/package.json Adds make:linux script and @reforged/maker-appimage dependency.
apps/code/forge.config.ts Registers MakerAppImage, ensures icon PNG is shipped as an extra resource, and adds Linux watcher native package copy.
.github/workflows/code-release.yml Adds publish-linux job (x64 + arm64) and makes finalize-release depend on it.
Files not reviewed (1)
  • pnpm-lock.yaml: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread apps/code/scripts/build-linux-docker.sh Resolved
Comment thread apps/code/scripts/build-linux-docker.sh Resolved
Comment thread .github/workflows/code-release.yml Resolved
@gantoine
gantoine requested review from a team and removed request for MattPua May 21, 2026 12:28
@charlesvien
charlesvien force-pushed the feat/linux-appimage-release branch from 063f7bd to aacb651 Compare May 22, 2026 15:32
Adds @reforged/maker-appimage so Forge produces x64 and arm64 AppImages
alongside the existing macOS/Windows artifacts. The release workflow gains
a publish-linux matrix job (ubuntu-latest + ubuntu-24.04-arm) which
installs the AppImage tooling (squashfs-tools, zsync, libfuse2t64) before
running electron-forge publish, and finalize-release now depends on it.

Also includes a make:linux script that builds the AppImage from macOS via
Docker for local verification, since electron-forge can't natively
cross-build AppImages from darwin.

Drive-by fix: remove a duplicate `const { isOnline } = useConnectivity()`
in SessionView.tsx that came in via a merge collision between #1971 and

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@gantoine
gantoine force-pushed the feat/linux-appimage-release branch from aacb651 to efdf8eb Compare May 28, 2026 15:52
@gantoine
gantoine merged commit 3416d6f into main May 28, 2026
17 checks passed
@gantoine
gantoine deleted the feat/linux-appimage-release branch May 28, 2026 16:10
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants