ci: fix separation of docker build and test phases

This commit is contained in:
2025-11-09 11:02:38 +01:00
parent 3c82f2934c
commit d991dd38a0
3 changed files with 20 additions and 41 deletions
+8 -18
View File
@@ -4,11 +4,8 @@ FROM ubuntu:24.04 AS base
ENV DEBIAN_FRONTEND=noninteractive ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \ RUN apt-get update && apt-get install -y \
build-essential \ build-essential git cmake \
git \ tcl tcl-dev tk tk-dev \
cmake \
tcl tcl-dev \
tk tk-dev \
libfreeimage-dev \ libfreeimage-dev \
libxmu-dev libxi-dev \ libxmu-dev libxi-dev \
libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev \ libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev \
@@ -33,23 +30,18 @@ RUN make install
WORKDIR /app WORKDIR /app
COPY src/occt/ ./src COPY src/occt/ ./src
COPY test/occt/ ./test RUN cmake -S src -B build -DCMAKE_PREFIX_PATH=/usr/local
RUN cmake --build build
RUN cmake -S src -B build -DCMAKE_PREFIX_PATH=/usr/local && cmake --build build
COPY test/occt/ ./test COPY test/occt/ ./test
# Unit test runner # Unit test runner stage
FROM ubuntu:24.04 AS unit-testing FROM ubuntu:24.04 AS unit-testing
ENV DEBIAN_FRONTEND=noninteractive ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \ RUN apt-get update && apt-get install -y \
build-essential \ build-essential cmake git catch2 xvfb \
cmake \
git \
catch2 \
xvfb \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
COPY --from=base /usr/local /usr/local COPY --from=base /usr/local /usr/local
@@ -59,7 +51,5 @@ COPY --from=base /app/test /app/test
WORKDIR /app WORKDIR /app
RUN cmake -S test -B build/tests -DCMAKE_PREFIX_PATH=/usr/local RUN cmake -S test -B build/unit-tests -DCMAKE_PREFIX_PATH=/usr/local
RUN cmake --build build/tests RUN cmake --build build/unit-tests
CMD ["ctest", "--test-dir", "build/tests", "-V"]
+6 -16
View File
@@ -6,28 +6,18 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_PATH="$(cd "$SCRIPT_DIR/../../" && pwd)" PROJECT_PATH="$(cd "$SCRIPT_DIR/../../" && pwd)"
DOCKERFILE_PATH="$SCRIPT_DIR/../occt.Dockerfile" DOCKERFILE_PATH="$SCRIPT_DIR/../occt.Dockerfile"
# Check for --unit-testing argument
RUN_UNIT_TESTS=false RUN_UNIT_TESTS=false
if [[ "${1-}" == "--unit-testing" ]]; then if [[ "${1-}" == "--unit-testing" ]]; then
RUN_UNIT_TESTS=true RUN_UNIT_TESTS=true
fi fi
echo "Building image..." echo "Building base image..."
if ! docker build -f "$DOCKERFILE_PATH" -t "$IMAGE_NAME" "$PROJECT_PATH"; then docker build --target base -f "$DOCKERFILE_PATH" -t "$IMAGE_NAME" "$PROJECT_PATH"
echo "Image build failed." >&2
exit 1
fi
echo "Listing /usr/local/bin..."
if ! docker run --rm "$IMAGE_NAME" ls /usr/local/bin; then
echo "Listing /usr/local/bin failed." >&2
exit 1
fi
if [ "$RUN_UNIT_TESTS" = true ]; then if [ "$RUN_UNIT_TESTS" = true ]; then
echo "Building unit-testing stage..."
docker build --target unit-testing -f "$DOCKERFILE_PATH" -t "$IMAGE_NAME" "$PROJECT_PATH"
echo "Running unit tests..." echo "Running unit tests..."
if ! docker run --rm "$IMAGE_NAME" ctest --test-dir /app/build/unit-tests -V; then docker run --rm "$IMAGE_NAME" ctest --test-dir /app/build/unit-tests -V
echo "Unit tests failed." >&2
exit 1
fi
fi fi
+5 -6
View File
@@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.14) cmake_minimum_required(VERSION 3.14)
project(arc-core-test) project(arc-core-occt-tests)
set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
@@ -7,21 +7,20 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Catch2 3 REQUIRED) find_package(Catch2 3 REQUIRED)
add_executable(tests add_executable(tests
/app/test/point-test.cpp point-test.cpp
/app/src/point.cpp
) )
target_include_directories(tests PRIVATE target_include_directories(tests PRIVATE
/app/src/include ../src/include
/usr/local/include/opencascade /usr/local/include/opencascade
) )
# Link the library from the build folder
target_link_libraries(tests PRIVATE target_link_libraries(tests PRIVATE
../build/libocct.so
Catch2::Catch2WithMain Catch2::Catch2WithMain
/usr/local/lib/libocct.so
) )
include(CTest) include(CTest)
include(Catch) include(Catch)
catch_discover_tests(tests) catch_discover_tests(tests)