diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6223d562f..e46644434 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -36,6 +36,9 @@ jobs: - run: npm ci + - name: Install rpm tooling for electron-builder + run: sudo apt-get update && sudo apt-get install -y rpm + - name: Build and publish env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/README.md b/README.md index 693aaf1fd..21b1157b0 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,7 @@ When you're happy with the result, merge the branch back to main from the sideba - **Canvas per task** — a Markdown file from the worktree rendered live as the agent writes it; edit it in place, or select a passage and send it to the agent with your question - **Browser preview in the canvas** — run a local app in the task shell, open **+ → Browser**, and pick elements to reference in your prompt ([usage and limits](docs/browser-preview.md)) - **PR CI status watcher** — desktop notification when GitHub checks settle -- **Super Productivity integration** — the task you focus is tracked in Super Productivity (a matching task is created there on first focus, in the Super Productivity project you link in project settings), titles stay in sync, and merging or closing a task marks it done there. A task Super Productivity is already tracking that isn't a Parallel Code task is never replaced — a banner offers to switch instead. Connect in Settings with the token from Super Productivity's Local REST API (Settings → Misc; the API must stay turned on). With Super Productivity's bundled **Parallel Code** plugin enabled, **Start in Parallel Code** on a task opens a pre-filled New Task form here; that link needs the macOS app or the `.deb` (an AppImage only handles it if it was integrated into your desktop). +- **Super Productivity integration** — the task you focus is tracked in Super Productivity (a matching task is created there on first focus, in the Super Productivity project you link in project settings), titles stay in sync, and merging or closing a task marks it done there. A task Super Productivity is already tracking that isn't a Parallel Code task is never replaced — a banner offers to switch instead. Connect in Settings with the token from Super Productivity's Local REST API (Settings → Misc; the API must stay turned on). With Super Productivity's bundled **Parallel Code** plugin enabled, **Start in Parallel Code** on a task opens a pre-filled New Task form here; that link needs the macOS app or the `.deb`/`.rpm` (an AppImage only handles it if it was integrated into your desktop). - Shell terminals per task, scoped to the worktree - **Direct mode** for working on the main branch without isolation, plus support for **folders without a git repo** - **Existing worktree import** — bring already-created worktrees into Parallel Code @@ -120,7 +120,7 @@ When you're happy with the result, merge the branch back to main from the sideba 1. **Download** the latest release for your platform from the [releases page](https://github.com/johannesjo/parallel-code/releases/latest): - **macOS** — `.dmg` (universal) - - **Linux** — `.AppImage` or `.deb` + - **Linux** — `.AppImage`, `.deb` (Debian/Ubuntu: `sudo dpkg -i file.deb`) or `.rpm` (Fedora: `sudo dnf install file.rpm`; openSUSE: `sudo zypper install file.rpm`) 2. **Install at least one AI coding CLI:** [Claude Code](https://docs.anthropic.com/en/docs/claude-code), [Codex CLI](https://github.com/openai/codex), [Gemini CLI](https://github.com/google-gemini/gemini-cli), [Antigravity CLI](https://antigravity.google/), or [Copilot CLI](https://docs.github.com/en/copilot/concepts/agents/about-copilot-cli) diff --git a/install.sh b/install.sh index 917b96289..dd7d84743 100755 --- a/install.sh +++ b/install.sh @@ -39,21 +39,58 @@ case "$OS" in ;; Linux) + NO_INSTALL=0 + if [ "${1:-}" = "--no-install" ]; then + NO_INSTALL=1 + fi + echo "Building release for Linux..." - rm -f "$SCRIPT_DIR"/release/*.deb - npm run build + rm -f "$SCRIPT_DIR"/release/*.deb "$SCRIPT_DIR"/release/*.rpm + npm run build:frontend && npm run build:remote && npm run compile && npm run build:mcp - DEB_FILE=$(find "$SCRIPT_DIR/release" -name '*.deb' -type f | head -1) + if command -v dnf >/dev/null 2>&1 || command -v zypper >/dev/null 2>&1; then + npx electron-builder --linux rpm --publish never - if [ -z "$DEB_FILE" ]; then - echo "Error: no .deb found in release/" - exit 1 - fi + RPM_FILE=$(find "$SCRIPT_DIR/release" -name '*.rpm' -type f | head -1) + + if [ -z "$RPM_FILE" ]; then + echo "Error: no .rpm found in release/" + exit 1 + fi + + if [ "$NO_INSTALL" = "1" ]; then + echo "Built $RPM_FILE (not installed)." + exit 0 + fi - echo "Installing $DEB_FILE..." - sudo dpkg -i "$DEB_FILE" + echo "Installing $RPM_FILE..." + if command -v dnf >/dev/null 2>&1; then + sudo dnf install "$RPM_FILE" + else + sudo zypper install "$RPM_FILE" + fi - echo "Installed successfully via dpkg" + echo "Installed successfully" + else + npx electron-builder --linux AppImage deb --publish never + + DEB_FILE=$(find "$SCRIPT_DIR/release" -name '*.deb' -type f | head -1) + + if [ -z "$DEB_FILE" ]; then + echo "Error: no .deb found in release/" + exit 1 + fi + + if [ "$NO_INSTALL" = "1" ]; then + echo "Built $DEB_FILE (not installed)." + exit 0 + fi + + echo "Installing $DEB_FILE..." + sudo dpkg -i "$DEB_FILE" + + echo "Installed successfully via dpkg" + fi ;; *) diff --git a/package.json b/package.json index ac9f12172..40a79631f 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "parallel-code", "version": "4.0.0", "description": "", + "desktopName": "parallel-code.desktop", "author": { "name": "Johannes Millan", "email": "contact@super-productivity.com" @@ -174,9 +175,11 @@ "linux": { "target": [ "AppImage", - "deb" + "deb", + "rpm" ], "category": "Development", + "syncDesktopName": true, "desktop": { "entry": { "StartupWMClass": "parallel-code", @@ -184,6 +187,9 @@ } } }, + "rpm": { + "compression": "gzip" + }, "mac": { "target": [ "dmg",