renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
104 lines • 4.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AzurePipelinesTasksDatasource = void 0;
const tslib_1 = require("tslib");
const global_1 = require("../../../config/global");
const decorator_1 = require("../../../util/cache/package/decorator");
const hostRules = tslib_1.__importStar(require("../../../util/host-rules"));
const loose_1 = require("../../versioning/loose");
const datasource_1 = require("../datasource");
const schema_1 = require("./schema");
const TASKS_URL_BASE = 'https://raw.githubusercontent.com/renovatebot/azure-devops-marketplace/main';
const BUILT_IN_TASKS_URL = `${TASKS_URL_BASE}/azure-pipelines-builtin-tasks.json`;
const MARKETPLACE_TASKS_URL = `${TASKS_URL_BASE}/azure-pipelines-marketplace-tasks.json`;
const BUILT_IN_TASKS_CHANGELOG_URL = 'https://github.com/microsoft/azure-pipelines-tasks/releases';
class AzurePipelinesTasksDatasource extends datasource_1.Datasource {
static id = 'azure-pipelines-tasks';
constructor() {
super(AzurePipelinesTasksDatasource.id);
}
customRegistrySupport = false;
defaultVersioning = loose_1.id;
async getReleases({ packageName, }) {
const platform = global_1.GlobalConfig.get('platform');
const endpoint = global_1.GlobalConfig.get('endpoint');
const { token } = hostRules.find({
hostType: AzurePipelinesTasksDatasource.id,
url: endpoint,
});
if (platform === 'azure' && endpoint && token) {
const auth = Buffer.from(`renovate:${token}`).toString('base64');
const opts = {
headers: { authorization: `Basic ${auth}` },
};
const results = await this.getTasks(`${endpoint}/_apis/distributedtask/tasks/`, opts, schema_1.AzurePipelinesJSON);
const result = { releases: [] };
results.value
.filter((task) => {
const matchers = [
task.id === packageName,
task.name === packageName,
task.contributionIdentifier !== null &&
`${task.contributionIdentifier}.${task.id}` === packageName,
task.contributionIdentifier !== null &&
`${task.contributionIdentifier}.${task.name}` === packageName,
];
return matchers.some((match) => match);
})
.sort(AzurePipelinesTasksDatasource.compareSemanticVersions('version'))
.forEach((task) => {
const release = {
version: `${task.version.major}.${task.version.minor}.${task.version.patch}`,
changelogContent: task.releaseNotes,
isDeprecated: task.deprecated,
};
if (task.serverOwned) {
release.changelogUrl = BUILT_IN_TASKS_CHANGELOG_URL;
}
result.releases.push(release);
});
return result;
}
else {
const versions = (await this.getTasks(BUILT_IN_TASKS_URL, {}, schema_1.AzurePipelinesFallbackTasks))[packageName.toLowerCase()] ??
(await this.getTasks(MARKETPLACE_TASKS_URL, {}, schema_1.AzurePipelinesFallbackTasks))[packageName.toLowerCase()];
if (versions) {
const releases = versions.map((version) => ({ version }));
return { releases };
}
}
return null;
}
async getTasks(url, opts, schema) {
const { body } = await this.http.getJson(url, opts, schema);
return body;
}
static compareSemanticVersions = (key) => (a, b) => {
const a1Version = schema_1.AzurePipelinesTaskVersion.safeParse(a[key]).data;
const b1Version = schema_1.AzurePipelinesTaskVersion.safeParse(b[key]).data;
const a1 = a1Version === undefined
? ''
: `${a1Version.major}.${a1Version.minor}.${a1Version.patch}`;
const b1 = b1Version === undefined
? ''
: `${b1Version.major}.${b1Version.minor}.${b1Version.patch}`;
const len = Math.min(a1.length, b1.length);
for (let i = 0; i < len; i++) {
const a2 = +a1[i] || 0;
const b2 = +b1[i] || 0;
if (a2 !== b2) {
return a2 > b2 ? 1 : -1;
}
}
return b1.length - a1.length;
};
}
exports.AzurePipelinesTasksDatasource = AzurePipelinesTasksDatasource;
tslib_1.__decorate([
(0, decorator_1.cache)({
namespace: `datasource-${AzurePipelinesTasksDatasource.id}`,
key: (url) => url,
ttlMinutes: 24 * 60,
})
], AzurePipelinesTasksDatasource.prototype, "getTasks", null);
//# sourceMappingURL=index.js.map