From d7e4902fede9e03073207a3f3f1ca34c9d0e1c70 Mon Sep 17 00:00:00 2001 From: technofab Date: Wed, 30 Jul 2025 21:29:16 +0200 Subject: [PATCH 1/4] fix(README): fix badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 40bae3c..f3c2b85 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![built with nix](https://img.shields.io/static/v1?logo=nixos&logoColor=white&label=&message=Built%20with%20Nix&color=41439a)](https://builtwithnix.org) [![pipeline status](https://gitlab.com/TECHNOFAB/nixtest/badges/main/pipeline.svg)](https://gitlab.com/TECHNOFAB/nixtest/-/commits/main) -![License: MIT](https://img.shields.io/gitlab/license/technofab/nix-gitlab-ci) +![License: MIT](https://img.shields.io/gitlab/license/technofab/nixtest) [![Latest Release](https://gitlab.com/TECHNOFAB/nixtest/-/badges/release.svg)](https://gitlab.com/TECHNOFAB/nixtest/-/releases) [![Support me](https://img.shields.io/badge/Support-me-green)](https://tec.tf/#support) [![Docs](https://img.shields.io/badge/Read-Docs-green)](https://nixtest.projects.tf) From 0272a8b0dc8f64c0b590f7007291b9010a0eef44 Mon Sep 17 00:00:00 2001 From: technofab Date: Wed, 30 Jul 2025 21:53:31 +0200 Subject: [PATCH 2/4] fix: support passing string as dir for autodiscovery --- lib/default.nix | 6 +++++- tests/lib_test.nix | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/default.nix b/lib/default.nix index 2aa3683..ec71f09 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -39,7 +39,11 @@ in rec { }: let files = builtins.readDir dir; matchingFiles = builtins.filter (name: builtins.match pattern name != null) (builtins.attrNames files); - imports = map (file: /${dir}/${file}) matchingFiles; + imports = map (file: + if builtins.isString dir + then (builtins.unsafeDiscardStringContext dir) + "/${file}" + else /${dir}/${file}) + matchingFiles; in { inherit imports; # automatically set the base so test filepaths are easier to read diff --git a/tests/lib_test.nix b/tests/lib_test.nix index 4437cf3..ae5b474 100644 --- a/tests/lib_test.nix +++ b/tests/lib_test.nix @@ -13,6 +13,10 @@ actual = ntlib.helpers.toPrettyFile (ntlib.autodiscover { dir = ./fixtures; }); + # tests if strings with store path context work + actualDirString = ntlib.helpers.toPrettyFile (ntlib.autodiscover { + dir = "${./fixtures}"; + }); in # sh '' @@ -20,6 +24,9 @@ ${ntlib.helpers.scriptHelpers} assert_file_contains ${actual} "sample_test.nix" "should find sample_test.nix" assert_file_contains ${actual} "base = \"/nix/store/.*-source/tests/fixtures/\"" "should set base to fixtures dir" + + assert_file_contains ${actualDirString} "sample_test.nix" "should find sample_test.nix" + assert_file_contains ${actualDirString} "base = \"/nix/store/.*-fixtures/\"" "should set base to fixtures dir" ''; } { From b2fb77ecc9d48556801d3bfba3b547b754f2aedc Mon Sep 17 00:00:00 2001 From: technofab Date: Wed, 30 Jul 2025 21:53:53 +0200 Subject: [PATCH 3/4] chore: clean up module a bit --- lib/module.nix | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/lib/module.nix b/lib/module.nix index 14746e4..478584c 100644 --- a/lib/module.nix +++ b/lib/module.nix @@ -3,7 +3,17 @@ lib, ... }: let - inherit (lib) mkOptionType mkOption types; + inherit + (lib) + mkOptionType + mkOption + types + filterAttrs + isType + removePrefix + assertMsg + generators + ; nixtest-lib = import ./default.nix {inherit pkgs lib;}; @@ -16,14 +26,14 @@ unset = { _type = "unset"; }; - isUnset = lib.isType "unset"; + isUnset = isType "unset"; filterUnset = value: if builtins.isAttrs value && !builtins.hasAttr "_type" value then let filteredAttrs = builtins.mapAttrs (n: v: filterUnset v) value; in - lib.filterAttrs (name: value: (!isUnset value)) filteredAttrs + filterAttrs (name: value: (!isUnset value)) filteredAttrs else if builtins.isList value then builtins.filter (elem: !isUnset elem) (map filterUnset value) else value; @@ -42,18 +52,18 @@ if isUnset val then val else let - fileRelative = lib.removePrefix testsBase val.file; + fileRelative = removePrefix testsBase val.file; in "${fileRelative}:${toString val.line}"; }; type = mkOption { type = types.enum ["unit" "snapshot" "script"]; default = "unit"; apply = value: - assert lib.assertMsg (value != "script" || !isUnset config.script) + assert assertMsg (value != "script" || !isUnset config.script) "test '${config.name}' as type 'script' requires 'script' to be set"; - assert lib.assertMsg (value != "unit" || !isUnset config.expected) + assert assertMsg (value != "unit" || !isUnset config.expected) "test '${config.name}' as type 'unit' requires 'expected' to be set"; - assert lib.assertMsg ( + assert assertMsg ( let actualIsUnset = isUnset config.actual; actualDrvIsUnset = isUnset config.actualDrv; @@ -81,7 +91,7 @@ apply = val: if isUnset val || config.format == "json" then val - else lib.generators.toPretty {} val; + else generators.toPretty {} val; }; actual = mkOption { type = types.anything; @@ -89,7 +99,7 @@ apply = val: if isUnset val || config.format == "json" then val - else lib.generators.toPretty {} val; + else generators.toPretty {} val; }; actualDrv = mkOption { type = types.either types.package unsetType; From 22b43c9fe83be73c3f0648bbb54bc3c1cf7f96df Mon Sep 17 00:00:00 2001 From: technofab Date: Wed, 30 Jul 2025 21:54:13 +0200 Subject: [PATCH 4/4] chore(flake): enable go hardening workaround --- flake.nix | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/flake.nix b/flake.nix index 72f86bd..9be0e25 100644 --- a/flake.nix +++ b/flake.nix @@ -36,9 +36,12 @@ }; devenv.shells.default = { containers = pkgs.lib.mkForce {}; - packages = with pkgs; [gopls gore go-junit-report]; + packages = with pkgs; [gore go-junit-report]; - languages.go.enable = true; + languages.go = { + enable = true; + enableHardeningWorkaround = true; + }; pre-commit.hooks = { treefmt = {