Skip to content

Commit 306629e

Browse files
merge: unify AppImage, Windows setup, and .deb release artifacts
Resolve release.yml conflicts so all three installable channels ship together.
2 parents d70449e + 813d9ca commit 306629e

5 files changed

Lines changed: 164 additions & 12 deletions

File tree

‎.github/workflows/release.yml‎

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -74,16 +74,32 @@ jobs:
7474
- name: Build Windows (release)
7575
run: flutter build windows --release
7676

77-
- name: Zip Windows artifact
77+
- name: Zip Windows artifact (portable)
7878
run: |
7979
$v = "${{ steps.version.outputs.version }}"
8080
$dir = "build\windows\x64\runner\Release"
8181
Compress-Archive -Path "$dir\*" -DestinationPath "Querya-Desktop-$v-windows.zip"
8282
83+
- name: Install Inno Setup
84+
run: choco install innosetup --no-progress -y
85+
86+
- name: Build Windows setup.exe (installable)
87+
shell: pwsh
88+
run: |
89+
$v = "${{ steps.version.outputs.version }}"
90+
$iscc = "${env:ProgramFiles(x86)}\Inno Setup 6\ISCC.exe"
91+
if (!(Test-Path $iscc)) { throw "ISCC not found at $iscc" }
92+
& $iscc "/DMyAppVersion=$v" "packaging\windows\querya.iss"
93+
$setup = "dist-windows\Querya-Desktop-$v-windows-setup.exe"
94+
if (!(Test-Path $setup)) { throw "Setup not produced: $setup" }
95+
Copy-Item $setup "Querya-Desktop-$v-windows-setup.exe"
96+
8397
- uses: actions/upload-artifact@v4
8498
with:
8599
name: bundle-windows
86-
path: Querya-Desktop-${{ steps.version.outputs.version }}-windows.zip
100+
path: |
101+
Querya-Desktop-${{ steps.version.outputs.version }}-windows.zip
102+
Querya-Desktop-${{ steps.version.outputs.version }}-windows-setup.exe
87103
if-no-files-found: error
88104

89105
build-linux:
@@ -124,6 +140,9 @@ jobs:
124140
cd build/linux/x64/release/bundle
125141
zip -r "${GITHUB_WORKSPACE}/Querya-Desktop-${{ steps.version.outputs.version }}-linux.zip" .
126142
143+
- name: Build Linux AppImage (installable)
144+
run: ./scripts/linux/build_appimage.sh
145+
127146
- name: Build Linux .deb (Debian/Ubuntu)
128147
run: ./scripts/linux/build_deb.sh
129148

@@ -132,6 +151,7 @@ jobs:
132151
name: bundle-linux
133152
path: |
134153
Querya-Desktop-${{ steps.version.outputs.version }}-linux.zip
154+
Querya-Desktop-${{ steps.version.outputs.version }}-linux.AppImage
135155
Querya-Desktop-${{ steps.version.outputs.version }}-linux.deb
136156
if-no-files-found: error
137157

@@ -249,7 +269,9 @@ jobs:
249269
find artifacts \( -name '*.zip' -o -name '*.AppImage' -o -name '*.deb' -o -name '*-windows-setup.exe' \) \
250270
-exec mv -t dist/ {} +
251271
test "$(find dist -name '*.zip' | wc -l)" -eq 3
272+
test "$(find dist -name '*.AppImage' | wc -l)" -eq 1
252273
test "$(find dist -name '*.deb' | wc -l)" -eq 1
274+
test "$(find dist -name '*-windows-setup.exe' | wc -l)" -eq 1
253275
cd dist
254276
sha256sum *.* | tee SHA256SUMS.txt
255277
@@ -272,13 +294,9 @@ jobs:
272294
echo "Optional USB-style profile: set \`QUERYA_PORTABLE=1\` or create a \`QueryaData/\` folder next to the binary (see docs/packaging.md)."
273295
echo ""
274296
echo "#### Installable"
297+
echo "- **Linux AppImage**: \`Querya-Desktop-${VERSION}-linux.AppImage\` (\`chmod +x\` then run)"
275298
echo "- **Linux .deb** (Debian/Ubuntu): \`Querya-Desktop-${VERSION}-linux.deb\` — \`sudo apt install ./Querya-Desktop-${VERSION}-linux.deb\`"
276-
if [[ -f "dist/Querya-Desktop-${VERSION}-linux.AppImage" ]]; then
277-
echo "- **Linux AppImage**: \`Querya-Desktop-${VERSION}-linux.AppImage\`"
278-
fi
279-
if [[ -f "dist/Querya-Desktop-${VERSION}-windows-setup.exe" ]]; then
280-
echo "- **Windows setup**: \`Querya-Desktop-${VERSION}-windows-setup.exe\`"
281-
fi
299+
echo "- **Windows setup**: \`Querya-Desktop-${VERSION}-windows-setup.exe\` (Inno Setup)"
282300
echo ""
283301
echo "RPM / Flatpak / AUR — follow-ups on #386."
284302
echo ""

‎.gitignore‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,11 @@ coverage/
3939
*.so
4040
*.dll
4141
*.exe
42+
dist-windows/
43+
design-front/
44+
docker/sqlite/data/
45+
46+
# Local packaging outputs
4247
Querya-Desktop-*.deb
4348
Querya-Desktop-*.AppImage
4449
Querya-Desktop-*.zip
45-
design-front/
46-
docker/sqlite/data/

‎docs/tags-and-releases.md‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,20 @@
3737

3838
Профиль по умолчанию всё равно в OS app-support; USB-style data → [packaging.md](packaging.md) (`QUERYA_PORTABLE` / `QueryaData/`).
3939

40-
### Installable channel (partial)
40+
### Installable channel
4141

4242
| Artifact | Notes |
4343
|----------|--------|
44+
| `Querya-Desktop-X.Y.Z-linux.AppImage` | [`scripts/linux/build_appimage.sh`](../scripts/linux/build_appimage.sh) (`chmod +x` then run) |
4445
| `Querya-Desktop-X.Y.Z-linux.deb` | Debian/Ubuntu — [`scripts/linux/build_deb.sh`](../scripts/linux/build_deb.sh) |
45-
| AppImage / Windows setup / rpm / Flatpak | Sibling packaging PRs / [#386](https://github.com/QueryaHub/Querya-Desktop/issues/386) |
46+
| `Querya-Desktop-X.Y.Z-windows-setup.exe` | Inno Setup (`packaging/windows/querya.iss`) |
4647

4748
```bash
4849
sudo apt install ./Querya-Desktop-X.Y.Z-linux.deb
4950
```
5051

52+
RPM / Flatpak / AUR: [#386](https://github.com/QueryaHub/Querya-Desktop/issues/386) / epic [#379](https://github.com/QueryaHub/Querya-Desktop/issues/379).
53+
5154
## Changelog в GitHub Release
5255

5356
При публикации релиза workflow **[Release](../.github/workflows/release.yml)** автоматически берёт секцию из [CHANGELOG.md](../CHANGELOG.md) для semver из `pubspec` (например `## [0.4.3]`). Скрипт: [scripts/extract-changelog-section.sh](../scripts/extract-changelog-section.sh).

‎packaging/windows/querya.iss‎

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
; Inno Setup script for Querya Desktop (Windows installable channel).
2+
; Compile from repo root after `flutter build windows --release`:
3+
; ISCC /DMyAppVersion=0.4.11 packaging\windows\querya.iss
4+
5+
#ifndef MyAppVersion
6+
#define MyAppVersion "0.0.0"
7+
#endif
8+
9+
#define MyAppName "Querya Desktop"
10+
#define MyAppPublisher "QueryaHub"
11+
#define MyAppExeName "querya_desktop.exe"
12+
#define MyAppSourceDir "..\..\build\windows\x64\runner\Release"
13+
14+
[Setup]
15+
; Stable AppId — do not change across releases (controls uninstall / upgrades).
16+
AppId={{A7C3E2F1-9B4D-4E8A-8F2C-1D5E6A7B8C9D}
17+
AppName={#MyAppName}
18+
AppVersion={#MyAppVersion}
19+
AppPublisher={#MyAppPublisher}
20+
AppPublisherURL=https://github.com/QueryaHub/Querya-Desktop
21+
DefaultDirName={autopf}\Querya Desktop
22+
DefaultGroupName=Querya Desktop
23+
DisableProgramGroupPage=yes
24+
LicenseFile=
25+
OutputDir=..\..\dist-windows
26+
OutputBaseFilename=Querya-Desktop-{#MyAppVersion}-windows-setup
27+
SetupIconFile=..\..\windows\runner\resources\app_icon.ico
28+
Compression=lzma
29+
SolidCompression=yes
30+
WizardStyle=modern
31+
PrivilegesRequired=lowest
32+
PrivilegesRequiredOverridesAllowed=dialog
33+
ArchitecturesAllowed=x64compatible
34+
ArchitecturesInstallIn64BitMode=x64compatible
35+
UninstallDisplayIcon={app}\{#MyAppExeName}
36+
CloseApplications=yes
37+
RestartApplications=no
38+
39+
[Languages]
40+
Name: "english"; MessagesFile: "compiler:Default.isl"
41+
42+
[Tasks]
43+
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
44+
45+
[Files]
46+
Source: "{#MyAppSourceDir}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
47+
48+
[Icons]
49+
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
50+
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
51+
52+
[Run]
53+
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

‎scripts/linux/build_appimage.sh‎

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
#!/usr/bin/env bash
2+
# Build Querya-Desktop-*.AppImage from a Flutter linux release bundle.
3+
#
4+
# Usage:
5+
# ./scripts/linux/build_appimage.sh [bundle_dir] [output_appimage]
6+
#
7+
# Defaults:
8+
# bundle_dir = build/linux/x64/release/bundle
9+
# output = Querya-Desktop-<pubspec-semver>-linux.AppImage
10+
set -euo pipefail
11+
12+
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
13+
BUNDLE="${1:-$ROOT/build/linux/x64/release/bundle}"
14+
BINARY_NAME="querya_desktop"
15+
ICON_SRC="$ROOT/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png"
16+
17+
if [[ ! -d "$BUNDLE" ]]; then
18+
echo "error: Flutter linux bundle not found: $BUNDLE" >&2
19+
echo "Run: flutter build linux --release" >&2
20+
exit 1
21+
fi
22+
if [[ ! -x "$BUNDLE/$BINARY_NAME" ]]; then
23+
echo "error: missing executable: $BUNDLE/$BINARY_NAME" >&2
24+
exit 1
25+
fi
26+
if [[ ! -f "$ICON_SRC" ]]; then
27+
echo "error: icon not found: $ICON_SRC" >&2
28+
exit 1
29+
fi
30+
31+
VERSION="$(grep '^version:' "$ROOT/pubspec.yaml" | sed 's/^version: //; s/+.*//')"
32+
OUT="${2:-$ROOT/Querya-Desktop-${VERSION}-linux.AppImage}"
33+
34+
WORKDIR="$(mktemp -d "${TMPDIR:-/tmp}/querya-appimage.XXXXXX")"
35+
cleanup() { rm -rf "$WORKDIR"; }
36+
trap cleanup EXIT
37+
38+
APPDIR="$WORKDIR/AppDir"
39+
mkdir -p "$APPDIR"
40+
cp -a "$BUNDLE"/. "$APPDIR/"
41+
42+
cp "$ICON_SRC" "$APPDIR/${BINARY_NAME}.png"
43+
44+
cat > "$APPDIR/${BINARY_NAME}.desktop" <<EOF
45+
[Desktop Entry]
46+
Type=Application
47+
Name=Querya Desktop
48+
Comment=Multi-database desktop client
49+
Exec=${BINARY_NAME}
50+
Icon=${BINARY_NAME}
51+
Categories=Development;Database;
52+
Terminal=false
53+
StartupWMClass=querya_desktop
54+
X-AppImage-Version=${VERSION}
55+
EOF
56+
57+
cat > "$APPDIR/AppRun" <<'EOF'
58+
#!/bin/bash
59+
set -euo pipefail
60+
HERE="$(dirname "$(readlink -f "$0")")"
61+
export LD_LIBRARY_PATH="${HERE}/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
62+
cd "$HERE"
63+
exec "$HERE/querya_desktop" "$@"
64+
EOF
65+
chmod +x "$APPDIR/AppRun" "$APPDIR/$BINARY_NAME"
66+
67+
TOOL="$WORKDIR/appimagetool"
68+
# Prefer type-2 continuous tool; --appimage-extract-and-run avoids FUSE on CI.
69+
curl -fsSL -o "$TOOL" \
70+
"https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage"
71+
chmod +x "$TOOL"
72+
73+
ARCH=x86_64 "$TOOL" --appimage-extract-and-run "$APPDIR" "$OUT"
74+
chmod +x "$OUT"
75+
echo "Wrote $OUT"

0 commit comments

Comments
 (0)