diff --git a/lib/impl/jobPatched.nix b/lib/impl/jobPatched.nix index c7134fb..73adb38 100644 --- a/lib/impl/jobPatched.nix +++ b/lib/impl/jobPatched.nix @@ -3,7 +3,7 @@ helpers, }: let inherit (lib) toList optionalAttrs optional; - inherit (helpers) prependToBeforeScript appendToAfterScript filterJobVariables; + inherit (helpers) prependToBeforeScript appendToAfterScript; in { key, @@ -11,33 +11,28 @@ in pipelineName, nixConfig, }: - (builtins.removeAttrs job ["variables" "cache"]) - // (optionalAttrs nixConfig.enable ( - (prependToBeforeScript ["source setup_nix_ci \"gitlab-ci:pipeline:${pipelineName}:job-deps:${key}\""] job) - // (appendToAfterScript ["finalize_nix_ci"] job) - )) - // optionalAttrs nixConfig.enable ( - (let - variables = - (filterJobVariables false job) - // optionalAttrs nixConfig.enableRunnerCache { - NIX_CI_CACHE_STRATEGY = "runner"; - }; - in - # filter empty variables - optionalAttrs (variables != {}) { - inherit variables; - }) - // (let - cache = - (toList (job.cache or [])) - ++ (optional nixConfig.enableRunnerCache { - key = nixConfig.runnerCacheKey; - paths = [".nix-cache/"]; - }); - in - # filter empty cache - optionalAttrs (cache != []) { - inherit cache; - }) - ) + if ! nixConfig.enable then job else + (builtins.removeAttrs job [ "variables" "cache" ]) + // (prependToBeforeScript [ "source setup_nix_ci \"gitlab-ci:pipeline:${pipelineName}:job-deps:${key}\"" ] job) + // (appendToAfterScript [ "finalize_nix_ci" ] job) + // (let + variables = job.variables or {} // + optionalAttrs nixConfig.enableRunnerCache { + NIX_CI_CACHE_STRATEGY = "runner"; + }; + in + # filter empty variables + optionalAttrs (variables != {}) { + inherit variables; + }) + // (let + cache = (toList (job.cache or [])) ++ + (optional nixConfig.enableRunnerCache { + key = nixConfig.runnerCacheKey; + paths = [ ".nix-cache/" ]; + }); + in + # filter empty cache + optionalAttrs (cache != []) { + inherit cache; + }) diff --git a/tests/cilib_test.nix b/tests/cilib_test.nix index b53308c..6de4ed6 100644 --- a/tests/cilib_test.nix +++ b/tests/cilib_test.nix @@ -56,24 +56,59 @@ } { name = "jobPatched nix disabled"; - expected = {}; + expected = { + cache = { + name = "some"; + paths = [ "this" ]; + }; + variables = { + BASH = toString pkgs.bash; + TEST = "work"; + }; + }; actual = mkJobPatched { key = "test"; pipelineName = "test"; - job = {}; + job = { + cache = { + name = "some"; + paths = [ "this" ]; + }; + variables = { + BASH = toString pkgs.bash; + TEST = "work"; + }; + }; nixConfig.enable = false; }; } { name = "jobPatched without runner cache"; expected = { - after_script = ["finalize_nix_ci"]; - before_script = ["source setup_nix_ci \"gitlab-ci:pipeline:test:job-deps:test\""]; + after_script = [ "finalize_nix_ci" ]; + before_script = [ "source setup_nix_ci \"gitlab-ci:pipeline:test:job-deps:test\"" ]; + variables = { + BASH = toString pkgs.bash; + TEST = "work"; + }; + cache = [{ + name = "some"; + paths = [ "this" ]; + }]; }; actual = mkJobPatched { key = "test"; pipelineName = "test"; - job = {}; + job = { + cache = { + name = "some"; + paths = [ "this" ]; + }; + variables = { + BASH = toString pkgs.bash; + TEST = "work"; + }; + }; nixConfig = { enable = true; enableRunnerCache = false; @@ -83,20 +118,34 @@ { name = "jobPatched with runner cache"; expected = { - after_script = ["finalize_nix_ci"]; - before_script = ["source setup_nix_ci \"gitlab-ci:pipeline:test:job-deps:test\""]; - cache = [ - { - key = "test"; - paths = [".nix-cache/"]; - } - ]; - variables."NIX_CI_CACHE_STRATEGY" = "runner"; + after_script = [ "finalize_nix_ci" ]; + before_script = [ "source setup_nix_ci \"gitlab-ci:pipeline:test:job-deps:test\"" ]; + cache = [{ + name = "some"; + paths = [ "this" ]; + }{ + key = "test"; + paths = [ ".nix-cache/" ]; + }]; + variables = { + NIX_CI_CACHE_STRATEGY = "runner"; + BASH = toString pkgs.bash; + TEST = "work"; + }; }; actual = mkJobPatched { key = "test"; pipelineName = "test"; - job = {}; + job = { + cache = { + name = "some"; + paths = [ "this" ]; + }; + variables = { + BASH = toString pkgs.bash; + TEST = "work"; + }; + }; nixConfig = { enable = true; enableRunnerCache = true; @@ -145,23 +194,110 @@ ''; } { - name = "handle store paths in variables"; + name = "handle store paths in variables without nix config"; expected = { - stages = ["test"]; - test.stage = "test"; + stages = [ "test" ]; + variables = { + EXAMPLE = "empty"; + CURL = toString pkgs.curl; + }; + test = { + stage = "test"; + before_script = [ "./init" ]; + script = [ "echo Hello World!" ]; + after_script = [ "./clean" ]; + cache = { + key = "simple"; + paths = [ "~/random/" ]; + }; + variables = { + SAMPLE = "working"; + HELLO = toString pkgs.hello; + }; + }; }; - actual = - (mkPipeline { - name = "test"; - nixConfig.enable = false; - pipeline = { - stages = ["test"]; - jobs.test = { - stage = "test"; - variables."TEST" = "${pkgs.hello}"; + actual = (mkPipeline { + name = "test"; + nixConfig.enable = false; + pipeline = { + stages = [ "test" ]; + variables = { + EXAMPLE = "empty"; + CURL = toString pkgs.curl; + }; + jobs.test = { + stage = "test"; + before_script = [ "./init" ]; + script = [ "echo Hello World!" ]; + after_script = [ "./clean" ]; + cache = { + key = "simple"; + paths = [ "~/random/" ]; + }; + variables = { + SAMPLE = "working"; + HELLO = toString pkgs.hello; }; }; - }).finalConfig; + }; + }).finalConfig; + } + { + name = "handle store paths in variables with nix config"; + expected = { + stages = [ "test" ]; + variables = { + EXAMPLE = "empty"; + CURL = toString pkgs.curl; + }; + test = { + stage = "test"; + before_script = [ "source setup_nix_ci \"gitlab-ci:pipeline:test:job-deps:test\"" "./init" ]; + script = [ "echo Hello World!" ]; + after_script = [ "./clean" "finalize_nix_ci" ]; + cache = [{ + key = "simple"; + paths = [ "~/random/" ]; + }{ + key = "random"; + paths = [ ".nix-cache/" ]; + }]; + variables = { + SAMPLE = "working"; + HELLO = toString pkgs.hello; + NIX_CI_CACHE_STRATEGY = "runner"; + }; + }; + }; + actual = (mkPipeline { + name = "test"; + nixConfig = { + enable = true; + enableRunnerCache = true; + runnerCacheKey = "random"; + }; + pipeline = { + stages = [ "test" ]; + variables = { + EXAMPLE = "empty"; + CURL = toString pkgs.curl; + }; + jobs.test = { + stage = "test"; + before_script = [ "./init" ]; + script = [ "echo Hello World!" ]; + after_script = [ "./clean" ]; + cache = { + key = "simple"; + paths = [ "~/random/" ]; + }; + variables = { + SAMPLE = "working"; + HELLO = toString pkgs.hello; + }; + }; + }; + }).finalConfig; } ]; };