diff --git a/.github/mergify.yml b/.github/mergify.yml index 677dc23964..d8f051024a 100644 --- a/.github/mergify.yml +++ b/.github/mergify.yml @@ -12,6 +12,8 @@ pull_request_rules: - status-success=nix (default, ubuntu-latest) - status-success=nix (default, macOS-latest) + - status-success=haskell-nix (default, ubuntu-latest) + - status-success=haskell-nix (default, macOS-latest) - status-success=test (8.10.4, ubuntu-latest) - status-success=test (8.10.4, macOS-latest) diff --git a/.github/workflows/haskell-nix.yml b/.github/workflows/haskell-nix.yml new file mode 100644 index 0000000000..ec57d2c103 --- /dev/null +++ b/.github/workflows/haskell-nix.yml @@ -0,0 +1,25 @@ +name: HaskellNix + +on: [pull_request] +jobs: + nix: + runs-on: ${{ matrix.os }} + + strategy: + fail-fast: false + matrix: + ghc: ['ghc8104'] + os: [ubuntu-latest] + + steps: + - uses: actions/checkout@v2 + with: + submodules: true + - uses: cachix/install-nix-action@v12 + with: + nix_path: nixpkgs=channel:nixos-20.03 + - uses: cachix/cachix-action@v8 + with: + name: haskell-language-server + authToken: ${{ secrets.HLS_CACHIX_AUTH_TOKEN }} + - run: nix-shell haskell.nix -A shell --argstr compiler-nix-name ${{ matrix.ghc }} --run "cabal update && cabal build" diff --git a/haskell.nix b/haskell.nix new file mode 100644 index 0000000000..9fb5f361db --- /dev/null +++ b/haskell.nix @@ -0,0 +1,62 @@ +# This file is an alternative to shell.nix that uses haskell.nix +# instead of the haskell package set from nixpkgs. +# +# To run the shell from this file run: +# +# nix-shell haskell.nix -A shell +# +# Significant differences to shell.nix: +# +# * It uses the `nixpkgs-unstable` pin of nixpkgs from haskell.nix +# instead of the niv pin (this will increase the chances of getting +# a cache hit when using the haskell.nix binary cache). +# +# * Haskell.nix reads the `source-repository-package` config from +# the `cabal.project` and other info from `plan.json`. This means +# it does not depend on `nix/default.nix` and there is no list +# of the projects packages in this file to update. +# +# Maintaining this file +# +# * Bump the haskell.nix version using `niv update haskell.nix`. +# This will update the hackage snapshot used to build the +# dependencies of the project and any `tools` set to `latest` below +# will be updated to the latest version in that snapshot. +# +{ compiler-nix-name ? "ghc8104" +, withHoogle ? false +} : +let + sources = import nix/sources.nix; + haskellNix = import sources."haskell.nix" {}; + pkgs = import haskellNix.sources.nixpkgs-unstable haskellNix.nixpkgsArgs; + project = pkgs.haskell-nix.cabalProject' { + inherit compiler-nix-name; + src = pkgs.haskell-nix.haskellLib.cleanGit { + name = "haskell-language-server"; + src = ./.; + }; + }; +in project // { + shell = project.shellFor { + inherit withHoogle; + packageSetupDeps = false; + buildInputs = with pkgs; [ + # Add tools from nixpkgs here + ] ++ builtins.attrValues ( + # Because the exe name is not the pacakge name + # we can't put `opentelemetry-extra` in the `tools` + pkgs.haskell-nix.hackage-package { + inherit compiler-nix-name; + name = "opentelemetry-extra"; + version = "latest"; + }).components.exes; + tools = { + # Tools from hackage (replace `latest` with a version number to pin) + cabal = "latest"; + hlint = "latest"; + ormolu = "latest"; + stylish-haskell = "latest"; + }; + }; +} diff --git a/nix/sources.json b/nix/sources.json index e87f2e692e..8da7c967d1 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -11,6 +11,18 @@ "url": "https://github.com/hercules-ci/gitignore/archive/c4662e662462e7bf3c2a968483478a665d00e717.tar.gz", "url_template": "https://github.com///archive/.tar.gz" }, + "haskell.nix": { + "branch": "master", + "description": "Alternative Haskell Infrastructure for Nixpkgs", + "homepage": "https://input-output-hk.github.io/haskell.nix", + "owner": "input-output-hk", + "repo": "haskell.nix", + "rev": "5d3975e33886b2b9945b98859a4ab629b63055e1", + "sha256": "014zgqqm98zwhirlww5qkqh0lwqx2b38rx83vcnx8svkz7qgiqbj", + "type": "tarball", + "url": "https://github.com/input-output-hk/haskell.nix/archive/5d3975e33886b2b9945b98859a4ab629b63055e1.tar.gz", + "url_template": "https://github.com///archive/.tar.gz" + }, "niv": { "branch": "master", "description": "Easy dependency management for Nix projects",