Separate out the install of dependencies so they can be cached as docker layers before the homepage source code is copied in.

This commit is contained in:
Tom Alexander
2026-10-23 20:06:19 -04:00
parent 433b52768a
commit 95a6a3eaa2
2 changed files with 13 additions and 2 deletions

View File

@@ -15,9 +15,13 @@ EOF
RUN cp "$(nix build nixpkgs#cacert --print-out-paths)/etc/ssl/certs/ca-bundle.crt" /tmp/ca-bundle.crt
COPY . /tmp/build
COPY flake.nix flake.lock /tmp/build
WORKDIR /tmp/build
RUN --mount=type=ssh GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" nix build --no-link '.#dependencies'
COPY . /tmp/build
RUN --mount=type=ssh GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" nix build '.#docker_env'
# Export the built closure to a folder

View File

@@ -74,6 +74,11 @@
inherit (appliedOverlay.homepage)
release
;
dependencies = pkgs.symlinkJoin {
# This is to enable the docker image to install all the dependencies, cache that layer, and then build the final site after the org source files have been loaded. Without this, every update to the blog posts would result in recompiling everything.
name = "homepage-dependencies";
paths = appliedOverlay.homepage.dependencies;
};
docker_env = pkgs.stdenv.mkDerivation {
pname = "homepage-docker-env";
version = "0.0.0";
@@ -100,14 +105,16 @@
natter' = (natter.overlays.default final final).natter.release;
organic_ast_explorer' =
(organic_ast_explorer.overlays.default final final).organic_ast_explorer.release;
release = homepageScope.callPackage ./nix/package.nix {
dependencies = {
natter = natter';
organic_ast_explorer = organic_ast_explorer';
inherit homepage_private;
};
release = homepageScope.callPackage ./nix/package.nix dependencies;
in
{
inherit release;
dependencies = (builtins.attrValues dependencies);
}
);
};