build: add docker images

This commit is contained in:
2026-09-08 17:34:07 +02:00
parent 5ea156c181
commit 9b34a045fa
4 changed files with 124 additions and 5 deletions
+4 -2
View File
@@ -29,10 +29,12 @@
imports = [ imports = [
./nix/wasm-bindgen.nix ./nix/wasm-bindgen.nix
./nix/wordle-solver.nix ./nix/wordle-solver-docker.nix
./nix/wordle-solver-wasm.nix
./nix/wordle-solver-wasm-pkg.nix ./nix/wordle-solver-wasm-pkg.nix
./nix/wordle-solver-wasm.nix
./nix/wordle-solver-web-docker.nix
./nix/wordle-solver-web.nix ./nix/wordle-solver-web.nix
./nix/wordle-solver.nix
]; ];
perSystem = { perSystem = {
+39
View File
@@ -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;
};
};
}
+12 -3
View File
@@ -1,12 +1,14 @@
{ {
perSystem = {pkgs, ...}: let perSystem = {pkgs, ...}: let
utils = import ./utils.nix; utils = import ./utils.nix;
rust-toolchain = utils.rust-toolchain pkgs;
toolchain-crosspkgs = utils.toolchain-crosspkgs pkgs; toolchain-crosspkgs = utils.toolchain-crosspkgs pkgs;
drv = { drv = {
rustPlatform, rustPlatform,
buildPackages, buildPackages,
lld, lld,
name ? "wordle-solver", name ? "wordle-solver",
removeReferencesTo,
... ...
}: }:
rustPlatform.buildRustPackage { rustPlatform.buildRustPackage {
@@ -23,6 +25,7 @@
buildPackages.stdenv.cc buildPackages.stdenv.cc
lld # Needed for wasm-ld lld # Needed for wasm-ld
]; ];
nativeBuildInputs = [removeReferencesTo];
cargoBuildFlags = [ cargoBuildFlags = [
"--lib" "--lib"
@@ -31,17 +34,23 @@
]; ];
# Configure rustc for WASM # Configure rustc for WASM
env = { RUSTFLAGS = ''--cfg=web_sys_unstable_apis -C linker=wasm-ld -C strip=debuginfo -C debuginfo=0'';
RUSTFLAGS = ''--cfg=web_sys_unstable_apis -C linker=wasm-ld'';
};
# Copy the WASM file to the output # Copy the WASM file to the output
installPhase = '' installPhase = ''
mkdir -p $out/lib mkdir -p $out/lib
cp target/wasm32-unknown-unknown/release/*.wasm $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 { in {
packages.toolchain = rust-toolchain;
packages.wordle-solver-wasm = toolchain-crosspkgs.callPackage drv {}; packages.wordle-solver-wasm = toolchain-crosspkgs.callPackage drv {};
}; };
} }
+69
View File
@@ -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;
};
};
}