diff --git a/forgejo-release.sh b/forgejo-release.sh index 650be43..3eab2fe 100755 --- a/forgejo-release.sh +++ b/forgejo-release.sh @@ -91,22 +91,32 @@ upload_release() { done fi if $PRERELEASE || echo "${TAG}" | grep -qi '\-rc'; then - releaseType="--prerelease" + prerelease="true" echo "Uploading as Pre-Release" else + prerelease="false" echo "Uploading as Stable" fi ensure_tag - if ! $TEA_BIN release create "${assets[@]}" --repo $REPO --note "$RELEASENOTES" --tag "$TAG" --title "$TITLE" --draft ${releaseType} >&"$TMP_DIR"/tea.log; then - if grep --quiet 'Unknown API Error: 500' "$TMP_DIR"/tea.log && grep --quiet services/release/release.go:194 "$TMP_DIR"/tea.log; then - echo "workaround v1.20 race condition https://codeberg.org/forgejo/forgejo/issues/1370" - sleep 10 - $TEA_BIN release create "${assets[@]}" --repo $REPO --note "$RELEASENOTES" --tag "$TAG" --title "$TITLE" --draft ${releaseType} - else - cat "$TMP_DIR"/tea.log - return 1 - fi + jq --arg title "$TITLE" --arg body "$RELEASENOTES" --arg tag "$TAG" --arg pre $prerelease '{"draft": true, "name": $title, "body": $body, "prerelease": $pre }' >"$TMP_DIR"/release-payload.json + api POST repos/$REPO/releases -d @"$TMP_DIR"/release-payload.json >"$TMP_DIR"/release.json + if [ "$SKIP_ASSETS" == 'false' ]; then + local id=$(jq --raw-output .id <"$TMP_DIR"/release.json) + for file in "$RELEASE_DIR"/*; do + local name=$(basename $file) + api_bin repos/$REPO/releases/$id/assets/$name -D @$file + done fi + # if ! $TEA_BIN release create "${assets[@]}" --repo $REPO --note "$RELEASENOTES" --tag "$TAG" --title "$TITLE" --draft ${releaseType} >&"$TMP_DIR"/tea.log; then + # if grep --quiet 'Unknown API Error: 500' "$TMP_DIR"/tea.log && grep --quiet services/release/release.go:194 "$TMP_DIR"/tea.log; then + # echo "workaround v1.20 race condition https://codeberg.org/forgejo/forgejo/issues/1370" + # sleep 10 + # $TEA_BIN release create "${assets[@]}" --repo $REPO --note "$RELEASENOTES" --tag "$TAG" --title "$TITLE" --draft ${releaseType} + # else + # cat "$TMP_DIR"/tea.log + # return 1 + # fi + # fi maybe_use_release_note_assistant release_draft false } @@ -160,9 +170,6 @@ maybe_override() { upload() { setup_api - setup_tea - rm -f ~/.config/tea/config.yml - GITEA_SERVER_TOKEN=$TOKEN $TEA_BIN login add --url $FORGEJO maybe_sign_release maybe_override upload_release @@ -181,7 +188,16 @@ api() { path=$1 shift - curl --fail -X "$method" -sS -H "Content-Type: application/json" -H "Authorization: token $TOKEN" "$@" $FORGEJO/api/v1/"$path" + curl --retry 5 --fail -X "$method" -sS -H "Content-Type: application/json" -H "Authorization: token $TOKEN" "$@" $FORGEJO/api/v1/"$path" +} + +api_bin() { + method=$1 + shift + path=$1 + shift + + curl --retry 5 --fail -X "$method" -sS -H "Authorization: token $TOKEN" "$@" $FORGEJO/api/v1/"$path" } wait_release() {