Convert applications using Go modules to Nix expressions
Find a file
adisbladis 31102e0753 go: Bunch of fixes when using excludedPackages and other bits
Few things going on in this commit:

Do not print "Building subPakage $pkg" message if actually going to skip the
package. This was confusing to me when I was trying to figure out how to set
excludedPackages and seeing the "Building subpackage $pkg" messages for
packages I wanted to skip. Turns out this messages was being printed before
checking if we actually wanted to build the package and not necessarily that my
excludedPackages was wrong.

This commit also does some setup outside the buildGoDir function so that we
avoid checking `excludedPackages` for every package and cut down the number
of grep calls by half since we always want at least one grep for the default
excludedPackages, might as well just add to the patterns being checked.

Finally, adds documentation for usage of excludedPackages and subPackages. I
had to read the implementation to figure out how to correctly use these
function arguments since there was no documentation and different uses in the
code base. So this commit documents usage of the arguments.

This is a port of 8b5a7940b0
2022-06-14 19:14:19 +08:00
.github/workflows Github actions: Bump install-nix-action 2022-06-14 17:58:17 +08:00
builder go: Bunch of fixes when using excludedPackages and other bits 2022-06-14 19:14:19 +08:00
docs docs: Add Nix API reference docs 2022-06-14 18:26:50 +08:00
internal Move internal packages to internal subdirectory 2022-06-14 17:10:32 +08:00
templates/app Align flake template with recent API changes and improvements 2022-06-14 17:35:19 +08:00
tests Add package generation for non development packages 2022-06-14 05:15:43 +08:00
.envrc Add python test script 2020-12-03 16:23:39 +01:00
.gitignore Add package generation for non development packages 2022-06-14 05:15:43 +08:00
default.nix gomod2nix: Only generate completions if we are not cross compiling 2022-06-14 05:27:43 +08:00
flake.lock Bump flake inputs 2022-05-30 18:10:53 +08:00
flake.nix templates: Add a flake template 2022-05-30 19:17:02 +08:00
go.mod Add package generation for non development packages 2022-06-14 05:15:43 +08:00
go.sum Add package generation for non development packages 2022-06-14 05:15:43 +08:00
gomod2nix.toml Build non-development packages in the same way as development packages 2022-06-14 08:19:42 +08:00
LICENSE Add README file 2020-12-03 16:23:39 +01:00
main.go Move internal packages to internal subdirectory 2022-06-14 17:10:32 +08:00
overlay.nix Add mkGoEnv function 2022-06-13 20:37:42 +08:00
README.md README: Add link to Nix reference docs 2022-06-14 18:26:50 +08:00
shell.nix Align flake template with recent API changes and improvements 2022-06-14 17:35:19 +08:00

Gomod2nix

Convert applications using Go modules -> Nix

Usage

From the Go project directory execute:

$ gomod2nix

This will create gomod2nix.toml that's used like so

let
  pkgs = import <nixpkgs> {
    overlays = [
      (self: super: {
        buildGoApplication = super.callPackage ./builder { };
      })
    ];
  };
in pkgs.buildGoApplication {
  pname = "gomod2nix-example";
  version = "0.1";
  src = ./.;
  modules = ./gomod2nix.toml;
}

For more in-depth usage check the Getting Started and the Nix API reference docs.

FAQ

Why not continue work on vgo2nix?

Vgo2nix was built on top of the old Nixpkgs build abstraction buildGoPackage, this abstraction was built pre-modules and suffered from some fundamental design issues with modules, such as only allowing a single version of a Go package path inside the same build closure, something that Go itself allows for.

We need a better build abstraction that takes Go modules into account, while remaining import from derivation-free.

Will this be included in Nixpkgs

Yes. Once the API is considered stable.

Motivation

The announcement blog post contains comparisons with other Go build systems for Nix and additional notes on the design choices made.

License

This project is licensed under the MIT License. See the LICENSE file for details.