Skip to content

Commit

Permalink
Introduce genCrossPlatformNixActions command.
Browse files Browse the repository at this point in the history
This command generates GitHub workflows on Ubuntu and macOS.
  • Loading branch information
Zimmi48 committed Jan 27, 2022
1 parent 0d2f18d commit cf83b63
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 11 deletions.
11 changes: 11 additions & 0 deletions .nix/shellHook.sh
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,17 @@ genNixActions (){
}
addNixCommand genNixActions

genCrossPlatformNixActions (){
mkdir -p $currentDir/.github/workflows/
for t in $bundles; do
for p in "ubuntu" "macos"; do
echo "generating $currentDir/.github/workflows/nix-action-$t-$p.yml"
nix-shell --arg do-nothing true --argstr bundle $t --argstr ci-platform "$p-latest" --run "ppNixAction > $currentDir/.github/workflows/nix-action-$t-$p.yml"
done
done
}
addNixCommand genCrossPlatformNixActions

initNixConfig (){
Orig=$toolboxDir/template-config.nix
F=$configDir/config.nix;
Expand Down
9 changes: 5 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,14 +90,15 @@ When you run `nix-shell`, you get an environment with a few available commands:
- `nixEnv`: displays the list of Nix store locations for all the available packages.
- `fetchCoqOverlay`: fetch a derivation file from nixpkgs that you may then edit locally to override a package.
- `cachedMake`: compile the project by reusing build outputs cached (generally thanks to Cachix).
- `genNixActions`: generates GitHub one actions file per bundle, for testing dependencies and reverse depndencies.
- `genNixActions`: generates GitHub one actions file per bundle, for testing dependencies and reverse dependencies.
- `genCrossPlatformNixActions`: duplicate generated workflows to run on both Ubuntu and macOS (useful when macOS users want to get cached artifacts as well).

These three commands update the nixpkgs version to use (will create or override `.nix/nixpkgs.nix`):
- `updateNixpkgsUnstable`: update to the latest nixpkgs-unstable.
- `updateNixpkgsMaster`: update to the head of `master` of nixpkgs.
- `updateNixpkgs`: update to the specified owner and ref.

After one of these three commands, you should leave and re-enter `nix-shell` if you want the update to be taken into account (e.g., before calling `genNixActions`).
After one of these three commands, you should leave and re-enter `nix-shell` if you want the update to be taken into account.

## Arguments accepted by `nix-shell`

Expand All @@ -114,7 +115,7 @@ To test a PR on nixpkgs that modifies the `coqPackages` set, clone this reposito

```
nix-shell --arg do-nothing true --run "updateNixpkgs <pr_owner> <pr_branch>"
nix-shell --arg do-nothing true --run "genNixActions"
nix-shell --arg do-nothing true --run "genCrossPlatformNixActions"
```

Then, open a draft PR with the generated changes here.
Expand All @@ -123,5 +124,5 @@ Once the PR on nixpkgs has been merged, you can transform the draft PR into one

```
nix-shell --arg do-nothing true --run "updateNixpkgsMaster"
nix-shell --arg do-nothing true --run "genNixActions"
nix-shell --arg do-nothing true --run "genCrossPlatformNixActions"
```
14 changes: 7 additions & 7 deletions action.nix
Original file line number Diff line number Diff line change
Expand Up @@ -78,13 +78,13 @@ with builtins; with lib; let
run = "NIXPKGS_ALLOW_UNFREE=1 nix-build --no-out-link --argstr bundle \"${bundlestr}\" --argstr job \"${job}\"";
};

mkJob = { job, jobs ? [], bundles ? [], deps ? {}, cachix ? {}, suffix ? false }:
mkJob = { job, jobs ? [], bundles ? [], deps ? {}, cachix ? {}, ci-platform, suffix ? false }:
let
suffixStr = optionalString (suffix && isString bundles) "-${bundles}";
jdeps = deps.${job} or [];
in {
"${job}${suffixStr}" = rec {
runs-on = "ubuntu-latest";
runs-on = if ci-platform == null then "ubuntu-latest" else ci-platform;
needs = map (j: "${j}${suffixStr}") (filter (j: elem j jobs) jdeps);
steps = [ stepCommitToTest stepCheckout stepCachixInstall ]
++ (stepCachixUseAll cachix)
Expand All @@ -94,11 +94,11 @@ with builtins; with lib; let
} // (optionalAttrs (isList bundles) {strategy.matrix.bundle = bundles;});
};

mkJobs = { jobs ? [], bundles ? [], deps ? {}, cachix ? {}, suffix ? false }@args:
mkJobs = { jobs ? [], bundles ? [], deps ? {}, cachix ? {}, ci-platform, suffix ? false }@args:
foldl (action: job: action // (mkJob ({ inherit job; } // args))) {} jobs;

mkActionFromJobs = { actionJobs, bundles ? [] }: {
name = "Nix CI for bundle ${toString bundles}";
mkActionFromJobs = { actionJobs, bundles ? [], ci-platform }: {
name = "Nix CI for bundle ${toString bundles}${if ci-platform == null then "" else " on platform ${ci-platform}"}";
on = {
push.branches = [ "master" ];
pull_request.paths = [ ".github/workflows/**" ];
Expand All @@ -107,7 +107,7 @@ with builtins; with lib; let
jobs = actionJobs;
};

mkAction = { jobs ? [], bundles ? [], deps ? {}, cachix ? {} }@args:
mkActionFromJobs {inherit bundles; actionJobs = mkJobs args; };
mkAction = { jobs ? [], bundles ? [], deps ? {}, cachix ? {}, ci-platform ? null }@args:
mkActionFromJobs {inherit bundles ci-platform; actionJobs = mkJobs args; };

in { inherit mkJob mkJobs mkAction; }
2 changes: 2 additions & 0 deletions config-parser-1.0.0/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ with builtins;
override ? {},
ocaml-override ? {},
global-override ? {},
ci-platform,
lib,
}@initial:
with lib;
Expand Down Expand Up @@ -59,6 +60,7 @@ in with config; let
inherit (import ../action.nix { inherit lib; }) mkJobs mkAction;
action = mkAction {
inherit (config) cachix;
inherit ci-platform;
bundles = bundleName;
jobs = let
jdeps = genAttrs ci.mains (n: genCI.pkgsRevDepsSet.${n} or {});
Expand Down
2 changes: 2 additions & 0 deletions default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ in
coq-overlays-dir ? get-path src "coq-overlays",
ocaml-overlays-dir ? get-path src "ocaml-overlays",
ci-matrix ? false,
ci-platform ? null,
config ? {},
override ? {},
ocaml-override ? {},
Expand Down Expand Up @@ -44,6 +45,7 @@ let
// { diag = f: x: f x x; };
inherit overlays-dir coq-overlays-dir ocaml-overlays-dir;
inherit global-override override ocaml-override;
inherit ci-platform;
};
my-throw = x: throw "Coq nix toolbox error: ${x}";
in
Expand Down

0 comments on commit cf83b63

Please sign in to comment.