#!/usr/bin/env bash set -euo pipefail version="${1:-0.1.0}" project_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" output_dir="$project_root/dist/npm" stage_root="$(mktemp -d "${TMPDIR:-/tmp}/dumbforge-npm.XXXXXX")" mkdir -p "$output_dir" cleanup() { rm -rf "$stage_root" } trap cleanup EXIT build_target() { local goos="$1" local goarch="$2" local npm_platform="$3" local suffix="$4" local package_source="$project_root/npm/platforms/$npm_platform" local package_dir="$stage_root/$npm_platform" mkdir -p "$package_dir/bin" cp "$package_source/package.json" "$package_dir/package.json" cp "$project_root/LICENSE" "$package_dir/LICENSE" cp "$project_root/THIRD_PARTY_NOTICES.md" "$package_dir/THIRD_PARTY_NOTICES.md" cp -R "$project_root/THIRD_PARTY_LICENSES" "$package_dir/THIRD_PARTY_LICENSES" CGO_ENABLED=0 GOOS="$goos" GOARCH="$goarch" go build \ -trimpath \ -ldflags "-s -w -X main.version=$version" \ -o "$package_dir/bin/dumbforge$suffix" \ "$project_root/cmd/dumbforge" } build_target darwin arm64 darwin-arm64 "" build_target darwin amd64 darwin-x64 "" build_target linux arm64 linux-arm64 "" build_target linux amd64 linux-x64 "" build_target windows arm64 win32-arm64 ".exe" build_target windows amd64 win32-x64 ".exe" for package_dir in "$stage_root"/*; do npm pack "$package_dir" --pack-destination "$output_dir" done npm pack "$project_root" --pack-destination "$output_dir" echo "npm packages written to $output_dir"