Skip to content

Commit

Permalink
refactor(nixery): Modernise structure of binaries
Browse files Browse the repository at this point in the history
Nixery is going to gain a new binary (used for building images without
a registry server); to prepare for this the server binary has moved to
cmd/server and the Nix build logic has been updated to wrap this
binary and set the required environment variables.

Change-Id: I9b4f49f47872ae76430463e2fcb8f68114070f72
Reviewed-on: https://cl.tvl.fyi/c/depot/+/5603
Tested-by: BuildkiteCI
Reviewed-by: sterni <[email protected]>
  • Loading branch information
tazjin committed May 23, 2022
1 parent 58bb2c0 commit 137ff90
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 28 deletions.
File renamed without changes.
53 changes: 25 additions & 28 deletions default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -25,23 +25,6 @@ let
# through revision numbers.
nixery-commit-hash = "depot";

# Go implementation of the Nixery server which implements the
# container registry interface.
#
# Users should use the nixery-bin derivation below instead as it
# provides the paths of files needed at runtime.
nixery-server = buildGoModule rec {
name = "nixery-server";
src = ./.;
doCheck = true;

# Needs to be updated after every modification of go.mod/go.sum
vendorSha256 = "1xnmyz2a5s5sck0fzhcz51nds4s80p0jw82dhkf4v2c4yzga83yk";

buildFlagsArray = [
"-ldflags=-s -w -X main.version=${nixery-commit-hash}"
];
};
in
depot.nix.readTree.drvTargets rec {
# Implementation of the Nix image building logic
Expand All @@ -52,18 +35,32 @@ depot.nix.readTree.drvTargets rec {
# nixery.dev.
nixery-book = callPackage ./docs { };

# Wrapper script running the Nixery server with the above two data
# dependencies configured.
nixery-popcount = callPackage ./popcount { };

# Build Nixery's Go code, resulting in the binaries used for various
# bits of functionality.
#
# In most cases, this will be the derivation a user wants if they
# are installing Nixery directly.
nixery-bin = writeShellScriptBin "nixery" ''
export WEB_DIR="${nixery-book}"
export PATH="${nixery-prepare-image}/bin:$PATH"
exec ${nixery-server}/bin/nixery
'';
# The server binary is wrapped to ensure that required environment
# variables are set at runtime.
nixery = buildGoModule rec {
name = "nixery";
src = ./.;
doCheck = true;

nixery-popcount = callPackage ./popcount { };
# Needs to be updated after every modification of go.mod/go.sum
vendorSha256 = "1xnmyz2a5s5sck0fzhcz51nds4s80p0jw82dhkf4v2c4yzga83yk";

buildFlagsArray = [
"-ldflags=-s -w -X main.version=${nixery-commit-hash}"
];

nativeBuildInputs = [ makeWrapper ];
postInstall = ''
wrapProgram $out/bin/server \
--set WEB_DIR "${nixery-book}" \
--prefix PATH : ${nixery-prepare-image}/bin
'';
};

# Container image containing Nixery and Nix itself. This image can
# be run on Kubernetes, published on AppEngine or whatever else is
Expand Down Expand Up @@ -98,7 +95,7 @@ depot.nix.readTree.drvTargets rec {
# This can be achieved by setting a 'preLaunch' script.
${preLaunch}
exec ${nixery-bin}/bin/nixery
exec ${nixery}/bin/server
'';
in
dockerTools.buildLayeredImage {
Expand Down

0 comments on commit 137ff90

Please sign in to comment.