2b89ea8825
- Logic components (15): each deployed as Worker at {name}.arcrun.dev,
cypher-executor fetches them via HTTP POST
- API components (6): gmail, telegram, line_notify, google_sheets,
http_request, cron executed inline via fetch recipes in component-loader
- External URL support: any https:// componentId is fetched directly
(n8n webhooks, MCP endpoints, etc.)
- Add deploy-logic-components.sh script for building/deploying WASM Workers
- Add component-worker-template with inline WASI shim
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
108 lines
2.7 KiB
Bash
Executable File
108 lines
2.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Deploy all logic components as individual CF Workers
|
|
# Each component gets: {name}.arcrun.dev
|
|
#
|
|
# Usage: bash scripts/deploy-logic-components.sh [component_name]
|
|
# (no arg = deploy all logic components)
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
COMPONENTS_DIR="$REPO_ROOT/registry/components"
|
|
TEMPLATE_DIR="$REPO_ROOT/component-worker-template"
|
|
BUILD_DIR="$REPO_ROOT/.component-builds"
|
|
|
|
# Logic components only (no_network_syscall: true)
|
|
LOGIC_COMPONENTS=(
|
|
if_control
|
|
switch
|
|
foreach_control
|
|
filter
|
|
merge
|
|
try_catch
|
|
wait
|
|
set
|
|
array_ops
|
|
string_ops
|
|
number_ops
|
|
date_ops
|
|
validate_json
|
|
ai_transform_compile
|
|
ai_transform_run
|
|
)
|
|
|
|
# Filter to single component if arg provided
|
|
if [ -n "$1" ]; then
|
|
LOGIC_COMPONENTS=("$1")
|
|
fi
|
|
|
|
mkdir -p "$BUILD_DIR"
|
|
|
|
deploy_component() {
|
|
local name="$1"
|
|
local worker_name="arcrun-${name//_/-}" # e.g. string_ops → arcrun-string-ops
|
|
local route_name="${name//_/-}" # e.g. string_ops → string-ops
|
|
local wasm_file="$COMPONENTS_DIR/$name/${name}.wasm"
|
|
local build_target="$BUILD_DIR/$name"
|
|
|
|
echo ""
|
|
echo "── $name ──────────────────────────────────"
|
|
|
|
# 1. Compile WASM if not present
|
|
if [ ! -f "$wasm_file" ]; then
|
|
echo " Compiling WASM..."
|
|
(cd "$COMPONENTS_DIR/$name" && tinygo build -o "${name}.wasm" -target=wasi ./...)
|
|
fi
|
|
|
|
# 2. Create per-component build dir
|
|
mkdir -p "$build_target/src"
|
|
|
|
# 3. Copy template source
|
|
cp "$TEMPLATE_DIR/src/index.ts" "$build_target/src/index.ts"
|
|
cp "$TEMPLATE_DIR/package.json" "$build_target/package.json"
|
|
cp "$TEMPLATE_DIR/tsconfig.json" "$build_target/tsconfig.json"
|
|
|
|
# 4. Copy WASM into build dir as component.wasm
|
|
cp "$wasm_file" "$build_target/component.wasm"
|
|
|
|
# 5. Generate wrangler.toml
|
|
cat > "$build_target/wrangler.toml" << TOML
|
|
name = "$worker_name"
|
|
main = "src/index.ts"
|
|
compatibility_date = "2025-02-19"
|
|
|
|
[vars]
|
|
COMPONENT_ID = "$name"
|
|
|
|
[[routes]]
|
|
pattern = "${route_name}.arcrun.dev/*"
|
|
zone_name = "arcrun.dev"
|
|
TOML
|
|
|
|
# 6. Install deps (reuse node_modules if already installed)
|
|
if [ ! -d "$build_target/node_modules" ]; then
|
|
echo " Installing deps..."
|
|
(cd "$build_target" && npm install --legacy-peer-deps --silent)
|
|
fi
|
|
|
|
# 7. Deploy
|
|
echo " Deploying to $worker_name ($route_name.arcrun.dev)..."
|
|
(cd "$build_target" && npx wrangler deploy)
|
|
|
|
echo " ✓ $name → https://${route_name}.arcrun.dev"
|
|
}
|
|
|
|
echo "Deploying ${#LOGIC_COMPONENTS[@]} logic component(s)..."
|
|
|
|
for name in "${LOGIC_COMPONENTS[@]}"; do
|
|
if [ ! -d "$COMPONENTS_DIR/$name" ]; then
|
|
echo " ✗ $name: directory not found, skipping"
|
|
continue
|
|
fi
|
|
deploy_component "$name"
|
|
done
|
|
|
|
echo ""
|
|
echo "Done."
|