#!/usr/bin/env bash set -e [ -z "$DEBUG" ] || set -x; usage() { echo "$0 [] [-- ...]" >&2; } if [ "$1" = "-h" -o "$1" = "--help" ]; then usage cat >&2 <\`: ":user/:name" of the repository. For example, "foca/mpp". * \`\`: Name of the tag for this release. For example, "v1.0.0". * \`\`: Optional suffix for the release name. You can pass a list of files to upload as release assets by giving them after a \`--\` argument. If you supply text on \`STDIN\` it will be used as the release notes. EXAMPLES: $ $0 foca/mpp v1.0.0 -- pkg/*.tar.gz Creates a release named "mpp v1.0.0" and adds any tar.gz file in \`./pkg\` as an asset. $ $0 foca/mpp v1.0.1 "Bugfixes" -- pkg/*.tar.gz < notes.md Creates a release named "mpp v1.0.1: Bugfixes", adds any tar.gz file in \`./pkg\` as an asset, and uses the contents of \`notes.md\` as the release notes. NOTE: This uses your \`.netrc\` file to authenticate with GitHub. In order to run the script, make sure you have **both** \`api.github.com\` and \`upload.github.com\` in this file. For example: machine api.github.com login foca password machine uploads.github.com login foca password Generate this access token at https://github.com/settings/tokens and make sure it has access to the \`"repo"\` scope. EOS exit 1; fi [ -n "$2" ] || (usage; exit 1); REPO="$1" shift TAG="$1" shift NAME="$(basename "$REPO") ${TAG}" if [ -n "$1" -a "$1" != "--" ]; then NAME="${NAME}: $1"; shift fi BODY="$(cat ./buildScripts/uploadReleaseMessage)" if [ "$1" = "--" -a "$#" -ge "2" ]; then shift ASSETS="$@" fi echo "looking for an existing 'continuous' release" response=$( curl --fail \ --netrc \ --silent \ --location \ --request "GET" \ "https://api.github.com/repos/${REPO}/releases" ) releaseID=$(echo $response | jq '.[] | select(.tag_name == "continuous") | .id') if [ -n "$releaseID" ] ; then echo "deleting an existing 'continuous' release" response=$( curl --fail \ --netrc \ --silent \ --location \ --request "DELETE" \ "https://api.github.com/repos/${REPO}/releases/$releaseID" ) fi echo "looking for an existing 'continuous' tag" response=$( curl --fail \ --netrc \ --silent \ --location \ --request "GET" \ "https://api.github.com/repos/${REPO}/git/matching-refs/tags/continuous" ) tagURL=$(echo $response | jq '.[].url') tagURL="${tagURL%\"}" tagURL="${tagURL#\"}" if [ -n "$tagURL" ]; then echo "deleting an existing 'continuous' tag" response=$( curl --fail \ --netrc \ --silent \ --location \ --request "DELETE" \ $tagURL ) fi payload=$( jq --null-input \ --arg tag "$TAG" \ --arg name "$NAME" \ --arg body "$BODY" \ '{ tag_name: $tag, name: $name, body: $body, draft: false, prerelease: true }' ) response=$( curl --fail \ --netrc \ --silent \ --location \ --data "$payload" \ "https://api.github.com/repos/${REPO}/releases" ) upload_url="$(echo "$response" | jq -r .upload_url | sed -e "s/{?name,label}//")" for file in $ASSETS; do echo "" echo "uploading $file" curl --netrc \ --silent \ --header "Content-Type:application/gzip" \ --data-binary "@$file" \ "$upload_url?name=$(basename "$file")" echo "" done # The above was taken from: # https://gist.github.com/foca/38d82e93e32610f5241709f8d5720156 # on 2019-11-28 # and has been altered to delete the "continuous" tag/release # using: https://developer.github.com/v3/git/refs/ # and: https://developer.github.com/v3/repos/releases/ # as well as using the ./buildScripts/uploadReleaseMessage # by Stephen Gaito # it has been used under the following (MIT-like) license: # Copyright (c) 2016 Nicolas Sanguinetti # # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without # restriction, including without limitation the rights to use, # copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the # Software is furnished to do so, subject to the following # conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE.