60d73df5be
ci / test (push) Has been cancelled
ci / fuzz-smoke (push) Has been cancelled
ci / windows-client (push) Has been cancelled
ci / package-release (linux-x86_64, ubuntu-latest) (push) Has been cancelled
ci / package-release (macos-aarch64, macos-14) (push) Has been cancelled
ci / package-release (macos-x86_64, macos-13) (push) Has been cancelled
ci / package-release (windows-x86_64, windows-latest) (push) Has been cancelled
ci / remote-bench (push) Has been cancelled
151 lines
3.9 KiB
Bash
Executable File
151 lines
3.9 KiB
Bash
Executable File
#!/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
|
|
}
|
|
|
|
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"
|
|
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 [ -n "$target" ]; then
|
|
release_dir="target/$target/release"
|
|
else
|
|
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 "$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
|
|
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 <<EOF
|
|
$out_dir/$artifact
|
|
$out_dir/$artifact.sha256
|
|
EOF
|
|
|
|
if [ "$write_versioned" = "1" ]; then
|
|
cat <<EOF
|
|
$out_dir/$versioned_artifact
|
|
$out_dir/$versioned_artifact.sha256
|
|
EOF
|
|
fi
|