Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,10 @@ jobs:
libappindicator3-dev \
librsvg2-dev \
patchelf \
pkg-config
pkg-config \
imagemagick \
wget \
squashfs-tools
# Create symlink for webkit2gtk-4.0 if it doesn't exist (Wails looks for 4.0)
for PKG_DIR in /usr/lib/x86_64-linux-gnu/pkgconfig /usr/lib/pkgconfig /usr/share/pkgconfig; do
if [ -d "$PKG_DIR" ] && [ -f "${PKG_DIR}/webkit2gtk-4.1.pc" ] && [ ! -f "${PKG_DIR}/webkit2gtk-4.0.pc" ]; then
Expand Down Expand Up @@ -145,3 +148,9 @@ jobs:
else
test -f build/bin/pubsub-gui && echo "✅ Linux binary created" || (echo "❌ Linux binary not found" && exit 1)
fi

- name: Verify AppImage creation (Linux)
if: matrix.os == 'ubuntu-latest'
shell: bash
run: |
./scripts/create-appimage.sh ci-test
80 changes: 69 additions & 11 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ jobs:
- os: macos-15
platform: darwin/arm64
artifact_name: darwin_arm64
- os: macos-15
platform: darwin/amd64
artifact_name: darwin_amd64
- os: ubuntu-latest
platform: linux/amd64
artifact_name: linux_amd64
Expand Down Expand Up @@ -70,7 +73,9 @@ jobs:
libappindicator3-dev \
librsvg2-dev \
patchelf \
pkg-config
pkg-config \
imagemagick \
squashfs-tools
# Create symlink for webkit2gtk-4.0 if it doesn't exist (Wails looks for 4.0)
# Check common pkg-config locations
for PKG_DIR in /usr/lib/x86_64-linux-gnu/pkgconfig /usr/lib/pkgconfig /usr/share/pkgconfig; do
Expand Down Expand Up @@ -121,6 +126,21 @@ jobs:
run: |
wails build -ldflags "-X main.version=$VERSION -X internal/version.Version=$VERSION" -platform ${{ matrix.platform }} -clean

- name: Create AppImage (Linux)
if: matrix.os == 'ubuntu-latest'
shell: bash
env:
VERSION: ${{ steps.version.outputs.version }}
run: |
# Use shared script for AppImage creation (single source of truth)
./scripts/create-appimage.sh "$VERSION"

# Also create regular tar.gz for users who prefer it
cd build/bin
tar -czf "../../pubsub-gui_linux_amd64_${VERSION}.tar.gz" pubsub-gui
cd ../..
echo "✓ Created tar.gz: pubsub-gui_linux_amd64_${VERSION}.tar.gz"

- name: Package artifacts (macOS/Linux)
if: matrix.os != 'windows-latest'
shell: bash
Expand All @@ -133,12 +153,8 @@ jobs:
cd build/bin
tar -czf "../../pubsub-gui_${ARTIFACT_NAME}_${VERSION}.tar.gz" pubsub-gui.app
cd ../..
else
# Package binary for Linux
cd build/bin
tar -czf "../../pubsub-gui_${ARTIFACT_NAME}_${VERSION}.tar.gz" pubsub-gui
cd ../..
fi
# Note: Linux packaging is done in the AppImage step above

- name: Package artifacts (Windows)
if: matrix.os == 'windows-latest'
Expand All @@ -161,6 +177,7 @@ jobs:
path: |
pubsub-gui_${{ matrix.artifact_name }}_*.tar.gz
pubsub-gui_${{ matrix.artifact_name }}_*.zip
pubsub-gui_${{ matrix.artifact_name }}_*.AppImage

release:
name: Create Release
Expand Down Expand Up @@ -203,7 +220,7 @@ jobs:
- name: Create checksums
run: |
cd artifacts
find . -maxdepth 1 \( -name "*.tar.gz" -o -name "*.zip" \) | while read file; do
find . -maxdepth 1 \( -name "*.tar.gz" -o -name "*.zip" -o -name "*.AppImage" \) | while read file; do
if command -v shasum >/dev/null 2>&1; then
shasum -a 256 "$file" >> pubsub-gui_${{ steps.version.outputs.version }}_checksums.txt
else
Expand Down Expand Up @@ -232,10 +249,51 @@ jobs:
- **macOS (Intel)**: `pubsub-gui_darwin_amd64_*.tar.gz`
- **macOS (Apple Silicon)**: `pubsub-gui_darwin_arm64_*.tar.gz`
- **Windows**: `pubsub-gui_windows_amd64_*.zip`
- **Linux**: `pubsub-gui_linux_amd64_*.tar.gz`
- **Linux**:
- **AppImage (Recommended)**: `pubsub-gui_linux_amd64_*.AppImage` - No dependencies required!
- **tar.gz**: `pubsub-gui_linux_amd64_*.tar.gz` - Requires runtime libraries (see below)

### Installation Instructions

**macOS:**
Extract the `.app` bundle to `/Applications` or `~/Applications`

**Windows:**
Extract and run the `pubsub-gui.exe` binary

**Linux - AppImage (Recommended):**
```bash
chmod +x pubsub-gui_linux_amd64_*.AppImage
./pubsub-gui_linux_amd64_*.AppImage
```
The AppImage bundles all dependencies - no additional installation required!

**Linux - tar.gz (Alternative):**
Extract and run the `pubsub-gui` binary. Requires the following runtime libraries:
- `libwebkit2gtk-4.1-0` (or `webkit2gtk-4.1` on Arch)
- `libgtk-3-0` (or `gtk3` on Arch/RHEL)
- `libappindicator3-1` (or `libappindicator-gtk3` on Arch/RHEL)

**Install on Debian/Ubuntu:**
```bash
sudo apt-get update
sudo apt-get install libwebkit2gtk-4.1-0 libgtk-3-0 libappindicator3-1
```

**Install on RHEL/CentOS/Fedora:**
```bash
sudo dnf install webkit2gtk4 gtk3 libappindicator-gtk3
```

**Install on Arch Linux:**
```bash
sudo pacman -S webkit2gtk-4.1 gtk3 libappindicator-gtk3
```

Extract the archive:
- **macOS**: Extract the `.app` bundle to `/Applications` or `~/Applications`
- **Windows/Linux**: Extract and run the `pubsub-gui` binary
**Or use the automated installer:**
```bash
curl -fsSL https://raw.githubusercontent.com/b87/pubsub-gui/main/scripts/install.sh | bash
```
The installer will automatically detect and install missing dependencies.
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
42 changes: 39 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,47 @@ curl -fsSL https://raw.githubusercontent.com/b87/pubsub-gui/main/scripts/install
1. Download the appropriate binary for your platform from the [Releases](https://github.com/b87/pubsub-gui/releases) page:
- **macOS**: `pubsub-gui_darwin_amd64_*.tar.gz` or `pubsub-gui_darwin_arm64_*.tar.gz`
- **Windows**: `pubsub-gui_windows_amd64_*.zip`
- **Linux**: `pubsub-gui_linux_amd64_*.tar.gz` or `pubsub-gui_linux_arm64_*.tar.gz`
- **Linux**:
- **AppImage (Recommended)**: `pubsub-gui_linux_amd64_*.AppImage` - No dependencies required!
- **tar.gz**: `pubsub-gui_linux_amd64_*.tar.gz` - Requires runtime libraries (see below)

2. Extract the archive and run the `pubsub-gui` binary
2. **Linux - AppImage (Recommended):**
```bash
chmod +x pubsub-gui_linux_amd64_*.AppImage
./pubsub-gui_linux_amd64_*.AppImage
```
The AppImage bundles all dependencies - no additional installation required!
Comment on lines +52 to +60

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.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🌐 Web query:

AppImage FUSE libfuse2 requirements 2024 2025 official documentation

💡 Result:

Short answer: Official AppImage documentation (AppImageKit wiki and the AppImage docs) requires FUSE 2 — i.e., the libfuse.so.2 runtime (package name libfuse2 on Debian/Ubuntu). The docs include instructions for installing/using libfuse2 and note Ubuntu 24.04 renamed the package to libfuse2t64 (and related packaging issues have been reported). [1][2][3]

Sources

  • AppImageKit FUSE wiki (requirements, install notes, Ubuntu rename warning). [1]
  • AppImage official troubleshooting docs (FUSE 2.x required, install and fallback instructions). [2]
  • GitHub issue discussing libfuse2t64 removal/packaging problems on Ubuntu 24.04 (reported 2025). [3]

🏁 Script executed:

cat -n README.md | sed -n '45,70p'

Repository: B87/pubsub-gui

Length of output: 1447


AppImage "no dependencies" claim is misleading — FUSE/libfuse2 is a documented runtime requirement.

Official AppImageKit documentation requires FUSE 2 (libfuse.so.2) as a runtime dependency. Current package names are libfuse2 on Debian/Ubuntu and libfuse2t64 on Ubuntu 24.04. The README should acknowledge this instead of claiming "no dependencies required" or "no additional installation required."

✏️ Suggested README fix
-    - **AppImage (Recommended)**: `pubsub-gui_linux_amd64_*.AppImage` - No dependencies required!
+    - **AppImage (Recommended)**: `pubsub-gui_linux_amd64_*.AppImage` - Bundles app dependencies (requires FUSE/libfuse2).
...
-  The AppImage bundles all dependencies - no additional installation required!
+  The AppImage bundles app dependencies. You may need to install FUSE/libfuse2 (libfuse2 on Debian/Ubuntu, libfuse2t64 on Ubuntu 24.04).
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- **AppImage (Recommended)**: `pubsub-gui_linux_amd64_*.AppImage` - No dependencies required!
- **tar.gz**: `pubsub-gui_linux_amd64_*.tar.gz` - Requires runtime libraries (see below)
2. Extract the archive and run the `pubsub-gui` binary
2. **Linux - AppImage (Recommended):**
```bash
chmod +x pubsub-gui_linux_amd64_*.AppImage
./pubsub-gui_linux_amd64_*.AppImage
```
The AppImage bundles all dependencies - no additional installation required!
- **AppImage (Recommended)**: `pubsub-gui_linux_amd64_*.AppImage` - Bundles app dependencies (requires FUSE/libfuse2).
- **tar.gz**: `pubsub-gui_linux_amd64_*.tar.gz` - Requires runtime libraries (see below)
2. **Linux - AppImage (Recommended):**
🤖 Prompt for AI Agents
In `@README.md` around lines 52 - 60, Update the README text that currently claims
the AppImage has "No dependencies required" and "no additional installation
required" to explicitly state the runtime dependency on FUSE/libfuse2 (e.g.,
package names like libfuse2 on Debian/Ubuntu and libfuse2t64 on Ubuntu 24.04).
Locate the bullet "AppImage (Recommended)" and the "Linux - AppImage
(Recommended)" section and replace the absolute "no dependencies" wording with a
note that the AppImage bundles application libraries but requires FUSE
(libfuse.so.2) at runtime, and optionally add a short install hint for common
distros.


3. **Linux - tar.gz (Alternative):**
Extract the archive and run the `pubsub-gui` binary.

**Linux Runtime Dependencies** (for tar.gz only):

The Linux binary requires the following runtime libraries:
- `libwebkit2gtk-4.1-0` (Debian/Ubuntu) or `webkit2gtk4.1` (RHEL/CentOS/Fedora) or `webkit2gtk-4.1` (Arch)
- `libgtk-3-0` (Debian/Ubuntu) or `gtk3` (RHEL/CentOS/Fedora/Arch)
- `libappindicator3-1` (Debian/Ubuntu) or `libappindicator-gtk3` (RHEL/CentOS/Fedora/Arch)

**Install on Debian/Ubuntu:**
```bash
sudo apt-get update
sudo apt-get install libwebkit2gtk-4.1-0 libgtk-3-0 libappindicator3-1
```

**Install on RHEL/CentOS/Fedora:**
```bash
sudo dnf install webkit2gtk4.1 gtk3 libappindicator-gtk3
```
> **Note:** `webkit2gtk4.1` is available on Fedora 40+ and RHEL/CentOS 10+. For older versions (RHEL/CentOS 8-9, Fedora ≤39), only `webkit2gtk3` (4.0 ABI) is available, which may not be compatible.

**Install on Arch Linux:**
```bash
sudo pacman -S webkit2gtk-4.1 gtk3 libappindicator-gtk3
```

If you see an error like `libwebkit2gtk-4.1.so.0: cannot open shared object file`, install the missing dependencies above.

3. (Optional) Add the binary to your PATH for global access
4. (Optional) Add the binary to your PATH for global access

## 🎯 Quick Start

Expand Down
10 changes: 10 additions & 0 deletions Taskfile.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,16 @@ tasks:
- task: build:windows
- task: build:linux

build:appimage:
desc: Create Linux AppImage (requires Linux with GTK dev libs)
vars:
VERSION: '{{.VERSION | default "dev"}}'
preconditions:
- sh: test "$(uname -s)" = "Linux"
msg: "AppImage creation is only supported on Linux"
cmds:
- ./scripts/create-appimage.sh {{.VERSION}}

# ============================================================================
# Testing & Code Quality
# ============================================================================
Expand Down
Binary file removed build/appicon.iconset/icon_128x128.png
Binary file not shown.
Binary file removed build/appicon.iconset/icon_128x128@2x.png
Binary file not shown.
Binary file removed build/appicon.iconset/icon_16x16.png
Binary file not shown.
Binary file removed build/appicon.iconset/icon_16x16@2x.png
Binary file not shown.
Binary file removed build/appicon.iconset/icon_256x256.png
Binary file not shown.
Binary file removed build/appicon.iconset/icon_256x256@2x.png
Binary file not shown.
Binary file removed build/appicon.iconset/icon_32x32.png
Binary file not shown.
Binary file removed build/appicon.iconset/icon_32x32@2x.png
Binary file not shown.
Binary file removed build/appicon.iconset/icon_512x512.png
Binary file not shown.
Binary file removed build/appicon.iconset/icon_512x512@2x.png
Binary file not shown.
Binary file removed build/appicon.iconset/icon_64x64.png
Binary file not shown.
Binary file removed build/appicon.iconset/icon_64x64@2x.png
Binary file not shown.
Binary file modified build/appicon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading