diff --git a/.github/workflows/release-prod.yml b/.github/workflows/release-prod.yml index 6dcedb0b04a..d0c3de16859 100644 --- a/.github/workflows/release-prod.yml +++ b/.github/workflows/release-prod.yml @@ -124,3 +124,35 @@ jobs: curl -X POST -H "Content-Type:application/json" \ -d "{\"version\":\"$BASE_VERSION\",\"date\":\"$DATE\"}" \ $RELEASE_TRACKER_URL/logProduction + - name: Create Github release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + # Get the newest release tag for the firebase package (e.g. firebase@10.12.0) + NEWEST_TAG=$(git describe --tags --match "firebase@[0-9]*.[0-9]*.[0-9]*" --abbrev=0) + + # Get the release notes from the description of the most recent merged PR into the "release" branch + # See: https://github.com/firebase/firebase-js-sdk/pull/8236 for an example description + JSON_RELEASE_NOTES=$(gh pr list \ + --repo "$GITHUB_REPOSITORY" \ + --state "merged" \ + --base "release" \ + --limit 1 \ + --json "body" \ + | jq '.[].body | split("\n# Releases\n")[-1]' # Remove the generated changesets header + ) + + # Prepend the new release header + # We have to be careful to insert the new release header after a " character, since we're + # modifying the JSON string + JSON_RELEASE_NOTES="\"For more detailed release notes, see [Firebase JavaScript SDK Release Notes](https://firebase.google.com/support/release-notes/js).\n\n# What's Changed\n\n${JSON_RELEASE_NOTES:1}" + + # Format the JSON string into a readable markdown string + RELEASE_NOTES=$(echo -E $JSON_RELEASE_NOTES | jq -r .) + + # Create the GitHub release + gh release create "$NEWEST_TAG" \ + --repo "$GITHUB_REPOSITORY" \ + --title "$NEWEST_TAG" \ + --notes "$RELEASE_NOTES" \ + --verify-tag