This repository has no description
1.4 kB
45 lines
1{ ... }:
2{
3 perSystem =
4 { pkgs, ... }:
5 {
6 packages.gh-act =
7 (pkgs.writeShellApplication {
8 name = "gh-act";
9 runtimeInputs = with pkgs; [
10 yq
11 coreutils
12 ];
13 text = ''
14 workflow="''${1:-.github/workflows/ci.yml}"
15
16 if [ ! -f "$workflow" ]; then
17 echo "Usage: gh-act [workflow.yml]"
18 echo "Run GitHub Actions workflow steps locally"
19 exit 1
20 fi
21
22 echo "Running: $workflow"
23 echo "=================="
24
25 # Extract each step and run it
26 for job in $(yq -r '.jobs | keys[]' "$workflow"); do
27 echo "=== Job: $job ==="
28 step_count=$(yq -r ".jobs[\"$job\"].steps | length" "$workflow")
29 for i in $(seq 0 $((step_count - 1))); do
30 name=$(yq -r ".jobs[\"$job\"].steps[$i].name // \"Step $i\"" "$workflow")
31 run_cmd=$(yq -r ".jobs[\"$job\"].steps[$i].run // empty" "$workflow")
32
33 if [ -n "$run_cmd" ]; then
34 echo ">>> Running: $name"
35 echo "---"
36 bash -c "$run_cmd"
37 echo
38 fi
39 done
40 done
41 '';
42 }).overrideAttrs
43 { passthru.usage = builtins.readFile ./usage.kdl; };
44 };
45}