#!/usr/bin/env bash set -euo pipefail ROOT=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd) LOCK="$ROOT/deploys/versions.lock.json" VERSION=${1:-$(awk -F'"' '/"version"[[:space:]]*:/ {print $4; exit}' "$LOCK")} [[ "$VERSION" =~ ^[0-9A-Za-z][0-9A-Za-z.+_-]*$ ]] || { echo 'invalid version' >&2; exit 2; } RELEASE_DIR="$ROOT/dist/release-$VERSION" STAGE="$ROOT/dist/package-$VERSION" ARCHIVE="$ROOT/dist/packages/sip-go-agent-$VERSION-linux-amd64.tar.gz" for output in "$RELEASE_DIR" "$STAGE" "$ARCHIVE" "$ARCHIVE.sha256"; do if [[ -e "$output" || -L "$output" ]]; then echo "package output already exists; refusing to replace it: $output" >&2 exit 1 fi done RELEASE_VERSION="$VERSION" "$ROOT/scripts/build-release.sh" "$RELEASE_DIR" mkdir -p -- "$(dirname -- "$ARCHIVE")" mkdir -- "$STAGE" cp -a "$RELEASE_DIR/." "$STAGE/" mkdir -p "$STAGE/systemd" "$STAGE/env" "$STAGE/config" cp "$ROOT/deploys/install.sh" "$STAGE/install.sh" cp "$ROOT/deploys/systemd/"*.service "$STAGE/systemd/" cp "$ROOT/deploys/env/agent.env.example" "$ROOT/deploys/env/dispatcher.env.example" "$STAGE/env/" cp "$ROOT/deploys/config/agent-endpoints.example.json" "$STAGE/config/" cp "$LOCK" "$STAGE/versions.lock.json" chmod 0755 "$STAGE/install.sh" chmod 0644 "$STAGE/systemd/"*.service "$STAGE/env/"*.env.example "$STAGE/config/agent-endpoints.example.json" "$STAGE/versions.lock.json" ( cd "$STAGE" find . -type f ! -name package.SHA256SUMS -printf '%P\n' | sort | while IFS= read -r file; do sha256sum "$file" done > package.SHA256SUMS ) tar -C "$STAGE" -czf "$ARCHIVE" . ( cd "$(dirname -- "$ARCHIVE")" sha256sum "$(basename -- "$ARCHIVE")" > "$(basename -- "$ARCHIVE").sha256" ) rm -rf -- "$STAGE" printf 'package=%s\nchecksum=%s\n' "$ARCHIVE" "$ARCHIVE.sha256"