Skip to content

Commit 5ae8940

Browse files
Merge pull request #393 from QueryaHub/issue/386-linux-deb
feat(ci): publish Linux .deb for Debian/Ubuntu
2 parents 8ed0358 + 306629e commit 5ae8940

4 files changed

Lines changed: 104 additions & 2 deletions

File tree

‎.github/workflows/release.yml‎

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,12 +143,16 @@ jobs:
143143
- name: Build Linux AppImage (installable)
144144
run: ./scripts/linux/build_appimage.sh
145145

146+
- name: Build Linux .deb (Debian/Ubuntu)
147+
run: ./scripts/linux/build_deb.sh
148+
146149
- uses: actions/upload-artifact@v4
147150
with:
148151
name: bundle-linux
149152
path: |
150153
Querya-Desktop-${{ steps.version.outputs.version }}-linux.zip
151154
Querya-Desktop-${{ steps.version.outputs.version }}-linux.AppImage
155+
Querya-Desktop-${{ steps.version.outputs.version }}-linux.deb
152156
if-no-files-found: error
153157

154158
build-macos:
@@ -262,10 +266,11 @@ jobs:
262266
run: |
263267
set -euo pipefail
264268
mkdir -p dist
265-
find artifacts \( -name '*.zip' -o -name '*.AppImage' -o -name '*-windows-setup.exe' \) \
269+
find artifacts \( -name '*.zip' -o -name '*.AppImage' -o -name '*.deb' -o -name '*-windows-setup.exe' \) \
266270
-exec mv -t dist/ {} +
267271
test "$(find dist -name '*.zip' | wc -l)" -eq 3
268272
test "$(find dist -name '*.AppImage' | wc -l)" -eq 1
273+
test "$(find dist -name '*.deb' | wc -l)" -eq 1
269274
test "$(find dist -name '*-windows-setup.exe' | wc -l)" -eq 1
270275
cd dist
271276
sha256sum *.* | tee SHA256SUMS.txt
@@ -290,8 +295,11 @@ jobs:
290295
echo ""
291296
echo "#### Installable"
292297
echo "- **Linux AppImage**: \`Querya-Desktop-${VERSION}-linux.AppImage\` (\`chmod +x\` then run)"
298+
echo "- **Linux .deb** (Debian/Ubuntu): \`Querya-Desktop-${VERSION}-linux.deb\` — \`sudo apt install ./Querya-Desktop-${VERSION}-linux.deb\`"
293299
echo "- **Windows setup**: \`Querya-Desktop-${VERSION}-windows-setup.exe\` (Inno Setup)"
294300
echo ""
301+
echo "RPM / Flatpak / AUR — follow-ups on #386."
302+
echo ""
295303
echo "Verify checksums: \`SHA256SUMS.txt\`"
296304
echo ""
297305
echo "### Build info"
@@ -317,6 +325,7 @@ jobs:
317325
fail_on_unmatched_files: false
318326
files: |
319327
dist/*.zip
328+
dist/*.deb
320329
dist/*.AppImage
321330
dist/*-windows-setup.exe
322331
dist/SHA256SUMS.txt

‎.gitignore‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,6 @@ design-front/
4444
docker/sqlite/data/
4545

4646
# Local packaging outputs
47+
Querya-Desktop-*.deb
4748
Querya-Desktop-*.AppImage
4849
Querya-Desktop-*.zip

‎docs/tags-and-releases.md‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,14 @@
4242
| Artifact | Notes |
4343
|----------|--------|
4444
| `Querya-Desktop-X.Y.Z-linux.AppImage` | [`scripts/linux/build_appimage.sh`](../scripts/linux/build_appimage.sh) (`chmod +x` then run) |
45+
| `Querya-Desktop-X.Y.Z-linux.deb` | Debian/Ubuntu — [`scripts/linux/build_deb.sh`](../scripts/linux/build_deb.sh) |
4546
| `Querya-Desktop-X.Y.Z-windows-setup.exe` | Inno Setup (`packaging/windows/querya.iss`) |
4647

47-
deb / rpm / Flatpak: [#386](https://github.com/QueryaHub/Querya-Desktop/issues/386) / epic [#379](https://github.com/QueryaHub/Querya-Desktop/issues/379).
48+
```bash
49+
sudo apt install ./Querya-Desktop-X.Y.Z-linux.deb
50+
```
51+
52+
RPM / Flatpak / AUR: [#386](https://github.com/QueryaHub/Querya-Desktop/issues/386) / epic [#379](https://github.com/QueryaHub/Querya-Desktop/issues/379).
4853

4954
## Changelog в GitHub Release
5055

‎scripts/linux/build_deb.sh‎

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
#!/usr/bin/env bash
2+
# Build Querya-Desktop-*.deb from a Flutter linux release bundle (Debian/Ubuntu).
3+
#
4+
# Usage:
5+
# ./scripts/linux/build_deb.sh [bundle_dir] [output_deb]
6+
set -euo pipefail
7+
8+
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
9+
BUNDLE="${1:-$ROOT/build/linux/x64/release/bundle}"
10+
BINARY_NAME="querya_desktop"
11+
# Keep in sync with linux/CMakeLists.txt APPLICATION_ID (and #385 when merged).
12+
APP_ID="${QUERYA_LINUX_APP_ID:-com.queryahub.querya_desktop}"
13+
ICON_SRC="$ROOT/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png"
14+
15+
if [[ ! -d "$BUNDLE" ]]; then
16+
echo "error: Flutter linux bundle not found: $BUNDLE" >&2
17+
exit 1
18+
fi
19+
if [[ ! -x "$BUNDLE/$BINARY_NAME" ]]; then
20+
echo "error: missing executable: $BUNDLE/$BINARY_NAME" >&2
21+
exit 1
22+
fi
23+
if ! command -v dpkg-deb >/dev/null 2>&1; then
24+
echo "error: dpkg-deb is required (apt install dpkg)" >&2
25+
exit 1
26+
fi
27+
28+
VERSION="$(grep '^version:' "$ROOT/pubspec.yaml" | sed 's/^version: //; s/+.*//')"
29+
OUT="${2:-$ROOT/Querya-Desktop-${VERSION}-linux.deb}"
30+
ARCH="$(dpkg --print-architecture 2>/dev/null || echo amd64)"
31+
32+
WORKDIR="$(mktemp -d "${TMPDIR:-/tmp}/querya-deb.XXXXXX")"
33+
cleanup() { rm -rf "$WORKDIR"; }
34+
trap cleanup EXIT
35+
36+
PKG="$WORKDIR/pkg"
37+
INSTALL_ROOT="$PKG/opt/querya-desktop"
38+
mkdir -p \
39+
"$INSTALL_ROOT" \
40+
"$PKG/usr/bin" \
41+
"$PKG/usr/share/applications" \
42+
"$PKG/usr/share/icons/hicolor/512x512/apps" \
43+
"$PKG/DEBIAN"
44+
45+
cp -a "$BUNDLE"/. "$INSTALL_ROOT/"
46+
chmod +x "$INSTALL_ROOT/$BINARY_NAME"
47+
48+
ln -s "/opt/querya-desktop/$BINARY_NAME" "$PKG/usr/bin/$BINARY_NAME"
49+
50+
if [[ -f "$ICON_SRC" ]]; then
51+
cp "$ICON_SRC" "$PKG/usr/share/icons/hicolor/512x512/apps/${BINARY_NAME}.png"
52+
fi
53+
54+
cat > "$PKG/usr/share/applications/${BINARY_NAME}.desktop" <<EOF
55+
[Desktop Entry]
56+
Type=Application
57+
Name=Querya Desktop
58+
Comment=Multi-database desktop client
59+
Exec=${BINARY_NAME}
60+
Icon=${BINARY_NAME}
61+
Categories=Development;Database;
62+
Terminal=false
63+
StartupWMClass=querya_desktop
64+
X-Querya-AppId=${APP_ID}
65+
EOF
66+
67+
# Rough installed size in KiB for the control file.
68+
INSTALLED_SIZE="$(du -sk "$PKG" | awk '{print $1}')"
69+
70+
cat > "$PKG/DEBIAN/control" <<EOF
71+
Package: querya-desktop
72+
Version: ${VERSION}
73+
Section: database
74+
Priority: optional
75+
Architecture: ${ARCH}
76+
Maintainer: QueryaHub <noreply@querya.app>
77+
Installed-Size: ${INSTALLED_SIZE}
78+
Depends: libgtk-3-0, libsecret-1-0, libglib2.0-0
79+
Recommends: libayatana-appindicator3-1
80+
Homepage: https://github.com/QueryaHub/Querya-Desktop
81+
Description: Querya Desktop database client
82+
Multi-database desktop client for PostgreSQL, MySQL, Redis, MongoDB,
83+
SQLite, and sandboxed drivers.
84+
EOF
85+
86+
dpkg-deb --root-owner-group --build "$PKG" "$OUT"
87+
echo "Wrote $OUT"

0 commit comments

Comments
 (0)