feat: search matching releases on GitHub before falling back to tags #169
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly:
Did not file an issue as discussed with Ben offline.
This PR adds additional checking for release-backed tokens. Release-backed tokens require a matching tag on GitHub. Previously this worked by fetching 11 pages of tags from GitHub and searching for a match. This approach fails for large monorepos, as each release of each package in the monorepo has its own tag. The GitHub API does not return tags in reverse chronological order. So this approach only worked for repos with under 1100 tags.
This change first checks GitHub for a matching release, because the API allows you to ask for a particular release by tag name. If a matching release is not found, it falls back to searching all tags. This is for those projects that are using tags but not GitHub releases.
Updated tests to cover both cases. Updated jsdoc for relevant methods.
Also, if there is an error while fetching releases/tags, I added the error text to the resulting message to increase debuggability.
Note: I tested this with unit tests but I wasn't able to test this with an actual running server, because I don't have all the relevant config. This should probably be tested with a running server since the unit tests can't account for e.g. misspelling the API or something. I did test the API calls with curl on the command line, but still could have made an error in the code.