renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
70 lines (69 loc) • 2.45 kB
JavaScript
import { logger } from "../../../logger/index.js";
import { id } from "../../versioning/rust-release-channel/index.js";
import { withCache } from "../../../util/cache/package/with-cache.js";
import { asTimestamp } from "../../../util/timestamp.js";
import { Datasource } from "../datasource.js";
import { parseManifestUrl } from "./parse.js";
//#region lib/modules/datasource/rust-version/index.ts
var RustVersionDatasource = class RustVersionDatasource extends Datasource {
static id = "rust-version";
customRegistrySupport = false;
defaultRegistryUrls = ["https://static.rust-lang.org"];
defaultVersioning = id;
releaseTimestampSupport = true;
releaseTimestampNote = "The release timestamp is parsed from the release manifest URL.";
sourceUrlSupport = "package";
caching = true;
constructor() {
super(RustVersionDatasource.id);
}
async getManifests(url) {
const lines = (await this.http.getText(url)).body.split("\n");
const parsedResults = [];
for (const line of lines) {
if (!line.trim()) continue;
const parsed = parseManifestUrl(line);
if (parsed) parsedResults.push(parsed);
else logger.warn({ line }, "Failed to parse manifest URL");
}
return parsedResults;
}
async _getReleases({ registryUrl }) {
const url = new URL("manifests.txt", registryUrl);
let parsedResults;
try {
parsedResults = await this.getManifests(url);
} catch (err) {
this.handleGenericErrors(err);
}
const filteredResults = parsedResults.filter((result) => result.version !== "stable" && result.version !== "beta");
const versionMap = /* @__PURE__ */ new Map();
for (const parsed of filteredResults) {
const version = parsed.version === "nightly" ? `nightly-${parsed.date}` : parsed.version;
versionMap.set(version, parsed.date);
}
const releaseResult = {
releases: [],
homepage: "https://rust-lang.org/",
sourceUrl: "https://github.com/rust-lang/rust",
changelogUrl: "https://github.com/rust-lang/rust/blob/main/RELEASES.md"
};
for (const [version, date] of versionMap.entries()) {
const releaseTimestamp = asTimestamp(date);
releaseResult.releases.push({
version,
releaseTimestamp
});
}
return releaseResult;
}
getReleases(config) {
return withCache({
namespace: `datasource-${RustVersionDatasource.id}`,
key: config.registryUrl
}, () => this._getReleases(config));
}
};
//#endregion
export { RustVersionDatasource };
//# sourceMappingURL=index.js.map