build: add docker images
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
let
|
||||
drv = {
|
||||
buildEnv,
|
||||
dockerTools,
|
||||
wordle-solver,
|
||||
runCommand,
|
||||
...
|
||||
}:
|
||||
dockerTools.buildImage {
|
||||
name = "wordle-solver";
|
||||
created = "now";
|
||||
copyToRoot = buildEnv {
|
||||
name = "image-root";
|
||||
paths = [
|
||||
wordle-solver
|
||||
(runCommand "wordle-data" {} ''
|
||||
mkdir -p $out/pwd
|
||||
cp ${../valid-words.txt} $out/pwd/valid-words.txt
|
||||
cp ${../answers.txt} $out/pwd/answers.txt
|
||||
'')
|
||||
];
|
||||
pathsToLink = ["/bin" "/pwd"];
|
||||
};
|
||||
config = {
|
||||
Cmd = ["/bin/wordle-solver"];
|
||||
WorkingDir = "/pwd";
|
||||
};
|
||||
};
|
||||
in {
|
||||
perSystem = {
|
||||
pkgs,
|
||||
self',
|
||||
...
|
||||
}: {
|
||||
packages.wordle-solver-docker = pkgs.callPackage drv {
|
||||
inherit (self'.packages) wordle-solver;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,12 +1,14 @@
|
||||
{
|
||||
perSystem = {pkgs, ...}: let
|
||||
utils = import ./utils.nix;
|
||||
rust-toolchain = utils.rust-toolchain pkgs;
|
||||
toolchain-crosspkgs = utils.toolchain-crosspkgs pkgs;
|
||||
drv = {
|
||||
rustPlatform,
|
||||
buildPackages,
|
||||
lld,
|
||||
name ? "wordle-solver",
|
||||
removeReferencesTo,
|
||||
...
|
||||
}:
|
||||
rustPlatform.buildRustPackage {
|
||||
@@ -23,6 +25,7 @@
|
||||
buildPackages.stdenv.cc
|
||||
lld # Needed for wasm-ld
|
||||
];
|
||||
nativeBuildInputs = [removeReferencesTo];
|
||||
|
||||
cargoBuildFlags = [
|
||||
"--lib"
|
||||
@@ -31,17 +34,23 @@
|
||||
];
|
||||
|
||||
# Configure rustc for WASM
|
||||
env = {
|
||||
RUSTFLAGS = ''--cfg=web_sys_unstable_apis -C linker=wasm-ld'';
|
||||
};
|
||||
RUSTFLAGS = ''--cfg=web_sys_unstable_apis -C linker=wasm-ld -C strip=debuginfo -C debuginfo=0'';
|
||||
|
||||
# Copy the WASM file to the output
|
||||
installPhase = ''
|
||||
mkdir -p $out/lib
|
||||
cp target/wasm32-unknown-unknown/release/*.wasm $out/lib/
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
# Remove toolchain from closure (store paths are debug artifacts)
|
||||
postInstall = ''
|
||||
remove-references-to -t ${rust-toolchain} $out/lib/*.wasm
|
||||
'';
|
||||
};
|
||||
in {
|
||||
packages.toolchain = rust-toolchain;
|
||||
packages.wordle-solver-wasm = toolchain-crosspkgs.callPackage drv {};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
let
|
||||
drv = {
|
||||
buildEnv,
|
||||
dockerTools,
|
||||
fakeNss,
|
||||
nginx,
|
||||
runCommand,
|
||||
wordle-solver-web,
|
||||
writeShellScriptBin,
|
||||
...
|
||||
}:
|
||||
dockerTools.buildImage {
|
||||
name = "wordle-solver-web";
|
||||
created = "now";
|
||||
copyToRoot = buildEnv {
|
||||
name = "image-root";
|
||||
paths = [
|
||||
nginx
|
||||
(fakeNss.override {
|
||||
extraGroupLines = [
|
||||
"nogroup:x:65534:"
|
||||
];
|
||||
})
|
||||
(writeShellScriptBin "start" ''
|
||||
echo "Start serving worlde-solver at port 80..."
|
||||
/bin/nginx -c /etc/nginx.conf
|
||||
'')
|
||||
(runCommand "nginx-conf" {} ''
|
||||
mkdir -p $out/etc
|
||||
|
||||
cat <<EOF > $out/etc/nginx.conf
|
||||
events {}
|
||||
|
||||
error_log /dev/stderr;
|
||||
|
||||
http {
|
||||
include ${nginx}/conf/mime.types;
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
root ${wordle-solver-web};
|
||||
access_log /dev/stdout;
|
||||
}
|
||||
}
|
||||
|
||||
daemon off;
|
||||
EOF
|
||||
'')
|
||||
];
|
||||
pathsToLink = ["/bin" "/etc"];
|
||||
};
|
||||
runAsRoot = ''
|
||||
mkdir -p /var/log/nginx
|
||||
'';
|
||||
config = {
|
||||
Cmd = ["/bin/start"];
|
||||
};
|
||||
};
|
||||
in {
|
||||
perSystem = {
|
||||
pkgs,
|
||||
self',
|
||||
...
|
||||
}: {
|
||||
packages.wordle-solver-web-docker = pkgs.callPackage drv {
|
||||
inherit (self'.packages) wordle-solver-web;
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user