#!/bin/bash # Jenkins job: thoughtframe-core / ThoughtFrame — bake WAR into amd64 thoughtframe-runtime + push. # Deploy (SSH upgrade.sh) is a separate post-step. # # Fast path by default: reuse local thoughtframe-os:latest, skip arm64. # Separate jobs: # ./publish-os.sh — amd64 OS base (JDK / tooling) # ./publish-arm64.sh — Pi images via QEMU buildx (slow) # # REGISTRY=registry.thoughtframe.ai BUILD_NUMBER=42 ./scripts/publish.sh # BUILD_OS=1 ... # rare: rebuild amd64 OS in this job too set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" MONOREPO="$(cd "$ROOT_DIR/../.." && pwd)" REGISTRY="${REGISTRY:-registry.thoughtframe.ai}" IMAGE_NAME="${IMAGE_NAME:-thoughtframe-runtime}" OS_IMAGE_NAME="${OS_IMAGE_NAME:-thoughtframe-os}" IMAGE_TAG="${BUILD_NUMBER:-${TAG:-local}}" OS_TAG="${OS_TAG:-latest}" PLATFORM="${PLATFORM:-}" BUILD_OS="${BUILD_OS:-0}" WITH_LIBREOFFICE="${WITH_LIBREOFFICE:-}" GRADLE_PROPS=( -Pimage="${IMAGE_NAME}" -PosImage="${OS_IMAGE_NAME}" -Ptag="${IMAGE_TAG}" -PosTag="${OS_TAG}" -Pregistry="${REGISTRY}" ) if [ -n "${PLATFORM}" ]; then GRADLE_PROPS+=(-Pplatform="${PLATFORM}") fi if [ -n "${WITH_LIBREOFFICE}" ]; then GRADLE_PROPS+=(-PwithLibreOffice="${WITH_LIBREOFFICE}") fi need_os=0 if [ "${BUILD_OS}" = "1" ]; then need_os=1 elif ! docker image inspect "${OS_IMAGE_NAME}:${OS_TAG}" >/dev/null 2>&1; then echo "No local ${OS_IMAGE_NAME}:${OS_TAG} — will build OS base" need_os=1 fi ( cd "$MONOREPO" if [ "${need_os}" = "1" ]; then echo "Building + pushing ${OS_IMAGE_NAME}:${OS_TAG}" ./gradlew :docker:dockerOsPush "${GRADLE_PROPS[@]}" else echo "Reusing local ${OS_IMAGE_NAME}:${OS_TAG}" fi echo "Building ${IMAGE_NAME}:${IMAGE_TAG} (FROM ${OS_IMAGE_NAME}:${OS_TAG}, WAR baked in)" ./gradlew :docker:dockerPush "${GRADLE_PROPS[@]}" ) echo "Published ${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} (and :latest)" if [ "${need_os}" = "1" ]; then echo "Published ${REGISTRY}/${OS_IMAGE_NAME}:${OS_TAG} (and OS :latest)" fi # Pi / ARM64 via buildx (QEMU — slow). Off by default for ThoughtFrame WAR deploys. # Set PUBLISH_ARM64=1 when shipping Pi images. if [ "${PUBLISH_ARM64:-0}" = "1" ]; then echo "Publishing linux/arm64 images via buildx ..." export ARM_REGISTRY="${ARM_REGISTRY:-127.0.0.1:5001}" REGISTRY="${ARM_REGISTRY}" \ BUILD_NUMBER="${BUILD_NUMBER:-${IMAGE_TAG}}" \ BUILD_OS="${BUILD_OS:-0}" \ "${SCRIPT_DIR}/publish-arm64.sh" else echo "Skipping arm64 publish (set PUBLISH_ARM64=1 for Pi images)" fi