Files
overlord/plugins/build-plugin.sh
T

82 lines
2.2 KiB
Bash
Raw Normal View History

2026-03-05 00:04:26 -06:00
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
2026-04-15 11:11:53 -05:00
PLUGIN_DIR="${1:-${ROOT_DIR}/sample-go}"
2026-03-19 16:29:26 -05:00
NATIVE_DIR="${PLUGIN_DIR}/native"
2026-03-05 00:04:26 -06:00
PLUGIN_NAME="sample"
ZIP_OUT="${PLUGIN_DIR}/${PLUGIN_NAME}.zip"
2026-03-19 16:29:26 -05:00
if [[ ! -d "${NATIVE_DIR}" ]]; then
echo "[error] native folder not found: ${NATIVE_DIR}" >&2
2026-03-05 00:04:26 -06:00
exit 1
fi
2026-03-19 16:29:26 -05:00
pushd "${NATIVE_DIR}" >/dev/null
2026-03-05 00:04:26 -06:00
2026-03-19 16:29:26 -05:00
# Detect current OS/arch for default build
HOST_OS="$(go env GOOS)"
HOST_ARCH="$(go env GOARCH)"
# Build matrix - can be overridden with BUILD_TARGETS env var
# Format: "os-arch os-arch ..." e.g. "linux-amd64 linux-arm64 darwin-arm64"
DEFAULT_TARGETS="${HOST_OS}-${HOST_ARCH}"
BUILD_TARGETS="${BUILD_TARGETS:-${DEFAULT_TARGETS}}"
BUILT_FILES=()
for target in ${BUILD_TARGETS}; do
os="${target%%-*}"
arch="${target#*-}"
if [[ "${os}" == "windows" ]]; then
ext="dll"
elif [[ "${os}" == "darwin" ]]; then
ext="dylib"
else
ext="so"
fi
buildmode="c-shared"
outfile="${PLUGIN_DIR}/${PLUGIN_NAME}-${os}-${arch}.${ext}"
echo "[build] GOOS=${os} GOARCH=${arch} CGO_ENABLED=1 go build -buildmode=${buildmode} -o ${outfile}"
CGO_ENABLED=1 GOOS="${os}" GOARCH="${arch}" go build -buildmode="${buildmode}" -o "${outfile}" .
BUILT_FILES+=("${PLUGIN_NAME}-${os}-${arch}.${ext}")
done
2026-03-05 00:04:26 -06:00
popd >/dev/null
rm -f "${ZIP_OUT}"
2026-03-19 16:29:26 -05:00
# Collect files to zip
ZIP_FILES=()
for bf in "${BUILT_FILES[@]}"; do
ZIP_FILES+=("${bf}")
done
# Add web assets
for asset in "${PLUGIN_NAME}.html" "${PLUGIN_NAME}.css" "${PLUGIN_NAME}.js"; do
if [[ -f "${PLUGIN_DIR}/${asset}" ]]; then
ZIP_FILES+=("${asset}")
fi
done
2026-03-05 00:04:26 -06:00
if command -v zip >/dev/null 2>&1; then
2026-03-19 16:29:26 -05:00
(cd "${PLUGIN_DIR}" && zip -q "${ZIP_OUT}" "${ZIP_FILES[@]}")
2026-03-05 00:04:26 -06:00
else
echo "[error] zip not found. Please install zip." >&2
exit 1
fi
2026-04-14 09:56:20 -05:00
# Optional: sign the plugin if PLUGIN_SIGN_KEY is set
if [[ -n "${PLUGIN_SIGN_KEY:-}" ]]; then
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
if command -v bun >/dev/null 2>&1; then
echo "[sign] Signing plugin with key: ${PLUGIN_SIGN_KEY}"
bun run "${SCRIPT_DIR}/Overlord-Server/scripts/plugin-sign.ts" --key "${PLUGIN_SIGN_KEY}" "${ZIP_OUT}"
else
echo "[warn] bun not found, skipping plugin signing" >&2
fi
fi
2026-03-05 00:04:26 -06:00
echo "[ok] ${ZIP_OUT}"