From 2d790466edaad1258f5f6a08e0861d70f517a0ee Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 10 Aug 2025 12:57:54 +1200 Subject: [PATCH] Update 3 files --- Dockerfile.dropshell-build | 7 ++-- build.sh | 66 +++++++++++--------------------------- publish.sh | 3 +- 3 files changed, 23 insertions(+), 53 deletions(-) diff --git a/Dockerfile.dropshell-build b/Dockerfile.dropshell-build index 9071e44..8976084 100644 --- a/Dockerfile.dropshell-build +++ b/Dockerfile.dropshell-build @@ -24,6 +24,7 @@ ENV CCACHE_MAXSIZE=2G # Copy source files (this invalidates cache when source changes) COPY src/ src/ +COPY CMakeLists.txt ./ # Configure project (this step is cached unless CMakeLists.txt changes) RUN --mount=type=cache,target=/ccache \ @@ -47,9 +48,9 @@ RUN --mount=type=cache,target=/ccache \ ${CMAKE_TOOLCHAIN_FILE:+-DCMAKE_TOOLCHAIN_FILE=$CMAKE_TOOLCHAIN_FILE} # Run prebuild script -RUN --mount=type=cache,target=/ccache \ - --mount=type=cache,target=/build \ - cmake --build /build --target run_prebuild_script +#RUN --mount=type=cache,target=/ccache \ +# --mount=type=cache,target=/build \ +# cmake --build /build --target run_prebuild_script # Build project (ccache will help here when only some files change) RUN --mount=type=cache,target=/ccache \ diff --git a/build.sh b/build.sh index 2f52f77..0bd5c1c 100755 --- a/build.sh +++ b/build.sh @@ -1,58 +1,28 @@ #!/bin/bash + set -euo pipefail -# Get script directory - handle different execution contexts SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" PROJECT="$(basename "${SCRIPT_DIR}")" -# Debug output for CI -echo "${PROJECT} build script running from: ${SCRIPT_DIR}" +rm -rf "${SCRIPT_DIR}/output" +mkdir -p "${SCRIPT_DIR}/output" -# handle running locally, or docker in docker via gitea runner. -if [ -n "${GITEA_CONTAINER_NAME:-}" ]; then - echo "We're in a gitea container: ${GITEA_CONTAINER_NAME}" - VOLUME_OPTS=("--volumes-from=${GITEA_CONTAINER_NAME}") - WORKING_DIR=("-w" "${GITHUB_WORKSPACE}") - BUILD_DIR="${GITHUB_WORKSPACE}/build" - OUTPUT_DIR="${GITHUB_WORKSPACE}/output" -else - VOLUME_OPTS=("-v" "${SCRIPT_DIR}:/app") - WORKING_DIR=("-w" "/app") - BUILD_DIR="${SCRIPT_DIR}/build" - OUTPUT_DIR="${SCRIPT_DIR}/output" +# make sure we have the latest base image. +docker pull gitea.jde.nz/public/dropshell-build-base:latest + +# Build with or without cache based on NO_CACHE environment variable +CACHE_FLAG="" +if [ "${NO_CACHE:-false}" = "true" ]; then + CACHE_FLAG="--no-cache" fi -# Create output directory -mkdir -p "${OUTPUT_DIR}" - -# Create build directory with proper permissions -mkdir -p "${BUILD_DIR}" - -# Run build in container with mounted directories -# Note: We run as root in the container and then chown the results -COMMAND_TO_RUN="mkdir -p ./build && \ - cmake -G Ninja -S . -B ./build \ - -DCMAKE_BUILD_TYPE=\${CMAKE_BUILD_TYPE} \ - -DPROJECT_NAME=${PROJECT} && \ - cmake --build ./build && \ - chown -R $(id -u):$(id -g) ./build" - -echo "Building in new docker container" -docker run --rm \ - "${VOLUME_OPTS[@]}" \ - "${WORKING_DIR[@]}" \ - -e CMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE:-Debug}" \ - gitea.jde.nz/public/dropshell-build-base:latest \ - bash -c "${COMMAND_TO_RUN}" - -# Copy built executable to output directory -if [ -f "${BUILD_DIR}/${PROJECT}" ]; then - cp "${BUILD_DIR}/${PROJECT}" "${OUTPUT_DIR}/" - echo "✓ Build successful - ${PROJECT} copied to ${OUTPUT_DIR}/" -else - echo "✗ Build failed - ${PROJECT} not found in ${BUILD_DIR}/" - exit 1 -fi - -echo "Build complete" +docker build \ + ${CACHE_FLAG} \ + -t "${PROJECT}-build" \ + -f "${SCRIPT_DIR}/Dockerfile.dropshell-build" \ + --build-arg PROJECT="${PROJECT}" \ + --build-arg CMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE:-DEBUG}" \ + --output "${SCRIPT_DIR}/output" \ + "${SCRIPT_DIR}" diff --git a/publish.sh b/publish.sh index 90a33f5..e66982f 100755 --- a/publish.sh +++ b/publish.sh @@ -6,6 +6,7 @@ SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" ARCH=$(uname -m) TEMP_DIR="${SCRIPT_DIR}/temp" SOS="${TEMP_DIR}/sos" +PROJECT="$(basename "${SCRIPT_DIR}")" echo "Publishing simple-object-server to gitea.jde.nz/public/simple-object-server:latest" @@ -22,8 +23,6 @@ mkdir -p "${SCRIPT_DIR}/output" # build release version export CMAKE_BUILD_TYPE="Release" -export PROJECT="simple-object-server" - "${SCRIPT_DIR}/build.sh" [ -f "${SCRIPT_DIR}/output/simple-object-server" ] || die "Build failed."