diff --git a/.forgejo/workflows/android-apk.yml b/.forgejo/workflows/android-apk.yml index 23e403d..75835ac 100644 --- a/.forgejo/workflows/android-apk.yml +++ b/.forgejo/workflows/android-apk.yml @@ -74,3 +74,55 @@ jobs: name: pedscribe-android-apk path: artifacts/*.apk retention-days: 30 + + - name: Publish Forgejo release + if: startsWith(github.ref, 'refs/tags/v') + env: + FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }} + TAG_NAME: ${{ github.ref_name }} + TARGET_COMMIT: ${{ github.sha }} + run: | + test -n "$FORGEJO_TOKEN" + API_URL="${GITHUB_SERVER_URL}/api/v1/repos/${GITHUB_REPOSITORY}" + APK=$(find artifacts -name '*.apk' | head -1) + test -n "$APK" + + node - <<'NODE' + const fs = require('fs'); + fs.writeFileSync('release-payload.json', JSON.stringify({ + tag_name: process.env.TAG_NAME, + target_commitish: process.env.TARGET_COMMIT, + name: process.env.TAG_NAME, + body: 'Signed Android APK for Obtainium updates.', + draft: false, + prerelease: false, + })); + NODE + + status=$(curl -sS -o release.json -w '%{http_code}' \ + -X POST "$API_URL/releases" \ + -H "Authorization: token $FORGEJO_TOKEN" \ + -H 'Content-Type: application/json' \ + --data-binary @release-payload.json) + if [ "$status" = "409" ]; then + curl -fsS "$API_URL/releases/tags/$TAG_NAME" \ + -H "Authorization: token $FORGEJO_TOKEN" > release.json + elif [ "$status" != "201" ]; then + cat release.json + exit 1 + fi + + RELEASE_ID=$(node -e "console.log(JSON.parse(require('fs').readFileSync('release.json', 'utf8')).id)") + ASSET_NAME=$(basename "$APK") + export ASSET_NAME + curl -fsS "$API_URL/releases/$RELEASE_ID/assets" \ + -H "Authorization: token $FORGEJO_TOKEN" > release-assets.json + EXISTING_ASSET_ID=$(node -e "const fs=require('fs'); const name=process.env.ASSET_NAME; const assets=JSON.parse(fs.readFileSync('release-assets.json','utf8')); const asset=assets.find((item)=>item.name===name); if (asset) console.log(asset.id);" ) + if [ -n "$EXISTING_ASSET_ID" ]; then + curl -fsS -X DELETE "$API_URL/releases/$RELEASE_ID/assets/$EXISTING_ASSET_ID" \ + -H "Authorization: token $FORGEJO_TOKEN" + fi + + curl -fsS -X POST "$API_URL/releases/$RELEASE_ID/assets?name=$ASSET_NAME" \ + -H "Authorization: token $FORGEJO_TOKEN" \ + -F "attachment=@$APK" > release-asset.json