renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
92 lines • 4.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BitriseDatasource = void 0;
const tslib_1 = require("tslib");
const is_1 = tslib_1.__importDefault(require("@sindresorhus/is"));
const logger_1 = require("../../../logger");
const decorator_1 = require("../../../util/cache/package/decorator");
const common_1 = require("../../../util/common");
const url_1 = require("../../../util/git/url");
const github_1 = require("../../../util/http/github");
const string_1 = require("../../../util/string");
const url_2 = require("../../../util/url");
const schema_1 = require("../../platform/github/schema");
const semver_1 = tslib_1.__importDefault(require("../../versioning/semver"));
const datasource_1 = require("../datasource");
const schema_2 = require("./schema");
class BitriseDatasource extends datasource_1.Datasource {
static id = 'bitrise';
http;
constructor() {
super(BitriseDatasource.id);
this.http = new github_1.GithubHttp(this.id);
}
customRegistrySupport = true;
defaultRegistryUrls = [
'https://github.com/bitrise-io/bitrise-steplib.git',
];
releaseTimestampSupport = true;
releaseTimestampNote = 'The release timestamp is determined from the `published_at` field in the results.';
sourceUrlSupport = 'release';
sourceUrlNote = 'The source URL is determined from the `source_code_url` field of the release object in the results.';
async getReleases({ packageName, registryUrl, }) {
/* v8 ignore next 3 -- should never happen */
if (!registryUrl) {
return null;
}
const parsedUrl = (0, url_1.parseGitUrl)(registryUrl);
if ((0, common_1.detectPlatform)(registryUrl) !== 'github') {
logger_1.logger.once.warn(`${parsedUrl.source} is not a supported Git hoster for this datasource`);
return null;
}
const result = {
releases: [],
};
const massagedPackageName = encodeURIComponent(packageName);
const baseApiURL = parsedUrl.resource === 'github.com'
? 'https://api.github.com'
: `https://${parsedUrl.resource}/api/v3`;
const packageUrl = (0, url_2.joinUrlParts)(baseApiURL, 'repos', parsedUrl.full_name, 'contents/steps', massagedPackageName);
const { body: packageRaw } = await this.http.getJson(packageUrl, schema_1.GithubContentResponse);
if (!is_1.default.array(packageRaw)) {
logger_1.logger.warn({ data: packageRaw, url: packageUrl }, 'Got unexpected response for Bitrise package location');
return null;
}
for (const versionDir of packageRaw.filter((element) => semver_1.default.isValid(element.name))) {
const stepUrl = (0, url_2.joinUrlParts)(packageUrl, versionDir.name, 'step.yml');
// TODO use getRawFile when ready #30155
const { body } = await this.http.getJson(stepUrl, schema_1.GithubContentResponse);
if (!('content' in body)) {
logger_1.logger.warn({ data: body, url: stepUrl }, 'Got unexpected response for Bitrise step location');
return null;
}
if (body.encoding !== 'base64') {
logger_1.logger.warn({ encoding: body.encoding, data: body, url: stepUrl }, `Got unexpected encoding for Bitrise step location`);
return null;
}
const content = (0, string_1.fromBase64)(body.content);
const { published_at, source_code_url } = schema_2.BitriseStepFile.parse(content);
result.releases.push({
version: versionDir.name,
releaseTimestamp: published_at,
sourceUrl: source_code_url,
});
}
// if we have no releases return null
if (!result.releases.length) {
return null;
}
return {
...result,
homepage: `https://bitrise.io/integrations/steps/${packageName}`,
};
}
}
exports.BitriseDatasource = BitriseDatasource;
tslib_1.__decorate([
(0, decorator_1.cache)({
namespace: `datasource-${BitriseDatasource.id}`,
key: ({ packageName, registryUrl }) => `${registryUrl}/${packageName}`,
})
], BitriseDatasource.prototype, "getReleases", null);
//# sourceMappingURL=index.js.map