renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
70 lines (69 loc) • 3.1 kB
JavaScript
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