diff options
| author | Hsieh Chin Fan <typebrook@gmail.com> | 2020-07-14 23:01:42 +0800 |
|---|---|---|
| committer | Hsieh Chin Fan <typebrook@gmail.com> | 2020-07-14 23:01:42 +0800 |
| commit | 78d2bc8af6ae4787cfb3f6ee94e30da9f642523a (patch) | |
| tree | b7fb4dd6b84958af699a6c679c8dbf23926e584f /tools | |
| parent | 4329416f09135c62c540ff1d76b0e38274625f47 (diff) | |
update
Diffstat (limited to 'tools')
| -rwxr-xr-x | tools/github-release.sh | 44 |
1 files changed, 33 insertions, 11 deletions
diff --git a/tools/github-release.sh b/tools/github-release.sh index b8f6dba..70ba672 100755 --- a/tools/github-release.sh +++ b/tools/github-release.sh | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | # * github_api_token | 18 | # * github_api_token |
| 19 | # * action (optional, could be upload, overwrite, rename, delete, default to be upload) | 19 | # * action (optional, could be upload, overwrite, rename, delete, default to be upload) |
| 20 | # * extra (optional, new filename for action 'rename') | 20 | # * extra (optional, new filename for action 'rename') |
| 21 | # * create (optional, create a new release if it doesn't exist) | ||
| 21 | # | 22 | # |
| 22 | # Example: | 23 | # Example: |
| 23 | # | 24 | # |
| @@ -32,6 +33,8 @@ set -e | |||
| 32 | 33 | ||
| 33 | # Validate settings. | 34 | # Validate settings. |
| 34 | [ "$TRACE" ] && set -x | 35 | [ "$TRACE" ] && set -x |
| 36 | # Keep tty | ||
| 37 | exec 3>&1 | ||
| 35 | 38 | ||
| 36 | CONFIG=$@ | 39 | CONFIG=$@ |
| 37 | 40 | ||
| @@ -60,26 +63,45 @@ curl -o /dev/null -sH "$AUTH" $GH_REPO || { echo "Error: Invalid repo, token or | |||
| 60 | response=$(curl -sH "$AUTH" $GH_TAGS) | 63 | response=$(curl -sH "$AUTH" $GH_TAGS) |
| 61 | 64 | ||
| 62 | # Get ID of the release. | 65 | # Get ID of the release. |
| 63 | eval $(echo "$response" | grep -m 1 "id.:" | grep -w id | tr : = | tr -cd '[[:alnum:]]=' | sed 's/id/release_id/') | 66 | release_id=$(echo "$response" | grep -m1 -w \"id\": | sed -E -e 's/[^0-9]//g') |
| 64 | [ "$release_id" ] || { echo "Error: Failed to get release id for tag: $tag"; echo "$response" | awk 'length($0)<100' >&2; exit 1; } | 67 | if [ -z "$release_id" ]; then |
| 68 | if [ "$create" = 'true' ]; then | ||
| 69 | body=$(cat <<EOF | ||
| 70 | { | ||
| 71 | "tag_name": "$tag", | ||
| 72 | "target_commitish": "master", | ||
| 73 | "name": "$tag", | ||
| 74 | "body": "", | ||
| 75 | "draft": false, | ||
| 76 | "prerelease": false | ||
| 77 | } | ||
| 78 | EOF | ||
| 79 | ) | ||
| 80 | response=$(curl -H "$AUTH" -H "Content-Type: application/json" -d "$body" "$GH_REPO/releases") | ||
| 81 | release_id=$(echo "$response" | grep -m1 -w \"id\": | sed -E -e 's/[^0-9]//g') | ||
| 82 | else | ||
| 83 | echo "Error: Failed to get release id for tag: $tag"; echo "$response" | awk 'length($0)<100' >&2 | ||
| 84 | exit 1 | ||
| 85 | fi | ||
| 86 | fi | ||
| 65 | 87 | ||
| 66 | post_asset() { | 88 | post_asset() { |
| 67 | # Upload asset | 89 | # Upload asset |
| 68 | echo "Uploading asset... " | 90 | echo "Uploading asset... " >&3 |
| 69 | # Construct url | 91 | # Construct url |
| 70 | GH_ASSET="https://uploads.github.com/repos/$repo/releases/$release_id/assets?name=$(basename $1)" | 92 | GH_ASSET="https://uploads.github.com/repos/$repo/releases/$release_id/assets?name=$1" |
| 71 | 93 | ||
| 72 | curl --data-binary @"$filename" -H "$AUTH" -H "Content-Type: application/octet-stream" $GH_ASSET | 94 | curl --data-binary @"$filename" -H "$AUTH" -H "Content-Type: application/octet-stream" $GH_ASSET |
| 73 | } | 95 | } |
| 74 | 96 | ||
| 75 | rename_asset() { | 97 | rename_asset() { |
| 76 | echo "Renaming asset($1) from $2 to $3" | 98 | echo "Renaming asset($1) from $2 to $3" >&3 |
| 77 | curl -X PATCH -H "$AUTH" -H "Content-Type: application/json" \ | 99 | curl -X PATCH -H "$AUTH" -H "Content-Type: application/json" \ |
| 78 | --data "{\"name\":\"$3\"}" "$GH_REPO/releases/assets/$1" | 100 | --data "{\"name\":\"$3\", \"label\":\"$3\"}" "$GH_REPO/releases/assets/$1" |
| 79 | } | 101 | } |
| 80 | 102 | ||
| 81 | delete_asset() { | 103 | delete_asset() { |
| 82 | echo "Deleting asset($1)... " | 104 | echo "Deleting asset($1)... " >&3 |
| 83 | curl -X "DELETE" -H "$AUTH" "$GH_REPO/releases/assets/$1" | 105 | curl -X "DELETE" -H "$AUTH" "$GH_REPO/releases/assets/$1" |
| 84 | } | 106 | } |
| 85 | 107 | ||
| @@ -89,13 +111,13 @@ upload_asset() { | |||
| 89 | eval $(echo "$response" | grep -C2 "\"name\": \"$(basename $filename)\"" | grep -m 1 "id.:" | grep -w id | tr : = | tr -cd '[[:alnum:]]=' | sed 's/id/asset_id/') | 111 | eval $(echo "$response" | grep -C2 "\"name\": \"$(basename $filename)\"" | grep -m 1 "id.:" | grep -w id | tr : = | tr -cd '[[:alnum:]]=' | sed 's/id/asset_id/') |
| 90 | if [ "$asset_id" = "" ]; then | 112 | if [ "$asset_id" = "" ]; then |
| 91 | echo "No need to overwrite asset" | 113 | echo "No need to overwrite asset" |
| 92 | post_asset $filename | 114 | post_asset $(basename $filename) |
| 93 | else | 115 | else |
| 94 | if [ "$action" = "overwrite" ]; then | 116 | if [ "$action" = "overwrite" ]; then |
| 95 | new_asset_id=$(post_asset "bak_$filename" | sed -E 's/^\{[^{]+"id":([0-9]+).+$/\1/') | 117 | new_asset_id=$(post_asset "bak_$(basename $filename)" | sed -E 's/^\{[^{]+"id":([0-9]+).+$/\1/') |
| 96 | [ "$new_asset_id" = "" ] && exit 1 || delete_asset "$asset_id" | 118 | [ "$new_asset_id" = "" ] && exit 1 || delete_asset "$asset_id" |
| 97 | 119 | ||
| 98 | rename_asset "$new_asset_id" "bak_$filename" "$filename" | 120 | rename_asset "$new_asset_id" "bak_$(basename $filename)" "$(basename $filename)" |
| 99 | elif [ "$action" = "rename" ]; then | 121 | elif [ "$action" = "rename" ]; then |
| 100 | rename_asset "$asset_id" "$filename" "$extra" | 122 | rename_asset "$asset_id" "$filename" "$extra" |
| 101 | elif [ "$action" = "delete" ]; then | 123 | elif [ "$action" = "delete" ]; then |
| @@ -115,7 +137,7 @@ edit_release() { | |||
| 115 | { | 137 | { |
| 116 | "tag_name": "$tag", | 138 | "tag_name": "$tag", |
| 117 | "target_commitish": "master", | 139 | "target_commitish": "master", |
| 118 | "name": "daily-taiwan-pbf", | 140 | "name": "$tag", |
| 119 | "body": "$(cat $filename | sed 's/"/\\"/g; $! s/$/\\n/' | tr -d '\n')", | 141 | "body": "$(cat $filename | sed 's/"/\\"/g; $! s/$/\\n/' | tr -d '\n')", |
| 120 | "draft": false, | 142 | "draft": false, |
| 121 | "prerelease": false | 143 | "prerelease": false |