Files
yaze/scripts/package/release.sh
scawful 4d60899ba4 chore: add Linux build presets and CI configurations
- Introduced new CMake presets for Linux release and AI builds, enhancing cross-platform support.
- Updated CI workflows to include Linux build configurations, ensuring consistent build processes across platforms.
- Added a new release packaging script to streamline artifact creation for different operating systems.

Benefits:
- Improves build flexibility and reliability for Linux users.
- Simplifies the release process by automating artifact packaging and checksum generation.
2025-10-21 14:34:01 -04:00

90 lines
2.6 KiB
Bash

#!/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 <target-name> <build-dir> <artifact-name>" >&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"