fix and split
This commit is contained in:
parent
1f99487aaf
commit
38c163ab75
122
nix/default.nix
122
nix/default.nix
|
@ -1,122 +0,0 @@
|
|||
{
|
||||
pkgs,
|
||||
lib ? pkgs.lib,
|
||||
}: let
|
||||
inherit (builtins) readFile hashString split elemAt fetchurl toJSON baseNameOf;
|
||||
inherit (pkgs) linkFarm writeText stdenv writeShellScriptBin;
|
||||
inherit (lib) flatten mapAttrsToList importJSON cleanSourceWith;
|
||||
|
||||
urlPart = url: elemAt (flatten (split "://([a-z0-9\.]*)" url));
|
||||
artifactPath = url: "${urlPart url 0}/${urlPart url 1}/${hashString "sha256" (urlPart url 2)}";
|
||||
|
||||
mkDepsLink = lockfile:
|
||||
linkFarm "deps" (flatten (
|
||||
mapAttrsToList
|
||||
(
|
||||
url: sha256: [
|
||||
{
|
||||
name = artifactPath url;
|
||||
path = fetchurl {inherit url sha256;};
|
||||
}
|
||||
{
|
||||
name = (artifactPath url) + ".metadata.json";
|
||||
path = writeText "metadata.json" (toJSON {
|
||||
inherit url;
|
||||
headers = {};
|
||||
});
|
||||
}
|
||||
]
|
||||
)
|
||||
(importJSON lockfile)
|
||||
));
|
||||
in rec {
|
||||
mkBundled = {
|
||||
name,
|
||||
version,
|
||||
src,
|
||||
entrypoint,
|
||||
lockfile,
|
||||
importMap ? null,
|
||||
denoFlags ? [],
|
||||
}:
|
||||
stdenv.mkDerivation {
|
||||
inherit name version entrypoint;
|
||||
denoFlags =
|
||||
denoFlags
|
||||
++ (
|
||||
if importMap != null
|
||||
then ["--import-map" importMap]
|
||||
else []
|
||||
);
|
||||
|
||||
src = cleanSourceWith {
|
||||
inherit src;
|
||||
filter = path: type: (baseNameOf path != "bundled.js");
|
||||
};
|
||||
buildInputs = with pkgs; [
|
||||
deno
|
||||
jq
|
||||
];
|
||||
|
||||
buildPhase = ''
|
||||
export DENO_DIR=`mktemp -d`
|
||||
ln -s "${mkDepsLink lockfile}" $(deno info --json | jq -r .modulesCache)
|
||||
|
||||
deno bundle $denoFlags $entrypoint bundled.js
|
||||
'';
|
||||
installPhase = ''
|
||||
mkdir -p $out/dist
|
||||
install -t $out/dist bundled.js
|
||||
'';
|
||||
};
|
||||
mkBundledWrapper = {
|
||||
name,
|
||||
entrypoint,
|
||||
...
|
||||
} @ args: let
|
||||
bundled = mkBundled args;
|
||||
in
|
||||
writeShellScriptBin
|
||||
"${name}"
|
||||
"${pkgs.deno}/bin/deno run ${bundled}/dist/bundled.js";
|
||||
|
||||
mkExecutable = {
|
||||
name,
|
||||
version,
|
||||
src,
|
||||
entrypoint,
|
||||
lockfile,
|
||||
importMap ? null,
|
||||
denoFlags ? [],
|
||||
}:
|
||||
stdenv.mkDerivation {
|
||||
inherit src name entrypoint;
|
||||
denoFlags =
|
||||
denoFlags
|
||||
++ ["--lock" "${src}/${lockfile}"]
|
||||
++ ["--cached-only"]
|
||||
++ ["--output" name]
|
||||
++ (
|
||||
if importMap != null
|
||||
then ["--import-map" "${src}/${importMap}"]
|
||||
else []
|
||||
);
|
||||
buildInputs = with pkgs; [
|
||||
deno
|
||||
jq
|
||||
];
|
||||
fixupPhase = ":";
|
||||
|
||||
buildPhase = ''
|
||||
export DENO_DIR=`mktemp -d`
|
||||
ln -s "${mkDepsLink "${src}/${lockfile}"}" $(deno info --json | jq -r .modulesCache)
|
||||
ls $(dirname $src/$entrypoint)
|
||||
|
||||
deno compile $denoFlags "$entrypoint"
|
||||
'';
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
mv "$name" "$out/bin/"
|
||||
'';
|
||||
};
|
||||
}
|
6
nix/make-bundled-wrapper.nix
Normal file
6
nix/make-bundled-wrapper.nix
Normal file
|
@ -0,0 +1,6 @@
|
|||
{pkgs, ...}: {name, ...} @ args: let
|
||||
bundled = (pkgs.callPackage ./make-bundled.nix {}) args;
|
||||
in
|
||||
pkgs.writeShellScriptBin
|
||||
"${name}"
|
||||
"${pkgs.deno}/bin/deno run ${bundled}/dist/bundled.js"
|
45
nix/make-bundled.nix
Normal file
45
nix/make-bundled.nix
Normal file
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
pkgs,
|
||||
lib ? pkgs.lib,
|
||||
...
|
||||
}: {
|
||||
name,
|
||||
version,
|
||||
src,
|
||||
entrypoint,
|
||||
lockfile,
|
||||
importMap ? null,
|
||||
denoFlags ? [],
|
||||
}: let
|
||||
inherit (pkgs.callPackage ./utils.nix {}) mkDepsLink;
|
||||
in
|
||||
pkgs.stdenv.mkDerivation {
|
||||
inherit name version entrypoint;
|
||||
denoFlags =
|
||||
denoFlags
|
||||
++ (
|
||||
if importMap != null
|
||||
then ["--import-map" importMap]
|
||||
else []
|
||||
);
|
||||
|
||||
src = lib.cleanSourceWith {
|
||||
inherit src;
|
||||
filter = path: type: (baseNameOf path != "bundled.js");
|
||||
};
|
||||
buildInputs = with pkgs; [
|
||||
deno
|
||||
jq
|
||||
];
|
||||
|
||||
buildPhase = ''
|
||||
export DENO_DIR=`mktemp -d`
|
||||
ln -s "${mkDepsLink lockfile}" $(deno info --json | jq -r .modulesCache)
|
||||
|
||||
deno bundle $denoFlags $entrypoint bundled.js
|
||||
'';
|
||||
installPhase = ''
|
||||
mkdir -p $out/dist
|
||||
install -t $out/dist bundled.js
|
||||
'';
|
||||
}
|
40
nix/make-executable.nix
Normal file
40
nix/make-executable.nix
Normal file
|
@ -0,0 +1,40 @@
|
|||
{pkgs, ...}: {
|
||||
name,
|
||||
version,
|
||||
src,
|
||||
entrypoint,
|
||||
lockfile,
|
||||
importMap ? null,
|
||||
denoFlags ? [],
|
||||
}: let
|
||||
inherit (pkgs.callPackage ./utils.nix {}) mkDepsLink;
|
||||
in
|
||||
pkgs.stdenv.mkDerivation {
|
||||
inherit src name entrypoint;
|
||||
denoFlags =
|
||||
denoFlags
|
||||
++ ["--lock" lockfile]
|
||||
++ ["--cached-only"]
|
||||
++ ["--output" name]
|
||||
++ (
|
||||
if importMap != null
|
||||
then ["--import-map" importMap]
|
||||
else []
|
||||
);
|
||||
buildInputs = with pkgs; [
|
||||
deno
|
||||
jq
|
||||
];
|
||||
fixupPhase = ":";
|
||||
|
||||
buildPhase = ''
|
||||
export DENO_DIR=`mktemp -d`
|
||||
ln -s "${mkDepsLink lockfile}" $(deno info --json | jq -r .modulesCache)
|
||||
|
||||
deno compile $denoFlags "$entrypoint"
|
||||
'';
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
mv "$name" "$out/bin/"
|
||||
'';
|
||||
}
|
33
nix/utils.nix
Normal file
33
nix/utils.nix
Normal file
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
pkgs,
|
||||
lib ? pkgs.lib,
|
||||
...
|
||||
}: let
|
||||
inherit (builtins) hashString split elemAt fetchurl toJSON;
|
||||
inherit (pkgs) linkFarm writeText;
|
||||
inherit (lib) flatten mapAttrsToList importJSON;
|
||||
in rec {
|
||||
urlPart = url: elemAt (flatten (split "://([a-z0-9\.]*)" url));
|
||||
artifactPath = url: "${urlPart url 0}/${urlPart url 1}/${hashString "sha256" (urlPart url 2)}";
|
||||
mkDepsLink = lockfile: (
|
||||
linkFarm "deps" (lib.flatten (
|
||||
mapAttrsToList
|
||||
(
|
||||
url: sha256: [
|
||||
{
|
||||
name = artifactPath url;
|
||||
path = fetchurl {inherit url sha256;};
|
||||
}
|
||||
{
|
||||
name = (artifactPath url) + ".metadata.json";
|
||||
path = writeText "metadata.json" (toJSON {
|
||||
inherit url;
|
||||
headers = {};
|
||||
});
|
||||
}
|
||||
]
|
||||
)
|
||||
(importJSON lockfile)
|
||||
))
|
||||
);
|
||||
}
|
|
@ -1,5 +1,7 @@
|
|||
final: prev: {
|
||||
deno2nix = {
|
||||
inherit (import ./nix {pkgs = prev;}) mkBundled mkBundledWrapper mkExecutable;
|
||||
mkBundled = final.callPackage ./nix/make-bundled.nix {};
|
||||
mkBundledWrapper = final.callPackage ./nix/make-bundled-wrapper.nix {};
|
||||
mkExecutable = final.callPackage ./nix/make-executable.nix {};
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue