1
0
mirror of git://f0xx.org/android_cast synced 2026-07-29 05:37:52 +03:00
This commit is contained in:
Anton Afanasyeu
2026-06-05 16:50:08 +02:00
parent 7dc992fb19
commit a27958b430
6 changed files with 358 additions and 30 deletions

View File

@@ -25,6 +25,10 @@ CLONE_DEPTH="${BUILD_GIT_DEPTH:-1}"
SOURCE_DIR="${OUT_DIR}/src"
DOCKER_WORKSPACE="${WORK_DIR}"
CONTAINER_NAME="androidcast-bld-${BUILD_ID}"
RESUME_FROM="${BUILD_RESUME_FROM:-}"
REUSE_SRC_DIR="${BUILD_REUSE_SRC_DIR:-}"
SSH_DEBUG="${BUILD_SSH_DEBUG:-0}"
SSH_DEBUG_SECONDS="${BUILD_SSH_DEBUG_SECONDS:-7200}"
mkdir -p "$(dirname "$LOG_FILE")" "$OUT_DIR"
@@ -136,22 +140,89 @@ sync_shared_checkout() {
run_logged git_safe -C "${WORK_DIR}" rev-parse HEAD
}
log "[runner] image=${IMAGE} ci_version=${CI_VERSION} build_id=${BUILD_ID} container=${CONTAINER_NAME}"
log "[runner] workdir=${WORK_DIR} out=${OUT_DIR} isolate=${ISOLATE_SOURCE}"
should_skip_git() {
[[ "$RESUME_FROM" == "docker-build" || "$RESUME_FROM" == "docker-run" ]]
}
if [[ "$ISOLATE_SOURCE" == "1" ]]; then
prepare_isolated_source
should_skip_docker_build() {
[[ "$RESUME_FROM" == "docker-run" ]] && docker image inspect "$IMAGE" >/dev/null 2>&1
}
reuse_source_tree() {
if [[ -n "$REUSE_SRC_DIR" && -d "${REUSE_SRC_DIR}/.git" ]]; then
log "[runner] reuse: source tree from ${REUSE_SRC_DIR}"
rm -rf "${SOURCE_DIR}"
mkdir -p "${SOURCE_DIR}"
cp -a "${REUSE_SRC_DIR}/." "${SOURCE_DIR}/"
DOCKER_WORKSPACE="${SOURCE_DIR}"
return 0
fi
return 1
}
run_git_step() {
if [[ "$ISOLATE_SOURCE" == "1" ]]; then
prepare_isolated_source
else
sync_shared_checkout
DOCKER_WORKSPACE="${WORK_DIR}"
fi
}
start_ssh_debug_container() {
log "[runner] SSH debug: starting container ${CONTAINER_NAME} (${SSH_DEBUG_SECONDS}s)"
docker rm -f "${CONTAINER_NAME}" 2>/dev/null || true
run_step docker-run-ssh docker run -d --name "${CONTAINER_NAME}" \
-v "${DOCKER_WORKSPACE}:/workspace" \
-v "${ROOT}/out:/workspace/out" \
-w /workspace \
-e BUILD_ID="${BUILD_ID}" \
-e OUT_DIR="/workspace/out/builds/${BUILD_ID}" \
"$IMAGE" \
sleep "${SSH_DEBUG_SECONDS}"
printf '%s\n' 'ssh_debug' > "${OUT_DIR}/runner.mode"
local host
host="$(hostname -f 2>/dev/null || hostname 2>/dev/null || echo builder)"
log "[runner] SSH debug: session open on ${host}"
log "[runner] SSH debug: ssh <you>@${host}"
log "[runner] SSH debug: docker exec -it ${CONTAINER_NAME} bash"
log "[runner] SSH debug: workspace is /workspace inside the container"
log "[runner] finished build_id=${BUILD_ID} (ssh debug — stop build or wait ${SSH_DEBUG_SECONDS}s)"
}
log "[runner] image=${IMAGE} ci_version=${CI_VERSION} build_id=${BUILD_ID} container=${CONTAINER_NAME}"
log "[runner] workdir=${WORK_DIR} out=${OUT_DIR} isolate=${ISOLATE_SOURCE} resume=${RESUME_FROM:-full}"
if should_skip_git; then
if reuse_source_tree; then
log "[runner] resume: skipped git (reused source)"
elif [[ "$ISOLATE_SOURCE" != "1" && -d "${WORK_DIR}/.git" ]]; then
DOCKER_WORKSPACE="${WORK_DIR}"
log "[runner] resume: skipped git (shared workdir ${WORK_DIR})"
else
log "[runner] resume: no reusable source; running git step"
run_git_step
fi
else
sync_shared_checkout
run_git_step
fi
log "[runner] docker workspace=${DOCKER_WORKSPACE}"
run_step docker-build docker build \
--build-arg ANDROIDCAST_CI_VERSION="${CI_VERSION}" \
-t "$IMAGE" \
-f "${ROOT}/Dockerfile" \
"${ROOT}"
if should_skip_docker_build; then
log "[runner] resume: skipped docker-build (image ${IMAGE} exists)"
else
run_step docker-build docker build \
--build-arg ANDROIDCAST_CI_VERSION="${CI_VERSION}" \
-t "$IMAGE" \
-f "${ROOT}/Dockerfile" \
"${ROOT}"
fi
if [[ "$SSH_DEBUG" == "1" ]]; then
start_ssh_debug_container
exit 0
fi
run_step docker-run docker run --rm --name "${CONTAINER_NAME}" \
-v "${DOCKER_WORKSPACE}:/workspace" \