feat: add interactive Windows installer
This commit is contained in:
+17
-5
@@ -9,7 +9,7 @@ compose_file=$repo_root/deploy/compose.yaml
|
||||
|
||||
usage() {
|
||||
cat <<'EOF'
|
||||
usage: scripts/release build --version VERSION [--output DIR] [--sign-windows-hook FILE]
|
||||
usage: scripts/release build --version VERSION --bootstrap-server-url WSS_URL [--output DIR] [--sign-windows-hook FILE]
|
||||
|
||||
Builds a fresh immutable bundle containing:
|
||||
rvbox-server-linux-amd64
|
||||
@@ -23,8 +23,10 @@ Builds a fresh immutable bundle containing:
|
||||
The default output is dist/rvbox-VERSION. --output must remain below this
|
||||
repository's ignored dist/ tree. VERSION must be a safe release label
|
||||
([0-9A-Za-z][0-9A-Za-z._+-]{0,63}); an existing final output is never replaced.
|
||||
Artifacts are built inside the pinned Docker toolchain with that exact version
|
||||
embedded in `--version`. The optional signing hook is a regular executable run
|
||||
WSS_URL is the deliberate first-install endpoint embedded only in the Windows
|
||||
installer; it must be an absolute `wss://` URL and is never inferred from a
|
||||
test fixture. Artifacts are built inside the pinned Docker toolchain with that
|
||||
exact version embedded in `--version`. The optional signing hook is a regular executable run
|
||||
on the host as: HOOK WINDOWS_EXE VERSION. It receives RVBOX_ARTIFACT and
|
||||
RVBOX_VERSION as environment variables and must sign the supplied executable
|
||||
in place. SHA256SUMS and manifest.json are generated only after it succeeds.
|
||||
@@ -43,9 +45,11 @@ command=${1:-}
|
||||
version=
|
||||
output=
|
||||
sign_hook=
|
||||
bootstrap_server_url=
|
||||
while [ "$#" -gt 0 ]; do
|
||||
case $1 in
|
||||
--version) [ "$#" -ge 2 ] || fail "--version needs a value"; version=$2; shift 2 ;;
|
||||
--bootstrap-server-url) [ "$#" -ge 2 ] || fail "--bootstrap-server-url needs a value"; bootstrap_server_url=$2; shift 2 ;;
|
||||
--output) [ "$#" -ge 2 ] || fail "--output needs a directory"; output=$2; shift 2 ;;
|
||||
--sign-windows-hook) [ "$#" -ge 2 ] || fail "--sign-windows-hook needs an executable file"; sign_hook=$2; shift 2 ;;
|
||||
--help|-h) usage; exit 0 ;;
|
||||
@@ -58,6 +62,13 @@ case $version in
|
||||
fail "--version must match [0-9A-Za-z][0-9A-Za-z._+-]{0,63}"
|
||||
;;
|
||||
esac
|
||||
case $bootstrap_server_url in
|
||||
wss://*) ;;
|
||||
*) fail "--bootstrap-server-url must be an absolute wss:// URL" ;;
|
||||
esac
|
||||
case $bootstrap_server_url in
|
||||
*[!A-Za-z0-9:/._-]*) fail "--bootstrap-server-url contains unsupported characters" ;;
|
||||
esac
|
||||
if [ -z "$output" ]; then output=$repo_root/dist/rvbox-$version; fi
|
||||
case $output in
|
||||
/*) ;;
|
||||
@@ -93,6 +104,7 @@ docker compose -f "$compose_file" run --rm toolchain sh -ec '
|
||||
version=$1
|
||||
out=$2
|
||||
flags="-s -w -X main.buildVersion=$version"
|
||||
windows_flags="$flags -X main.bootstrapServerURL=$3"
|
||||
resource=/workspace/cmd/rvbox/rvbox-release_windows_amd64.syso
|
||||
icon="$out/.rvbox-release-icon.png"
|
||||
trap "rm -f -- \"$resource\" \"$icon\"" EXIT HUP INT TERM
|
||||
@@ -102,8 +114,8 @@ docker compose -f "$compose_file" run --rm toolchain sh -ec '
|
||||
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -trimpath -ldflags "$flags" -o "$out/rvbox-server-linux-arm64" ./cmd/rvbox-server
|
||||
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags "$flags" -o "$out/rvc-linux-amd64" ./cmd/rvc
|
||||
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -trimpath -ldflags "$flags" -o "$out/rvc-linux-arm64" ./cmd/rvc
|
||||
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -trimpath -ldflags "-H=windowsgui $flags" -o "$out/rvbox-windows-amd64.exe" ./cmd/rvbox
|
||||
' sh "$version" "$container_partial"
|
||||
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -trimpath -ldflags "-H=windowsgui $windows_flags" -o "$out/rvbox-windows-amd64.exe" ./cmd/rvbox
|
||||
' sh "$version" "$container_partial" "$bootstrap_server_url"
|
||||
|
||||
signed=false
|
||||
if [ -n "$sign_hook" ]; then
|
||||
|
||||
Reference in New Issue
Block a user