Skip to content

feat(packaging): Linux AppImage installer - #39

Merged
rrader26 merged 1 commit into
mainfrom
feat/linux-appimage
May 13, 2026
Merged

feat(packaging): Linux AppImage installer#39
rrader26 merged 1 commit into
mainfrom
feat/linux-appimage

Conversation

@rrader26

Copy link
Copy Markdown
Contributor

Summary

  • Linux `.AppImage` installer scaffolding — completes the cross-platform matrix (macOS .pkg, Windows .msi, Linux .AppImage).
  • GitHub Actions `build-linux` job in the release workflow; one tag push produces all three artifacts.
  • Launcher script updated to handle BOTH the macOS pkg layout AND the Linux AppImage layout (probes for the entry file).

What ships

Each `.AppImage` is one self-contained file. User makes it executable, double-clicks (or runs from a terminal), they're on a working `agentmark-mcp`.

```
AgentMark.AppDir/
├── AppRun entrypoint (delegates to launcher)
├── agentmark.desktop XDG desktop entry (AppImage spec)
├── agentmark.png placeholder icon (AppImage spec)
└── usr/
├── bin/
│ ├── node pinned Node 22.11.0 LTS
│ └── agentmark-mcp launcher script
├── lib/agentmark/ dist/ + schema/ + package.json + prod deps
└── share/
├── applications/agentmark.desktop
└── icons/hicolor/256x256/apps/agentmark.png
```

What's NOT in the Linux build

  • Desktop a11y bridge. AT-SPI Linux bridge isn't in this codebase yet. Every other plugin (memory, recipes, network, foundations, vision, system, microsoft, web, pdf) runs fine.
  • When the AT-SPI bridge ships, it slots into the same AppDir layout at `usr/lib/agentmark/bridges/agentmark-bridge-linux`. The launcher already detects + wires it.

Launcher dual-layout support

The shared `launcher.sh` now handles both:

Layout Entry resolution
macOS pkg `/bin/agentmark-mcp` → `/node` + `/agentmark/dist/...`
Linux AppImage `/usr/bin/agentmark-mcp` → `/usr/bin/node` + `/usr/lib/agentmark/dist/...`

Also: launcher now only sets `AGENTMARK_BRIDGE_PATH` when the bridge binary actually exists. Previously hardcoded the macOS bridge name — on Linux that env var would point at a missing file.

Test plan

  • Shell scripts syntax-validated (`bash -n`)
  • Both launcher layouts logic-traced
  • Manual: trigger the release workflow on a tag and verify all three artifacts upload to a draft Release
  • Manual: download the .AppImage, `chmod +x`, run `./AgentMark-x.y.z-linux-x86_64.AppImage --help` and `./AgentMark... install --dry-run` on a fresh Ubuntu VM

Pinned versions (unchanged)

Node 22.11.0 LTS
Tooling `appimagetool-x86_64.AppImage` continuous build (auto-downloaded by the script)

🤖 Generated with Claude Code

Completes the cross-platform installer matrix (macOS .pkg, Windows .msi,
Linux .AppImage — all three from one tag push).

Linux ships *without* a desktop a11y bridge for now: AT-SPI Linux
bridge isn't in this codebase yet. Every other plugin (memory,
recipes, network, foundations, vision, system, microsoft, web, pdf)
runs fine — the .AppImage is genuinely useful for Linux developers
using Claude Code / Cursor / Codex right now.

When the AT-SPI bridge ships, it slots into the same AppDir layout
(`usr/lib/agentmark/bridges/agentmark-bridge-linux`); the launcher
already detects + wires it.

Files:
  packaging/scripts/build-linux.sh             pnpm build → Node → AppDir → appimagetool
  packaging/templates/AppRun                   AppImage entrypoint (delegates to launcher)
  packaging/templates/agentmark.desktop        XDG desktop entry (AppImage spec requirement)
  .github/workflows/release.yml                + build-linux job; appended to publish

Also: launcher.sh updated to detect BOTH the macOS pkg layout
(<root>/{bin,node,agentmark,bridges}) AND the Linux AppImage layout
(<root>/usr/{bin/node, bin/agentmark-mcp, lib/agentmark, lib/agentmark/bridges})
by probing for the entry file. One launcher, both layouts.

Plus: launcher now only sets AGENTMARK_BRIDGE_PATH when a bridge
binary actually exists. Previously hardcoded the macOS bridge name —
on Linux that env var would point at a missing file.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@rrader26
rrader26 merged commit a62e457 into main May 13, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants