mirror of
https://github.com/jessfraz/dockerfiles.git
synced 2024-11-23 11:31:49 +01:00
e79c30b714
Signed-off-by: Jess Frazelle <acidburn@microsoft.com>
85 lines
2.4 KiB
Bash
Executable File
85 lines
2.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
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
|
|
|
|
if [[ -z "$GITHUB_REF" ]]; then
|
|
echo "Set the GITHUB_REF 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; }
|
|
|
|
echo "Github ref: ${GITHUB_REF}"
|
|
|
|
# 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)
|
|
|
|
# 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" ]] || [[ "$release_id" == "null" ]]; 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}/releases" --data '{"tag_name": "'"${tag_name}"'","name":"'"${tag_name}"'","draft":false,"prerelease":false}')
|
|
release_id=$(echo "$response" | jq -e --raw-output .id)
|
|
fi
|
|
|
|
if [[ "$release_id" == "null" ]]; then
|
|
echo "Release ID cannot be null."
|
|
exit 1
|
|
fi
|
|
|
|
|
|
# Upload the files.
|
|
echo "Uploading files: ${files[*]}"
|
|
echo "For tag name: ${tag_name}"
|
|
|
|
# shellcheck disable=SC2068
|
|
for file in ${files[@]}; do
|
|
filename=$(basename "$file")
|
|
rp=$(realpath "$file")
|
|
|
|
curl -sSL -H "${AUTH_HEADER}" \
|
|
--data-binary @"$rp" \
|
|
-H "Content-Type: application/octet-stream" \
|
|
"https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/${release_id}/assets?name=${filename}&access_token=${GITHUB_TOKEN}"
|
|
|
|
echo "Successfully uploaded: ${rp}"
|
|
done
|
|
|
|
echo "Uploading assets to ${tag_name} complete!"
|
|
}
|
|
|
|
main "$@"
|