Files
redot-engine/.gitlab-ci.yml
Arctis Fireblight 60164fcbf8 Refactor .gitlab-ci.yml file
Moved all build steps to a single stage.
Fixed various typos.
Reordered the Mac stages so that they occur earlier in the pipeline maximizing efficiency.
Bug fixes to the Mac signing jobs.
Added packaging stage to create a single download file from artifacts.
Fixed the nuget push command.
2025-11-15 19:29:04 -06:00

1391 lines
41 KiB
YAML

stages:
- build
- package
.template-build:
tags: [ docker ]
rules:
- if: $DO_RELEASE == "true"
before_script:
- export SCONS="scons -j$(nproc) verbose=no warnings=no progress=no"
- export BUILD_NAME="official"
script:
- /root/scripts/Fetch_Deps.sh "$PLATFORM"
- mkdir -p out/$PLATFORM/$ARCH/$TYPE
- $SCONS platform=$PLATFORM arch=$ARCH $OPTIONS target=$TARGET
- cp -r bin/* out/$PLATFORM/$ARCH/$TYPE/
artifacts:
expire_in: 3 days
public: false
paths:
- out/$PLATFORM/$ARCH/$TYPE
.build-release-template:
rules:
- if: $DO_RELEASE == "true"
script:
- /root/scripts/Fetch_Deps.sh "$PLATFORM"
- mkdir -p out/templates
- $SCONS platform=$PLATFORM arch=$ARCH $OPTIONS target=$TARGET
- cp -r bin/* out/templates
.build-release-template-mono:
needs: [linux-editor-x64-mono]
rules:
- if: $DO_RELEASE == "true"
script:
- /root/scripts/Fetch_Deps.sh "$PLATFORM"
- cp -r mono-glue/GodotSharp/GodotSharp/Generated modules/mono/glue/GodotSharp/GodotSharp/
- cp -r mono-glue/GodotSharp/GodotSharpEditor/Generated modules/mono/glue/GodotSharp/GodotSharpEditor/
- mkdir -p out/templates-mono
- $SCONS platform=$PLATFORM arch=$ARCH $OPTIONS module_mono_enabled=yes target=$TARGET
- cp -r bin/* out/templates-mono
.Template-Linux:
extends: .template-build
image: $CI_REGISTRY/redot-engine/redot-production-containers/redot-linux:latest
rules:
- if: $DO_RELEASE == "true"
before_script:
# Detect the right SDK and compiler paths
- !reference [.template-build, before_script]
- |
case "$ARCH" in
x86_32)
export PATH="$GODOT_SDK_LINUX_X86_32/bin:$PATH"
export CC="i686-godot-linux-gnu-gcc"
export CXX="i686-godot-linux-gnu-g++"
;;
x86_64)
export PATH="$GODOT_SDK_LINUX_X86_64/bin:$PATH"
export CC="x86_64-godot-linux-gnu-gcc"
export CXX="x86_64-godot-linux-gnu-g++"
;;
arm64)
export PATH="$GODOT_SDK_LINUX_ARM64/bin:$PATH"
export CC="aarch64-godot-linux-gnu-gcc"
export CXX="aarch64-godot-linux-gnu-g++"
;;
arm32)
export PATH="$GODOT_SDK_LINUX_ARM32/bin:$PATH"
export CC="arm-godot-linux-gnueabihf-gcc"
export CXX="arm-godot-linux-gnueabihf-g++"
;;
esac
variables:
OPTIONS: "production=yes"
PLATFORM: "linuxbsd"
.Template-Linux-Mono:
extends: .template-build-mono
image: $CI_REGISTRY/redot-engine/redot-production-containers/redot-linux:latest
before_script:
- !reference [.Template-Linux, before_script]
variables:
OPTIONS: "production=yes"
PLATFORM: "linuxbsd"
.Template-Release-Template-Linux:
extends: .Template-Linux
rules:
- if: $DO_RELEASE == "true"
script:
- !reference [.build-release-template, script]
artifacts:
public: false
expire_in: 3 days
paths:
- out/templates
.Template-Release-Template-Linux-Mono:
extends: .Template-Linux
needs: [ linux-editor-x64-mono ]
rules:
- if: $DO_RELEASE == "true"
script:
- !reference [.build-release-template-mono, script]
artifacts:
public: false
expire_in: 3 days
paths:
- out/templates-mono
.Template-Windows:
extends: .template-build
rules:
- if: $DO_RELEASE == "true"
image: $CI_REGISTRY/redot-engine/redot-production-containers/redot-windows:latest
before_script:
- !reference [.template-build, before_script]
- export OPTIONS="production=yes use_mingw=yes angle_libs=$(pwd)/deps/angle mesa_libs=$(pwd)/deps/mesa"
variables:
PLATFORM: "windows"
.Template-Windows-Mono:
extends: .template-build-mono
rules:
- if: $DO_RELEASE == "true"
image: $CI_REGISTRY/redot-engine/redot-production-containers/redot-windows:latest
before_script:
- !reference [.template-build, before_script]
- export OPTIONS="production=yes use_mingw=yes angle_libs=$(pwd)/deps/angle mesa_libs=$(pwd)/deps/mesa"
variables:
PLATFORM: "windows"
.Template-Release-Template-Windows:
extends: .template-build
rules:
- if: $DO_RELEASE == "true"
image: $CI_REGISTRY/redot-engine/redot-production-containers/redot-windows:latest
before_script:
- !reference [.template-build, before_script]
- export OPTIONS="production=yes use_mingw=yes angle_libs=$(pwd)/deps/angle mesa_libs=$(pwd)/deps/mesa"
script:
- !reference [ .build-release-template, script ]
variables:
PLATFORM: "windows"
artifacts:
public: false
expire_in: 3 days
paths:
- out/templates
.Template-Release-Template-Windows-Mono:
extends: .template-build-mono
rules:
- if: $DO_RELEASE == "true"
image: $CI_REGISTRY/redot-engine/redot-production-containers/redot-windows:latest
before_script:
- !reference [.template-build, before_script]
- export OPTIONS="production=yes use_mingw=yes angle_libs=$(pwd)/deps/angle mesa_libs=$(pwd)/deps/mesa"
script:
- !reference [ .build-release-template-mono, script ]
variables:
PLATFORM: "windows"
artifacts:
public: false
expire_in: 3 days
paths:
- out/templates-mono
.Template-macos:
extends: .template-build
rules:
- if: $DO_RELEASE == "true"
image: $CI_REGISTRY/redot-engine/redot-production-containers/redot-osx:latest
before_script:
- !reference [ .template-build, before_script ]
- export OPTIONS="osxcross_sdk=darwin24.2 production=yes use_volk=no vulkan_sdk_path=$(pwd)/deps/moltenvk angle_libs=$(pwd)/deps/angle"
variables:
PLATFORM: "macos"
.Template-macos-mono:
extends: .template-build-mono
rules:
- if: $DO_RELEASE == "true"
image: $CI_REGISTRY/redot-engine/redot-production-containers/redot-osx:latest
before_script:
- !reference [ .template-build-mono, before_script ]
- export OPTIONS="osxcross_sdk=darwin24.2 production=yes use_volk=no vulkan_sdk_path=$(pwd)/deps/moltenvk angle_libs=$(pwd)/deps/angle"
variables:
PLATFORM: "macos"
.Template-Release-Template-macos:
extends: .template-build
rules:
- if: $DO_RELEASE == "true"
image: $CI_REGISTRY/redot-engine/redot-production-containers/redot-osx:latest
before_script:
- !reference [ .template-build, before_script ]
- export OPTIONS="osxcross_sdk=darwin24.2 production=yes use_volk=no vulkan_sdk_path=$(pwd)/deps/moltenvk angle_libs=$(pwd)/deps/angle"
script:
- !reference [ .build-release-template, script ]
variables:
PLATFORM: "macos"
artifacts:
public: false
expire_in: 3 days
paths:
- out/templates
.Template-Release-Template-macos-mono:
extends: .template-build-mono
rules:
- if: $DO_RELEASE == "true"
image: $CI_REGISTRY/redot-engine/redot-production-containers/redot-osx:latest
before_script:
- !reference [ .template-build-mono, before_script ]
- export OPTIONS="osxcross_sdk=darwin24.2 production=yes use_volk=no vulkan_sdk_path=$(pwd)/deps/moltenvk angle_libs=$(pwd)/deps/angle"
script:
- !reference [ .build-release-template-mono, script ]
variables:
PLATFORM: "macos"
artifacts:
public: false
expire_in: 3 days
paths:
- out/templates-mono
.Template-Ios:
extends: .template-build
rules:
- if: $DO_RELEASE == "true"
image: $CI_REGISTRY/redot-engine/redot-production-containers/redot-ios:latest
variables:
OPTIONS: "production=yes use_lto=no"
PLATFORM: "ios"
before_script:
- !reference [ .template-build, before_script ]
- export IOS_SDK="18.2"
- |
if [ "$TYPE" == "iPhoneSimulator" ]; then
if [ "$ARCH" == "x86_64" ]; then
export TOOLCHAIN_PATH="/root/ioscross/x86_64_sim/"
else
export TOOLCHAIN_PATH="/root/ioscross/arm64_sim/"
fi
export OPTIONS="production=yes use_lto=no IOS_SDK_PATH=${TOOLCHAIN_PATH}SDK/${TYPE}${IOS_SDK}.sdk IOS_TOOLCHAIN_PATH=${TOOLCHAIN_PATH} ios_triple=$ARCH-apple-darwin11- ios_simulator=yes"
else
export TOOLCHAIN_PATH="/root/ioscross/arm64/"
export OPTIONS="production=yes use_lto=no IOS_SDK_PATH=${TOOLCHAIN_PATH}SDK/${TYPE}${IOS_SDK}.sdk IOS_TOOLCHAIN_PATH=${TOOLCHAIN_PATH} ios_triple=arm-apple-darwin11- ios_simulator=no"
fi
- export TERM=xterm
- export IOS_LIPO="/root/ioscross/arm64/bin/arm-apple-darwin11-lipo"
script:
- !reference [ .build-release-template, script ]
artifacts:
public: false
expire_in: 3 days
paths:
- out/templates/
.Template-Ios-Mono:
extends: .template-build-mono
needs: [linux-editor-x64-mono]
rules:
- if: $DO_RELEASE == "true"
image: $CI_REGISTRY/redot-engine/redot-production-containers/redot-ios:latest
variables:
PLATFORM: "ios"
before_script:
- !reference [.template-build, before_script]
- export IOS_SDK="18.2"
- |
if [ "$TYPE" == "iPhoneSimulator" ]; then
if [ "$ARCH" == "x86_64" ]; then
export TOOLCHAIN_PATH="/root/ioscross/x86_64_sim/"
else
export TOOLCHAIN_PATH="/root/ioscross/arm64_sim/"
fi
export OPTIONS="production=yes use_lto=no IOS_SDK_PATH=${TOOLCHAIN_PATH}SDK/${TYPE}${IOS_SDK}.sdk IOS_TOOLCHAIN_PATH=${TOOLCHAIN_PATH} ios_triple=$ARCH-apple-darwin11- ios_simulator=yes"
else
export TOOLCHAIN_PATH="/root/ioscross/arm64/"
export OPTIONS="production=yes use_lto=no IOS_SDK_PATH=${TOOLCHAIN_PATH}SDK/${TYPE}${IOS_SDK}.sdk IOS_TOOLCHAIN_PATH=${TOOLCHAIN_PATH} ios_triple=arm-apple-darwin11- ios_simulator=no"
fi
- export TERM=xterm
- export IOS_LIPO="/root/ioscross/arm64/bin/arm-apple-darwin11-lipo"
script:
- !reference [ .build-release-template-mono, script ]
artifacts:
public: false
expire_in: 3 days
paths:
- out/templates-mono/
.template-build-mono:
extends: .template-build
needs: [ linux-editor-x64-mono ]
script:
- /root/scripts/Fetch_Deps.sh "$PLATFORM"
- mkdir -p out/$PLATFORM/$ARCH/$TYPE-mono
- $SCONS platform=$PLATFORM arch=$ARCH $OPTIONS module_mono_enabled=yes target=$TARGET
- cp -r mono-glue/GodotSharp/GodotSharp/Generated modules/mono/glue/GodotSharp/GodotSharp/
- cp -r mono-glue/GodotSharp/GodotSharpEditor/Generated modules/mono/glue/GodotSharp/GodotSharpEditor/
- ./modules/mono/build_scripts/build_assemblies.py --godot-output-dir=./bin --godot-platform=$PLATFORM
- cp -r bin/* out/$PLATFORM/$ARCH/$TYPE-mono/
artifacts:
public: false
expire_in: 3 days
paths:
- out/$PLATFORM/$ARCH/$TYPE-mono
- mono-glue/
# -- Build the Linux Editors --
linux-editor-x64-mono:
tags: [ docker ]
image: $CI_REGISTRY/redot-engine/redot-production-containers/redot-linux:latest
rules:
- when: always
stage: build
before_script:
- export SCONS="scons -j$(nproc) verbose=no warnings=no progress=no"
- export BUILD_NAME="official"
- |
case "$ARCH" in
x86_32)
export PATH="$GODOT_SDK_LINUX_X86_32/bin:$PATH"
export CC="i686-godot-linux-gnu-gcc"
export CXX="i686-godot-linux-gnu-g++"
;;
x86_64)
export PATH="$GODOT_SDK_LINUX_X86_64/bin:$PATH"
export CC="x86_64-godot-linux-gnu-gcc"
export CXX="x86_64-godot-linux-gnu-g++"
;;
arm64)
export PATH="$GODOT_SDK_LINUX_ARM64/bin:$PATH"
export CC="aarch64-godot-linux-gnu-gcc"
export CXX="aarch64-godot-linux-gnu-g++"
;;
arm32)
export PATH="$GODOT_SDK_LINUX_ARM32/bin:$PATH"
export CC="arm-godot-linux-gnueabihf-gcc"
export CXX="arm-godot-linux-gnueabihf-g++"
;;
esac
script:
- /root/scripts/Fetch_Deps.sh "$PLATFORM"
- mkdir -p out/$PLATFORM/$ARCH/$TYPE-mono
- mkdir -p mono-glue
- $SCONS platform=$PLATFORM arch=$ARCH $OPTIONS module_mono_enabled=yes target=$TARGET
- bin/redot.linuxbsd.editor.x86_64.mono --headless --generate-mono-glue "$(pwd)/mono-glue"
- cp -r mono-glue/GodotSharp/GodotSharp/Generated modules/mono/glue/GodotSharp/GodotSharp/
- cp -r mono-glue/GodotSharp/GodotSharpEditor/Generated modules/mono/glue/GodotSharp/GodotSharpEditor/
- ./modules/mono/build_scripts/build_assemblies.py --godot-output-dir=./bin --godot-platform=$PLATFORM
- cp -r bin/* out/$PLATFORM/$ARCH/$TYPE-mono/
variables:
OPTIONS: "production=yes"
PLATFORM: "linuxbsd"
ARCH: "x86_64"
TYPE: "tools"
TARGET: "editor"
MONO: "-mono"
artifacts:
public: false
expire_in: 3 days
paths:
- out/$PLATFORM/$ARCH/$TYPE-mono
- mono-glue/
linux-editor-x64:
stage: build
extends: .Template-Linux
variables:
ARCH: "x86_64"
TYPE: "tools"
TARGET: "editor"
linux-editor-x86:
stage: build
extends: .Template-Linux
variables:
ARCH: "x86_32"
TYPE: "tools"
TARGET: "editor"
linux-editor-arm32:
stage: build
extends: .Template-Linux
variables:
ARCH: "arm32"
TYPE: "tools"
TARGET: "editor"
linux-editor-arm64:
stage: build
extends: .Template-Linux
variables:
ARCH: "arm64"
TYPE: "tools"
TARGET: "editor"
linux-editor-mono-x86:
stage: build
extends: .Template-Linux-Mono
variables:
ARCH: "x86_32"
TYPE: "tools"
TARGET: "editor"
linux-editor-mono-arm32:
stage: build
extends: .Template-Linux-Mono
variables:
ARCH: "arm32"
TYPE: "tools"
TARGET: "editor"
linux-editor-mono-arm64:
stage: build
extends: .Template-Linux-Mono
variables:
ARCH: "arm64"
TYPE: "tools"
TARGET: "editor"
# -- Build the Windows Editors --
windows-editor-x64:
stage: build
extends: .Template-Windows
variables:
ARCH: "x86_64"
TYPE: "tools"
TARGET: "editor"
windows-editor-x32:
stage: build
extends: .Template-Windows
variables:
ARCH: "x86_32"
TYPE: "tools"
TARGET: "editor"
windows-editor-arm64:
stage: build
extends: .Template-Windows
before_script:
- !reference [ .template-build, before_script ]
- export OPTIONS="production=yes use_mingw=yes angle_libs=$(pwd)/deps/angle mesa_libs=$(pwd)/deps/mesa use_llvm=yes mingw_prefix=/root/llvm-mingw"
variables:
ARCH: "arm64"
TYPE: "tools"
TARGET: "editor"
# -- Windows Editor Mono --
windows-editor-x64-mono:
stage: build
extends: .Template-Windows-Mono
variables:
ARCH: "x86_64"
TYPE: "tools"
TARGET: "editor"
windows-editor-x32-mono:
stage: build
extends: .Template-Windows-Mono
variables:
ARCH: "x86_32"
TYPE: "tools"
TARGET: "editor"
windows-editor-arm64-mono:
stage: build
extends: .Template-Windows-Mono
before_script:
- !reference [ .template-build, before_script ]
- export OPTIONS="production=yes use_mingw=yes angle_libs=$(pwd)/deps/angle mesa_libs=$(pwd)/deps/mesa use_llvm=yes mingw_prefix=/root/llvm-mingw"
variables:
ARCH: "arm64"
TYPE: "tools"
TARGET: "editor"
# -- Build Mac editor --
macos-editor-x64:
stage: build
extends: .Template-macos
variables:
ARCH: "x86_64"
TYPE: "tools"
TARGET: "editor"
macos-editor-arm64:
stage: build
extends: .Template-macos
variables:
ARCH: "arm64"
TYPE: "tools"
TARGET: "editor"
# -- Build Mac Editor Mono --
macos-editor-x64-mono:
stage: build
extends: .Template-macos-mono
variables:
ARCH: "x86_64"
TYPE: "tools"
TARGET: "editor"
macos-editor-arm64-mono:
stage: build
extends: .Template-macos-mono
variables:
ARCH: "arm64"
TYPE: "tools"
TARGET: "editor"
# Release templates below this point.
# -- 64 bit Linux --
build-Linux-Release-Template-x64:
stage: build
extends: .Template-Release-Template-Linux
variables:
ARCH: "x86_64"
TYPE: "template"
TARGET: "template_release"
build-Linux-Debug-Template-x64:
stage: build
extends: .Template-Release-Template-Linux
variables:
ARCH: "x86_64"
TYPE: "template"
TARGET: "template_debug"
build-Linux-Release-Template-x64-Mono:
stage: build
extends: .Template-Release-Template-Linux-Mono
variables:
ARCH: "x86_64"
TYPE: "template"
TARGET: "template_release"
build-Linux-Debug-Template-x64-Mono:
stage: build
extends: .Template-Release-Template-Linux-Mono
variables:
ARCH: "x86_64"
TYPE: "template"
TARGET: "template_debug"
# -- 32 bit Linux --
build-Linux-Release-Template-x86:
stage: build
extends: .Template-Release-Template-Linux
variables:
ARCH: "x86_32"
TYPE: "template"
TARGET: "template_release"
build-Linux-Debug-Template-x86:
stage: build
extends: .Template-Release-Template-Linux
variables:
ARCH: "x86_32"
TYPE: "template"
TARGET: "template_debug"
build-Linux-Release-Template-x86-Mono:
stage: build
extends: .Template-Release-Template-Linux-Mono
variables:
ARCH: "x86_32"
TYPE: "template"
TARGET: "template_release"
build-Linux-Debug-Template-x86-Mono:
stage: build
extends: .Template-Release-Template-Linux-Mono
variables:
ARCH: "x86_32"
TYPE: "template"
TARGET: "template_debug"
# -- ARM64 LINUX
build-Linux-Release-Template-arm64:
stage: build
extends: .Template-Release-Template-Linux
variables:
ARCH: "arm64"
TYPE: "template"
TARGET: "template_release"
build-Linux-Debug-Template-arm64:
stage: build
extends: .Template-Release-Template-Linux
variables:
ARCH: "arm64"
TYPE: "template"
TARGET: "template_debug"
build-Linux-Release-Template-arm64-Mono:
stage: build
extends: .Template-Release-Template-Linux-Mono
variables:
ARCH: "arm64"
TYPE: "template"
TARGET: "template_release"
build-Linux-Debug-Template-arm64-Mono:
stage: build
extends: .Template-Release-Template-Linux-Mono
variables:
ARCH: "arm64"
TYPE: "template"
TARGET: "template_debug"
# ARM 32 LINUX
build-Linux-Release-Template-arm32:
stage: build
extends: .Template-Release-Template-Linux
variables:
ARCH: "arm32"
TYPE: "template"
TARGET: "template_release"
build-Linux-Debug-Template-arm32:
stage: build
extends: .Template-Release-Template-Linux
variables:
ARCH: "arm32"
TYPE: "template"
TARGET: "template_debug"
build-Linux-Release-Template-arm32-Mono:
stage: build
extends: .Template-Release-Template-Linux-Mono
variables:
ARCH: "arm32"
TYPE: "template"
TARGET: "template_release"
build-Linux-Debug-Template-arm32-Mono:
stage: build
extends: .Template-Release-Template-Linux-Mono
variables:
ARCH: "arm32"
TYPE: "template"
TARGET: "template_debug"
# -- WINDOWS TEMPLATES
# -- 64 bit Windows --
build-Windows-Release-Template-x64:
stage: build
extends: .Template-Release-Template-Windows
variables:
ARCH: "x86_64"
TYPE: "template"
TARGET: "template_release"
build-Windows-Debug-Template-x64:
stage: build
extends: .Template-Release-Template-Windows
variables:
ARCH: "x86_64"
TYPE: "template"
TARGET: "template_debug"
build-Windows-Release-Template-x64-Mono:
stage: build
extends: .Template-Release-Template-Windows-Mono
variables:
ARCH: "x86_64"
TYPE: "template"
TARGET: "template_release"
build-Windows-Debug-Template-x64-Mono:
stage: build
extends: .Template-Release-Template-Windows-Mono
variables:
ARCH: "x86_64"
TYPE: "template"
TARGET: "template_debug"
# -- 32 bit WINDOWS --
build-Windows-Release-Template-x86:
stage: build
extends: .Template-Release-Template-Windows
variables:
ARCH: "x86_32"
TYPE: "template"
TARGET: "template_release"
build-Windows-Debug-Template-x86:
stage: build
extends: .Template-Release-Template-Windows
variables:
ARCH: "x86_32"
TYPE: "template"
TARGET: "template_debug"
build-Windows-Release-Template-x86-Mono:
stage: build
extends: .Template-Release-Template-Windows-Mono
variables:
ARCH: "x86_32"
TYPE: "template"
TARGET: "template_release"
build-Windows-Debug-Template-x86-Mono:
stage: build
extends: .Template-Release-Template-Windows-Mono
variables:
ARCH: "x86_32"
TYPE: "template"
TARGET: "template_debug"
# -- ARM64 WINDOWS --
build-Windows-Release-Template-arm64:
stage: build
extends: .Template-Release-Template-Windows
before_script:
- !reference [ .template-build, before_script ]
- export OPTIONS="production=yes use_mingw=yes angle_libs=$(pwd)/deps/angle mesa_libs=$(pwd)/deps/mesa use_llvm=yes mingw_prefix=/root/llvm-mingw"
variables:
ARCH: "arm64"
TYPE: "template"
TARGET: "template_release"
build-Windows-Debug-Template-arm64:
stage: build
extends: .Template-Release-Template-Windows
before_script:
- !reference [ .template-build, before_script ]
- export OPTIONS="production=yes use_mingw=yes angle_libs=$(pwd)/deps/angle mesa_libs=$(pwd)/deps/mesa use_llvm=yes mingw_prefix=/root/llvm-mingw"
variables:
ARCH: "arm64"
TYPE: "template"
TARGET: "template_debug"
build-Windows-Release-Template-arm64-Mono:
stage: build
before_script:
- !reference [ .template-build, before_script ]
- export OPTIONS="production=yes use_mingw=yes angle_libs=$(pwd)/deps/angle mesa_libs=$(pwd)/deps/mesa use_llvm=yes mingw_prefix=/root/llvm-mingw"
extends: .Template-Release-Template-Windows-Mono
variables:
ARCH: "arm64"
TYPE: "template"
TARGET: "template_release"
build-Windows-Debug-Template-arm64-Mono:
stage: build
extends: .Template-Release-Template-Windows-Mono
before_script:
- !reference [ .template-build, before_script ]
- export OPTIONS="production=yes use_mingw=yes angle_libs=$(pwd)/deps/angle mesa_libs=$(pwd)/deps/mesa use_llvm=yes mingw_prefix=/root/llvm-mingw"
variables:
ARCH: "arm64"
TYPE: "template"
TARGET: "template_debug"
# --Release templates for Macos --
# -- 64 bit Macos --
build-Macos-Release-Template-x64:
stage: build
extends: .Template-Release-Template-macos
variables:
ARCH: "x86_64"
TYPE: "template"
TARGET: "template_release"
build-Macos-Debug-Template-x64:
stage: build
extends: .Template-Release-Template-macos
variables:
ARCH: "x86_64"
TYPE: "template"
TARGET: "template_debug"
build-Macos-Release-Template-x64-Mono:
stage: build
extends: .Template-Release-Template-macos-mono
variables:
ARCH: "x86_64"
TYPE: "template"
TARGET: "template_release"
build-Macos-Debug-Template-x64-Mono:
stage: build
extends: .Template-Release-Template-macos-mono
variables:
ARCH: "x86_64"
TYPE: "template"
TARGET: "template_debug"
# -- ARM64 Macos
build-Macos-Release-Template-arm64:
stage: build
extends: .Template-Release-Template-macos
variables:
ARCH: "arm64"
TYPE: "template"
TARGET: "template_release"
build-Macos-Debug-Template-arm64:
stage: build
extends: .Template-Release-Template-macos
variables:
ARCH: "arm64"
TYPE: "template"
TARGET: "template_debug"
build-Macos-Release-Template-arm64-Mono:
stage: build
extends: .Template-Release-Template-macos-mono
variables:
ARCH: "arm64"
TYPE: "template"
TARGET: "template_release"
build-Macos-Debug-Template-arm64-Mono:
stage: build
extends: .Template-Release-Template-macos-mono
variables:
ARCH: "arm64"
TYPE: "template"
TARGET: "template_debug"
Merge-Mac-Editor:
stage: build
needs: [macos-editor-x64, macos-editor-arm64, macos-editor-arm64-mono, macos-editor-x64-mono]
tags: [docker]
image: $CI_REGISTRY/redot-engine/redot-production-containers/redot-osx:latest
rules:
- if: $DO_RELEASE == "true"
script:
- LOCTOOLS="out/macos/universal/tools"
- LOCMONO="out/macos/universal/tools-mono"
- mkdir -p $LOCTOOLS
- mkdir -p "out/macos/universal/tools-mono"
- lipo -create "out/macos/x86_64/tools/redot.macos.editor.x86_64" "out/macos/arm64/tools/redot.macos.editor.arm64" -output "$LOCTOOLS/redot.macos.editor.universal"
- lipo -create "out/macos/x86_64/tools-mono/redot.macos.editor.x86_64.mono" "out/macos/arm64/tools-mono/redot.macos.editor.arm64.mono" -output "$LOCMONO/redot.macos.editor.universal.mono"
- cp -r out/macos/arm64/tools-mono/GodotSharp "$LOCMONO/"
artifacts:
public: false
paths:
- out/macos/*
Merge-Mac-Templates:
stage: build
needs: [build-Macos-Debug-Template-arm64, build-Macos-Debug-Template-arm64-Mono, build-Macos-Debug-Template-x64, build-Macos-Debug-Template-x64-Mono, build-Macos-Release-Template-arm64, build-Macos-Release-Template-arm64-Mono, build-Macos-Release-Template-x64, build-Macos-Release-Template-x64-Mono]
tags: [docker]
rules:
- if: $DO_RELEASE == "true"
image: $CI_REGISTRY/redot-engine/redot-production-containers/redot-osx:latest
script:
- lipo -create out/templates/redot.macos.template_debug.x86_64 out/templates/redot.macos.template_debug.arm64 -output out/templates/redot.macos.template_debug.universal
- lipo -create out/templates/redot.macos.template_release.x86_64 out/templates/redot.macos.template_release.arm64 -output out/templates/redot.macos.template_release.universal
- lipo -create out/templates-mono/redot.macos.template_debug.x86_64.mono out/templates-mono/redot.macos.template_debug.arm64.mono -output out/templates-mono/redot.macos.template_debug.universal.mono
- lipo -create out/templates-mono/redot.macos.template_release.x86_64.mono out/templates-mono/redot.macos.template_release.arm64.mono -output out/templates-mono/redot.macos.template_release.universal.mono
artifacts:
public: false
paths:
- out/templates/*
- out/templates-mono/*
# -- Build Web Template
Web-Release-Template:
stage: build
tags: [docker]
rules:
- if: $DO_RELEASE == "true"
image: $CI_REGISTRY/redot-engine/redot-production-containers/redot-web:latest
script:
- export BUILD_NAME="official"
- /root/scripts/buildWeb.sh
artifacts:
public: false
expire_in: 3 days
paths:
- out/templates/
# --Build Android Targets --
Android-Release-Template:
extends: .template-build
stage: build
image: $CI_REGISTRY/redot-engine/redot-production-containers/redot-android:latest
before_script:
- !reference [ .template-build, before_script ]
- export OPTIONS="production=yes use_mingw=yes angle_libs=$(pwd)/deps/angle mesa_libs=$(pwd)/deps/mesa"
variables:
PLATFORM: "android"
script:
- /root/scripts/Fetch_Deps.sh "$PLATFORM"
- 7za x -y deps/swappy/godot-swappy.7z -othirdparty/swappy-frame-pacing/
- mkdir -p out/templates
- $SCONS platform=android arch=arm32 $OPTIONS target=template_debug
- $SCONS platform=android arch=arm32 $OPTIONS target=template_release
- $SCONS platform=android arch=arm64 $OPTIONS target=template_debug
- $SCONS platform=android arch=arm64 $OPTIONS target=template_release
- $SCONS platform=android arch=x86_32 $OPTIONS target=template_debug
- $SCONS platform=android arch=x86_32 $OPTIONS target=template_release
- $SCONS platform=android arch=x86_64 $OPTIONS target=template_debug
- $SCONS platform=android arch=x86_64 $OPTIONS target=template_release
- pushd platform/android/java
- ./gradlew generateGodotTemplates
- popd
- ls bin/
- cp bin/*.zip out/templates/
- cp bin/*.apk out/templates/
- cp bin/*.aar out/templates/
artifacts:
public: false
expire_in: 3 days
paths:
- out/templates
Android-Release-Template-Mono:
extends: .template-build
stage: build
needs: [ linux-editor-x64-mono ]
tags: [ docker ]
image: $CI_REGISTRY/redot-engine/redot-production-containers/redot-android:latest
before_script:
- !reference [ .template-build, before_script ]
- export OPTIONS="production=yes use_mingw=yes angle_libs=$(pwd)/deps/angle mesa_libs=$(pwd)/deps/mesa"
variables:
PLATFORM: "android"
script:
- /root/scripts/Fetch_Deps.sh "$PLATFORM"
- 7za x -y deps/swappy/godot-swappy.7z -othirdparty/swappy-frame-pacing/
- mkdir -p out/templates-mono
- cp -r mono-glue/GodotSharp/GodotSharp/Generated modules/mono/glue/GodotSharp/GodotSharp/
- cp -r mono-glue/GodotSharp/GodotSharpEditor/Generated modules/mono/glue/GodotSharp/GodotSharpEditor/
- $SCONS platform=android arch=arm32 $OPTIONS module_mono_enabled=yes target=template_debug
- $SCONS platform=android arch=arm32 $OPTIONS module_mono_enabled=yes target=template_release
- $SCONS platform=android arch=arm64 $OPTIONS module_mono_enabled=yes target=template_debug
- $SCONS platform=android arch=arm64 $OPTIONS module_mono_enabled=yes target=template_release
- $SCONS platform=android arch=x86_32 $OPTIONS module_mono_enabled=yes target=template_debug
- $SCONS platform=android arch=x86_32 $OPTIONS module_mono_enabled=yes target=template_release
- $SCONS platform=android arch=x86_64 $OPTIONS module_mono_enabled=yes target=template_debug
- $SCONS platform=android arch=x86_64 $OPTIONS module_mono_enabled=yes target=template_release
- pushd platform/android/java
- ./gradlew generateGodotMonoTemplates
- popd
- ls bin/
- cp bin/*.zip out/templates-mono/
- cp bin/*.apk out/templates-mono/
- cp bin/*.aar out/templates-mono/
artifacts:
public: false
expire_in: 3 days
paths:
- out/templates-mono
# -- Build IOS targets --
# -- 64 bit Macos --
build-ios-Release-Template-x64:
stage: build
extends: .Template-Ios
variables:
ARCH: "x86_64"
TYPE: "iPhoneSimulator"
TARGET: "template_release"
build-ios-Debug-Template-x64:
stage: build
extends: .Template-Ios
variables:
ARCH: "x86_64"
TYPE: "iPhoneSimulator"
TARGET: "template_debug"
build-ios-Release-Template-x64-Mono:
stage: build
extends: .Template-Ios-Mono
variables:
ARCH: "x86_64"
TYPE: "iPhoneSimulator"
TARGET: "template_release"
build-ios-Debug-Template-x64-Mono:
stage: build
extends: .Template-Ios-Mono
variables:
ARCH: "x86_64"
TYPE: "iPhoneSimulator"
TARGET: "template_debug"
# -- ARM64 Macos
build-ios-Release-Template-arm64:
stage: build
extends: .Template-Ios
variables:
ARCH: "arm64"
TYPE: "iPhoneOS"
TARGET: "template_release"
build-ios-Debug-Template-arm64:
stage: build
extends: .Template-Ios
variables:
ARCH: "arm64"
TYPE: "iPhoneOS"
TARGET: "template_debug"
build-ios-Release-Template-arm64-Mono:
stage: build
extends: .Template-Ios-Mono
variables:
ARCH: "arm64"
TYPE: "iPhoneOS"
TARGET: "template_release"
build-ios-Debug-Template-arm64-Mono:
stage: build
extends: .Template-Ios-Mono
variables:
ARCH: "arm64"
TYPE: "iPhoneOS"
TARGET: "template_debug"
sign-mac-editor:
stage: build
needs: [Merge-Mac-Editor]
rules:
- if: $DO_RELEASE == "true"
- if: $SIGN_MAC == "true"
tags: [macos]
script:
- set -e
- echo "Signing macOS build on local runner..."
- |
sign_macos() {
_reldir="$1"
_binname="$2"
_is_mono="$3"
if [[ "${_is_mono}" == "1" ]]; then
_appname="Redot_mono.app"
else
_appname="Redot.app"
fi
echo "Preparing temp dir..."
rm -rf tmp/
mkdir tmp/
echo "made temp directory"
_macos_tmpdir="$(pwd)/tmp"
_app_path="${_macos_tmpdir}/${_appname}"
echo $_macos_tmpdir
echo $__app_path
cp -r "misc/dist/macos/editor.entitlements" "${_macos_tmpdir}/"
rm -rf "${_macos_tmpdir}/${_appname}"
cp -r "misc/dist/macos_tools.app" "${_macos_tmpdir}/${_appname}"
if [[ "${_is_mono}" == "1" ]]; then
cp -r "${_reldir}/GodotSharp/ " "${_macos_tmpdir}/${_appname}/Contents/Resources/GodotSharp"
fi
ls "${_reldir}/"
ls "${_macos_tmpdir}/${_appname}/"
mkdir -p "${_macos_tmpdir}/${_appname}/Contents/MacOS/"
cp "${_reldir}/${_binname}" "${_macos_tmpdir}/${_appname}/Contents/MacOS/Redot"
cd "${_macos_tmpdir}"
chmod +x ${_macos_tmpdir}/${_appname}/Contents/MacOS/Redot
echo "Unlocking keychain..."
security list-keychains -s temp.keychain
security unlock-keychain -p "${APPLE_DEVICE_PASSWORD}" temp.keychain
security set-key-partition-list -S apple-tool:,apple: -s -k "${APPLE_DEVICE_PASSWORD}" temp.keychain
echo "Codesigning ${_app_path}..."
codesign --force --timestamp --verbose=4 \
--options=runtime --entitlements editor.entitlements \
-s "${OSX_KEY_ID}" -v --deep "${_app_path}"
# zip the app for notarization
echo "Zipping ${_app_path} for notarization..."
cd "${_macos_tmpdir}"
zip -r "${_binname}_signed.zip" "${_appname}"
echo "Submitting ${_app_path} for notarization..."
_request_uuid=$(xcrun notarytool submit "${_macos_tmpdir}/${_binname}_signed.zip" \
--team-id "${APPLE_TEAM}" --apple-id "${APPLE_ID}" --password "${APPLE_ID_PASSWORD}" \
--no-progress --output-format json | sed -e 's/.*"id":"\([^"]*\)".*/\1/')
echo "Waiting for notarization result..."
_result_json=$(xcrun notarytool wait "${_request_uuid}" \
--team-id "${APPLE_TEAM}" --apple-id "${APPLE_ID}" --password "${APPLE_ID_PASSWORD}" \
--output-format json)
_status=$(echo "$_result_json" | grep -o '"status"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d'"' -f4)
if [[ "$_status" != "Accepted" ]]; then
echo "Notarization failed for ${_appname}. Status: ${_status}"
echo "$_result_json"
exit 1
fi
echo "Stapling notarization..."
xcrun stapler staple "${_app_path}"
mkdir "${_reldir}/signed"
ls
zip -r ${_binname}_stapled.zip "${_appname}"
cp "${_macos_tmpdir}/${_binname}_stapled.zip" "${_reldir}/signed/"
echo "Cleaning up..."
rm -rf "${_macos_tmpdir}"
echo "✅ ${_app_path} signed and notarized."
}
- sign_macos "$(pwd)/out/macos/universal/tools" "redot.macos.editor.universal" 0
artifacts:
public: false
paths:
- out/macos/universal/tools/signed/*
expire_in: 3 days
sign-mac-editor-mono:
stage: build
needs: [Merge-Mac-Editor]
rules:
- if: $DO_RELEASE == "true"
- if: $SIGN_MAC == "true"
tags: [macos]
script:
- set -e
- echo "Signing macOS build on local runner..."
- |
sign_macos() {
_reldir="$1"
_binname="$2"
_is_mono="$3"
if [[ "${_is_mono}" == "1" ]]; then
_appname="Redot_mono.app"
else
_appname="Redot.app"
fi
echo "Preparing temp dir..."
rm -rf tmp/
mkdir tmp/
echo "made temp directory"
_macos_tmpdir="$(pwd)/tmp"
_app_path="${_macos_tmpdir}/${_appname}"
echo "${_macos_tmpdir}"
echo "${_app_path}"
echo "${_reldir}"
ls -l "${_reldir}"
cp -r "misc/dist/macos/editor.entitlements" "${_macos_tmpdir}/"
rm -rf "${_macos_tmpdir}/${_appname}"
cp -r "misc/dist/macos_tools.app" "${_macos_tmpdir}/${_appname}"
if [[ "${_is_mono}" == "1" ]]; then
mkdir -p "${_macos_tmpdir}/${_appname}/Contents/Resources/GodotSharp/"
printf 'reldir=[%s]\n' "$_reldir" | od -c
cp -r "${_reldir}/GodotSharp/." "${_macos_tmpdir}/${_appname}/Contents/Resources/GodotSharp/"
fi
ls "${_reldir}/"
ls "${_macos_tmpdir}/${_appname}/"
mkdir -p "${_macos_tmpdir}/${_appname}/Contents/MacOS/"
cp "${_reldir}/${_binname}" "${_macos_tmpdir}/${_appname}/Contents/MacOS/Redot"
cd "${_macos_tmpdir}"
chmod +x ${_macos_tmpdir}/${_appname}/Contents/MacOS/Redot
echo "Unlocking keychain..."
security list-keychains -s temp.keychain
security unlock-keychain -p "${APPLE_DEVICE_PASSWORD}" temp.keychain
security set-key-partition-list -S apple-tool:,apple: -s -k "${APPLE_DEVICE_PASSWORD}" temp.keychain
echo "Codesigning ${_app_path}..."
codesign --force --timestamp --verbose=4 \
--options=runtime --entitlements editor.entitlements \
-s "${OSX_KEY_ID}" -v --deep "${_app_path}"
# zip the app for notarization
echo "Zipping ${_app_path} for notarization..."
cd "${_macos_tmpdir}"
zip -r "${_binname}_signed.zip" "${_appname}"
echo "Submitting ${_app_path} for notarization..."
_request_uuid=$(xcrun notarytool submit "${_macos_tmpdir}/${_binname}_signed.zip" \
--team-id "${APPLE_TEAM}" --apple-id "${APPLE_ID}" --password "${APPLE_ID_PASSWORD}" \
--no-progress --output-format json | sed -e 's/.*"id":"\([^"]*\)".*/\1/')
echo "Waiting for notarization result..."
_result_json=$(xcrun notarytool wait "${_request_uuid}" \
--team-id "${APPLE_TEAM}" --apple-id "${APPLE_ID}" --password "${APPLE_ID_PASSWORD}" \
--output-format json)
_status=$(echo "$_result_json" | grep -o '"status"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d'"' -f4)
if [[ "$_status" != "Accepted" ]]; then
echo "Notarization failed for ${_appname}. Status: ${_status}"
echo "$_result_json"
exit 1
fi
echo "Stapling notarization..."
xcrun stapler staple "${_app_path}"
mkdir "${_reldir}/signed"
ls
zip -r ${_binname}_stapled.zip "${_appname}"
cp "${_macos_tmpdir}/${_binname}_stapled.zip" "${_reldir}/signed/"
echo "Cleaning up..."
rm -rf "${_macos_tmpdir}"
echo "✅ ${_app_path} signed and notarized."
}
- sign_macos "$(pwd)/out/macos/universal/tools-mono" "redot.macos.editor.universal.mono" 1
artifacts:
public: false
paths:
- out/macos/universal/tools-mono/signed/*
expire_in: 3 days
sign-mac-templates:
stage: build
needs: [Merge-Mac-Templates]
rules:
- if: $DO_RELEASE == "true"
- if: $SIGN_MAC == "true"
tags: [ macos ]
script:
- set -e
- echo "Signing macOS build on local runner..."
- |
sign_macos() {
rm -rf tmp/
cp -r misc/dist/macos_template.app tmp/
mkdir -p tmp/macos_template.app/Contents/MacOS
_is_mono="$1"
_mono_prefix=""
_mono_suffix=""
if [ "$_is_mono" -eq 1 ]; then _mono_prefix="-mono"; _mono_suffix=".mono";fi
cp out/templates${_mono_prefix}/redot.macos.template_release.universal${_mono_suffix} tmp/macos_template.app/Contents/MacOS/redot_macos_release.universal${_mono_suffix}
cp out/templates${_mono_prefix}/redot.macos.template_debug.universal${_mono_suffix} tmp/macos_template.app/Contents/MacOS/redot_macos_debug.universal${_mono_suffix}
chmod +x tmp/macos_template.app/Contents/MacOS/redot_macos*
pushd tmp/
codesign --force -s - \
--options=linker-signed \
-v macos_template.app/Contents/MacOS/*
zip -r ../out/templates${_mono_prefix}/macos_signed.zip macos_template.app
popd
rm -rf tmp/
}
- sign_macos 0
- sign_macos 1
artifacts:
public: false
paths:
- out/templates/*
- out/templates-mono/*
expire_in: 3 days
package-builds:
stage: package
rules:
- if: $DO_RELEASE == "true"
tags:
- docker
image: $CI_REGISTRY/redot-engine/redot-production-containers/redot-linux:latest
script:
- mkdir releases/
- export RELEASE_DIR="$(pwd)/releases"
- pushd out/linuxbsd/x86_64/tools/
- zip -r "${RELEASE_DIR}/Redot_v${VERSIONSTRING}_linux_x64.zip" ./*
- popd
- pushd out/linuxbsd/arm64/tools/
- zip -r "${RELEASE_DIR}/Redot_v${VERSIONSTRING}_linux_arm64.zip" ./*
- popd
- pushd out/linuxbsd/x86_32/tools/
- zip -r "${RELEASE_DIR}/Redot_v${VERSIONSTRING}_linux_x86.zip" ./*
- popd
- pushd out/linuxbsd/arm32/tools/
- zip -r "${RELEASE_DIR}/Redot_v${VERSIONSTRING}_linux_arm32.zip" ./*
- popd
- pushd out/linuxbsd/x86_64/tools-mono/
- zip -r "${RELEASE_DIR}/Redot_v${VERSIONSTRING}_linux_mono_x64.zip" ./*
- popd
- pushd out/linuxbsd/arm64/tools-mono/
- zip -r "${RELEASE_DIR}/Redot_v${VERSIONSTRING}_linux_mono_arm64.zip" ./*
- popd
- pushd out/linuxbsd/x86_32/tools-mono/
- zip -r "${RELEASE_DIR}/Redot_v${VERSIONSTRING}_linux_mono_x86.zip" ./*
- popd
- pushd out/linuxbsd/arm32/tools-mono/
- zip -r "${RELEASE_DIR}/Redot_v${VERSIONSTRING}_linux_mono_arm32.zip" ./*
- popd
- pushd out/windows/x86_64/tools/
- zip -r "${RELEASE_DIR}/Redot_v${VERSIONSTRING}_windows_win64.zip" ./*
- popd
- pushd out/windows/arm64/tools/
- zip -r "${RELEASE_DIR}/Redot_v${VERSIONSTRING}_windows_arm64.zip" ./*
- popd
- pushd out/windows/x86_32/tools/
- zip -r "${RELEASE_DIR}/Redot_v${VERSIONSTRING}_windows_win32.zip" ./*
- popd
- pushd out/windows/x86_64/tools-mono/
- zip -r "${RELEASE_DIR}/Redot_v${VERSIONSTRING}_windows_mono_win64.zip" ./*
- popd
- pushd out/windows/arm64/tools-mono/
- zip -r "${RELEASE_DIR}/Redot_v${VERSIONSTRING}_windows_mono_arm64.zip" ./*
- popd
- pushd out/windows/x86_32/tools-mono/
- zip -r "${RELEASE_DIR}/Redot_v${VERSIONSTRING}_windows_mono_win32.zip" ./*
- popd
- mv out/macos/universal/tools/signed/redot.macos.editor.universal_stapled.zip releases/Redot_v${VERSIONSTRING}_macos_universal.zip
- mv out/macos/universal/tools-mono/signed/redot.macos.editor.universal.mono_stapled.zip releases/Redot_v${VERSIONSTRING}_macos_mono_universal.zip
- pushd out/templates-mono/
- zip -r ${RELEASE_DIR}/Redot_v${VERSIONSTRING}_mono_export_templates.zip ./*
- popd
- pushd out/templates/
- zip -r ${RELEASE_DIR}/Redot_v${VERSIONSTRING}_export_templates.zip ./*
- popd
- mv releases/Redot_v${VERSIONSTRING}_mono_export_templates.zip releases/Redot_v${VERSIONSTRING}_mono_export_templates.tpz
- mv releases/Redot_v${VERSIONSTRING}_export_templates.zip releases/Redot_v${VERSIONSTRING}_export_templates.tpz
artifacts:
expire_in: 3 days
paths:
- releases/*
pushNuget:
stage: package
image: $CI_REGISTRY/redot-engine/redot-production-containers/redot-linux:latest
tags: [docker]
rules:
- if: $DO_RELEASE == "true"
script:
- cd out/linuxbsd/x86_64/tools-mono/GodotSharp/Tools/nupkgs
- dotnet nuget push "./*.nupkg" --api-key $NUGET_API_KEY --source https://api.nuget.org/v3/index.json --skip-duplicate