UNPKG

renovate

Version:

Automated dependency updates. Flexible so you don't need to be.

70 lines (69 loc) 3.1 kB
import { withCache } from "../../../util/cache/package/with-cache.js"; import { Datasource } from "../datasource.js"; import { ForgejoHttp } from "../../../util/http/forgejo.js"; import { Commits, Tag } from "../forgejo-tags/schema.js"; import { ForgejoTagsDatasource } from "../forgejo-tags/index.js"; import { Releases } from "./schema.js"; //#region lib/modules/datasource/forgejo-releases/index.ts var ForgejoReleasesDatasource = class ForgejoReleasesDatasource extends Datasource { static id = "forgejo-releases"; http = new ForgejoHttp(ForgejoReleasesDatasource.id); static defaultRegistryUrls = ["https://code.forgejo.org"]; static cacheNamespace = `datasource-${ForgejoReleasesDatasource.id}`; releaseTimestampSupport = true; releaseTimestampNote = "The release timestamp is determined from the `published_at` field in the results."; sourceUrlSupport = "package"; sourceUrlNote = "The source URL is determined by using the `packageName` and `registryUrl`."; constructor() { super(ForgejoReleasesDatasource.id); } async _getReleases({ registryUrl, packageName: repo }) { const url = `${ForgejoTagsDatasource.getApiUrl(registryUrl)}repos/${repo}/releases?draft=false`; const tags = (await this.http.getJson(url, { paginate: true }, Releases)).body; return { sourceUrl: ForgejoTagsDatasource.getSourceUrl(repo, registryUrl), registryUrl: ForgejoTagsDatasource.getRegistryURL(registryUrl), releases: tags.map(({ tag_name, published_at, prerelease }) => ({ version: tag_name, gitRef: tag_name, releaseTimestamp: published_at, isStable: !prerelease })) }; } getReleases(config) { return withCache({ namespace: ForgejoReleasesDatasource.cacheNamespace, key: ForgejoTagsDatasource.getCacheKey(config.registryUrl, config.packageName, "releases"), fallback: true }, () => this._getReleases(config)); } async _getTagCommit(registryUrl, repo, tag) { const url = `${ForgejoTagsDatasource.getApiUrl(registryUrl)}repos/${repo}/tags/${tag}`; const { body } = await this.http.getJson(url, Tag); return body.commit.sha; } getTagCommit(registryUrl, repo, tag) { return withCache({ namespace: ForgejoReleasesDatasource.cacheNamespace, key: ForgejoTagsDatasource.getCacheKey(registryUrl, repo, `tag-${tag}`) }, () => this._getTagCommit(registryUrl, repo, tag)); } async _getDigest({ packageName: repo, registryUrl }, newValue) { if (newValue?.length) return this.getTagCommit(registryUrl, repo, newValue); const url = `${ForgejoTagsDatasource.getApiUrl(registryUrl)}repos/${repo}/commits?stat=false&verification=false&files=false&page=1&limit=1`; const { body } = await this.http.getJson(url, Commits); if (body.length === 0) return null; return body[0].sha; } getDigest(config, newValue) { return withCache({ namespace: ForgejoReleasesDatasource.cacheNamespace, key: ForgejoTagsDatasource.getCacheKey(config.registryUrl, config.packageName, "digest"), fallback: true }, () => this._getDigest(config, newValue)); } }; //#endregion export { ForgejoReleasesDatasource }; //# sourceMappingURL=index.js.map