Convert applications using Go modules to Nix expressions
Find a file
adisbladis ab5ec79935 Run unit tests under subdirs
Bug:
Due to the way `buildGoDir` function was repurposed to also run `go
test`, if `checkFlags` was defined, `go test` was ran only at the top
level directory. Only the first element of `checkFlags` array would get
passed to the `go test` command as arguments.

Fix:
Now the first parameter to `buildGoDir` is handled as the command.  If
the command is "test" `checkFlags` get passed as arguments along with
other build flags like ldflags, tags, etc.

Readability:
- Iteratively build a flag array in `buildGoDir` instead of single long
  variable expansion command line.
- Bash style: Single line local assignment of positional parameters.

This is a port of 89864413b2.
2022-08-24 09:00:33 +08:00
.github/workflows Github actions: Bump install-nix-action 2022-06-14 17:58:17 +08:00
builder Run unit tests under subdirs 2022-08-24 09:00:33 +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 Fix Go compiler missing from mkGoEnv created environments 2022-08-23 21:11:28 +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 Refactor to generic builder expression 2022-08-23 22:48:09 +08:00
flake.lock requires a newer Apple SDK on macOS 2022-07-21 09:40:17 +08:00
flake.nix Refactor to generic builder expression 2022-08-23 22:48:09 +08:00
generic.nix Refactor to generic builder expression 2022-08-23 22:48:09 +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 requires a newer Apple SDK on macOS 2022-07-21 09:40:17 +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 Refactor to generic builder expression 2022-08-23 22:48:09 +08:00
README.md README: Add link to Nix reference docs 2022-06-14 18:26:50 +08:00
shell.nix Fix Go compiler missing from mkGoEnv created environments 2022-08-23 21:11:28 +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.