Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- uses: cachix/install-nix-action@v31
with:
extra_nix_config: |
Expand Down
26 changes: 26 additions & 0 deletions module/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -579,6 +579,32 @@ list of string



## pipeline\.github-actions\.checkoutAction



The default checkout action to use for jobs



*Type:*
string



*Default:*
` "actions/checkout@v6" `



*Example:*
` "actions/checkout@v5" `

*Declared by:*
- [interface\.nix](interface.nix)



## pipeline\.github-actions\.defaultRunsOn


Expand Down
7 changes: 7 additions & 0 deletions module/interface.nix
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,13 @@ in
description = "A function to transform job names";
};

checkoutAction = lib.mkOption {
type = types.str;
default = "actions/checkout@v6";
description = "The default checkout action to use for jobs";
example = "actions/checkout@v5";
};

file = lib.mkOption {
internal = true;
type = types.package;
Expand Down
3 changes: 2 additions & 1 deletion module/jobs/github-actions/default.nix
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{ lib, config, ... }:

let
inherit (config.pipeline.github-actions) checkoutAction;
enabledJobs = lib.filterAttrs (_: builtins.getAttr "enable") config.jobs;

changes = lib.pipe enabledJobs [
Expand All @@ -17,7 +18,7 @@ in
outputs.changes = "\${{ steps.diff.outputs.changes }}";
runs-on = config.pipeline.github-actions.defaultRunsOn;
steps = [
{ uses = "actions/checkout@v4"; }
{ uses = checkoutAction; }
{
id = "diff";
shell = "bash";
Expand Down
4 changes: 2 additions & 2 deletions module/jobs/job/github-actions.nix
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

let
inherit (rootConfig) jobs;
inherit (rootConfig.pipeline.github-actions) defaultRunsOn transformJobName;
inherit (rootConfig.pipeline.github-actions) defaultRunsOn transformJobName checkoutAction;

needs = lib.pipe config.needs [
(builtins.filter (need: jobs.${need.job}.enable))
Expand All @@ -24,7 +24,7 @@ in
runs-on = lib.mkIf (defaultRunsOn != null) (lib.mkDefault defaultRunsOn);

steps = lib.mkMerge [
(lib.mkIf config.checkout (lib.mkBefore [ { uses = "actions/checkout@v4"; } ]))
(lib.mkIf config.checkout (lib.mkBefore [ { uses = checkoutAction; } ]))
(lib.mkAfter (map (command: { run = command; }) config.commands))
];
}
Expand Down
86 changes: 73 additions & 13 deletions module/tests/github-actions/job.nix
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
jobs.job1 = {
runs-on = "ubuntu-latest";
steps = [
{ uses = "actions/checkout@v4"; }
{ uses = "actions/checkout@v6"; }
{ run = "echo 'Run your script here'"; }
];
};
Expand All @@ -33,11 +33,11 @@
expected = {
jobs = {
job_a = {
steps = [ { uses = "actions/checkout@v4"; } ];
steps = [ { uses = "actions/checkout@v6"; } ];
};
job_b = {
needs = [ "job_a" ];
steps = [ { uses = "actions/checkout@v4"; } ];
steps = [ { uses = "actions/checkout@v6"; } ];
};
};
};
Expand All @@ -57,11 +57,11 @@
expected = {
jobs = {
job-a = {
steps = [ { uses = "actions/checkout@v4"; } ];
steps = [ { uses = "actions/checkout@v6"; } ];
};
job-c = {
needs = [ "job-a" ];
steps = [ { uses = "actions/checkout@v4"; } ];
steps = [ { uses = "actions/checkout@v6"; } ];
};
};
};
Expand All @@ -75,11 +75,11 @@
expected = {
jobs = {
job-a = {
steps = [ { uses = "actions/checkout@v4"; } ];
steps = [ { uses = "actions/checkout@v6"; } ];
};
job-b = {
needs = [ "job-a" ];
steps = [ { uses = "actions/checkout@v4"; } ];
steps = [ { uses = "actions/checkout@v6"; } ];
};
};
};
Expand All @@ -91,7 +91,7 @@
};

expected = {
jobs.job-a.steps = [ { uses = "actions/checkout@v4"; } ];
jobs.job-a.steps = [ { uses = "actions/checkout@v6"; } ];
};
};

Expand All @@ -105,9 +105,9 @@

expected = {
jobs = {
job-a.steps = [ { uses = "actions/checkout@v4"; } ];
job-a.steps = [ { uses = "actions/checkout@v6"; } ];
job-b = {
steps = [ { uses = "actions/checkout@v4"; } ];
steps = [ { uses = "actions/checkout@v6"; } ];
needs = [ "job-a" ];
};
};
Expand Down Expand Up @@ -142,7 +142,7 @@
outputs.changes = "\${{ steps.diff.outputs.changes }}";
runs-on = "ubuntu-latest";
steps = [
{ uses = "actions/checkout@v4"; }
{ uses = "actions/checkout@v6"; }
{
id = "diff";
shell = "bash";
Expand All @@ -157,14 +157,74 @@
"if" = ''''${{ fromJSON(needs.changes.outputs.changes)['job-a'] == true }}'';
runs-on = "ubuntu-latest";
steps = [
{ uses = "actions/checkout@v4"; }
{ uses = "actions/checkout@v6"; }
];
};

job-b = {
runs-on = "ubuntu-latest";
steps = [
{ uses = "actions/checkout@v4"; }
{ uses = "actions/checkout@v6"; }
];
};
};
};
};

test-github-actions-job-custom-checkout-action = {
expr = test-lib.eval-github-actions {
pipeline.github-actions.defaultRunsOn = "ubuntu-latest";
pipeline.github-actions.checkoutAction = "actions/checkout@v5";
jobs.job1 = {
checkout = true;
commands = [ "echo hello" ];
};
};
expected = {
jobs.job1 = {
runs-on = "ubuntu-latest";
steps = [
{ uses = "actions/checkout@v5"; }
{ run = "echo hello"; }
];
};
};
};

test-github-actions-changes-job-uses-custom-checkout-action = {
expr = test-lib.eval-github-actions {
pipeline.github-actions.defaultRunsOn = "ubuntu-latest";
pipeline.github-actions.checkoutAction = "actions/checkout@v5";
jobs = {
job-a = {
branches.default = {
changes.paths = [ "src/**" ];
triggers.onMergeRequest = true;
};
};
};
};
expected = {
jobs = {
changes = {
outputs.changes = "\${{ steps.diff.outputs.changes }}";
runs-on = "ubuntu-latest";
steps = [
{ uses = "actions/checkout@v5"; }
{
id = "diff";
shell = "bash";
env.PATHS = "job-a:src/**";
run = builtins.readFile ../../jobs/github-actions/diff-script;
}
];
};
job-a = {
needs = [ "changes" ];
"if" = ''''${{ fromJSON(needs.changes.outputs.changes)['job-a'] == true }}'';
runs-on = "ubuntu-latest";
steps = [
{ uses = "actions/checkout@v5"; }
];
};
};
Expand Down
Loading