mirror of
https://github.com/subsurface/subsurface.git
synced 2024-12-11 03:21:29 +00:00
f7c8d65add
It is clear why this wasn't caught in my testing, but the bug should have been really obvious simply reading through the code. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
112 lines
3.8 KiB
Bash
Executable file
112 lines
3.8 KiB
Bash
Executable file
#!/bin/bash
|
|
# SPDX
|
|
|
|
if [[ -z "$GITHUB_TOKEN" ]]; then
|
|
echo "missing GITHUB_TOKEN"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -z "$GITHUB_REPO" ]] ; then
|
|
echo "missing GITHUB_REPO"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -z "$REF" ]] ; then
|
|
echo "missing REF"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -z "$COMMIT" ]] ; then
|
|
echo "missing COMMIT"
|
|
exit 1
|
|
fi
|
|
|
|
TAG="ci-release"
|
|
|
|
echo $REF
|
|
if [[ $REF = refs/heads/* ]] ; then
|
|
branch="$(echo $REF | cut -d/ -f 3)"
|
|
body="CI build of branch $branch. These binaries are for testing purposes. They are not signed and installations on Mac and Android will create warnings and errors without some extra work."
|
|
branch="-$branch"
|
|
echo "it's refs/heads with an added $branch"
|
|
if [[ $REF != refs/heads/master ]] ; then
|
|
TAG="${TAG}${branch}"
|
|
fi
|
|
elif [[ $REF = refs/tags/* ]] ; then
|
|
TAG=$(echo $REF | cut -d/ -f 3)
|
|
body="Release build ($TAG)"
|
|
fi
|
|
|
|
# check if there is a tag of that name
|
|
# if it is starts with ci (so this is a continous integration tag) and it's on a different SHA, delete it
|
|
tag_url="https://api.github.com/repos/$GITHUB_REPO/git/refs/tags/$TAG"
|
|
release_url="https://api.github.com/repos/$GITHUB_REPO/releases/tags/$TAG"
|
|
|
|
echo "get tag infos: curl -XGET --header \"Authorization: token xxxx\" \"${tag_url}\""
|
|
tag_infos=$(curl -XGET --header "Authorization: token ${GITHUB_TOKEN}" "${tag_url}")
|
|
echo "information received for tag $TAG"
|
|
echo $tag_infos
|
|
existing_tag_sha=$(echo $tag_infos | jq --raw-output .object.sha)
|
|
|
|
need_new_release="0"
|
|
if [[ "$existing_tag_sha" != "null" ]] ; then
|
|
echo "existing tag on SHA $existing_tag_sha"
|
|
existing_release=$(curl -XGET --header "Authorization: token ${GITHUB_TOKEN}" "${release_url}")
|
|
release_id=$(echo $existing_release | jq --raw-output .id )
|
|
echo "information received for the release with release ID \"$release_id\""
|
|
echo $existing_release
|
|
if [[ "$release_id" == "null" ]] ; then
|
|
need_new_release="1"
|
|
fi
|
|
|
|
if [[ "$existing_tag_sha" != "$COMMIT" ]] ; then
|
|
need_new_release="1"
|
|
echo "tag was on different SHA, delete it and the corresponding release (if it exists)"
|
|
echo "deleting tag $TAG"
|
|
curl -XDELETE --header "Authorization: token ${GITHUB_TOKEN}" "${tag_url}"
|
|
if [[ "$release_id" != "null" ]] ; then
|
|
echo "Delete the release $release_id"
|
|
delete_url="https://api.github.com/repos/$GITHUB_REPO/releases/$release_id"
|
|
curl -XDELETE --header "Authorization: token ${GITHUB_TOKEN}" "${delete_url}"
|
|
fi
|
|
fi
|
|
else
|
|
echo "this is a new tag"
|
|
need_new_release="1"
|
|
fi
|
|
|
|
if [[ "$need_new_release" = "1" ]] ; then
|
|
echo "create a new release and implicitly a new tag"
|
|
release=$(curl -H "Authorization: token ${GITHUB_TOKEN}" --data '{"tag_name": "'"$TAG"'","target_commitish": "'"$COMMIT"'","name": "'"$TAG"'","body": "'"$body"'","draft": false,"prerelease": true}' "https://api.github.com/repos/$GITHUB_REPO/releases")
|
|
echo "response to release creation"
|
|
echo "$release"
|
|
fi
|
|
|
|
# get the upload URL
|
|
release_info=$(curl -XGET --header "Authorization: token ${GITHUB_TOKEN}" "${release_url}")
|
|
echo "release info for $TAG"
|
|
echo $release_info
|
|
upload_url=$(echo $release_info | jq --raw-output .upload_url | cut -d '{' -f 1)
|
|
|
|
if [[ "$upload_url" = "null" ]] ; then
|
|
echo "error determining release upload URL, aborting"
|
|
exit 1
|
|
fi
|
|
|
|
# accept up to 9 binaries via environment variables
|
|
for FILENAME in $BIN1 $BIN2 $BIN3 $BIN4 $BIN5 $BIN6 $BIN7 $BIN8 $BIN9
|
|
do
|
|
if [[ -z "$FILENAME" ]] ; then
|
|
break
|
|
fi
|
|
if [[ ! -f $FILENAME ]] ; then
|
|
echo "Cannot find binary $FILENAME"
|
|
continue
|
|
fi
|
|
echo "upload $FILENAME to release"
|
|
BASENAME="$(basename $FILENAME)"
|
|
echo "curl -H \"Authorization: token xxxxx\" -H \"Accept: application/vnd.github.manifold-preview\" -H \"Content-Type: application/octet-stream\" --data-binary @$FILENAME \"$upload_url?name=$BASENAME\""
|
|
curl -H "Authorization: token ${GITHUB_TOKEN}" -H "Accept: application/vnd.github.manifold-preview" -H "Content-Type: application/octet-stream" --data-binary @$FILENAME "$upload_url?name=$BASENAME"
|
|
done
|
|
|
|
# vim: tw=0
|