aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/pkgs/development/web/deno/update/deps.ts
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/web/deno/update/deps.ts')
-rw-r--r--nixpkgs/pkgs/development/web/deno/update/deps.ts79
1 files changed, 79 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/web/deno/update/deps.ts b/nixpkgs/pkgs/development/web/deno/update/deps.ts
new file mode 100644
index 00000000000..beedeade3a8
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/deno/update/deps.ts
@@ -0,0 +1,79 @@
+import {
+ getExistingVersion,
+ genValueRegExp,
+ logger,
+ nixPrefetchURL,
+ versionRegExp,
+ write,
+} from "./common.ts";
+
+const log = logger("deps");
+
+export interface Architecture {
+ nix: string;
+ rust: string;
+}
+interface PrefetchResult {
+ arch: Architecture;
+ sha256: string;
+}
+
+const getRustyV8Version = async (
+ owner: string,
+ repo: string,
+ version: string,
+) =>
+ fetch(
+ `https://github.com/${owner}/${repo}/raw/${version}/core/Cargo.toml`,
+ )
+ .then((res) => res.text())
+ .then((txt) =>
+ txt.match(genValueRegExp("rusty_v8", versionRegExp))?.shift()
+ );
+
+const archShaTasks = (version: string, arches: Architecture[]) =>
+ arches.map(async (arch: Architecture): Promise<PrefetchResult> => {
+ log("Fetching:", arch.nix);
+ const sha256 = await nixPrefetchURL(
+ [`https://github.com/denoland/rusty_v8/releases/download/v${version}/librusty_v8_release_${arch.rust}.a`],
+ );
+ log("Done: ", arch.nix);
+ return { arch, sha256 };
+ });
+
+const templateDeps = (version: string, deps: PrefetchResult[]) =>
+ `# auto-generated file -- DO NOT EDIT!
+{}:
+rec {
+ rustyV8Lib = {
+ version = "${version}";
+ sha256s = {
+${deps.map((d) => ` ${d.arch.nix} = "${d.sha256}";`).join("\n")}
+ };
+ };
+}
+`;
+
+export async function updateDeps(
+ filePath: string,
+ owner: string,
+ repo: string,
+ denoVersion: string,
+ arches: Architecture[],
+) {
+ log("Starting deps update");
+ // 0.0.0
+ const version = await getRustyV8Version(owner, repo, denoVersion);
+ if (typeof version !== "string") {
+ throw "no rusty_v8 version";
+ }
+ log("rusty_v8 version:", version);
+ const existingVersion = await getExistingVersion(filePath);
+ if (version === existingVersion) {
+ log("Version already matches latest, skipping...");
+ return;
+ }
+ const archShaResults = await Promise.all(archShaTasks(version, arches));
+ await write(filePath, templateDeps(version, archShaResults));
+ log("Finished deps update");
+}