UNPKG

renovate

Version:

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

102 lines 4.49 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.JenkinsPluginsDatasource = void 0; const tslib_1 = require("tslib"); const logger_1 = require("../../../logger"); const decorator_1 = require("../../../util/cache/package/decorator"); const clone_1 = require("../../../util/clone"); const timestamp_1 = require("../../../util/timestamp"); const url_1 = require("../../../util/url"); const datasource_1 = require("../datasource"); class JenkinsPluginsDatasource extends datasource_1.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 = (0, url_1.ensureTrailingSlash)(registryUrl); const plugins = await this.getJenkinsPluginInfo(updateSiteUrl); const plugin = plugins[packageName]; if (!plugin) { return null; } const result = (0, clone_1.clone)(plugin); const versions = await this.getJenkinsPluginVersions(updateSiteUrl); const releases = versions[packageName]; result.releases = releases ? (0, clone_1.clone)(releases) : []; return result; } async getJenkinsPluginInfo(updateSiteUrl) { const { plugins } = await this.getJenkinsUpdateCenterResponse(`${updateSiteUrl}${JenkinsPluginsDatasource.packageInfoPath}`); const info = {}; for (const name of Object.keys(plugins ?? [])) { info[name] = { releases: [], // releases sourceUrl: plugins[name]?.scm, }; } return info; } async getJenkinsPluginVersions(updateSiteUrl) { const { plugins } = await this.getJenkinsUpdateCenterResponse(`${updateSiteUrl}${JenkinsPluginsDatasource.packageVersionsPath}`); 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 ?? (0, timestamp_1.asTimestamp)(buildDate); const jenkins = plugins[name][version]?.requiredCore; const constraints = jenkins ? { jenkins: [`>=${jenkins}`] } : undefined; return { version, downloadUrl, releaseTimestamp, ...(constraints && { constraints }), }; }); } return versions; } async getJenkinsUpdateCenterResponse(url) { let response; try { logger_1.logger.debug(`jenkins-plugins: Fetching Jenkins plugins from ${url}`); const startTime = Date.now(); response = (await this.http.getJsonUnchecked(url)).body; const durationMs = Math.round(Date.now() - startTime); logger_1.logger.debug({ durationMs }, `jenkins-plugins: Fetched Jenkins plugins from ${url}`); } catch (err) /* istanbul ignore next */ { this.handleGenericErrors(err); } return response; } } exports.JenkinsPluginsDatasource = JenkinsPluginsDatasource; tslib_1.__decorate([ (0, decorator_1.cache)({ namespace: `datasource-${JenkinsPluginsDatasource.id}`, key: 'info', ttlMinutes: 1440, }) ], JenkinsPluginsDatasource.prototype, "getJenkinsPluginInfo", null); tslib_1.__decorate([ (0, decorator_1.cache)({ namespace: `datasource-${JenkinsPluginsDatasource.id}`, key: 'versions', }) ], JenkinsPluginsDatasource.prototype, "getJenkinsPluginVersions", null); //# sourceMappingURL=index.js.map