mirror of
https://github.com/godotengine/godot-builds.git
synced 2026-01-01 01:48:13 +03:00
142 lines
4.0 KiB
Bash
Executable File
142 lines
4.0 KiB
Bash
Executable File
#!/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 main $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."
|