# GitLab CI config for Citron stages: - build - test - package variables: BUILD_TYPE: "Release" CMAKE_BUILD_PARALLEL_LEVEL: "4" DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: "" # Cache configuration for faster builds cache: paths: - build/ - .git/modules/ key: "$CI_COMMIT_REF_SLUG" policy: pull-push # Windows Build (requires Windows runner) build-windows: stage: build image: mcr.microsoft.com/windows/servercore:ltsc2022 tags: - windows before_script: - choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System' -y - choco install git -y - choco install visualstudio2022buildtools -y - choco install visualstudio2022-workload-vctools -y script: - git submodule update --init --recursive - cmake -B build -S . -DCMAKE_BUILD_TYPE=%BUILD_TYPE% -DCITRON_USE_BUNDLED_VCPKG=ON -DENABLE_QT=ON -DENABLE_SDL2=ON -DENABLE_WEB_SERVICE=ON -DCITRON_USE_BUNDLED_QT=ON -DCITRON_USE_BUNDLED_SDL2=ON -DCITRON_USE_BUNDLED_FFMPEG=ON - cmake --build build --config %BUILD_TYPE% --parallel artifacts: paths: - build/bin/*.exe - build/bin/*.dll expire_in: 1 week only: - main - master - develop - merge_requests allow_failure: true # Allow failure if Windows runner not available # Linux Build (Ubuntu 24.04 optimized) build-linux: stage: build image: ubuntu:24.04 tags: - linux - ubuntu before_script: - apt-get update -qq - apt-get install -y -qq build-essential cmake ninja-build pkg-config git curl wget unzip - apt-get install -y -qq libgl1-mesa-dev libglu1-mesa-dev - apt-get install -y -qq libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-randr0-dev - apt-get install -y -qq libxcb-render-util0-dev libxcb-render0-dev libxcb-shape0-dev libxcb-shm0-dev - apt-get install -y -qq libxcb-sync1-dev libxcb-xfixes0-dev libxcb-xinerama0-dev libxcb-xkb1-dev - apt-get install -y -qq libxcb1-dev libxkbcommon-x11-dev libxkbcommon-dev - apt-get install -y -qq libxcb-util0-dev libxcb-util1-dev libxcb-xinerama0-dev libxcb-xkb-dev - apt-get install -y -qq libpulse-dev libasound2-dev libusb-1.0-0-dev - apt-get install -y -qq libavcodec-dev libavfilter-dev libavutil-dev libswscale-dev - apt-get install -y -qq libssl-dev libboost-all-dev - apt-get install -y -qq libfmt-dev liblz4-dev libzstd-dev libnlohmann-json-dev - apt-get install -y -qq libopus-dev libenet-dev libsimpleini-dev libstb-dev - apt-get install -y -qq vulkan-validationlayers-dev libvulkan-dev script: - git submodule update --init --recursive - cmake -B build -S . -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DENABLE_QT=ON -DENABLE_SDL2=ON -DENABLE_WEB_SERVICE=ON -DCITRON_USE_EXTERNAL_SDL2=ON -DCITRON_USE_BUNDLED_FFMPEG=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=ON - cmake --build build --config $BUILD_TYPE --parallel $CMAKE_BUILD_PARALLEL_LEVEL - chmod +x AppImage-build-local.sh - ./AppImage-build-local.sh || echo "AppImage build failed, continuing..." artifacts: paths: - build/bin/citron - citron.AppImage expire_in: 1 week when: always only: - main - master - develop - merge_requests # Cross-compilation for ARM64 build-linux-aarch64: stage: build image: ubuntu:24.04 tags: - linux - ubuntu before_script: - apt-get update -qq - apt-get install -y -qq build-essential cmake gcc-aarch64-linux-gnu g++-aarch64-linux-gnu script: - git submodule update --init --recursive - cmake -B build-cross -S . -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DENABLE_QT=OFF -DENABLE_SDL2=OFF -DENABLE_WEB_SERVICE=OFF - cmake --build build-cross --config $BUILD_TYPE --parallel $CMAKE_BUILD_PARALLEL_LEVEL artifacts: paths: - build-cross/bin/citron expire_in: 1 week only: - main - master - develop # Android Build (Ubuntu 24.04 optimized) build-android: stage: build image: ubuntu:24.04 tags: - android before_script: - apt-get update -qq - apt-get install -y -qq openjdk-17-jdk wget unzip # Install Android SDK (latest version for Ubuntu 24.04) - wget -q https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip - unzip -q commandlinetools-linux-11076708_latest.zip - mkdir -p android-sdk/cmdline-tools - mv cmdline-tools android-sdk/cmdline-tools/latest - export ANDROID_SDK_ROOT=$PWD/android-sdk - export PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin - yes | sdkmanager --licenses - sdkmanager "platform-tools" "platforms;android-34" "build-tools;34.0.0" # Install Android NDK - wget -q https://dl.google.com/android/repository/android-ndk-r26b-linux.zip - unzip -q android-ndk-r26b-linux.zip - export ANDROID_NDK_HOME=$PWD/android-ndk-r26b script: - git submodule update --init --recursive - cmake -B build-android -S . -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-30 -DENABLE_QT=OFF -DENABLE_SDL2=OFF -DENABLE_WEB_SERVICE=OFF -DCITRON_USE_BUNDLED_VCPKG=ON -DCITRON_USE_BUNDLED_FFMPEG=ON -DANDROID_ARM_NEON=ON -DCITRON_ENABLE_LTO=ON - cmake --build build-android --config $BUILD_TYPE --parallel $CMAKE_BUILD_PARALLEL_LEVEL - cd src/android - ./gradlew assembleMainlineRelease artifacts: paths: - src/android/app/build/outputs/apk/mainline/release/*.apk - build-android/bin/*.so expire_in: 1 week only: - main - master - develop - merge_requests allow_failure: true # Allow failure if Android runner not available # Unit Tests test-unit: stage: test image: ubuntu:24.04 tags: - linux - ubuntu before_script: - apt-get update -qq - apt-get install -y -qq build-essential cmake ninja-build script: - git submodule update --init --recursive - cmake -B build-test -S . -DCMAKE_BUILD_TYPE=Debug -DCITRON_TESTS=ON -DENABLE_QT=OFF -DENABLE_SDL2=OFF -DENABLE_WEB_SERVICE=OFF - cmake --build build-test --config Debug --parallel $CMAKE_BUILD_PARALLEL_LEVEL - cd build-test - ctest --output-on-failure artifacts: reports: junit: build-test/Testing/**/*.xml expire_in: 1 week only: - main - master - develop - merge_requests # Package Release package-release: stage: package image: ubuntu:24.04 tags: - linux - ubuntu dependencies: - build-linux - build-linux-aarch64 script: - mkdir -p release - echo "Creating release package..." - tar -czf citron-release-$(date +%Y%m%d).tar.gz release/ || true artifacts: paths: - citron-release-*.tar.gz expire_in: 1 month only: - main - master - tags