mirror of
https://github.com/volcengine/OpenViking.git
synced 2026-09-30 17:28:07 +08:00
138 lines
3.9 KiB
Bash
Executable File
138 lines
3.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
trap 'echo "Build failed." >&2' ERR
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
cd "$ROOT_DIR"
|
|
|
|
PACKAGE_VERSION=$(npm pkg get version | tr -d '"')
|
|
VERSION="${BUILD_VERSION:-$PACKAGE_VERSION}"
|
|
RELEASE_PATH="${BUILD_RELEASE_PATH:-latest}"
|
|
PACKAGE_NAME="openviking"
|
|
OUTPUT_DIR="$ROOT_DIR/output"
|
|
TGZ_RELATIVE_PATH="output/openviking.tgz"
|
|
INSTALL_RELATIVE_PATH="output/install.sh"
|
|
VOLCENGINE_INSTALL_RELATIVE_PATH="output/volcengine-install.sh"
|
|
TGZ_PATH="$ROOT_DIR/$TGZ_RELATIVE_PATH"
|
|
INSTALL_OUTPUT="$ROOT_DIR/$INSTALL_RELATIVE_PATH"
|
|
VOLCENGINE_INSTALL_OUTPUT="$ROOT_DIR/$VOLCENGINE_INSTALL_RELATIVE_PATH"
|
|
STAGING_DIR=""
|
|
TAR_CREATE_FLAGS=(--exclude='._*' --exclude='.DS_Store' -zcf)
|
|
|
|
supports_tar_flag() {
|
|
local flag="$1"
|
|
tar "$flag" -cf /dev/null --files-from /dev/null >/dev/null 2>&1
|
|
}
|
|
|
|
if supports_tar_flag "--no-xattrs"; then
|
|
TAR_CREATE_FLAGS=(--no-xattrs "${TAR_CREATE_FLAGS[@]}")
|
|
fi
|
|
if supports_tar_flag "--disable-copyfile"; then
|
|
TAR_CREATE_FLAGS=(--disable-copyfile "${TAR_CREATE_FLAGS[@]}")
|
|
fi
|
|
|
|
cleanup() {
|
|
case "${STAGING_DIR:-}" in
|
|
"$OUTPUT_DIR"/.package.*)
|
|
if [ -d "$STAGING_DIR" ]; then
|
|
rm -rf "$STAGING_DIR"
|
|
fi
|
|
;;
|
|
esac
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
info() {
|
|
echo "[openviking] $*"
|
|
}
|
|
|
|
require_file() {
|
|
local path="$1"
|
|
if [ ! -f "$path" ]; then
|
|
echo "Required file is missing: $path" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
require_dir() {
|
|
local path="$1"
|
|
if [ ! -d "$path" ]; then
|
|
echo "Required directory is missing: $path" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
copy_optional_file() {
|
|
local path="$1"
|
|
local target_dir="$2"
|
|
if [ -f "$path" ]; then
|
|
cp "$path" "$target_dir/"
|
|
else
|
|
echo "Optional file is missing, skipped: $path" >&2
|
|
fi
|
|
}
|
|
|
|
info "Building OpenViking plugin package $VERSION"
|
|
rm -rf dist "$OUTPUT_DIR"
|
|
|
|
info "Installing dependencies"
|
|
npm install
|
|
|
|
info "Running checks"
|
|
npm run typecheck
|
|
npm test
|
|
npm run build
|
|
|
|
require_file "dist/index.js"
|
|
require_file "dist/commands/setup.js"
|
|
require_file "package.json"
|
|
require_file "openclaw.plugin.json"
|
|
require_file "install-manifest.json"
|
|
require_file "config/feature-gates.json"
|
|
require_dir "skills"
|
|
require_file "scripts/install.sh"
|
|
require_file "scripts/volcengine-openviking-install.sh"
|
|
|
|
mkdir -p "$OUTPUT_DIR"
|
|
STAGING_DIR=$(mktemp -d "$OUTPUT_DIR/.package.XXXXXX")
|
|
require_dir "$STAGING_DIR"
|
|
PACKAGE_DIR="$STAGING_DIR/$PACKAGE_NAME"
|
|
mkdir -p "$PACKAGE_DIR"
|
|
|
|
info "Staging package files"
|
|
cp package.json "$PACKAGE_DIR/"
|
|
BUILD_VERSION="$VERSION" node -e 'const fs=require("fs"); const path=process.argv[1]; const pkg=JSON.parse(fs.readFileSync(path,"utf8")); pkg.version = process.env.BUILD_VERSION; fs.writeFileSync(path, `${JSON.stringify(pkg, null, 2)}\n`);' "$PACKAGE_DIR/package.json"
|
|
cp openclaw.plugin.json "$PACKAGE_DIR/"
|
|
cp install-manifest.json "$PACKAGE_DIR/"
|
|
cp -R config "$PACKAGE_DIR/"
|
|
cp -R dist "$PACKAGE_DIR/"
|
|
cp -R skills "$PACKAGE_DIR/"
|
|
copy_optional_file "README.md" "$PACKAGE_DIR"
|
|
copy_optional_file "INSTALL.md" "$PACKAGE_DIR"
|
|
copy_optional_file "INSTALL-ZH.md" "$PACKAGE_DIR"
|
|
copy_optional_file "INSTALL-AGENT.md" "$PACKAGE_DIR"
|
|
|
|
info "Installing production dependencies into package"
|
|
npm install --omit=dev --ignore-scripts --no-audit --no-fund --package-lock=false --prefix "$PACKAGE_DIR" # npm install --omit=dev
|
|
require_dir "$PACKAGE_DIR/node_modules/@sinclair/typebox"
|
|
|
|
sed \
|
|
-e "s/^VERSION=\".*\"/VERSION=\"$VERSION\"/" \
|
|
-e "s#^RELEASE_PATH=\"\${INSTALL_RELEASE_PATH:-.*}\"#RELEASE_PATH=\"\${INSTALL_RELEASE_PATH:-$RELEASE_PATH}\"#" \
|
|
scripts/install.sh > "$INSTALL_OUTPUT"
|
|
chmod +x "$INSTALL_OUTPUT"
|
|
cp scripts/volcengine-openviking-install.sh "$VOLCENGINE_INSTALL_OUTPUT"
|
|
chmod +x "$VOLCENGINE_INSTALL_OUTPUT"
|
|
|
|
info "Creating $TGZ_PATH"
|
|
COPYFILE_DISABLE=1 tar "${TAR_CREATE_FLAGS[@]}" "$TGZ_PATH" -C "$STAGING_DIR" "$PACKAGE_NAME"
|
|
|
|
echo
|
|
info "Build complete"
|
|
echo "Package: $TGZ_RELATIVE_PATH"
|
|
echo "Installer: $INSTALL_RELATIVE_PATH"
|
|
echo "Volcengine installer: $VOLCENGINE_INSTALL_RELATIVE_PATH"
|
|
echo "Version: $VERSION"
|