From f31edeec1bebcb98f0618c937505c7967e774236 Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Fri, 13 May 2022 18:25:59 +0200 Subject: [PATCH] refactor(nixery): Modernise structure of binaries 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 --- ops/modules/nixery.nix | 2 +- tools/nixery/{ => cmd/server}/main.go | 0 tools/nixery/default.nix | 55 +++++++++++++-------------- 3 files changed, 27 insertions(+), 30 deletions(-) rename tools/nixery/{ => cmd/server}/main.go (100%) diff --git a/ops/modules/nixery.nix b/ops/modules/nixery.nix index cb80eff2e..4122f9ebb 100644 --- a/ops/modules/nixery.nix +++ b/ops/modules/nixery.nix @@ -28,7 +28,7 @@ in StateDirectory = "nixery"; Restart = "always"; ExecStartPre = "${pkgs.coreutils}/bin/mkdir -p ${storagePath}"; - ExecStart = "${depot.tools.nixery.nixery-bin}/bin/nixery"; + ExecStart = "${depot.tools.nixery.nixery}/bin/server"; }; environment = { diff --git a/tools/nixery/main.go b/tools/nixery/cmd/server/main.go similarity index 100% rename from tools/nixery/main.go rename to tools/nixery/cmd/server/main.go diff --git a/tools/nixery/default.nix b/tools/nixery/default.nix index b5575be50..6b053e55d 100644 --- a/tools/nixery/default.nix +++ b/tools/nixery/default.nix @@ -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 @@ -52,19 +35,33 @@ depot.nix.readTree.drvTargets rec { # nixery.dev. nixery-book = callPackage ./docs { }; - # Wrapper script running the Nixery server with the above two data - # dependencies configured. - # - # 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 - ''; - nixery-popcount = callPackage ./popcount { }; + # Build Nixery's Go code, resulting in the binaries used for various + # bits of functionality. + # + # The server binary is wrapped to ensure that required environment + # variables are set at runtime. + nixery = buildGoModule rec { + name = "nixery"; + 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}" + ]; + + 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 # desired. @@ -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 {