renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
53 lines (52 loc) • 2.67 kB
JavaScript
import { fromBase64 } from "../../../../../../util/string.js";
import { logger } from "../../../../../../logger/index.js";
import { ensureTrailingSlash, joinUrlParts } from "../../../../../../util/url.js";
import { GithubHttp } from "../../../../../../util/http/github.js";
import { memCacheProvider } from "../../../../../../util/http/cache/memory-http-cache-provider.js";
import { queryReleases } from "../../../../../../util/github/graphql/index.js";
import { compareChangelogFilePath } from "../common.js";
import changelogFilenameRegex from "changelog-filename-regex";
const http = new GithubHttp("github-changelog");
async function getReleaseNotesMd(repository, apiBaseUrl, sourceDirectory) {
logger.trace("github.getReleaseNotesMd()");
const apiPrefix = `${ensureTrailingSlash(apiBaseUrl)}repos/${repository}`;
const { default_branch: defaultBranch = "HEAD" } = (await http.getJsonUnchecked(apiPrefix, { cacheProvider: memCacheProvider })).body;
const res = await http.getJsonUnchecked(`${apiPrefix}/git/trees/${defaultBranch}${sourceDirectory ? "?recursive=1" : ""}`, { cacheProvider: memCacheProvider });
// istanbul ignore if
if (res.body.truncated) logger.debug(`Git tree truncated repository:${repository}`);
const allFiles = res.body.tree.filter((f) => f.type === "blob");
let files = [];
if (sourceDirectory?.length) files = allFiles.filter((f) => f.path.startsWith(sourceDirectory)).filter((f) => changelogFilenameRegex.test(f.path.replace(ensureTrailingSlash(sourceDirectory), "")));
if (!files.length) files = allFiles.filter((f) => changelogFilenameRegex.test(f.path));
if (!files.length) {
logger.trace("no changelog file found");
return null;
}
const { path: changelogFile, sha } = files.sort((a, b) => compareChangelogFilePath(a.path, b.path)).shift();
/* istanbul ignore if */
if (files.length !== 0) logger.debug(`Multiple candidates for changelog file, using ${changelogFile}`);
return {
changelogFile,
changelogMd: `${fromBase64((await http.getJsonUnchecked(`${apiPrefix}/git/blobs/${sha}`, { cacheProvider: memCacheProvider })).body.content)}\n#\n##`
};
}
async function getReleaseList(project, _release) {
logger.trace("github.getReleaseList()");
const apiBaseUrl = project.apiBaseUrl;
const repository = project.repository;
const notesSourceUrl = joinUrlParts(apiBaseUrl, "repos", repository, "releases");
return (await queryReleases({
registryUrl: apiBaseUrl,
packageName: repository
}, http)).map(({ url, id, version: tag, name, description: body }) => ({
url,
notesSourceUrl,
id,
tag,
name,
body
}));
}
//#endregion
export { getReleaseList, getReleaseNotesMd };
//# sourceMappingURL=index.js.map