diff --git a/.cachix.dhall b/.cachix.dhall new file mode 100644 index 0000000000000000000000000000000000000000..29ecf47463ac93a093120e31547d5930ff02eaf2 --- /dev/null +++ b/.cachix.dhall @@ -0,0 +1,40 @@ +let Prelude = + env:DHALL_PRELUDE + ? https://raw.githubusercontent.com/dhall-lang/dhall-lang/v20.1.0/Prelude/package.dhall + sha256:26b0ef498663d269e4dc6a82b0ee289ec565d683ef4c00d0ebdd25333a5a3c98 + +let H = + https://gitlab.horizon-haskell.net/dhall/horizon-spec/-/raw/0.6/dhall/package.dhall + sha256:9a80164572526dc5350f105c8db0790fdf36634629b4cf03402ba14fd173d121 + +let toStep + : Text → Text + = λ(x : Text) → + "nix build --accept-flake-config --json .#${x} | jq -r '.[].outputs | to_entries[].value' | cachix push horizon" + +let toEchoStep + : Text → Text + = λ(x : Text) → "echo \"${toStep x}\"" + +let input = + Prelude.Map.keys + Text + H.HaskellPackage.Type + ( merge + { MakePackageSet = + λ(x : H.PackageSetExportSettings) → x.packageSet.packages + , MakeOverlay = λ(x : H.OverlayExportSettings) → x.overlay.packages + } + ./horizon.dhall + ) + +let packages = Prelude.List.map Text Text toEchoStep (input : List Text) + +in "(" + ++ Prelude.List.fold + Text + packages + Text + (λ(x : Text) → λ(y : Text) → x ++ ";" ++ y) + "" + ++ ") | parallel -j 16" diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 926dac62bfb764ebbc04b5bb19dd078b5bd875c8..5cb6ab10bc310602eca4ca4a07dce5198a7f5be5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,7 @@ stages: - generate - check +- cache generate-flake-ci: stage: generate @@ -16,3 +17,11 @@ flake-ci: - artifact: flake-ci.yml job: generate-flake-ci strategy: depend + +cachix: + stage: cache + only: + refs: + - master + - cachix + script: nix-shell -p jq cachix parallel --command 'dhall --file .cachix.dhall | dhall text | bash' diff --git a/flake.nix b/flake.nix index c971800100c8183a4ddda7a16ce5e149e73e6842..463cdc4b0b34d782cf11a949a0c36dbbaa7b3e3e 100644 --- a/flake.nix +++ b/flake.nix @@ -2,6 +2,11 @@ description = "Horizon Haskell Platform"; + nixConfig = { + extra-substituters = "https://horizon.cachix.org"; + extra-trusted-public-keys = "horizon.cachix.org-1:MeEEDRhRZTgv/FFGCv3479/dmJDfJ82G6kfUDxMSAw0="; + }; + inputs = { get-flake.url = "github:ursi/get-flake"; flake-parts.url = "github:hercules-ci/flake-parts";