diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c13864442..230f72f8a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -18,6 +18,7 @@ cache: key: "$CI_COMMIT_REF_SLUG" policy: pull-push + # Linux Build (CachyOS optimized) build-linux: stage: build @@ -27,6 +28,7 @@ build-linux: before_script: - pacman -Syu --noconfirm - pacman -S --noconfirm alsa-lib base-devel boost boost-libs catch2 cmake curl ffmpeg fmt fuse2 gamemode gcc gdb git glslang glu libusb libxi libxkbcommon libxkbcommon-x11 libxss libzip lz4 mbedtls2 mesa nasm ninja nlohmann-json openal openssl opus perl pipewire-audio pulseaudio pulseaudio-alsa qt5-base qt5-imageformats qt5-multimedia qt5-tools qt5-wayland qt5ct sdl2 sdl2-compat unzip vulkan-headers vulkan-icd-loader vulkan-mesa-layers wget xcb-util-cursor xcb-util-image xcb-util-keysyms xcb-util-renderutil xcb-util-wm xorg-server-xvfb zip zstd zsync + # Create shasum compatibility wrapper for AppImage build - echo '#!/bin/bash' > /usr/local/bin/shasum - echo 'if [ "$1" = "-a" ] && [ "$2" = "256" ]; then' >> /usr/local/bin/shasum - echo ' shift 2' >> /usr/local/bin/shasum @@ -36,6 +38,7 @@ build-linux: - echo 'fi' >> /usr/local/bin/shasum - chmod +x /usr/local/bin/shasum script: + # Clean and reset submodules to handle any inconsistencies - git submodule deinit --all --force || true - git submodule update --init --recursive --force - mkdir -p build && cd build @@ -47,39 +50,14 @@ build-linux: - find build/ -name "*.so" -o -name "citron*" | head -20 || echo "No shared libraries or executables found" - echo "Checking library dependencies..." - ldd build/bin/citron || echo "citron binary not found or ldd failed" - - chmod +x AppImage-build-local.sh - - echo "Attempting AppImage build with FUSE workaround..." - - export APPIMAGE_EXTRACT_AND_RUN=1 - - export ARCH=x86_64 - - export VERSION=$(git describe --tags --always) - - echo "Testing shasum compatibility..." - - which shasum || echo "shasum not found in PATH" - - echo "Testing shasum -a 256 syntax..." - - echo "test" | shasum -a 256 || echo "shasum -a 256 failed" - - echo "test" | sha256sum || echo "sha256sum failed" - - echo "Running AppImage build..." - - ./AppImage-build-local.sh || echo "AppImage build failed, continuing..." - - ls -la *.AppImage || echo "No AppImage files found" - - echo "AppImage size information:" - - du -h *.AppImage || echo "No AppImage to measure" - - echo "Total artifact size:" - - du -sh citron.AppImage build/bin/citron 2>/dev/null || echo "Cannot measure artifact sizes" - - echo "Compressing AppImage for upload..." - - gzip -9 -c citron.AppImage > citron.AppImage.gz - - ls -la citron.AppImage.gz - - du -h citron.AppImage.gz - - echo "AppImage compressed with gzip successfully" + - echo "Creating binary archive for upload..." - tar -czf citron-binary.tar.gz build/bin/ - ls -la citron-binary.tar.gz - du -h citron-binary.tar.gz - - split -b 50M citron.AppImage.gz citron.AppImage.gz.part - - ls -la citron.AppImage.gz.part* - - echo "AppImage split into chunks for upload" - - echo 'Note: To reassemble: cat citron.AppImage.gz.part* > citron.AppImage.gz' + - echo "Binary archive created successfully" artifacts: paths: - citron-binary.tar.gz - - citron.AppImage.gz.part* expire_in: 1 week when: always only: @@ -99,6 +77,7 @@ build-linux-v3: before_script: - pacman -Syu --noconfirm - pacman -S --noconfirm alsa-lib base-devel boost boost-libs catch2 cmake curl ffmpeg fmt fuse2 gamemode gcc gdb git glslang glu libusb libxi libxkbcommon libxkbcommon-x11 libxss libzip lz4 mbedtls2 mesa nasm ninja nlohmann-json openal openssl opus perl pipewire-audio pulseaudio pulseaudio-alsa qt5-base qt5-imageformats qt5-multimedia qt5-tools qt5-wayland qt5ct sdl2 sdl2-compat unzip vulkan-headers vulkan-icd-loader vulkan-mesa-layers wget xcb-util-cursor xcb-util-image xcb-util-keysyms xcb-util-renderutil xcb-util-wm xorg-server-xvfb zip zstd zsync + # Create shasum compatibility wrapper for AppImage build - echo '#!/bin/bash' > /usr/local/bin/shasum - echo 'if [ "$1" = "-a" ] && [ "$2" = "256" ]; then' >> /usr/local/bin/shasum - echo ' shift 2' >> /usr/local/bin/shasum @@ -108,6 +87,7 @@ build-linux-v3: - echo 'fi' >> /usr/local/bin/shasum - chmod +x /usr/local/bin/shasum script: + # Clean and reset submodules to handle any inconsistencies - git submodule deinit --all --force || true - git submodule update --init --recursive --force - mkdir -p build && cd build @@ -119,39 +99,14 @@ build-linux-v3: - find build/ -name "*.so" -o -name "citron*" | head -20 || echo "No shared libraries or executables found" - echo "Checking library dependencies..." - ldd build/bin/citron || echo "citron binary not found or ldd failed" - - chmod +x AppImage-build-local.sh - - echo "Attempting AppImage build with FUSE workaround..." - - export APPIMAGE_EXTRACT_AND_RUN=1 - - export ARCH=x86_64 - - export VERSION=$(git describe --tags --always) - - echo "Testing shasum compatibility..." - - which shasum || echo "shasum not found in PATH" - - echo "Testing shasum -a 256 syntax..." - - echo "test" | shasum -a 256 || echo "shasum -a 256 failed" - - echo "test" | sha256sum || echo "sha256sum failed" - - echo "Running AppImage build..." - - ./AppImage-build-local.sh || echo "AppImage build failed, continuing..." - - ls -la *.AppImage || echo "No AppImage files found" - - echo "AppImage size information:" - - du -h *.AppImage || echo "No AppImage to measure" - - echo "Total artifact size:" - - du -sh citron.AppImage build/bin/citron 2>/dev/null || echo "Cannot measure artifact sizes" - - echo "Compressing AppImage for upload..." - - gzip -9 -c citron.AppImage > citron.AppImage.gz - - ls -la citron.AppImage.gz - - du -h citron.AppImage.gz - - echo "AppImage compressed with gzip successfully" + - echo "Creating binary archive for upload..." - tar -czf citron-binary.tar.gz build/bin/ - ls -la citron-binary.tar.gz - du -h citron-binary.tar.gz - - split -b 50M citron.AppImage.gz citron.AppImage.gz.part - - ls -la citron.AppImage.gz.part* - - echo "AppImage split into chunks for upload" - - echo 'Note: To reassemble: cat citron.AppImage.gz.part* > citron.AppImage.gz' + - echo "Binary archive created successfully" artifacts: paths: - citron-binary.tar.gz - - citron.AppImage.gz.part* expire_in: 1 week when: always only: @@ -171,6 +126,7 @@ build-linux-steamdeck: before_script: - pacman -Syu --noconfirm - pacman -S --noconfirm alsa-lib base-devel boost boost-libs catch2 cmake curl ffmpeg fmt fuse2 gamemode gcc gdb git glslang glu libusb libxi libxkbcommon libxkbcommon-x11 libxss libzip lz4 mbedtls2 mesa nasm ninja nlohmann-json openal openssl opus perl pipewire-audio pulseaudio pulseaudio-alsa qt5-base qt5-imageformats qt5-multimedia qt5-tools qt5-wayland qt5ct sdl2 sdl2-compat unzip vulkan-headers vulkan-icd-loader vulkan-mesa-layers wget xcb-util-cursor xcb-util-image xcb-util-keysyms xcb-util-renderutil xcb-util-wm xorg-server-xvfb zip zstd zsync + # Create shasum compatibility wrapper for AppImage build - echo '#!/bin/bash' > /usr/local/bin/shasum - echo 'if [ "$1" = "-a" ] && [ "$2" = "256" ]; then' >> /usr/local/bin/shasum - echo ' shift 2' >> /usr/local/bin/shasum @@ -180,6 +136,7 @@ build-linux-steamdeck: - echo 'fi' >> /usr/local/bin/shasum - chmod +x /usr/local/bin/shasum script: + # Clean and reset submodules to handle any inconsistencies - git submodule deinit --all --force || true - git submodule update --init --recursive --force - mkdir -p build && cd build @@ -191,39 +148,14 @@ build-linux-steamdeck: - find build/ -name "*.so" -o -name "citron*" | head -20 || echo "No shared libraries or executables found" - echo "Checking library dependencies..." - ldd build/bin/citron || echo "citron binary not found or ldd failed" - - chmod +x AppImage-build-local.sh - - echo "Attempting AppImage build with FUSE workaround..." - - export APPIMAGE_EXTRACT_AND_RUN=1 - - export ARCH=x86_64 - - export VERSION=$(git describe --tags --always) - - echo "Testing shasum compatibility..." - - which shasum || echo "shasum not found in PATH" - - echo "Testing shasum -a 256 syntax..." - - echo "test" | shasum -a 256 || echo "shasum -a 256 failed" - - echo "test" | sha256sum || echo "sha256sum failed" - - echo "Running AppImage build..." - - ./AppImage-build-local.sh || echo "AppImage build failed, continuing..." - - ls -la *.AppImage || echo "No AppImage files found" - - echo "AppImage size information:" - - du -h *.AppImage || echo "No AppImage to measure" - - echo "Total artifact size:" - - du -sh citron.AppImage build/bin/citron 2>/dev/null || echo "Cannot measure artifact sizes" - - echo "Compressing AppImage for upload..." - - gzip -9 -c citron.AppImage > citron.AppImage.gz - - ls -la citron.AppImage.gz - - du -h citron.AppImage.gz - - echo "AppImage compressed with gzip successfully" + - echo "Creating binary archive for upload..." - tar -czf citron-binary.tar.gz build/bin/ - ls -la citron-binary.tar.gz - du -h citron-binary.tar.gz - - split -b 50M citron.AppImage.gz citron.AppImage.gz.part - - ls -la citron.AppImage.gz.part* - - echo "AppImage split into chunks for upload" - - echo 'Note: To reassemble: cat citron.AppImage.gz.part* > citron.AppImage.gz' + - echo "Binary archive created successfully" artifacts: paths: - citron-binary.tar.gz - - citron.AppImage.gz.part* expire_in: 1 week when: always only: @@ -243,6 +175,7 @@ build-android: before_script: - apt-get update -qq - apt-get install -y -qq openjdk-17-jdk wget unzip curl git cmake build-essential pkg-config zip glslang-tools + # 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 @@ -251,10 +184,12 @@ build-android: - export PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin - printf "y\ny\ny\ny\ny\ny\ny\n" | sdkmanager --licenses || true - 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: + # Clean and reset submodules to handle any inconsistencies - git submodule deinit --all --force || true - git submodule update --init --recursive --force - 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 @@ -271,7 +206,7 @@ build-android: - develop - ci-fixes - merge_requests - allow_failure: true + allow_failure: true # Allow failure if Android runner not available # Unit Tests test-unit: @@ -283,6 +218,7 @@ test-unit: - apt-get update -qq - apt-get install -y -qq build-essential cmake ninja-build git script: + # Clean and reset submodules to handle any inconsistencies - git submodule deinit --all --force || true - git submodule update --init --recursive --force - cmake -B build-test -S . -DCMAKE_BUILD_TYPE=Debug -DCITRON_TESTS=ON -DENABLE_QT=OFF -DENABLE_SDL2=OFF -DENABLE_WEB_SERVICE=OFF