#!/usr/bin/env sh set -eu repo_root="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)" cd "$repo_root" out_dir="${DOSH_PACKAGE_DIR:-target/dosh-release}" version="${DOSH_VERSION:-$(sed -n 's/^version = "\(.*\)"/\1/p' Cargo.toml | sed -n '1p')}" normalize_os() { case "$(uname -s)" in Darwin) printf '%s\n' macos ;; Linux) printf '%s\n' linux ;; FreeBSD) printf '%s\n' freebsd ;; MINGW*|MSYS*|CYGWIN*) printf '%s\n' windows ;; *) uname -s | tr '[:upper:]' '[:lower:]' ;; esac } normalize_arch() { case "$(uname -m)" in x86_64|amd64) printf '%s\n' x86_64 ;; arm64|aarch64) printf '%s\n' aarch64 ;; armv7l) printf '%s\n' armv7 ;; *) uname -m | tr '[:upper:]' '[:lower:]' ;; esac } os="$(normalize_os)" arch="$(normalize_arch)" if [ "$os" = "windows" ]; then artifact="dosh-$os-$arch.zip" versioned_artifact="dosh-$version-$os-$arch.zip" else artifact="dosh-$os-$arch.tar.gz" versioned_artifact="dosh-$version-$os-$arch.tar.gz" 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 else cargo build --release 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" fi done if [ -f "$stage/bin/dosh-client.exe" ]; then cp "$stage/bin/dosh-client.exe" "$stage/bin/dosh.exe" elif [ -f "$stage/bin/dosh-client" ]; then cp "$stage/bin/dosh-client" "$stage/bin/dosh" fi strip_bin() { file="$1" [ -f "$file" ] || return 0 case "$file" in *.exe) if command -v x86_64-w64-mingw32-strip >/dev/null 2>&1; then x86_64-w64-mingw32-strip "$file" 2>/dev/null || true elif command -v strip >/dev/null 2>&1; then strip "$file" 2>/dev/null || true fi ;; *) if command -v strip >/dev/null 2>&1; then strip "$file" 2>/dev/null || true fi ;; esac } for bin in "$stage"/bin/*; do strip_bin "$bin" done printf '%s\n' "$version" >"$stage/VERSION" if [ "$os" = "windows" ]; then if command -v powershell.exe >/dev/null 2>&1; then powershell.exe -NoProfile -Command "Compress-Archive -Force -Path '$stage' -DestinationPath '$out_dir/$artifact'" elif command -v zip >/dev/null 2>&1; then (cd "$out_dir/stage" && zip -qr "../$artifact" dosh) else echo "windows packaging requires powershell.exe or zip" >&2 exit 1 fi else tar -C "$out_dir/stage" -czf "$out_dir/$artifact" dosh fi write_sha256() { file="$1" if command -v sha256sum >/dev/null 2>&1; then sha256sum "$file" >"$file.sha256" elif command -v shasum >/dev/null 2>&1; then shasum -a 256 "$file" >"$file.sha256" else echo "warning: sha256sum/shasum not found; skipping checksum for $file" >&2 fi } write_sha256 "$out_dir/$artifact" if [ "$write_versioned" = "1" ]; then cp "$out_dir/$artifact" "$out_dir/$versioned_artifact" write_sha256 "$out_dir/$versioned_artifact" fi printf 'Wrote:\n' cat <