1
0
Fork 0
mirror of https://github.com/alacritty/alacritty.git synced 2024-11-25 14:05:41 -05:00
alacritty/.github/workflows/upload_asset.sh
2023-05-16 08:35:02 +03:00

96 lines
2.4 KiB
Bash
Executable file

#!/bin/bash
# Assure parameters are correct.
if [ $# -lt 2 ]; then
echo "Usage: upload_asset.sh <FILE> <TOKEN>"
exit 1
fi
repo="alacritty/alacritty"
file_path=$1
bearer=$2
echo "Starting asset upload from $file_path to $repo."
# Get the release for this tag.
tag="$(git describe --tags --abbrev=0)"
# Make sure the git tag could be determined.
if [ -z "$tag" ]; then
printf "\e[31mError: Unable to find git tag\e[0m\n"
exit 1
fi
echo "Git tag: $tag"
# Get the upload URL for the current tag.
#
# Since this might be a draft release, we can't just use the /releases/tags/:tag
# endpoint which only shows published releases.
echo "Checking for existing release..."
upload_url=$(\
curl \
--http1.1 \
-H "Authorization: Bearer $bearer" \
"https://api.github.com/repos/$repo/releases" \
2> /dev/null \
| grep -E "(upload_url|tag_name)" \
| paste - - \
| grep -e "tag_name\": \"$tag\"" \
| head -n 1 \
| sed 's/.*\(https.*assets\).*/\1/' \
)
# Create a new release if we didn't find one for this tag.
if [ -z "$upload_url" ]; then
echo "No release found."
echo "Creating new release..."
# Create new release.
response=$(
curl -f \
--http1.1 \
-X POST \
-H "Authorization: Bearer $bearer" \
-d "{\"tag_name\":\"$tag\",\"draft\":true}" \
"https://api.github.com/repos/$repo/releases" \
2> /dev/null\
)
# Abort if the release could not be created.
if [ $? -ne 0 ]; then
printf "\e[31mError: Unable to create new release.\e[0m\n"
exit 1;
fi
# Extract upload URL from new release.
upload_url=$(\
echo "$response" \
| grep "upload_url" \
| sed 's/.*: "\(.*\){.*/\1/' \
)
fi
# Propagate error if no URL for asset upload could be found.
if [ -z "$upload_url" ]; then
printf "\e[31mError: Unable to find release upload url.\e[0m\n"
exit 2
fi
# Upload the file to the tag's release.
file_name=${file_path##*/}
echo "Uploading asset $file_name to $upload_url..."
curl -f \
--http1.1 \
-X POST \
-H "Authorization: Bearer $bearer" \
-H "Content-Type: application/octet-stream" \
--data-binary @"$file_path" \
"$upload_url?name=$file_name" \
&> /dev/null \
|| { \
printf "\e[31mError: Unable to upload asset.\e[0m\n" \
&& exit 3; \
}
printf "\e[32mSuccess\e[0m\n"