diff options
Diffstat (limited to 'tools/upload-github-release-asset.sh')
-rwxr-xr-x | tools/upload-github-release-asset.sh | 69 |
1 files changed, 45 insertions, 24 deletions
diff --git a/tools/upload-github-release-asset.sh b/tools/upload-github-release-asset.sh index af78fee..acff25e 100755 --- a/tools/upload-github-release-asset.sh +++ b/tools/upload-github-release-asset.sh | |||
@@ -13,6 +13,7 @@ | |||
13 | # * owner | 13 | # * owner |
14 | # * repo | 14 | # * repo |
15 | # * tag | 15 | # * tag |
16 | # * type (asset or edit) | ||
16 | # * filename | 17 | # * filename |
17 | # * github_api_token | 18 | # * github_api_token |
18 | # * overwrite (optional, could be ture, false, delete, default to be false) | 19 | # * overwrite (optional, could be ture, false, delete, default to be false) |
@@ -26,7 +27,6 @@ | |||
26 | 27 | ||
27 | # Check dependencies. | 28 | # Check dependencies. |
28 | set -e | 29 | set -e |
29 | xargs=$(which gxargs || which xargs) | ||
30 | 30 | ||
31 | # Validate settings. | 31 | # Validate settings. |
32 | [ "$TRACE" ] && set -x | 32 | [ "$TRACE" ] && set -x |
@@ -57,29 +57,50 @@ response=$(curl -sH "$AUTH" $GH_TAGS) | |||
57 | eval $(echo "$response" | grep -m 1 "id.:" | grep -w id | tr : = | tr -cd '[[:alnum:]]=' | sed 's/id/release_id/') | 57 | eval $(echo "$response" | grep -m 1 "id.:" | grep -w id | tr : = | tr -cd '[[:alnum:]]=' | sed 's/id/release_id/') |
58 | [ "$release_id" ] || { echo "Error: Failed to get release id for tag: $tag"; echo "$response" | awk 'length($0)<100' >&2; exit 1; } | 58 | [ "$release_id" ] || { echo "Error: Failed to get release id for tag: $tag"; echo "$response" | awk 'length($0)<100' >&2; exit 1; } |
59 | 59 | ||
60 | # Get ID of the asset based on given filename. | 60 | upload_asset() { |
61 | # If exists, delete it. | 61 | # Get ID of the asset based on given filename. |
62 | eval $(echo "$response" | grep -C2 "\"name\":.\+$(basename $filename)" | grep -m 1 "id.:" | grep -w id | tr : = | tr -cd '[[:alnum:]]=' | sed 's/id/asset_id/') | 62 | # If exists, delete it. |
63 | if [ "$asset_id" = "" ]; then | 63 | eval $(echo "$response" | grep -C2 "\"name\":.\+$(basename $filename)" | grep -m 1 "id.:" | grep -w id | tr : = | tr -cd '[[:alnum:]]=' | sed 's/id/asset_id/') |
64 | echo "No need to overwrite asset" | 64 | if [ "$asset_id" = "" ]; then |
65 | else | 65 | echo "No need to overwrite asset" |
66 | if [ "$overwrite" = "true" ] || [ "$overwrite" = "delete" ]; then | 66 | else |
67 | echo "Deleting asset($asset_id)... " | 67 | if [ "$overwrite" = "true" ] || [ "$overwrite" = "delete" ]; then |
68 | curl -X "DELETE" -H "Authorization: token $github_api_token" "https://api.github.com/repos/$owner/$repo/releases/assets/$asset_id" | 68 | echo "Deleting asset($asset_id)... " |
69 | if [ "$overwrite" = "delete" ]; then | 69 | curl -X "DELETE" -H "Authorization: token $github_api_token" "https://api.github.com/repos/$owner/$repo/releases/assets/$asset_id" |
70 | exit 0 | 70 | if [ "$overwrite" = "delete" ]; then |
71 | fi | 71 | exit 0 |
72 | else | 72 | fi |
73 | echo "File already exists on tag $tag" | 73 | else |
74 | echo "If you want to overwrite it, set overwrite=true" | 74 | echo "File already exists on tag $tag" |
75 | exit 1 | 75 | echo "If you want to overwrite it, set overwrite=true" |
76 | fi | 76 | exit 1 |
77 | fi | 77 | fi |
78 | fi | ||
79 | |||
80 | # Upload asset | ||
81 | echo "Uploading asset... " | ||
82 | |||
83 | # Construct url | ||
84 | GH_ASSET="https://uploads.github.com/repos/$owner/$repo/releases/$release_id/assets?name=$(basename $filename)" | ||
78 | 85 | ||
79 | # Upload asset | 86 | curl --data-binary @"$filename" -H "$AUTH" -H "Content-Type: application/octet-stream" $GH_ASSET |
80 | echo "Uploading asset... " | 87 | } |
81 | 88 | ||
82 | # Construct url | 89 | edit_release() { |
83 | GH_ASSET="https://uploads.github.com/repos/$owner/$repo/releases/$release_id/assets?name=$(basename $filename)" | 90 | GH_RELEASE="$GH_REPO/releases/$release_id" |
91 | curl -v -X PATCH -H "$AUTH" -H "Content-Type: application/json" $GH_RELEASE \ | ||
92 | -d "{ \ | ||
93 | \"tag_name\": \"$tag\", \ | ||
94 | \"target_commitish\": \"master\", \ | ||
95 | \"name\": \"daily-taiwan-pbf\", \ | ||
96 | \"body\": \"$(cat $filename | sed 's/"/\\"/g; $! s/$/\\n/' | tr -d '\n') \", \ | ||
97 | \"draft\": false, \ | ||
98 | \"prerelease\": false \ | ||
99 | }" | ||
100 | } | ||
84 | 101 | ||
85 | curl --data-binary @"$filename" -H "Authorization: token $github_api_token" -H "Content-Type: application/octet-stream" $GH_ASSET | 102 | case $type in |
103 | asset) upload_asset;; | ||
104 | edit) edit_release;; | ||
105 | *) echo "type should be 'asset' or 'edit'";; | ||
106 | esac | ||