diff options
author | 06kellyjac <dev@j-k.io> | 2021-03-12 19:14:19 +0000 |
---|---|---|
committer | 06kellyjac <dev@j-k.io> | 2021-03-12 19:34:26 +0000 |
commit | c034a1412b180950af7de2ef004bdaa09d93516f (patch) | |
tree | 21bdc2c64aa149019b7818b9c02c91af309177f6 | |
parent | 9611f03177670fad02df91c83f38f53dab31df28 (diff) | |
download | nixpkgs-c034a1412b180950af7de2ef004bdaa09d93516f.tar nixpkgs-c034a1412b180950af7de2ef004bdaa09d93516f.tar.gz nixpkgs-c034a1412b180950af7de2ef004bdaa09d93516f.tar.bz2 nixpkgs-c034a1412b180950af7de2ef004bdaa09d93516f.tar.lz nixpkgs-c034a1412b180950af7de2ef004bdaa09d93516f.tar.xz nixpkgs-c034a1412b180950af7de2ef004bdaa09d93516f.tar.zst nixpkgs-c034a1412b180950af7de2ef004bdaa09d93516f.zip |
deno: update update script to changed deno
-rw-r--r-- | pkgs/development/web/deno/update/common.ts | 34 | ||||
-rw-r--r-- | pkgs/development/web/deno/update/deps.ts | 79 | ||||
-rw-r--r-- | pkgs/development/web/deno/update/librusty_v8.ts | 92 | ||||
-rw-r--r-- | pkgs/development/web/deno/update/src.ts | 10 | ||||
-rwxr-xr-x | pkgs/development/web/deno/update/update.ts | 16 |
5 files changed, 113 insertions, 118 deletions
diff --git a/pkgs/development/web/deno/update/common.ts b/pkgs/development/web/deno/update/common.ts index d8956b21d16..1b4e3509ea7 100644 --- a/pkgs/development/web/deno/update/common.ts +++ b/pkgs/development/web/deno/update/common.ts @@ -3,12 +3,15 @@ interface GHRelease { } const decode = (buffer: Uint8Array) => new TextDecoder("utf-8").decode(buffer); -const run = async (command: string, args: string[]) => { - const cmd = Deno.run( - { cmd: [command, ...args], stdout: "piped", stderr: "piped" }, - ); +const decodeTrim = (b: Uint8Array) => decode(b).trimEnd(); +export const run = async (command: string, args: string[]) => { + const cmd = Deno.run({ + cmd: [command, ...args], + stdout: "piped", + stderr: "piped", + }); if (!(await cmd.status()).success) { - const error = await cmd.stderrOutput().then((b) => decode(b).trimEnd()); + const error = await cmd.stderrOutput().then(decodeTrim); // Known error we can ignore if (error.includes("'allow-unsafe-native-code-during-evaluation'")) { // Extract the target sha256 out of the error @@ -23,26 +26,16 @@ const run = async (command: string, args: string[]) => { } throw new Error(error); } - return cmd.output().then((b) => decode(b).trimEnd()); + return cmd.output().then(decodeTrim); }; // Exports export const versionRegExp = /\d+\.\d+\.\d+/; -export const sha256RegExp = /[a-z0-9]{52}/; - -export async function commit( - name: string, - oldVer: string, - newVer: string, - files: string[], -) { - await run("git", ["add", ...files]); - await run("git", ["commit", "-m", `${name}: ${oldVer} -> ${newVer}`]); -} +export const sha256RegExp = /[a-z0-9]{52}|sha256-.{44}/; export const getExistingVersion = async (filePath: string) => - read(filePath).then((s) => - s.match(genValueRegExp("version", versionRegExp))?.shift() || "" + read(filePath).then( + (s) => s.match(genValueRegExp("version", versionRegExp))?.shift() || "", ); export const getLatestVersion = (owner: string, repo: string) => @@ -58,8 +51,5 @@ export const genValueRegExp = (key: string, regex: RegExp) => export const logger = (name: string) => (...a: any) => console.log(`[${name}]`, ...a); -export const nixPrefetch = (args: string[]) => run("nix-prefetch", args); -export const nixPrefetchURL = (args: string[]) => run("nix-prefetch-url", args); - export const read = Deno.readTextFile; export const write = Deno.writeTextFile; diff --git a/pkgs/development/web/deno/update/deps.ts b/pkgs/development/web/deno/update/deps.ts deleted file mode 100644 index f4266e1c90f..00000000000 --- a/pkgs/development/web/deno/update/deps.ts +++ /dev/null @@ -1,79 +0,0 @@ -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 { - librusty_v8 = { - 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 librusty_v8 version"; - } - log("librusty_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"); -} diff --git a/pkgs/development/web/deno/update/librusty_v8.ts b/pkgs/development/web/deno/update/librusty_v8.ts new file mode 100644 index 00000000000..dee3277c581 --- /dev/null +++ b/pkgs/development/web/deno/update/librusty_v8.ts @@ -0,0 +1,92 @@ +import { + genValueRegExp, + getExistingVersion, + logger, + run, + versionRegExp, + write, +} from "./common.ts"; + +const log = logger("librusty_v8"); + +export interface Architecture { + nix: string; + rust: string; +} +interface PrefetchResult { + arch: Architecture; + sha256: string; +} + +const getLibrustyV8Version = 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 fetchArchShaTasks = (version: string, arches: Architecture[]) => + arches.map( + async (arch: Architecture): Promise<PrefetchResult> => { + log("Fetching:", arch.nix); + const sha256 = await run("nix-prefetch", [ + ` +{ fetchurl }: +fetchurl { + url = "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! +{ rust, stdenv, fetchurl }: + +let + arch = rust.toRustTarget stdenv.hostPlatform; + fetch_librusty_v8 = args: fetchurl { + name = "librusty_v8-\${args.version}"; + url = "https://github.com/denoland/rusty_v8/releases/download/v\${args.version}/librusty_v8_release_\${arch}.a"; + sha256 = args.shas.\${stdenv.hostPlatform.system}; + meta = { inherit (args) version; }; + }; +in +fetch_librusty_v8 { + version = "${version}"; + shas = { +${deps.map(({ arch, sha256 }) => ` ${arch.nix} = "${sha256}";`).join("\n")} + }; +} +`; + +export async function updateLibrustyV8( + filePath: string, + owner: string, + repo: string, + denoVersion: string, + arches: Architecture[], +) { + log("Starting librusty_v8 update"); + // 0.0.0 + const version = await getLibrustyV8Version(owner, repo, denoVersion); + if (typeof version !== "string") { + throw "no librusty_v8 version"; + } + log("librusty_v8 version:", version); + const existingVersion = await getExistingVersion(filePath); + if (version === existingVersion) { + log("Version already matches latest, skipping..."); + return; + } + const archShaResults = await Promise.all(fetchArchShaTasks(version, arches)); + await write(filePath, templateDeps(version, archShaResults)); + log("Finished deps update"); +} diff --git a/pkgs/development/web/deno/update/src.ts b/pkgs/development/web/deno/update/src.ts index fae15acd0d2..3bfae27c21c 100644 --- a/pkgs/development/web/deno/update/src.ts +++ b/pkgs/development/web/deno/update/src.ts @@ -1,8 +1,8 @@ import { genValueRegExp, logger, - nixPrefetch, read, + run, sha256RegExp, versionRegExp, write, @@ -16,10 +16,11 @@ interface Replacer { const log = logger("src"); const prefetchSha256 = (nixpkgs: string, version: string) => - nixPrefetch(["-f", nixpkgs, "deno.src", "--rev", version]); + run("nix-prefetch", ["-f", nixpkgs, "deno.src", "--rev", version]); const prefetchCargoSha256 = (nixpkgs: string) => - nixPrefetch( - [`{ sha256 }: (import ${nixpkgs} {}).deno.cargoDeps.overrideAttrs (_: { outputHash = sha256; })`], + run( + "nix-prefetch", + [`{ sha256 }: (import ${nixpkgs} {}).deno.cargoDeps.overrideAttrs (_: { inherit sha256; })`], ); const replace = (str: string, replacers: Replacer[]) => @@ -53,7 +54,6 @@ export async function updateSrc( [ genVerReplacer("version", trimVersion), genShaReplacer("sha256", sha256), - genShaReplacer("cargoSha256", ""), // Empty ready for prefetchCargoSha256 ], ); log("Fetching cargoSha256 for:", sha256); diff --git a/pkgs/development/web/deno/update/update.ts b/pkgs/development/web/deno/update/update.ts index 232c2482b1c..27e1d86ee86 100755 --- a/pkgs/development/web/deno/update/update.ts +++ b/pkgs/development/web/deno/update/update.ts @@ -2,13 +2,8 @@ /* #!nix-shell -i "deno run --allow-net --allow-run --allow-read --allow-write" -p deno git nix-prefetch */ -import { - commit, - getExistingVersion, - getLatestVersion, - logger, -} from "./common.ts"; -import { Architecture, updateDeps } from "./deps.ts"; +import { getExistingVersion, getLatestVersion, logger } from "./common.ts"; +import { Architecture, updateLibrustyV8 } from "./librusty_v8.ts"; import { updateSrc } from "./src.ts"; const log = logger("update"); @@ -19,7 +14,7 @@ const owner = "denoland"; const repo = "deno"; const denoDir = `${nixpkgs}/pkgs/development/web/${repo}`; const src = `${denoDir}/default.nix`; -const deps = `${denoDir}/deps.nix`; +const librusty_v8 = `${denoDir}/librusty_v8.nix`; const architectures: Architecture[] = [ { nix: "x86_64-linux", rust: "x86_64-unknown-linux-gnu" }, { nix: "aarch64-linux", rust: "aarch64-unknown-linux-gnu" }, @@ -42,10 +37,7 @@ if (trimVersion === existingVersion) { const tasks = [ updateSrc(src, nixpkgs, version), - updateDeps(deps, owner, repo, version, architectures), + updateLibrustyV8(librusty_v8, owner, repo, version, architectures), ]; await Promise.all(tasks); log("Updating deno complete"); -log("Commiting"); -await commit(repo, existingVersion, trimVersion, [src, deps]); -log("Done"); |