mirror of
https://gitlab.com/TECHNOFAB/nix-gitlab-ci.git
synced 2025-12-13 02:30:09 +01:00
chore: split everything up into their own files & add a bunch of tests
This commit is contained in:
parent
b309fb59db
commit
2f197d2c50
20 changed files with 704 additions and 310 deletions
140
tests/ci-lib.nix
Normal file
140
tests/ci-lib.nix
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cilib = import ./../lib {inherit lib pkgs;};
|
||||
in {
|
||||
nixtest.suites."CI Lib" = {
|
||||
pos = __curPos;
|
||||
tests = let
|
||||
inherit (cilib.jobDeps) mkJobDeps;
|
||||
inherit (cilib.jobRun) mkJobRun;
|
||||
inherit (cilib.jobPatch) mkJobPatched;
|
||||
inherit (cilib.pipeline) mkPipeline;
|
||||
deps = mkJobDeps {
|
||||
key = "test";
|
||||
job = {
|
||||
nix.deps = [pkgs.hello];
|
||||
variables.TEST = "${pkgs.curl}";
|
||||
};
|
||||
};
|
||||
in [
|
||||
{
|
||||
name = "jobDeps";
|
||||
type = "script";
|
||||
script =
|
||||
# sh
|
||||
''
|
||||
export PATH=${lib.makeBinPath [pkgs.gnugrep]}
|
||||
grep -q "/nix/store" ${deps}
|
||||
grep -q 'hello/bin:$PATH' ${deps}
|
||||
grep -q "export TEST=" ${deps}
|
||||
grep -q "curl" ${deps}
|
||||
'';
|
||||
}
|
||||
{
|
||||
name = "jobRun";
|
||||
type = "script";
|
||||
script = let
|
||||
run = mkJobRun {
|
||||
key = "test";
|
||||
job.script = ["hello"];
|
||||
jobDeps = deps;
|
||||
};
|
||||
in
|
||||
# sh
|
||||
''
|
||||
export PATH=${lib.makeBinPath [pkgs.gnugrep]}
|
||||
grep -q "sandbox-helper" ${run}/bin/gitlab-ci-job:test
|
||||
grep -q "gitlab-ci-job-test-raw" ${run}/bin/gitlab-ci-job:test
|
||||
grep -q "gitlab-ci-job-deps-test" ${run.passthru.actualJobScript}
|
||||
grep -q "Running script..." ${run.passthru.actualJobScript}
|
||||
grep -q "hello" ${run.passthru.actualJobScript}
|
||||
'';
|
||||
}
|
||||
{
|
||||
name = "jobPatched nix disabled";
|
||||
expected = {};
|
||||
actual = mkJobPatched {
|
||||
key = "test";
|
||||
pipeline_name = "test";
|
||||
job.nix.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\""];
|
||||
};
|
||||
actual = mkJobPatched {
|
||||
key = "test";
|
||||
pipeline_name = "test";
|
||||
job.nix = {
|
||||
enable = true;
|
||||
enable-runner-cache = false;
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
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";
|
||||
};
|
||||
actual = mkJobPatched {
|
||||
key = "test";
|
||||
pipeline_name = "test";
|
||||
job.nix = {
|
||||
enable = true;
|
||||
enable-runner-cache = true;
|
||||
runner-cache-key = "test";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "mkPipeline empty";
|
||||
expected = {};
|
||||
actual =
|
||||
(mkPipeline {
|
||||
name = "test";
|
||||
pipeline.jobs = {};
|
||||
}).finalConfig;
|
||||
}
|
||||
{
|
||||
name = "mkPipeline empty packages";
|
||||
type = "script";
|
||||
script = let
|
||||
pipeline = builtins.toFile "pipeline-test" (builtins.toJSON
|
||||
(mkPipeline {
|
||||
name = "test";
|
||||
pipeline.jobs = {};
|
||||
}).packages);
|
||||
in
|
||||
# sh
|
||||
''
|
||||
set -euo pipefail
|
||||
export PATH=${lib.makeBinPath [pkgs.jq pkgs.gnugrep pkgs.coreutils]}
|
||||
# single key
|
||||
jq 'keys | length == 1' "${pipeline}" | grep -q true
|
||||
# key is exactly "gitlab-ci:pipeline:test"
|
||||
jq -r 'keys[0]' "${pipeline}" | grep -qx "gitlab-ci:pipeline:test"
|
||||
# value contains "/nix/store/"
|
||||
jq -r '.["gitlab-ci:pipeline:test"]' "${pipeline}" | grep -q "/nix/store/"
|
||||
# value contains "gitlab-ci-test.yml"
|
||||
jq -r '.["gitlab-ci:pipeline:test"]' "${pipeline}" | grep -q "gitlab-ci-test.yml"
|
||||
# file only contains "{}"
|
||||
[[ "$(cat $(jq -r '.["gitlab-ci:pipeline:test"]' "${pipeline}"))" == "{}" ]]
|
||||
'';
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
8
tests/default.nix
Normal file
8
tests/default.nix
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
imports = [
|
||||
./utils.nix
|
||||
./ci-lib.nix
|
||||
./helpers.nix
|
||||
./pipeline-yamls.nix
|
||||
];
|
||||
}
|
||||
96
tests/helpers.nix
Normal file
96
tests/helpers.nix
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cilib = import ./../lib {inherit lib pkgs;};
|
||||
in {
|
||||
nixtest.suites."Helpers" = {
|
||||
pos = __curPos;
|
||||
tests = let
|
||||
inherit (cilib) helpers;
|
||||
in [
|
||||
{
|
||||
name = "appendToAfterScript nix disabled";
|
||||
expected = {};
|
||||
actual = helpers.appendToAfterScript [] {};
|
||||
}
|
||||
{
|
||||
name = "appendToAfterScript empty";
|
||||
expected = {
|
||||
nix.enable = true;
|
||||
after_script = [];
|
||||
};
|
||||
actual = helpers.appendToAfterScript [] {nix.enable = true;};
|
||||
}
|
||||
{
|
||||
name = "appendToAfterScript";
|
||||
expected = {
|
||||
nix.enable = true;
|
||||
after_script = ["echo after_script" "finalize_nix_ci"];
|
||||
};
|
||||
actual = helpers.appendToAfterScript ["finalize_nix_ci"] {
|
||||
nix.enable = true;
|
||||
after_script = ["echo after_script"];
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "prependToBeforeScript nix disabled";
|
||||
expected = {};
|
||||
actual = helpers.prependToBeforeScript [] {};
|
||||
}
|
||||
{
|
||||
name = "prependToBeforeScript empty";
|
||||
expected = {
|
||||
nix.enable = true;
|
||||
before_script = [];
|
||||
};
|
||||
actual = helpers.prependToBeforeScript [] {nix.enable = true;};
|
||||
}
|
||||
{
|
||||
name = "prependToBeforeScript";
|
||||
expected = {
|
||||
nix.enable = true;
|
||||
before_script = ["setup_nix_ci" "echo before_script"];
|
||||
};
|
||||
actual = helpers.prependToBeforeScript ["setup_nix_ci"] {
|
||||
nix.enable = true;
|
||||
before_script = ["echo before_script"];
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "toYaml";
|
||||
expected = ''{"hello":"world"}'';
|
||||
actual = builtins.readFile (helpers.toYaml "test" {hello = "world";});
|
||||
}
|
||||
{
|
||||
name = "filterAttrsRec";
|
||||
expected = {world = "world";};
|
||||
actual = helpers.filterAttrsRec (n: v: v != null) {
|
||||
hello = null;
|
||||
world = "world";
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "filterJobVariables with store paths";
|
||||
expected = {HELLO = "${pkgs.hello}";};
|
||||
actual = helpers.filterJobVariables true {
|
||||
variables = {
|
||||
HELLO = "${pkgs.hello}";
|
||||
WORLD = "world";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "filterJobVariables without store paths";
|
||||
expected = {WORLD = "world";};
|
||||
actual = helpers.filterJobVariables false {
|
||||
variables = {
|
||||
HELLO = "${pkgs.hello}";
|
||||
WORLD = "world";
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
26
tests/pipeline-yamls.nix
Normal file
26
tests/pipeline-yamls.nix
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
self',
|
||||
...
|
||||
}: let
|
||||
cilib = import ./../lib {inherit lib pkgs;};
|
||||
in {
|
||||
nixtest.suites."Pipeline YAMLs" = {
|
||||
pos = __curPos;
|
||||
tests = let
|
||||
jsonFile = file: builtins.fromJSON (builtins.readFile file);
|
||||
in [
|
||||
{
|
||||
name = "default";
|
||||
type = "snapshot";
|
||||
actual = jsonFile self'.legacyPackages."gitlab-ci:pipeline:default";
|
||||
}
|
||||
{
|
||||
name = "non-default";
|
||||
type = "snapshot";
|
||||
actual = jsonFile self'.legacyPackages."gitlab-ci:pipeline:non-default";
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
36
tests/utils.nix
Normal file
36
tests/utils.nix
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cilib = import ./../lib {inherit lib pkgs;};
|
||||
in {
|
||||
nixtest.suites."Utils" = {
|
||||
pos = __curPos;
|
||||
tests = [
|
||||
{
|
||||
name = "commitAndPushFiles";
|
||||
type = "script";
|
||||
script = let
|
||||
inherit (cilib) utils;
|
||||
job = builtins.toFile "test" (
|
||||
builtins.unsafeDiscardStringContext (
|
||||
builtins.toJSON (
|
||||
utils.commitAndPushFiles {
|
||||
message = "hello world";
|
||||
files = ["a.md" "b.txt"];
|
||||
} {}
|
||||
)
|
||||
)
|
||||
);
|
||||
in
|
||||
# sh
|
||||
''
|
||||
export PATH=${lib.makeBinPath [pkgs.gnugrep]}
|
||||
grep -q 'git commit -m \\"hello world\\"' ${job}
|
||||
grep -q 'git add a.md b.txt' ${job}
|
||||
'';
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue