renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
91 lines (90 loc) • 3.83 kB
JavaScript
import { logger } from "../../../logger/index.js";
import { clone } from "../../../util/clone.js";
import { ensureTrailingSlash } from "../../../util/url.js";
import { withCache } from "../../../util/cache/package/with-cache.js";
import { asTimestamp } from "../../../util/timestamp.js";
import { Datasource } from "../datasource.js";
import { JenkinsPluginsInfoResponse, JenkinsPluginsVersionsResponse } from "./schema.js";
//#region lib/modules/datasource/jenkins-plugins/index.ts
var JenkinsPluginsDatasource = class JenkinsPluginsDatasource extends Datasource {
static id = "jenkins-plugins";
constructor() {
super(JenkinsPluginsDatasource.id);
}
customRegistrySupport = true;
defaultRegistryUrls = ["https://updates.jenkins.io"];
registryStrategy = "hunt";
static packageInfoPath = "current/update-center.actual.json";
static packageVersionsPath = "current/plugin-versions.json";
releaseTimestampSupport = true;
releaseTimestampNote = "The releaseTimestamp is determined from the `releaseTimestamp` or `buildDate` field in the results.";
sourceUrlSupport = "package";
sourceUrlNote = "The source URL is determined from the `scm` field in the results.";
async getReleases({ packageName, registryUrl }) {
/* v8 ignore next 3 -- should never happen */
if (!registryUrl) return null;
const updateSiteUrl = ensureTrailingSlash(registryUrl);
const plugin = (await this.getJenkinsPluginInfo(updateSiteUrl))[packageName];
if (!plugin) return null;
const result = clone(plugin);
const releases = (await this.getJenkinsPluginVersions(updateSiteUrl))[packageName];
result.releases = releases ? clone(releases) : [];
return result;
}
async _getJenkinsPluginInfo(updateSiteUrl) {
const { plugins } = await this.getJenkinsUpdateCenterResponse(`${updateSiteUrl}${JenkinsPluginsDatasource.packageInfoPath}`, JenkinsPluginsInfoResponse);
const info = {};
for (const name of Object.keys(plugins)) info[name] = {
releases: [],
sourceUrl: plugins[name]?.scm
};
return info;
}
getJenkinsPluginInfo(updateSiteUrl) {
return withCache({
namespace: `datasource-${JenkinsPluginsDatasource.id}`,
key: "info",
ttlMinutes: 1440
}, () => this._getJenkinsPluginInfo(updateSiteUrl));
}
async _getJenkinsPluginVersions(updateSiteUrl) {
const { plugins } = await this.getJenkinsUpdateCenterResponse(`${updateSiteUrl}${JenkinsPluginsDatasource.packageVersionsPath}`, JenkinsPluginsVersionsResponse);
const versions = {};
for (const name of Object.keys(plugins)) versions[name] = Object.keys(plugins[name]).map((version) => {
const downloadUrl = plugins[name][version]?.url;
const buildDate = plugins[name][version]?.buildDate;
const releaseTimestamp = plugins[name][version]?.releaseTimestamp ?? asTimestamp(buildDate);
const jenkins = plugins[name][version]?.requiredCore;
const constraints = jenkins ? { jenkins: [`>=${jenkins}`] } : void 0;
return {
version,
downloadUrl,
releaseTimestamp,
...constraints && { constraints }
};
});
return versions;
}
getJenkinsPluginVersions(updateSiteUrl) {
return withCache({
namespace: `datasource-${JenkinsPluginsDatasource.id}`,
key: "versions"
}, () => this._getJenkinsPluginVersions(updateSiteUrl));
}
async getJenkinsUpdateCenterResponse(url, schema) {
let response;
try {
logger.debug(`jenkins-plugins: Fetching Jenkins plugins from ${url}`);
const startTime = Date.now();
response = (await this.http.getJson(url, schema)).body;
const durationMs = Math.round(Date.now() - startTime);
logger.debug({ durationMs }, `jenkins-plugins: Fetched Jenkins plugins from ${url}`);
} catch (err) /* istanbul ignore next */ {
this.handleGenericErrors(err);
}
return response;
}
};
//#endregion
export { JenkinsPluginsDatasource };
//# sourceMappingURL=index.js.map