#!/usr/bin/env bash
set -euo pipefail

: "${AGENTTEAM_RELEASE_ARCHIVE_PATH:?AGENTTEAM_RELEASE_ARCHIVE_PATH is required}"

readonly SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
readonly REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
readonly RELEASE_ARCHIVE_PATH="$AGENTTEAM_RELEASE_ARCHIVE_PATH"
readonly TARGET_GOOS="${AGENTTEAM_RELEASE_GOOS:-linux}"
readonly TARGET_GOARCH="${AGENTTEAM_RELEASE_GOARCH:-arm64}"

source "$SCRIPT_DIR/_lib.sh"

require_command go
require_command npm
require_command rsync
require_command tar

staging_dir=$(mktemp -d /tmp/agentteam-release-build.XXXXXX)
cleanup() {
  rm -rf "$staging_dir"
}
trap cleanup EXIT

mkdir -p "$staging_dir/bin" "$staging_dir/web" "$(dirname "$RELEASE_ARCHIVE_PATH")"

cd "$REPO_ROOT"
agentteam_go_ldflags="$("$REPO_ROOT/scripts/agentteam-go-buildinfo-ldflags.sh" "$REPO_ROOT")"
GOOS="$TARGET_GOOS" GOARCH="$TARGET_GOARCH" CGO_ENABLED=0 go build -trimpath -ldflags "$agentteam_go_ldflags" -o "$staging_dir/bin/agentteam-server" ./cmd/agentteam-server
GOOS="$TARGET_GOOS" GOARCH="$TARGET_GOARCH" CGO_ENABLED=0 go build -trimpath -o "$staging_dir/bin/agentteam-schema" ./cmd/agentteam-schema
GOOS="$TARGET_GOOS" GOARCH="$TARGET_GOARCH" CGO_ENABLED=0 go build -trimpath -o "$staging_dir/bin/agentteam-tidb-admin" ./cmd/agentteam-tidb-admin

pushd web >/dev/null
npm ci
npm run build
popd >/dev/null

rsync -a --delete "$REPO_ROOT/web/dist/" "$staging_dir/web/"
tar -C "$staging_dir" -czf "$RELEASE_ARCHIVE_PATH" bin web
