108 lines
4.1 KiB
YAML
108 lines
4.1 KiB
YAML
stages:
|
|
- image
|
|
- build
|
|
|
|
variables:
|
|
DOCKER_HOST: tcp://docker:2375
|
|
DOCKER_DRIVER: overlay2
|
|
DOCKER_TLS_CERTDIR: ""
|
|
DOCKER_BUILDKIT: "1"
|
|
# apt mirror used inside both images (override per pipeline if needed)
|
|
APT_MIRROR: "http://mirrors.tuna.tsinghua.edu.cn/ubuntu"
|
|
# Images are shared through Harbor (plain HTTP), never as artifacts.
|
|
HARBOR_HOST: "192.168.1.11:9090"
|
|
HARBOR_PROJECT: "openra3"
|
|
IMAGE: "$HARBOR_HOST/$HARBOR_PROJECT/$CI_PROJECT_NAME"
|
|
|
|
# dind pulls docker.io images through the intranet Harbor pull-through cache.
|
|
# NOTE: anchor only the *array* so `services: *dind` stays an array.
|
|
.dind: &dind
|
|
- name: docker:dind
|
|
command:
|
|
- --registry-mirror=http://192.168.1.11:9090/dockerhub
|
|
- --insecure-registry=192.168.1.11:9090
|
|
|
|
# --- build the two isolated toolchain images and push them to Harbor ----------
|
|
linux_image:
|
|
stage: image
|
|
image: docker:latest
|
|
services: *dind
|
|
tags:
|
|
- docker
|
|
script:
|
|
- echo "$HARBOR_PASSWORD" | docker login "$HARBOR_HOST" -u "$HARBOR_USERNAME" --password-stdin
|
|
# Registry cache export needs the docker-container driver, not the default
|
|
# docker driver ("Cache export is not supported for the docker driver").
|
|
- docker buildx create --use --name ci-builder --driver docker-container
|
|
- |
|
|
docker buildx build \
|
|
--cache-from type=registry,ref=$IMAGE:cache-linux \
|
|
--cache-to type=registry,ref=$IMAGE:cache-linux,mode=max \
|
|
--build-arg APT_MIRROR=$APT_MIRROR \
|
|
--target dev \
|
|
-t $IMAGE:$CI_COMMIT_SHORT_SHA-linux \
|
|
--push -f Dockerfile .
|
|
|
|
windows_image:
|
|
stage: image
|
|
image: docker:latest
|
|
services: *dind
|
|
tags:
|
|
- docker
|
|
script:
|
|
- echo "$HARBOR_PASSWORD" | docker login "$HARBOR_HOST" -u "$HARBOR_USERNAME" --password-stdin
|
|
- docker buildx create --use --name ci-builder --driver docker-container
|
|
- |
|
|
docker buildx build \
|
|
--cache-from type=registry,ref=$IMAGE:cache-windows \
|
|
--cache-to type=registry,ref=$IMAGE:cache-windows,mode=max \
|
|
--build-arg APT_MIRROR=$APT_MIRROR \
|
|
--target dev \
|
|
-t $IMAGE:$CI_COMMIT_SHORT_SHA-windows \
|
|
--push -f Dockerfile.win .
|
|
|
|
# --- build and test each target ----------------------------------------------
|
|
build_linux:
|
|
stage: build
|
|
image: docker:latest
|
|
services: *dind
|
|
tags:
|
|
- docker
|
|
needs:
|
|
- linux_image
|
|
script:
|
|
- echo "$HARBOR_PASSWORD" | docker login "$HARBOR_HOST" -u "$HARBOR_USERNAME" --password-stdin
|
|
- docker pull $IMAGE:$CI_COMMIT_SHORT_SHA-linux
|
|
- docker run --rm -v "$(pwd):/work" -w /work $IMAGE:$CI_COMMIT_SHORT_SHA-linux cmake -S . -B build/linux -G Ninja -DCMAKE_BUILD_TYPE=Release
|
|
- docker run --rm -v "$(pwd):/work" -w /work $IMAGE:$CI_COMMIT_SHORT_SHA-linux cmake --build build/linux -j
|
|
- docker run --rm -v "$(pwd):/work" -w /work $IMAGE:$CI_COMMIT_SHORT_SHA-linux ctest --test-dir build/linux --output-on-failure
|
|
- docker run --rm -v "$(pwd):/work" -w /work $IMAGE:$CI_COMMIT_SHORT_SHA-linux bash -c "mkdir -p artifacts/linux && cp build/linux/bin/openra3 artifacts/linux/"
|
|
artifacts:
|
|
name: "$CI_PROJECT_NAME-linux-$CI_COMMIT_SHORT_SHA"
|
|
paths:
|
|
- artifacts/linux/
|
|
expire_in: 7 days
|
|
|
|
build_windows:
|
|
stage: build
|
|
image: docker:latest
|
|
services: *dind
|
|
tags:
|
|
- docker
|
|
needs:
|
|
- windows_image
|
|
script:
|
|
- echo "$HARBOR_PASSWORD" | docker login "$HARBOR_HOST" -u "$HARBOR_USERNAME" --password-stdin
|
|
- docker pull $IMAGE:$CI_COMMIT_SHORT_SHA-windows
|
|
- docker run --rm -v "$(pwd):/work" -w /work $IMAGE:$CI_COMMIT_SHORT_SHA-windows
|
|
cmake -S . -B build/windows -G Ninja
|
|
-DCMAKE_TOOLCHAIN_FILE=cmake/toolchains/llvm-mingw-x86_64.cmake
|
|
-DCMAKE_BUILD_TYPE=Release
|
|
- docker run --rm -v "$(pwd):/work" -w /work $IMAGE:$CI_COMMIT_SHORT_SHA-windows cmake --build build/windows -j
|
|
- docker run --rm -v "$(pwd):/work" -w /work $IMAGE:$CI_COMMIT_SHORT_SHA-windows bash -c "mkdir -p artifacts/windows && cp build/windows/bin/openra3.exe build/windows/bin/SDL3.dll artifacts/windows/"
|
|
artifacts:
|
|
name: "$CI_PROJECT_NAME-windows-$CI_COMMIT_SHORT_SHA"
|
|
paths:
|
|
- artifacts/windows/
|
|
expire_in: 7 days
|