필드 테스트를 위해 edge OpenAI-compatible 경로와 node adapter 설정을 확장하고, Jenkins 바이너리 빌드 및 control-plane/web compose 배포 구성을 함께 정리한다.
97 lines
2.6 KiB
Bash
Executable file
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"
|