release.yml: install Inno Setup via innoextract (no Wine GUI install)

Previous attempt (rc1, rc2) tried to run innosetup-6.7.1.exe under
xvfb-run wine /VERYSILENT — silently failed (|| true masked it),
ISCC.exe never appeared at C:\InnoSetup\ISCC.exe.

Switch strategy: apt-get install innoextract (Debian package), use
it to unpack the Inno Setup installer's payload directly to disk,
then copy the extracted Inno Setup tree into the Wine prefix where
ISCC.exe can be invoked normally. Wine is still needed to run ISCC
itself, but no longer for the install step.

Also: ignore /.claude/ directory (local Claude Code session settings).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-01 01:44:05 +03:00
parent d3de6bdde8
commit 4e19d8eeb1
2 changed files with 20 additions and 14 deletions
+19 -14
View File
@@ -66,36 +66,41 @@ jobs:
# zip from inside STAGE so paths are relative
( cd "$STAGE" && zip -r9 - . ) > "dist/drover-${{ steps.version.outputs.tag }}-windows-amd64.zip"
- name: Install Wine + Inno Setup
- name: Install Wine + Inno Setup (via innoextract, no Wine GUI install)
run: |
set -e
dpkg --add-architecture i386
apt-get update
# innoextract unpacks Inno Setup .exe installers without running them
# under Wine. We then copy the extracted compiler files into the Wine
# prefix and call ISCC.exe via Wine — much more reliable than running
# the whole interactive installer through Wine + Xvfb (which failed
# silently in the previous iteration).
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
wine wine64 wine32:i386 cabextract xvfb curl ca-certificates \
wine wine64 innoextract xvfb curl ca-certificates \
>/dev/null
# Headless Wine prefix; suppress wineboot first-run banner.
export WINEPREFIX="$HOME/.wine"
export WINEDLLOVERRIDES="mscoree,mshtml="
export DISPLAY=":99"
Xvfb :99 -screen 0 1024x768x16 &
sleep 1
wineboot --init >/dev/null 2>&1 || true
# Download Inno Setup — pinned to a known-good build for
# reproducibility. Upstream now hosts releases on GitHub
# (jrsoftware/issrc). Old URL https://files.jrsoftware.org/is/6/
# returns 404 since the redistribution layout changed.
# Pin Inno Setup version. Upstream lives on GitHub now; old
# https://files.jrsoftware.org/is/6/ layout returns 404.
INNO_VERSION="6.7.1"
INNO_TAG="is-6_7_1"
curl -fsSL -o /tmp/innosetup.exe \
"https://github.com/jrsoftware/issrc/releases/download/${INNO_TAG}/innosetup-${INNO_VERSION}.exe"
# Silent install. /CURRENTUSER avoids needing admin in Wine.
xvfb-run -a wine /tmp/innosetup.exe /VERYSILENT /SUPPRESSMSGBOXES /CURRENTUSER /NORESTART \
/DIR="C:\\InnoSetup" \
>/dev/null 2>&1 || true
# Sanity-check ISCC was installed
ISCC_LIN="$HOME/.wine/drive_c/InnoSetup/ISCC.exe"
ls -la "$ISCC_LIN"
# innoextract unpacks the installer payload to ./app — that's the
# full Inno Setup directory tree (ISCC.exe + support DLLs/scripts).
mkdir -p /tmp/inno-extract
( cd /tmp/inno-extract && innoextract /tmp/innosetup.exe )
# Place it where Windows-style paths can resolve. Wine maps
# C:\InnoSetup to ~/.wine/drive_c/InnoSetup so we copy there.
mkdir -p "$HOME/.wine/drive_c/InnoSetup"
cp -a /tmp/inno-extract/app/. "$HOME/.wine/drive_c/InnoSetup/"
# Sanity check
ls -la "$HOME/.wine/drive_c/InnoSetup/ISCC.exe"
xvfb-run -a wine "C:\\InnoSetup\\ISCC.exe" /? 2>&1 | head -5 || true
- name: Compile Inno Setup installer
+1
View File
@@ -16,6 +16,7 @@
# IDE
/.idea/
/.vscode/
/.claude/
*.iml
*.swp
*.swo