From 60d73df5be3af588354a1f5c3976e2ec15e81c00 Mon Sep 17 00:00:00 2001 From: DuProcess <273172371+DuProcess@users.noreply.github.com> Date: Mon, 22 Jun 2026 17:19:16 -0400 Subject: [PATCH] Support cross Windows release packaging --- Makefile | 8 +++++++- scripts/package-release.sh | 40 +++++++++++++++++++++++++++++--------- 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index d087187..e713b23 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: build test fmt install package-release publish-release bench-report bench-local bench-local-json bench-docker-ssh bench-docker-mosh fuzz-smoke fuzz-deep soak-local tui-harness +.PHONY: build test fmt install package-release package-release-linux package-release-windows publish-release bench-report bench-local bench-local-json bench-docker-ssh bench-docker-mosh fuzz-smoke fuzz-deep soak-local tui-harness build: cargo build --release @@ -15,6 +15,12 @@ install: package-release: sh scripts/package-release.sh +package-release-linux: + DOSH_PACKAGE_OS=linux DOSH_PACKAGE_ARCH=x86_64 sh scripts/package-release.sh + +package-release-windows: + DOSH_PACKAGE_OS=windows DOSH_PACKAGE_ARCH=x86_64 DOSH_PACKAGE_TARGET=x86_64-pc-windows-gnu sh scripts/package-release.sh + publish-release: sh scripts/publish-gitea-release.sh diff --git a/scripts/package-release.sh b/scripts/package-release.sh index 9de4e6e..d666cb9 100755 --- a/scripts/package-release.sh +++ b/scripts/package-release.sh @@ -26,8 +26,16 @@ normalize_arch() { esac } -os="$(normalize_os)" -arch="$(normalize_arch)" +host_os="$(normalize_os)" +os="${DOSH_PACKAGE_OS:-$host_os}" +arch="${DOSH_PACKAGE_ARCH:-$(normalize_arch)}" +target="${DOSH_PACKAGE_TARGET:-}" +if [ -z "$target" ] && [ "$os" = "windows" ] && [ "$host_os" != "windows" ]; then + case "$arch" in + x86_64) target="x86_64-pc-windows-gnu" ;; + *) echo "set DOSH_PACKAGE_TARGET for windows/$arch" >&2; exit 1 ;; + esac +fi if [ "$os" = "windows" ]; then artifact="dosh-$os-$arch.zip" versioned_artifact="dosh-$version-$os-$arch.zip" @@ -38,19 +46,33 @@ fi stage="$out_dir/stage/dosh" write_versioned="${DOSH_PACKAGE_VERSIONED:-0}" -if [ "$os" = "windows" ]; then - cargo build --release --bin dosh-client --bin dosh-bench +if [ -n "$target" ]; then + release_dir="target/$target/release" else - cargo build --release + release_dir="target/release" +fi + +if [ "$os" = "windows" ]; then + if [ -n "$target" ]; then + cargo build --release --target "$target" --bin dosh-client --bin dosh-bench + else + cargo build --release --bin dosh-client --bin dosh-bench + fi +else + if [ -n "$target" ]; then + cargo build --release --target "$target" + else + cargo build --release + fi fi rm -rf "$stage" mkdir -p "$stage/bin" "$out_dir" for bin in dosh-client dosh-server dosh-auth dosh-bench; do - if [ -f "target/release/$bin" ]; then - install -m 0755 "target/release/$bin" "$stage/bin/$bin" - elif [ -f "target/release/$bin.exe" ]; then - install -m 0755 "target/release/$bin.exe" "$stage/bin/$bin.exe" + if [ -f "$release_dir/$bin" ]; then + install -m 0755 "$release_dir/$bin" "$stage/bin/$bin" + elif [ -f "$release_dir/$bin.exe" ]; then + install -m 0755 "$release_dir/$bin.exe" "$stage/bin/$bin.exe" fi done if [ -f "$stage/bin/dosh-client.exe" ]; then