@redpanda-data/docs-extensions-and-macros
Version:
Antora extensions and macros developed for Redpanda documentation.
81 lines (72 loc) • 2.65 kB
JavaScript
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 };
});
};