mirror of
https://github.com/unraid/api.git
synced 2026-01-01 14:10:10 -06:00
Raised by [MitchellThompkins](https://github.com/MitchellThompkins) in #1848 - Documents how to use Docker to build a local Connect plugin - Local Plugin flow will now build workspace packages before proceeding with plugin infra + build - Removes recommendation to run `pnpm build:watch` from root, as this race conditions and build cache issues. - Makes `pnpm dev` from root parallel, preventing servers from blocking each other. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Updated development workflow documentation to emphasize Docker-based plugin builds * Restructured development modes into three workflows: local Docker builds, direct deployment, and development servers * Updated build and deployment instructions * **Chores** * Modified dev script for parallel execution * Refactored build scripts with improved dependency handling <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai -->
61 lines
2.0 KiB
Bash
Executable File
61 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Get host IP based on platform
|
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
# macOS
|
|
HOST_LAN_IP=$(ipconfig getifaddr en0 || ipconfig getifaddr en1 || echo "127.0.0.1")
|
|
else
|
|
# Linux and others
|
|
HOST_LAN_IP=$(hostname -I | awk '{print $1}' || echo "127.0.0.1")
|
|
fi
|
|
|
|
# Verify we have a valid IP
|
|
if [[ ! $HOST_LAN_IP =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
|
echo "Error: Could not determine valid host IP address. Using localhost."
|
|
HOST_LAN_IP="127.0.0.1"
|
|
fi
|
|
|
|
CI=${CI:-false}
|
|
TAG="LOCAL_PLUGIN_BUILD"
|
|
IS_TAGGED=$(git describe --tags --abbrev=0 --exact-match || echo '')
|
|
PACKAGE_LOCK_VERSION=$(jq -r '.version' package.json)
|
|
GIT_SHA=$(git rev-parse --short HEAD)
|
|
API_VERSION=$([[ -n "$IS_TAGGED" ]] && echo "$PACKAGE_LOCK_VERSION" || echo "${PACKAGE_LOCK_VERSION}+${GIT_SHA}")
|
|
|
|
# Define container name for easier management
|
|
CONTAINER_NAME="plugin-builder"
|
|
|
|
# Create the directory if it doesn't exist
|
|
# This is to prevent errors when mounting volumes in docker compose
|
|
WEB_DIST_DIR="../web/dist"
|
|
if [ ! -d "$WEB_DIST_DIR" ]; then
|
|
echo "Creating directory $WEB_DIST_DIR for Docker volume mount..."
|
|
mkdir -p "$WEB_DIST_DIR"
|
|
fi
|
|
|
|
# Build dependencies before starting Docker (always rebuild to prevent staleness)
|
|
echo "Building dependencies..."
|
|
|
|
echo "Building API release..."
|
|
if ! (cd .. && pnpm --filter @unraid/api build:release); then
|
|
echo "Error: API build failed. Aborting."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Building web standalone..."
|
|
if ! (cd .. && pnpm --filter @unraid/web build); then
|
|
echo "Error: Web build failed. Aborting."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Dependencies built successfully."
|
|
|
|
# Stop any running plugin-builder container first
|
|
echo "Stopping any running plugin-builder containers..."
|
|
docker ps -q --filter "name=${CONTAINER_NAME}" | xargs -r docker stop
|
|
|
|
# Start the container with the specified environment variables
|
|
echo "Starting plugin-builder container..."
|
|
|
|
docker compose run --remove-orphans --service-ports -e HOST_LAN_IP="$HOST_LAN_IP" -e CI="$CI" -e TAG="$TAG" -e API_VERSION="$API_VERSION" ${CONTAINER_NAME} "$@"
|