Newer
Older
description = "Bob the builder for Go projects";
# Nixpkgs / NixOS version to use.
inputs.nixpkgs.url = "nixpkgs/nixos-23.11";
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
nixpkgs,
}: let
# to work with older version of flakes
lastModifiedDate = self.lastModifiedDate or self.lastModified or "19700101";
rootPath = ./.;
goPkgReleaseData = import "${rootPath}/project.nix";
goPkgName = goPkgReleaseData.name or "goPkg";
goPkgMnemonic = goPkgReleaseData.mnemonic or "go-pkg";
goPkgDescription = goPkgReleaseData.description or "this is a goPkg";
goPkgVersion = goPkgReleaseData.version or "0.1.0";
goPkgHash =
if (self ? shortRev)
then self.shortRev
else "dirty-not-for-production";
goPkgVendorHash = goPkgReleaseData.vendorHash or null;
# System types to support.
supportedSystems = ["x86_64-linux" "x86_64-windows" "x86_64-darwin"];
# Helper function to generate an attrset '{ x86_64-linux = f "x86_64-linux"; ... }'.
forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
# Nixpkgs instantiated for supported system types.
nixpkgsFor = forAllSystems (system: import nixpkgs {inherit system;});
in {
packages = forAllSystems (system: let
pkgs = nixpkgsFor.${system};
in {
bob = pkgs.buildGoModule {
name = goPkgName;
# In 'nix develop', we don't need a copy of the source tree
# in the Nix store.
src = ././source;
tags = []; # add your tags here (eq "netgo" "osusergo" "static_build")
ldflags = [
"-X 'gitlab.schukai.com/oss/bob/release.version=${goPkgVersion}'"
"-X 'gitlab.schukai.com/oss/bob/release.commit=${goPkgHash}'"
"-X 'gitlab.schukai.com/oss/bob/release.buildDate=${lastModifiedDate}'"
"-X 'gitlab.schukai.com/oss/bob/release.name=${goPkgName}'"
"-X 'gitlab.schukai.com/oss/bob/release.mnemonic=${goPkgMnemonic}'"
meta = with nixpkgs.legacyPackages.${system}.lib; {
description = goPkgDescription;
homepage = "https://gitlab.schukai.com/oss/bob";
license = licenses.mit;
maintainers = with maintainers; ["schukai GmbH"];
};
default = self.packages.${system}.bob;
});
# Add dependencies that are only needed for development
devShells = forAllSystems (system: let
pkgs = nixpkgsFor.${system};
in {
default = pkgs.mkShell {
buildInputs = with pkgs; [go gopls gotools go-tools];
});
# The default package for 'nix build'. This makes sense if the
# flake provides only one package or there is a clear "main"
# package.
defaultPackage = forAllSystems (system: self.packages.${system}.bob);
};