dockerfiles/github-dev/upload-assets

74 lines
2.2 KiB
Plaintext
Raw Normal View History

#!/bin/bash
#set -e
#set -o pipefail
set -x
if [[ ! -z "$TOKEN" ]]; then
GITHUB_TOKEN=$TOKEN
fi
if [[ -z "$GITHUB_TOKEN" ]]; then
echo "Set the GITHUB_TOKEN env variable."
exit 1
fi
if [[ -z "$GITHUB_REPOSITORY" ]]; then
echo "Set the GITHUB_REPOSITORY env variable."
exit 1
fi
URI=https://api.github.com
API_VERSION=v3
API_HEADER="Accept: application/vnd.github.${API_VERSION}+json"
AUTH_HEADER="Authorization: token ${GITHUB_TOKEN}"
main(){
local files
if [ "$#" -eq 0 ]; then
echo "Must pass files to be uploaded..."
exit 1
fi
files=( "$@" )
# Validate the GitHub token.
curl -o /dev/null -sSL -H "${AUTH_HEADER}" -H "${API_HEADER}" "${URI}/repos/${GITHUB_REPOSITORY}" || { echo "Error: Invalid repo, token or network issue!"; exit 1; }
# Get the tags.
tag_response=$(curl -sSL -H "${AUTH_HEADER}" -H "${API_HEADER}" "${URI}/repos/${GITHUB_REPOSITORY}/tags")
tag_name=$(echo $tag_response | jq -e --raw-output .[0].name)
tag_id=$(echo $tag_response | jq -e --raw-output .[0].id)
# Get the latest release.
latest_response=$(curl -sSL -H "${AUTH_HEADER}" -H "${API_HEADER}" "${URI}/repos/${GITHUB_REPOSITORY}/releases/latest")
latest_release=$(echo "$latest_response" | jq -e --raw-output .tag_name)
release_id=$(echo "$latest_response" | jq -e --raw-output .id)
if [[ "$tag_name" != "$latest_release" ]]; then
# Create the release.
echo "Creating release for tag name: ${tag_name}"
response=$(curl -XPOST -sSL -H "${AUTH_HEADER}" -H "${API_HEADER}" "${URI}/repos/${GITHUB_REPOSITORY}/release" --data '{"tag_name": "'${tag_name}'","name":"'${tag_name}'","draft":false,"prerelease":false}')
release_id=$(echo $response | jq -e --raw-output .id)
fi
# Upload the files.
echo "Uploading files: ${files[@]}"
echo "For tag name: ${tag_name} tag id: ${tag_id}"
for file in ${files[@]}; do
filename=$(basename "$file")
curl -XPOST -sSL -H "${AUTH_HEADER}" -H "${API_HEADER}" \
--data-binary @"$file" \
-H "Content-Type: application/octet-stream" \
"https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/${release_id}/assets?name=${filename}"
echo "Successfully uploaded: ${file}!"
done
echo "Uploading assets to ${tag_name} complete!"
}
main $@