#!/usr/bin/env bash set -euo pipefail TARGET_NAME=${1:-} BUILD_DIR=${2:-} ARTIFACT_NAME=${3:-} if [[ -z "$TARGET_NAME" || -z "$BUILD_DIR" || -z "$ARTIFACT_NAME" ]]; then echo "Usage: release.sh " >&2 exit 1 fi SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) ROOT_DIR=${GITHUB_WORKSPACE:-$(cd "$SCRIPT_DIR/../.." && pwd)} ARTIFACTS_DIR="$ROOT_DIR/dist" STAGING_DIR=$(mktemp -d) mkdir -p "$ARTIFACTS_DIR" cleanup() { rm -rf "$STAGING_DIR" } trap cleanup EXIT echo "Packaging $TARGET_NAME using build output at $BUILD_DIR" case "${RUNNER_OS:-$(uname)}" in Windows*) BIN_DIR="$BUILD_DIR/bin/Release" if [[ ! -d "$BIN_DIR" ]]; then echo "::error::Expected Windows binaries under $BIN_DIR" >&2 exit 1 fi cp -R "$BIN_DIR" "$STAGING_DIR/bin" cp -R "$ROOT_DIR/assets" "$STAGING_DIR/assets" cp "$ROOT_DIR"/LICENSE "$ROOT_DIR"/README.md "$STAGING_DIR"/ ARTIFACT_PATH="$ARTIFACTS_DIR/$ARTIFACT_NAME" pwsh -NoLogo -NoProfile -Command "Compress-Archive -Path '${STAGING_DIR}\*' -DestinationPath '$ARTIFACT_PATH' -Force" ;; Darwin) APP_PATH="$BUILD_DIR/bin/yaze.app" if [[ ! -d "$APP_PATH" ]]; then echo "::error::Expected macOS app bundle at $APP_PATH" >&2 exit 1 fi cp -R "$APP_PATH" "$STAGING_DIR/yaze.app" cp "$ROOT_DIR"/LICENSE "$ROOT_DIR"/README.md "$STAGING_DIR"/ ARTIFACT_PATH="$ARTIFACTS_DIR/$ARTIFACT_NAME" hdiutil create -fs HFS+ -srcfolder "$STAGING_DIR/yaze.app" -volname "yaze" "$ARTIFACT_PATH" ;; Linux*) BIN_DIR="$BUILD_DIR/bin" if [[ ! -d "$BIN_DIR" ]]; then echo "::error::Expected Linux binaries under $BIN_DIR" >&2 exit 1 fi cp "$ROOT_DIR"/LICENSE "$ROOT_DIR"/README.md "$STAGING_DIR"/ cp -R "$BIN_DIR" "$STAGING_DIR/bin" cp -R "$ROOT_DIR/assets" "$STAGING_DIR/assets" ARTIFACT_PATH="$ARTIFACTS_DIR/$ARTIFACT_NAME" tar -czf "$ARTIFACT_PATH" -C "$STAGING_DIR" . ;; *) echo "::error::Unsupported host: ${RUNNER_OS:-$(uname)}" >&2 exit 1 ;; esac if [[ ! -f "$ARTIFACT_PATH" ]]; then echo "::error::Packaging did not produce $ARTIFACT_PATH" >&2 exit 1 fi if command -v sha256sum >/dev/null 2>&1; then SHA_CMD="sha256sum" elif command -v shasum >/dev/null 2>&1; then SHA_CMD="shasum -a 256" else echo "::warning::No SHA256 utility found; skipping checksum generation" >&2 exit 0 fi CHECKSUM=$($SHA_CMD "$ARTIFACT_PATH" | awk '{print $1}') echo "$CHECKSUM $(basename "$ARTIFACT_PATH")" >> "$ARTIFACTS_DIR/SHA256SUMS.txt" echo "$CHECKSUM" > "$ARTIFACT_PATH.sha256" echo "Created artifact $ARTIFACT_PATH"