iop/bin/build/field-binaries.sh
toki a52ecb8efe 기능: OpenAI 서빙과 필드 배포 구성을 추가한다
필드 테스트를 위해 edge OpenAI-compatible 경로와 node adapter 설정을 확장하고, Jenkins 바이너리 빌드 및 control-plane/web compose 배포 구성을 함께 정리한다.
2026-05-19 16:04:23 +09:00

97 lines
2.6 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
DIST_DIR="${DIST_DIR:-"$ROOT_DIR/dist/field"}"
TARGETS="${TARGETS:-}"
APPS="${APPS:-"edge node"}"
CGO_ENABLED="${CGO_ENABLED:-0}"
GOFLAGS="${GOFLAGS:-"-trimpath"}"
if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
cat <<'USAGE'
Build field-deployable IOP edge/node binaries.
Usage:
bin/build/field-binaries.sh
Environment:
APPS="edge node" apps to build
TARGETS="linux/amd64 linux/arm64" GOOS/GOARCH target list
DIST_DIR=dist/field output directory
VERSION=<value> release version label
COMMIT=<value> commit label
BUILD_DATE=<value> build date label
CGO_ENABLED=0 Go CGO setting
GOFLAGS="-trimpath" extra go build flags
LDFLAGS="-s -w" linker flags
USAGE
exit 0
fi
VERSION="${VERSION:-"$(git -C "$ROOT_DIR" describe --tags --always --dirty 2>/dev/null || echo dev)"}"
COMMIT="${COMMIT:-"$(git -C "$ROOT_DIR" rev-parse --short=12 HEAD 2>/dev/null || echo unknown)"}"
BUILD_DATE="${BUILD_DATE:-"$(date -u +%Y%m%dT%H%M%SZ)"}"
LDFLAGS="${LDFLAGS:-"-s -w"}"
if [[ -z "$TARGETS" ]]; then
TARGETS="$(go env GOOS)/$(go env GOARCH)"
fi
checksum() {
if command -v sha256sum >/dev/null 2>&1; then
sha256sum "$@"
return
fi
shasum -a 256 "$@"
}
build_one() {
local app="$1"
local goos="$2"
local goarch="$3"
local output_dir="$DIST_DIR/$VERSION/$goos-$goarch"
local output="$output_dir/iop-$app"
mkdir -p "$output_dir"
echo "building $app for $goos/$goarch -> $output"
(
cd "$ROOT_DIR"
GOOS="$goos" GOARCH="$goarch" CGO_ENABLED="$CGO_ENABLED" \
go build $GOFLAGS -ldflags "$LDFLAGS" -o "$output" "./apps/$app/cmd/$app"
)
checksum "$output" > "$output.sha256"
}
for target in $TARGETS; do
IFS=/ read -r goos goarch extra <<< "$target"
if [[ -z "${goos:-}" || -z "${goarch:-}" || -n "${extra:-}" ]]; then
echo "invalid target '$target'; expected GOOS/GOARCH" >&2
exit 1
fi
for app in $APPS; do
case "$app" in
edge|node) build_one "$app" "$goos" "$goarch" ;;
*)
echo "unsupported app '$app'; expected edge or node" >&2
exit 1
;;
esac
done
output_dir="$DIST_DIR/$VERSION/$goos-$goarch"
{
echo "version=$VERSION"
echo "commit=$COMMIT"
echo "build_date=$BUILD_DATE"
echo "target=$goos/$goarch"
echo "apps=$APPS"
} > "$output_dir/manifest.env"
(
cd "$output_dir"
checksum iop-* | grep -v '\.sha256$' > SHA256SUMS
)
done
echo "field binaries written to $DIST_DIR/$VERSION"