Files
ElyOffice/packaging/windows/installer.sh
T
ZacharyZhang-NYandClaude Opus 5.5 23735aee3c R6.11 round 1 fix: the installer removes only what it installed
Reinstalling deleted files Ely never installed, and a busy file left a
half-removed install. The installer now writes the top-level names it
installs (.ely-files, from packaging/windows/files.sh); upgrades and
uninstall remove only those, and releases before the list only in the
folder the registry names. It checks that every listed file can be
written, moves them all into .ely-old, and on any refusal puts them
back and exits 2. A file that cannot be written fails the install,
which removes what it created and restores the old release.
tests/scripts/windows-installer.sh covers each case.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 15:59:50 -04:00

32 lines
1.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# Builds dist/<Name>-<version>-windows-x86_64-setup.exe. Usage: installer.sh <slug>
set -euo pipefail
root=$(cd "$(dirname "$0")/../.." && pwd)
slug=${1:?app slug, such as ely-doc}
dist=${ELY_DIST:-$root/dist}
name=$(awk -F'\t' -v slug="$slug" '$1 == slug { print $2 }' "$root/packaging/apps.tsv")
[ -n "$name" ] || {
echo "installer.sh: unknown app $slug" >&2
exit 1
}
version=$(awk -F'"' '/^version = / { print $2; exit }' "$root/Cargo.toml")
makensis=${MAKENSIS:-"/c/Program Files (x86)/NSIS/makensis.exe"}
[ -x "$makensis" ] || {
echo "installer.sh: no makensis at $makensis; install NSIS" >&2
exit 1
}
stage=$root/target/stage/$slug
"$root/packaging/stage.sh" "$slug" "$stage"
types=$root/target/stage/$slug-types.nsh
"$root/packaging/windows/types.sh" "$slug" >"$types"
files=$root/target/stage/$slug-files.nsh
"$root/packaging/windows/files.sh" "$stage" "$slug" >"$files"
mkdir -p "$dist"
out=$dist/$name-$version-windows-x86_64-setup.exe
"$makensis" -V2 -INPUTCHARSET UTF8 -DAPP_NAME="$name" -DAPP_SLUG="$slug" -DVERSION="$version" \
-DSTAGE="$(cygpath -w "$stage")" -DICON="$(cygpath -w "$root/assets/icons/$slug.ico")" \
-DTYPES="$(cygpath -w "$types")" -DFILES="$(cygpath -w "$files")" -DOUTFILE="$(cygpath -w "$out")" \
"$(cygpath -w "$root/packaging/windows/installer.nsi")"
echo "$out"