#!/usr/bin/env bash # Host wrapper: build CI image + run pipeline with log capture. # # Usage: # ./scripts/docker-build-runner.sh --build-id 42 --workdir /path/to/repo # # Env: see ci-build-and-publish-ota.sh set -euo pipefail ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" IMAGE="${ANDROIDCAST_CI_IMAGE:-androidcast-ci:latest}" CI_VERSION="${ANDROIDCAST_CI_VERSION:-00.01.00.1000}" BUILD_ID="${BUILD_ID:-local}" LOG_FILE="${BUILD_LOG_FILE:-${ROOT}/out/builds/${BUILD_ID}/build.log}" WORK_DIR="${BUILD_WORK_DIR:-${ROOT}}" OUT_DIR="${BUILD_OUT_DIR:-${WORK_DIR}/out/builds/${BUILD_ID}}" mkdir -p "$(dirname "$LOG_FILE")" "$OUT_DIR" echo "[runner] image=${IMAGE} ci_version=${CI_VERSION} build_id=${BUILD_ID}" | tee -a "$LOG_FILE" echo "[runner] workdir=${WORK_DIR} out=${OUT_DIR}" | tee -a "$LOG_FILE" if [[ -n "${GIT_REF:-}" ]] && [[ -d "${WORK_DIR}/.git" ]]; then echo "[runner] syncing git ref=${GIT_REF}" | tee -a "$LOG_FILE" git -C "${WORK_DIR}" fetch origin --prune 2>&1 | tee -a "$LOG_FILE" || true git -C "${WORK_DIR}" checkout "${GIT_REF}" 2>&1 | tee -a "$LOG_FILE" || true git -C "${WORK_DIR}" pull --rebase origin "${GIT_REF}" 2>&1 | tee -a "$LOG_FILE" || true git -C "${WORK_DIR}" rev-parse HEAD 2>&1 | tee -a "$LOG_FILE" || true fi docker build \ --build-arg ANDROIDCAST_CI_VERSION="${CI_VERSION}" \ -t "$IMAGE" \ -f "${ROOT}/Dockerfile" \ "${ROOT}" 2>&1 | tee -a "$LOG_FILE" docker run --rm \ -v "${WORK_DIR}:/workspace" \ -v "${ROOT}/out:/workspace/out" \ -w /workspace \ -e BUILD_ID="${BUILD_ID}" \ -e OUT_DIR="/workspace/out/builds/${BUILD_ID}" \ -e OTA_BASE_URL="${OTA_BASE_URL:-}" \ -e OTA_CHANNEL="${OTA_CHANNEL:-staging}" \ -e GRADLE_TASK="${GRADLE_TASK:-assembleDebug}" \ -e RUN_UNIT_TESTS="${RUN_UNIT_TESTS:-1}" \ -e RUN_NATIVE="${RUN_NATIVE:-1}" \ -e AUTO_OTA="${AUTO_OTA:-0}" \ -e GIT_REF="${GIT_REF:-}" \ -e GIT_SHA="${GIT_SHA:-}" \ -e RELEASE_NOTES="${RELEASE_NOTES:-}" \ "$IMAGE" \ ./scripts/ci-build-and-publish-ota.sh 2>&1 | tee -a "$LOG_FILE" echo "[runner] finished build_id=${BUILD_ID}" | tee -a "$LOG_FILE"