about summary refs log tree commit diff
path: root/release.nix
diff options
context:
space:
mode:
authorVincent Ambo <tazjin@gmail.com>2018-03-09T11·50+0100
committerVincent Ambo <github@tazj.in>2018-03-09T12·35+0100
commitd7f19934d94f978535df1e9ea361924e15ad8239 (patch)
tree52cd4d5d8e0dc473954fbc8aafb9d706c3e74aa5 /release.nix
parent4b1d44f71bf243a86b90d047ef65d5b418b4f5bd (diff)
feat(build): Add Nix derivation for release builds
Adds a Nix derivation that produces statically linked output binaries
for multiple operating systems and architectures.

This requires a Nix-channel version that includes the Go 1.10
compiler.
Diffstat (limited to 'release.nix')
-rw-r--r--release.nix53
1 files changed, 53 insertions, 0 deletions
diff --git a/release.nix b/release.nix
new file mode 100644
index 0000000000..fc047f26ac
--- /dev/null
+++ b/release.nix
@@ -0,0 +1,53 @@
+# Copyright (C) 2016-2018  Vincent Ambo <mail@tazj.in>
+#
+# This file is part of Kontemplate.
+#
+# Kontemplate is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This file is the Nix derivation used to build release binaries for
+# several different architectures and operating systems.
+
+{ pkgs ? import <nixpkgs> {} }:
+
+with pkgs; let buildGo110Package =
+  callPackage <nixpkgs/pkgs/development/go-modules/generic> {
+  go = go_1_10;
+};
+in buildGo110Package rec {
+  name = "kontemplate-${version}";
+  version = "master";
+  src = ./.;
+  goPackagePath = "github.com/tazjin/kontemplate";
+  goDeps = ./deps.nix;
+
+  # This configuration enables the building of statically linked
+  # executables. For some reason, those will have multiple references
+  # to the Go compiler's installation path in them, which is the
+  # reason for setting the 'allowGoReference' flag.
+  dontStrip = true; # Linker configuration handles stripping
+  allowGoReference = true;
+  CGO_ENABLED="0";
+  GOCACHE="off";
+
+  # Configure release builds via the "build-matrix" script:
+  buildInputs = [ git ];
+  buildPhase = ''
+    cd go/src/${goPackagePath}
+    ./build-release.sh build
+  '';
+
+  outputs = [ "out" ];
+  installPhase = ''
+    mkdir $out
+    cp -r release/ $out
+  '';
+
+  meta = with lib; {
+    description = "A resource templating helper for Kubernetes";
+    homepage = "http://kontemplate.works/";
+    license = licenses.gpl3;
+  };
+}