11 Commits

Author SHA1 Message Date
Rémi Verschelde
1445dc1fea WIP: Add support for releasing debugsymbols 2024-12-13 16:05:26 +01:00
Rémi Verschelde
1e4dc88253 Add script to publish releases everywhere
- GitHub godot-builds
- Web editor
- NuGet
- MavenCentral

Still missing instructions for uploading stable releases to stores, etc.
2024-11-21 10:57:27 +01:00
Rémi Verschelde
8c176b460b Android: Download and copy swappy libraries 2024-11-08 14:39:11 +01:00
Rémi Verschelde
e0891e9fde Adapt build scripts to run with passwordless sudo podman 2024-11-07 22:36:40 +01:00
Rémi Verschelde
251cea182e Merge pull request #94 from raulsntos/dotnet/android-monovm
.NET: Build Android templates with 'mono' edition
2024-11-07 20:50:02 +01:00
Rémi Verschelde
9259edf571 Merge pull request #99 from adamscott/add-gitignore-dsstore
Add `.DS_Store` to .gitignore
2024-09-16 15:44:41 +02:00
Rémi Verschelde
cc7ca0f706 Merge pull request #101 from m4gr3d/main
Update the Android editor build scripts
2024-09-16 15:44:26 +02:00
Fredia Huya-Kouadio
5f48331f5d Update the Android editor build scripts to match the updated build flavors in https://github.com/godotengine/godot/pull/96967 2024-09-14 12:15:22 -07:00
Fredia Huya-Kouadio
fa404f8c17 Add support for Android editor builds for Meta devices (#100) 2024-09-08 23:07:07 +02:00
Adam Scott
d808ce84ce Add .DS_Store to .gitignore 2024-08-21 12:04:20 -04:00
Raul Santos
232be2e47f .NET: Build Android templates with 'mono' edition
Build the Android templates for .NET using the 'mono' edition that contains additional dependencies required by .NET projects to support Android OS APIs (like crypto).
2024-04-29 03:56:22 +02:00
9 changed files with 149 additions and 76 deletions

3
.gitignore vendored
View File

@@ -18,3 +18,6 @@ releases/
sha512sums/
tmp/
web/
# macOS
.DS_Store

View File

@@ -13,6 +13,7 @@ rm -rf godot
mkdir godot
cd godot
tar xf /root/godot.tar.gz --strip-components=1
cp -rf /root/swappy/* thirdparty/swappy-frame-pacing/
# Environment variables and keystore needed for signing store editor build,
# as well as signing and publishing to MavenCentral.
@@ -35,23 +36,31 @@ if [ "${CLASSICAL}" == "1" ]; then
$SCONS platform=android arch=x86_64 $OPTIONS target=editor store_release=${store_release}
pushd platform/android/java
# Generate the regular Android editor.
./gradlew generateGodotEditor
# Generate the Android editor for HorizonOS devices.
./gradlew generateGodotHorizonOSEditor
popd
mkdir -p /root/out/tools
# Copy the generated Android editor binaries (apk & aab).
if [ "$store_release" == "yes" ]; then
cp bin/android_editor_builds/android_editor-release.apk /root/out/tools/android_editor.apk
cp bin/android_editor_builds/android_editor-release.aab /root/out/tools/android_editor.aab
cp bin/android_editor_builds/android_editor-android-release.apk /root/out/tools/android_editor.apk
cp bin/android_editor_builds/android_editor-android-release.aab /root/out/tools/android_editor.aab
# For the HorizonOS build, we only copy the apk.
cp bin/android_editor_builds/android_editor-horizonos-release.apk /root/out/tools/android_editor_horizonos.apk
else
cp bin/android_editor_builds/android_editor-debug.apk /root/out/tools/android_editor.apk
cp bin/android_editor_builds/android_editor-debug.aab /root/out/tools/android_editor.aab
cp bin/android_editor_builds/android_editor-android-debug.apk /root/out/tools/android_editor.apk
cp bin/android_editor_builds/android_editor-android-debug.aab /root/out/tools/android_editor.aab
# For the HorizonOS build, we only copy the apk.
cp bin/android_editor_builds/android_editor-horizonos-debug.apk /root/out/tools/android_editor_horizonos.apk
fi
# Restart from a clean tarball, as we'll copy all the contents
# outside the container for the MavenCentral upload.
rm -rf /root/godot/*
tar xf /root/godot.tar.gz --strip-components=1
cp -rf /root/swappy/* thirdparty/swappy-frame-pacing/
$SCONS platform=android arch=arm32 $OPTIONS target=template_debug
$SCONS platform=android arch=arm32 $OPTIONS target=template_release
@@ -104,13 +113,13 @@ if [ "${MONO}" == "1" ]; then
$SCONS platform=android arch=x86_64 $OPTIONS $OPTIONS_MONO target=template_release
pushd platform/android/java
./gradlew generateGodotTemplates
./gradlew generateGodotMonoTemplates
popd
mkdir -p /root/out/templates-mono
cp bin/android_source.zip /root/out/templates-mono/
cp bin/android_debug.apk /root/out/templates-mono/
cp bin/android_release.apk /root/out/templates-mono/
cp bin/android_monoDebug.apk /root/out/templates-mono/android_debug.apk
cp bin/android_monoRelease.apk /root/out/templates-mono/android_release.apk
cp bin/godot-lib.template_release.aar /root/out/templates-mono/
fi

View File

@@ -5,7 +5,7 @@ set -e
# Config
export SCONS="scons -j${NUM_CORES} verbose=yes warnings=no progress=no"
export OPTIONS="production=yes"
export OPTIONS="production=yes debug_symbols=yes separate_debug_symbols=yes debug_paths_relative=yes"
export OPTIONS_MONO="module_mono_enabled=yes"
export TERM=xterm
@@ -14,6 +14,8 @@ mkdir godot
cd godot
tar xf /root/godot.tar.gz --strip-components=1
dnf install -y binutils
# Classical
if [ "${CLASSICAL}" == "1" ]; then

View File

@@ -5,7 +5,7 @@ set -e
# Config
export SCONS="scons -j${NUM_CORES} verbose=yes warnings=no progress=no"
export OPTIONS="osxcross_sdk=darwin23.6 production=yes use_volk=no vulkan_sdk_path=/root/moltenvk angle_libs=/root/angle"
export OPTIONS="osxcross_sdk=darwin23.6 production=yes debug_symbols=yes separate_debug_symbols=yes debug_paths_relative=yes use_volk=no vulkan_sdk_path=/root/moltenvk angle_libs=/root/angle"
export OPTIONS_MONO="module_mono_enabled=yes"
export TERM=xterm

View File

@@ -88,47 +88,14 @@ sign_macos_template() {
ssh "${OSX_HOST}" "rm -rf ${_macos_tmpdir}"
}
can_publish_nuget=0
if [ ! -z "${NUGET_SOURCE}" ] && [ ! -z "${NUGET_API_KEY}" ] && [[ $(type -P "dotnet") ]]; then
can_publish_nuget=1
else
echo "Disabling NuGet package publishing as config.sh does not define the required data (NUGET_SOURCE, NUGET_API_KEY), or dotnet can't be found in PATH."
fi
publish_nuget_packages() {
if [ $can_publish_nuget == 0 ]; then
return
fi
for pkg in "$@"; do
dotnet nuget push $pkg --source "${NUGET_SOURCE}" --api-key "${NUGET_API_KEY}" --skip-duplicate
done
}
can_publish_maven=0
if [ ! -d "${basedir}/deps/keystore" ]; then
echo "Disabling Android library publishing as ${basedir}/deps/keystore doesn't exist."
else
can_publish_maven=1
fi
publish_maven_library() {
if [ $can_publish_maven == 0 ]; then
return
fi
# FIXME: Might be worth reworking the script to make it all sudo-safe and use appropriate users throughout.
sudo sh build-android/upload-mavencentral.sh
}
godot_version=""
templates_version=""
do_cleanup=1
make_tarball=1
build_classical=1
build_mono=1
publish_nuget=0
publish_maven=0
while getopts "h?v:t:b:p:n-:" opt; do
while getopts "h?v:t:b:n-:" opt; do
case "$opt" in
h|\?)
echo "Usage: $0 [OPTIONS...]"
@@ -136,7 +103,6 @@ while getopts "h?v:t:b:p:n-:" opt; do
echo " -v godot version (e.g: 3.2-stable) [mandatory]"
echo " -t templates version (e.g. 3.2.stable) [mandatory]"
echo " -b build target: all|classical|mono|none (default: all)"
echo " -p publish target: all|nuget|maven|none (default: none)"
echo " --no-cleanup disable deleting pre-existing output folders (default: false)"
echo " --no-tarball disable generating source tarball (default: false)"
echo
@@ -158,16 +124,6 @@ while getopts "h?v:t:b:p:n-:" opt; do
build_mono=0
fi
;;
p)
if [ "$OPTARG" == "nuget" ]; then
publish_nuget=1
elif [ "$OPTARG" == "maven" ]; then
publish_maven=1
elif [ "$OPTARG" == "all" ]; then
publish_nuget=1
publish_maven=1
fi
;;
-)
case "${OPTARG}" in
no-cleanup)
@@ -366,6 +322,8 @@ if [ "${build_classical}" == "1" ]; then
# Editor
binname="${godot_basename}_android_editor.apk"
cp out/android/tools/android_editor.apk ${reldir}/${binname}
binname="${godot_basename}_android_editor_horizonos.apk"
cp out/android/tools/android_editor_horizonos.apk ${reldir}/${binname}
binname="${godot_basename}_android_editor.aab"
cp out/android/tools/android_editor.aab ${reldir}/${binname}
@@ -578,22 +536,4 @@ if [ "${build_mono}" == "1" ]; then
fi
# NuGet packages
if [ "${publish_nuget}" == "1" ]; then
echo "Publishing NuGet packages..."
publish_nuget_packages out/linux/x86_64/tools-mono/GodotSharp/Tools/nupkgs/*.nupkg
fi
# Godot Android library
if [ "${publish_maven}" == "1" ]; then
echo "Publishing Android library to MavenCentral..."
publish_maven_library
fi
echo "All editor binaries and templates prepared successfully for release"

View File

@@ -5,7 +5,7 @@ set -e
# Config
export SCONS="scons -j${NUM_CORES} verbose=yes warnings=no progress=no"
export OPTIONS="production=yes use_mingw=yes angle_libs=/root/angle mesa_libs=/root/mesa d3d12=yes"
export OPTIONS="production=yes debug_symbols=yes separate_debug_symbols=yes debug_paths_relative=yes use_mingw=yes angle_libs=/root/angle mesa_libs=/root/mesa d3d12=yes"
export OPTIONS_MONO="module_mono_enabled=yes"
export OPTIONS_LLVM="use_llvm=yes mingw_prefix=/root/llvm-mingw"
export TERM=xterm

View File

@@ -180,6 +180,15 @@ if [ ! -d "deps/mesa" ]; then
popd
fi
if [ ! -d "deps/swappy" ]; then
echo "Missing Swappy libraries, downloading them."
mkdir -p deps/swappy
pushd deps/swappy
curl -L -O https://github.com/darksylinc/godot-swappy/releases/download/v2023.3.0.0/godot-swappy.7z
7z x godot-swappy.7z && rm godot-swappy.7z
popd
fi
# Keystore for Android editor signing
# Optional - the config.sh will be copied but if it's not filled in,
# it will do an unsigned build.
@@ -224,7 +233,7 @@ mkdir -p ${basedir}/out
mkdir -p ${basedir}/out/logs
mkdir -p ${basedir}/mono-glue
export podman_run="${podman} run -it --rm --env BUILD_NAME --env GODOT_VERSION_STATUS --env NUM_CORES --env CLASSICAL=${build_classical} --env MONO=${build_mono} -v ${basedir}/godot-${godot_version}.tar.gz:/root/godot.tar.gz -v ${basedir}/mono-glue:/root/mono-glue -w /root/"
export podman_run="${podman} run -it --rm --env BUILD_NAME=${BUILD_NAME} --env GODOT_VERSION_STATUS=${GODOT_VERSION_STATUS} --env NUM_CORES=${NUM_CORES} --env CLASSICAL=${build_classical} --env MONO=${build_mono} -v ${basedir}/godot-${godot_version}.tar.gz:/root/godot.tar.gz -v ${basedir}/mono-glue:/root/mono-glue -w /root/"
export img_version=$IMAGE_VERSION
mkdir -p ${basedir}/mono-glue
@@ -243,11 +252,15 @@ mkdir -p ${basedir}/out/macos
${podman_run} -v ${basedir}/build-macos:/root/build -v ${basedir}/out/macos:/root/out -v ${basedir}/deps/moltenvk:/root/moltenvk -v ${basedir}/deps/angle:/root/angle localhost/godot-osx:${img_version} bash build/build.sh 2>&1 | tee ${basedir}/out/logs/macos
mkdir -p ${basedir}/out/android
${podman_run} -v ${basedir}/build-android:/root/build -v ${basedir}/out/android:/root/out -v ${basedir}/deps/keystore:/root/keystore localhost/godot-android:${img_version} bash build/build.sh 2>&1 | tee ${basedir}/out/logs/android
${podman_run} -v ${basedir}/build-android:/root/build -v ${basedir}/out/android:/root/out -v ${basedir}/deps/swappy:/root/swappy -v ${basedir}/deps/keystore:/root/keystore localhost/godot-android:${img_version} bash build/build.sh 2>&1 | tee ${basedir}/out/logs/android
mkdir -p ${basedir}/out/ios
${podman_run} -v ${basedir}/build-ios:/root/build -v ${basedir}/out/ios:/root/out localhost/godot-ios:${img_version} bash build/build.sh 2>&1 | tee ${basedir}/out/logs/ios
uid=$(id -un)
gid=$(id -gn)
if [ ! -z "$SUDO_UID" ]; then
chown -R "${SUDO_UID}":"${SUDO_GID}" ${basedir}/git ${basedir}/out ${basedir}/mono-glue ${basedir}/godot*.tar.gz
uid="${SUDO_UID}"
gid="${SUDO_GID}"
fi
chown -R -f $uid:$gid ${basedir}/git ${basedir}/out ${basedir}/mono-glue ${basedir}/godot*.tar.gz

View File

@@ -12,6 +12,14 @@
# relevant tool in your PATH or an absolute path to run it from.
export PODMAN='podman'
# Path to a Git clone of https://github.com/godotengine/godot-builds.
# Only used for uploading official releases.
export GODOT_BUILDS_PATH=''
# SSH hostname to upload Web editor builds to.
# Only used for uploading official releases.
export WEB_EDITOR_HOSTNAME=''
# Registry for build containers.
# The default registry is the one used for official Godot builds.
# Note that some of its images are private and only accessible to selected

98
publish-release.sh Executable file
View File

@@ -0,0 +1,98 @@
#!/bin/bash
set -e
# Config
# For signing keys, and path to godot-builds repo.
source ./config.sh
godot_version=""
web_editor_latest=0
while getopts "h?v:l" opt; do
case "$opt" in
h|\?)
echo "Usage: $0 [OPTIONS...]"
echo
echo " -v godot version (e.g: 3.2-stable) [mandatory]"
echo " -l mark web editor as latest"
echo
exit 1
;;
v)
godot_version=$OPTARG
;;
l)
web_editor_latest=1
;;
esac
done
if [ -z "${godot_version}" ]; then
echo "Mandatory argument -v missing."
exit 1
fi
# Confirm
IFS=- read version status <<< "${godot_version}"
echo "Publishing Godot ${version} ${status}."
read -p "Is this correct (y/n)? " choice
case "$choice" in
y|Y ) echo "yes";;
n|N ) echo "No, aborting."; exit 0;;
* ) echo "Invalid choice, aborting."; exit 1;;
esac
template_version=${version}.${status}
# Upload to GitHub godot-builds
if [ -z "${GODOT_BUILDS_PATH}" ]; then
echo "Missing path to godotengine/godot-builds clone in config.sh, necessary to upload releases. Aborting."
exit 1
fi
${GODOT_BUILDS_PATH}/tools/upload-github.sh -v ${version} -f ${status}
# Web editor
scp -P 22 -r web/${template_version} ${WEB_EDITOR_HOSTNAME}:/home/akien/web_editor/
sleep 2
command="sudo mv /home/akien/web_editor/${template_version} /var/www/editor.godotengine.org/public/releases/"
command="${command}; cd /var/www/editor.godotengine.org; sudo chown -R www-data:www-data public/releases/${template_version}"
command="${command}; sudo ./create-symlinks.sh -v ${template_version}"
if [ $web_editor_latest == 1 ]; then
command="${command} -l"
fi
ssh -P 22 ${WEB_EDITOR_HOSTNAME} "${command}"
# NuGet packages
publish_nuget_packages() {
for pkg in "$@"; do
dotnet nuget push $pkg --source "${NUGET_SOURCE}" --api-key "${NUGET_API_KEY}" --skip-duplicate
done
}
if [ ! -z "${NUGET_SOURCE}" ] && [ ! -z "${NUGET_API_KEY}" ] && [[ $(type -P "dotnet") ]]; then
echo "Publishing NuGet packages..."
publish_nuget_packages out/linux/x86_64/tools-mono/GodotSharp/Tools/nupkgs/*.nupkg
else
echo "Disabling NuGet package publishing as config.sh does not define the required data (NUGET_SOURCE, NUGET_API_KEY), or dotnet can't be found in PATH."
fi
# Godot Android library
if [ -d "deps/keystore" ]; then
echo "Publishing Android library to MavenCentral..."
sh build-android/upload-mavencentral.sh
else
echo "Disabling Android library publishing as deps/keystore doesn't exist."
fi
# Stable release only
if [ "${status}" == "stable" ]; then
echo "NOTE: This script doesn't handle yet uploading stable releases to the main GitHub repository, Steam, EGS, and itch.io."
fi