Files
orbien/scripts/pack-release.sh
T

98 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
NAME=""
VERSION=""
OS=""
ARCH=""
LIBC=""
OUTDIR="dist/release"
BIN=""
CONFIG=""
ASSETS=""
while [[ $# -gt 0 ]]; do
case "$1" in
--name) NAME="$2"; shift 2 ;;
--version) VERSION="$2"; shift 2 ;;
--os) OS="$2"; shift 2 ;;
--arch) ARCH="$2"; shift 2 ;;
--libc) LIBC="$2"; shift 2 ;;
--outdir) OUTDIR="$2"; shift 2 ;;
--bin) BIN="$2"; shift 2 ;;
--config) CONFIG="$2"; shift 2 ;;
--assets) ASSETS="$2"; shift 2 ;;
*) echo "unknown arg: $1" >&2; exit 1 ;;
esac
done
if [[ -z "$NAME" || -z "$VERSION" || -z "$OS" || -z "$ARCH" || -z "$BIN" ]]; then
echo "missing required args" >&2
exit 1
fi
if [[ ! -f "$BIN" ]]; then
echo "binary not found: $BIN" >&2
exit 1
fi
if [[ "$OS" == "linux" && -z "$LIBC" ]]; then
echo "linux packages require --libc gnu|musl" >&2
exit 1
fi
if [[ -n "$LIBC" && "$LIBC" != "gnu" && "$LIBC" != "musl" ]]; then
echo "invalid --libc: $LIBC (expected gnu|musl)" >&2
exit 1
fi
STAGE="$(mktemp -d)"
trap 'rm -rf "$STAGE"' EXIT
BIN_BASENAME="$(basename "$BIN")"
case "$OS" in
windows)
case "$NAME" in
orbien) DEST_BIN="orbien.exe" ;;
orbien-server) DEST_BIN="orbien-server.exe" ;;
orbien-desktop) DEST_BIN="orbien-desktop.exe" ;;
*) DEST_BIN="${BIN_BASENAME}" ;;
esac
;;
*)
case "$NAME" in
orbien) DEST_BIN="orbien" ;;
orbien-server) DEST_BIN="orbien-server" ;;
orbien-desktop) DEST_BIN="orbien-desktop" ;;
*) DEST_BIN="${BIN_BASENAME}" ;;
esac
;;
esac
cp "$BIN" "${STAGE}/${DEST_BIN}"
chmod +x "${STAGE}/${DEST_BIN}" || true
if [[ -n "$CONFIG" ]]; then
if [[ ! -f "$CONFIG" ]]; then
echo "config not found: $CONFIG" >&2
exit 1
fi
cp "$CONFIG" "${STAGE}/$(basename "$CONFIG")"
fi
if [[ -n "$ASSETS" ]]; then
if [[ ! -d "$ASSETS" ]]; then
echo "assets dir not found: $ASSETS" >&2
exit 1
fi
mkdir -p "${STAGE}/assets"
cp -R "${ASSETS}/." "${STAGE}/assets/"
fi
mkdir -p "$OUTDIR"
if [[ -n "$LIBC" ]]; then
ARCHIVE="${OUTDIR}/${NAME}_${VERSION}_${OS}_${ARCH}_${LIBC}.tar.gz"
else
ARCHIVE="${OUTDIR}/${NAME}_${VERSION}_${OS}_${ARCH}.tar.gz"
fi
tar -C "$STAGE" -czf "$ARCHIVE" .
echo "wrote ${ARCHIVE}"
ls -lh "$ARCHIVE"