aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/pkgs/development/web/deno/update/src.ts
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/web/deno/update/src.ts')
-rw-r--r--nixpkgs/pkgs/development/web/deno/update/src.ts67
1 files changed, 67 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/web/deno/update/src.ts b/nixpkgs/pkgs/development/web/deno/update/src.ts
new file mode 100644
index 00000000000..fae15acd0d2
--- /dev/null
+++ b/nixpkgs/pkgs/development/web/deno/update/src.ts
@@ -0,0 +1,67 @@
+import {
+ genValueRegExp,
+ logger,
+ nixPrefetch,
+ read,
+ sha256RegExp,
+ versionRegExp,
+ write,
+} from "./common.ts";
+
+interface Replacer {
+ regex: RegExp;
+ value: string;
+}
+
+const log = logger("src");
+
+const prefetchSha256 = (nixpkgs: string, version: string) =>
+ nixPrefetch(["-f", nixpkgs, "deno.src", "--rev", version]);
+const prefetchCargoSha256 = (nixpkgs: string) =>
+ nixPrefetch(
+ [`{ sha256 }: (import ${nixpkgs} {}).deno.cargoDeps.overrideAttrs (_: { outputHash = sha256; })`],
+ );
+
+const replace = (str: string, replacers: Replacer[]) =>
+ replacers.reduce(
+ (str, r) => str.replace(r.regex, r.value),
+ str,
+ );
+
+const updateNix = (filePath: string, replacers: Replacer[]) =>
+ read(filePath).then((str) => write(filePath, replace(str, replacers)));
+
+const genVerReplacer = (k: string, value: string): Replacer => (
+ { regex: genValueRegExp(k, versionRegExp), value }
+);
+const genShaReplacer = (k: string, value: string): Replacer => (
+ { regex: genValueRegExp(k, sha256RegExp), value }
+);
+
+export async function updateSrc(
+ filePath: string,
+ nixpkgs: string,
+ denoVersion: string,
+) {
+ log("Starting src update");
+ const trimVersion = denoVersion.substr(1);
+ log("Fetching sha256 for:", trimVersion);
+ const sha256 = await prefetchSha256(nixpkgs, denoVersion);
+ log("sha256 to update:", sha256);
+ await updateNix(
+ filePath,
+ [
+ genVerReplacer("version", trimVersion),
+ genShaReplacer("sha256", sha256),
+ genShaReplacer("cargoSha256", ""), // Empty ready for prefetchCargoSha256
+ ],
+ );
+ log("Fetching cargoSha256 for:", sha256);
+ const cargoSha256 = await prefetchCargoSha256(nixpkgs);
+ log("cargoSha256 to update:", cargoSha256);
+ await updateNix(
+ filePath,
+ [genShaReplacer("cargoSha256", cargoSha256)],
+ );
+ log("Finished src update");
+}