#!/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}" \ --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 "$@"