build: add docker images
This commit is contained in:
@@ -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 = {
|
||||||
|
|||||||
@@ -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
|
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 {};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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