Add alternative approach for multiple versions of the compiler

This commit is contained in:
Oscar Izquierdo 2024-07-23 16:22:07 +02:00 committed by Sebastián Estrella
parent 1ba26f81f5
commit b87f959b89
2 changed files with 75 additions and 49 deletions

View File

@ -24,10 +24,15 @@ jobs:
with: with:
extra-conf: accept-flake-config = true extra-conf: accept-flake-config = true
- uses: DeterminateSystems/magic-nix-cache-action@v7 - uses: DeterminateSystems/magic-nix-cache-action@v7
- name: Compile code # TODO: improve with matrix
run: nix build .#test - name: Compile code ghc8107
- name: Run tests run: nix build .#test-ghc8107
run: nix run .#test - name: Run tests ghc8107
run: nix run .#test-ghc8107
- name: Compile code ghc902
run: nix build .#test-ghc902
- name: Run tests ghc902
run: nix run .#test-ghc902
docker: docker:
uses: ./.github/workflows/reusable-docker.yml uses: ./.github/workflows/reusable-docker.yml

111
flake.nix
View File

@ -17,53 +17,74 @@
]; ];
}; };
outputs = inputs@{ self, flake-utils, haskellNix, nixpkgs }: outputs = inputs@{ self, flake-utils, haskellNix, nixpkgs }:
let # https://input-output-hk.github.io/haskell.nix/tutorials/getting-started-flakes.html
buildWithGhc = ghcVersion: system: flake-utils.lib.eachDefaultSystem (system:
let let
pkgs = import nixpkgs { pkgs = import nixpkgs {
inherit system; inherit system;
inherit (haskellNix) config; inherit (haskellNix) config;
overlays = [ overlays = [
haskellNix.overlay haskellNix.overlay
(final: prev: { (final: prev: {
hapistrano = final.haskell-nix.cabalProject' { hapistrano-ghc8107 = final.haskell-nix.cabalProject' {
src = final.haskell-nix.haskellLib.cleanGit { src = final.haskell-nix.haskellLib.cleanGit {
name = "hapistrano"; name = "hapistrano";
src = ./.; src = ./.;
};
compiler-nix-name = ghcVersion;
}; };
}) compiler-nix-name = "ghc8107";
]; };
hapistrano-ghc902 = final.haskell-nix.cabalProject' {
src = final.haskell-nix.haskellLib.cleanGit {
name = "hapistrano";
src = ./.;
};
compiler-nix-name = "ghc902";
};
})
];
};
flake-ghc8107 = pkgs.hapistrano-ghc8107.flake { };
flake-ghc902 = pkgs.hapistrano-ghc902.flake { };
in
flake-ghc8107 // flake-ghc902 // rec {
apps = {
test-ghc8107 = {
type = "app";
program = "${packages.test-ghc8107}/bin/test";
}; };
flake = pkgs.hapistrano.flake { }; test-ghc902 = {
in type = "app";
flake // rec { program = "${packages.test-ghc902}/bin/test";
apps = {
test = {
type = "app";
program = "${packages.test}/bin/test";
};
};
legacyPackages = pkgs;
packages = {
default = flake.packages."hapistrano:exe:hap";
test = flake.packages."hapistrano:test:test".overrideAttrs (_: {
postFixup = ''
wrapProgram $out/bin/test \
--set PATH ${pkgs.lib.makeBinPath [
pkgs.bash
pkgs.coreutils
pkgs.findutils
pkgs.git
pkgs.zsh
]}
'';
});
}; };
}; };
in legacyPackages = pkgs;
flake-utils.lib.eachDefaultSystem (buildWithGhc "ghc902") // packages = {
flake-utils.lib.eachDefaultSystem (buildWithGhc "ghc8107"); default = flake-ghc8107.packages."hapistrano:exe:hap";
test-ghc8107 = flake-ghc8107.packages."hapistrano:test:test".overrideAttrs (_: {
postFixup = ''
wrapProgram $out/bin/test \
--set PATH ${pkgs.lib.makeBinPath [
pkgs.bash
pkgs.coreutils
pkgs.findutils
pkgs.git
pkgs.zsh
]}
'';
});
test-ghc902 = flake-ghc902.packages."hapistrano:test:test".overrideAttrs (_: {
postFixup = ''
wrapProgram $out/bin/test \
--set PATH ${pkgs.lib.makeBinPath [
pkgs.bash
pkgs.coreutils
pkgs.findutils
pkgs.git
pkgs.zsh
]}
'';
});
};
});
} }