UNPKG

renovate

Version:

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

89 lines (88 loc) 3.52 kB
import { fromBase64 } from "../../../util/string.js"; import { logger } from "../../../logger/index.js"; import { joinUrlParts } from "../../../util/url.js"; import { detectPlatform } from "../../../util/common.js"; import api from "../../versioning/semver/index.js"; import { withCache } from "../../../util/cache/package/with-cache.js"; import { Datasource } from "../datasource.js"; import { parseGitUrl } from "../../../util/git/url.js"; import { GithubHttp } from "../../../util/http/github.js"; import { GithubContentResponse } from "../../platform/github/schema.js"; import { BitriseStepFile } from "./schema.js"; import { isArray } from "@sindresorhus/is"; //#region lib/modules/datasource/bitrise/index.ts var BitriseDatasource = class BitriseDatasource extends Datasource { static id = "bitrise"; http; constructor() { super(BitriseDatasource.id); this.http = new 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 = parseGitUrl(registryUrl); if (detectPlatform(registryUrl) !== "github") { logger.once.warn(`${parsedUrl.source} is not a supported Git hoster for this datasource`); return null; } const result = { releases: [] }; const massagedPackageName = encodeURIComponent(packageName); const packageUrl = joinUrlParts(parsedUrl.resource === "github.com" ? "https://api.github.com" : `https://${parsedUrl.resource}/api/v3`, "repos", parsedUrl.full_name, "contents/steps", massagedPackageName); const { body: packageRaw } = await this.http.getJson(packageUrl, GithubContentResponse); if (!isArray(packageRaw)) { logger.warn({ data: packageRaw, url: packageUrl }, "Got unexpected response for Bitrise package location"); return null; } for (const versionDir of packageRaw.filter((element) => api.isValid(element.name))) { const stepUrl = joinUrlParts(packageUrl, versionDir.name, "step.yml"); const { body } = await this.http.getJson(stepUrl, GithubContentResponse); if (!("content" in body)) { logger.warn({ data: body, url: stepUrl }, "Got unexpected response for Bitrise step location"); return null; } if (body.encoding !== "base64") { logger.warn({ encoding: body.encoding, data: body, url: stepUrl }, `Got unexpected encoding for Bitrise step location`); return null; } const content = fromBase64(body.content); const { published_at, source_code_url } = BitriseStepFile.parse(content); result.releases.push({ version: versionDir.name, releaseTimestamp: published_at, sourceUrl: source_code_url }); } if (!result.releases.length) return null; return { ...result, homepage: `https://bitrise.io/integrations/steps/${packageName}` }; } getReleases(config) { return withCache({ namespace: `datasource-${BitriseDatasource.id}`, key: `${config.registryUrl}/${config.packageName}`, fallback: true }, () => this._getReleases(config)); } }; //#endregion export { BitriseDatasource }; //# sourceMappingURL=index.js.map