Skip to content

Commit

Permalink
nix: compile go test binaries for e2e tests in nix
Browse files Browse the repository at this point in the history
  • Loading branch information
malt3 committed Feb 28, 2024
1 parent 73f7022 commit 13facca
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 1 deletion.
2 changes: 1 addition & 1 deletion .github/workflows/e2e_openssl.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ jobs:
cat ./workspace/just.perf | tee -a "${GITHUB_STEP_SUMMARY}"
- name: E2E Test
run: |
env K8S_NAMESPACE=$(cat ./workspace/just.namespace) go test -v -count=1 -tags e2e ./e2e/openssl
env K8S_NAMESPACE=$(cat ./workspace/just.namespace) nix shell .#nunki.e2e --command openssl.test -test.v
- name: Undeploy
if: always() && inputs.skip-undeploy != 'true'
run: |
Expand Down
79 changes: 79 additions & 0 deletions packages/by-name/buildGoTest/package.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
{ buildGoModule }:
args':
let
args = args' // { "doCheck" = false; };
in
buildGoModule ({
# copy of buildGoModule.buildPhase with the following changes:
# - use `go test -c -o $GOPATH/bin/` instead of `go install` to build the binary of a test package
# original:
# https://github.com/NixOS/nixpkgs/blob/c44815411ae47dd8bbbb92d60c3a83abff28a9f3/pkgs/build-support/go/module.nix#L188-L266
buildPhase = ''
runHook preBuild
exclude='\(/_\|examples\|Godeps\|testdata'
if [[ -n "$excludedPackages" ]]; then
IFS=' ' read -r -a excludedArr <<<$excludedPackages
printf -v excludedAlternates '%s\\|' "''${excludedArr[@]}"
excludedAlternates=''${excludedAlternates%\\|} # drop final \| added by printf
exclude+='\|'"$excludedAlternates"
fi
exclude+='\)'
buildGoDir() {
local cmd="$1" dir="$2"
. $TMPDIR/buildFlagsArray
declare -a flags
flags+=($buildFlags "''${buildFlagsArray[@]}")
flags+=(''${tags:+-tags=''${tags// /,}})
flags+=(''${ldflags:+-ldflags="$ldflags"})
flags+=("-p" "$NIX_BUILD_CORES")
if [ "$cmd" = "test" ]; then
flags+=(-vet=off)
flags+=($checkFlags)
fi
local OUT
if ! OUT="$(go $cmd -c -o $GOPATH/bin/ "''${flags[@]}" $dir 2>&1)"; then
if ! echo "$OUT" | grep -qE '(no( buildable| non-test)?|build constraints exclude all) Go (source )?files'; then
echo "$OUT" >&2
return 1
fi
fi
if [ -n "$OUT" ]; then
echo "$OUT" >&2
fi
return 0
}
getGoDirs() {
local type;
type="$1"
if [ -n "$subPackages" ]; then
echo "$subPackages" | sed "s,\(^\| \),\1./,g"
else
find . -type f -name \*$type.go -exec dirname {} \; | grep -v "/vendor/" | sort --unique | grep -v "$exclude"
fi
}
if (( "''${NIX_DEBUG:-0}" >= 1 )); then
buildFlagsArray+=(-x)
fi
if [ ''${#buildFlagsArray[@]} -ne 0 ]; then
declare -p buildFlagsArray > $TMPDIR/buildFlagsArray
else
touch $TMPDIR/buildFlagsArray
fi
if [ -z "$enableParallelBuilding" ]; then
export NIX_BUILD_CORES=1
fi
for pkg in $(getGoDirs ""); do
echo "Building subPackage $pkg"
buildGoDir test "$pkg"
done
'';
} // args)
17 changes: 17 additions & 0 deletions packages/by-name/nunki/package.nix
Original file line number Diff line number Diff line change
@@ -1,8 +1,22 @@
{ lib
, buildGoModule
, buildGoTest
, genpolicy-msft
, genpolicy ? genpolicy-msft
, nunki
}:
let
e2e = buildGoTest rec {
inherit (nunki) version src proxyVendor vendorHash prePatch CGO_ENABLED;
pname = "${nunki.pname}-e2e";

tags = [ "e2e" ];

ldflags = [ "-s" ];

subPackages = [ "e2e/openssl" ];
};
in

buildGoModule rec {
pname = "nunki";
Expand Down Expand Up @@ -68,5 +82,8 @@ buildGoModule rec {
# rename the cli binary to nunki
mv "$cli/bin/cli" "$cli/bin/nunki"
'';

passthru.e2e = e2e;

meta.mainProgram = "nunki";
}

0 comments on commit 13facca

Please sign in to comment.