UNPKG

@redpanda-data/docs-extensions-and-macros

Version:

Antora extensions and macros developed for Redpanda documentation.

81 lines (72 loc) 2.65 kB
const { retryWithBackoff, isRetryableGitHubError } = require('./retry-util'); module.exports = async (github, owner, repo, logger = null) => { const semver = require('semver'); return retryWithBackoff( async () => { // Fetch all the releases from the repository const releases = await github.rest.repos.listReleases({ owner, repo, page: 1, per_page: 50 }); // Filter valid semver tags and sort them to find the highest version const sortedReleases = releases.data .filter(release => semver.valid(release.tag_name.replace(/^v/, ''))) .sort((a, b) => semver.rcompare( a.tag_name.replace(/^v/, ''), b.tag_name.replace(/^v/, '') )); // Find latest non-RC release that is NOT a draft const latestRedpandaRelease = sortedReleases.find( release => !release.tag_name.includes('-rc') && !release.draft ); // Find latest RC release (can be draft or not, adjust if needed) const latestRcRelease = sortedReleases.find( release => release.tag_name.includes('-rc') ); let latestRedpandaReleaseCommitHash = null; if (latestRedpandaRelease) { const commitData = await github.rest.git.getRef({ owner, repo, ref: `tags/${latestRedpandaRelease.tag_name}` }); latestRedpandaReleaseCommitHash = commitData.data.object.sha; } let latestRcReleaseCommitHash = null; if (latestRcRelease) { const rcCommitData = await github.rest.git.getRef({ owner, repo, ref: `tags/${latestRcRelease.tag_name}` }); latestRcReleaseCommitHash = rcCommitData.data.object.sha; } return { latestRedpandaRelease: latestRedpandaRelease ? { version: latestRedpandaRelease.tag_name, commitHash: latestRedpandaReleaseCommitHash.substring(0, 7) } : null, latestRcRelease: latestRcRelease ? { version: latestRcRelease.tag_name, commitHash: latestRcReleaseCommitHash.substring(0, 7) } : null }; }, { maxRetries: 3, initialDelay: 1000, shouldRetry: isRetryableGitHubError, operationName: `Fetch Redpanda version from ${owner}/${repo}` }, logger ).catch(error => { if (logger) { logger.error('Failed to fetch Redpanda release information after retries:', error); } else { console.error('Failed to fetch Redpanda release information after retries:', error); } return { latestRedpandaRelease: null, latestRcRelease: null }; }); };