mirror of
https://github.com/godotengine/godot-builds.git
synced 2026-01-06 02:09:49 +03:00
The script must be run from the godot-build-scripts directory used to build Godot. It requires access to both folders to read build artifacts from there and create commits here.
142 lines
4.0 KiB
Bash
142 lines
4.0 KiB
Bash
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
# Generate GitHub release for a Godot version and upload artifacts.
|
|
#
|
|
# Usage: ./upload-github.sh -v 3.6
|
|
# Usage: ./upload-github.sh -v 3.6 -f beta3
|
|
# Usage: ./upload-github.sh -v 3.6 -f beta3 -r owner/repository
|
|
#
|
|
# Run this script from the root of the godot-build-scripts folder
|
|
# after building Godot.
|
|
|
|
# Folder this script is called from, a.k.a its working directory.
|
|
export basedir=$(pwd)
|
|
|
|
# Folder where this scripts resides in.
|
|
scriptpath=$(readlink -f "$0")
|
|
scriptdir=$(dirname "$scriptpath")
|
|
# Root folder of this project, hopefully.
|
|
export buildsdir=$(dirname "$scriptdir")
|
|
|
|
if [ ! -d "${basedir}/releases" ] || [ ! -d "${basedir}/tmp" ]; then
|
|
echo "Cannot find one of the required folders: releases, tmp."
|
|
echo " Make sure you're running this script from the root of your godot-build-scripts clone, and that Godot has been built with it."
|
|
exit 1
|
|
fi
|
|
|
|
# Setup.
|
|
|
|
godot_version=""
|
|
godot_flavor="stable"
|
|
godot_repository="godotengine/godot-builds"
|
|
|
|
while getopts "v:f:r:" opt; do
|
|
case "$opt" in
|
|
v)
|
|
godot_version=$OPTARG
|
|
;;
|
|
f)
|
|
godot_flavor=$OPTARG
|
|
;;
|
|
r)
|
|
godot_repository=$OPTARG
|
|
;;
|
|
esac
|
|
done
|
|
|
|
release_tag="$godot_version-$godot_flavor"
|
|
|
|
echo "Preparing release $release_tag..."
|
|
|
|
version_path="$basedir/releases/$release_tag"
|
|
if [ ! -d "${version_path}" ]; then
|
|
echo "Cannot find the release folder at $version_path."
|
|
echo " Make sure you're running this script from the root of godot-build-scripts, and that Godot has been built."
|
|
exit 1
|
|
fi
|
|
|
|
cd git
|
|
git_reference=$(git rev-parse HEAD)
|
|
cd ..
|
|
|
|
# Generate release metadata and commit it to Git.
|
|
|
|
echo "Creating and committing release metadata for $release_tag..."
|
|
|
|
if ! $buildsdir/tools/create-release-metadata.py -v $godot_version -f $godot_flavor -g $git_reference; then
|
|
echo "Failed to create release metadata for $release_tag."
|
|
exit 1
|
|
fi
|
|
|
|
cd $buildsdir
|
|
git add ./releases/godot-$release_tag.json
|
|
git commit -m "Add Godot $release_tag"
|
|
git tag $release_tag
|
|
if ! git push --atomic origin release-automation $release_tag; then
|
|
echo "Failed to push release metadata for $release_tag to GitHub."
|
|
exit 1
|
|
fi
|
|
cd $basedir
|
|
|
|
# Exactly one time it failed to create release immediately after pushing the tag,
|
|
# so we use this for protection...
|
|
sleep 2
|
|
|
|
# Generate GitHub release.
|
|
|
|
echo "Creating and publishing GitHub release for $release_tag..."
|
|
|
|
if ! $buildsdir/tools/create-release-notes.py -v $godot_version -f $godot_flavor -g $git_reference; then
|
|
echo "Failed to create release notes for $release_tag."
|
|
exit 1
|
|
fi
|
|
|
|
release_notes="$basedir/tmp/release-notes-$release_tag.txt"
|
|
release_flag=""
|
|
if [ $godot_flavor != "stable" ]; then
|
|
release_flag="--prerelease"
|
|
fi
|
|
|
|
if ! gh release create $release_tag --verify-tag --title "$release_tag" --notes-file $release_notes $release_flag -R $godot_repository; then
|
|
echo "Cannot create a GitHub release for $release_tag."
|
|
exit 1
|
|
fi
|
|
|
|
# Upload release files to GitHub.
|
|
|
|
echo "Uploading release files from $version_path..."
|
|
|
|
# We are picking up all relevant files lazily, using a substring.
|
|
# The first letter can be in either case, so we're skipping it.
|
|
for f in $version_path/*odot*; do
|
|
echo "Uploading $f..."
|
|
gh release upload $release_tag $f -R $godot_repository
|
|
done
|
|
|
|
# Do the same for .NET builds.
|
|
for f in $version_path/mono/*odot*; do
|
|
echo "Uploading $f..."
|
|
gh release upload $release_tag $f -R $godot_repository
|
|
done
|
|
|
|
# README.txt is only generated for pre-releases.
|
|
readme_path="$version_path/README.txt"
|
|
if [ $godot_flavor != "stable" ] && [ -f "${readme_path}" ]; then
|
|
echo "Uploading $readme_path..."
|
|
gh release upload $release_tag $readme_path -R $godot_repository
|
|
fi
|
|
|
|
# SHA512-SUMS.txt is split into two: classic and mono, and we need to upload them as one.
|
|
checksums_path="$basedir/tmp/SHA512-SUMS.txt"
|
|
cp $basedir/releases/$release_tag/SHA512-SUMS.txt $checksums_path
|
|
if [ -d "${basedir}/releases/${release_tag}/mono" ]; then
|
|
cat $basedir/releases/$release_tag/mono/SHA512-SUMS.txt >> $checksums_path
|
|
fi
|
|
|
|
echo "Uploading $checksums_path..."
|
|
gh release upload $release_tag $checksums_path -R $godot_repository
|
|
|
|
echo "Done."
|