diff --git a/.forgejo/workflows/release.yml b/.forgejo/workflows/release.yml index 1118d8c..1b9ae76 100644 --- a/.forgejo/workflows/release.yml +++ b/.forgejo/workflows/release.yml @@ -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 diff --git a/.gitignore b/.gitignore index 8c3c1da..17591ec 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ # IDE /.idea/ /.vscode/ +/.claude/ *.iml *.swp *.swo