Skip to content

Add haskell.nix shell #1386

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 7 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/mergify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
25 changes: 25 additions & 0 deletions .github/workflows/haskell-nix.yml
Original file line number Diff line number Diff line change
@@ -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 }}
Comment on lines +23 to +24
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The haskell-language-server Cachix account is limited to 5GB, so this won't work. I recommend using a different Cachix account for the haskell.nix artifacts, I can set up the token if you share it via email ([email protected]).

To test it, you will have to open the PR from a GitHub.com/haskell/haskell-language-server branch, otherwise the GitHub action cannot see the token. I've given you push access

Copy link
Collaborator

@pepeiborra pepeiborra Feb 20, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've set up the public Cachix account haskell-nix-language-server and the secret HLS_NIX_CACHIX_AUTH_TOKEN

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can set up the token if you share it via email

Sorry, I just saw this. Do you still need me to do this?

I've given you push access

I tried pushing the hkm/haskell-nix branch to haskell/haskell-language-server, but got:

ERROR: Permission to haskell/haskell-language-server.git denied to hamishmack.
Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

It used quite a lot of github minutes building GHC.  Is it possible (and would it make sense) to use the IOHK cache instead of cachix (or better yet as an upstream cache if that is possible)?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Github says that it is awaiting your response:
image

It makes sense to use the IOHK cache, as long as it freely accessible and also provides Mac OS builds?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@hamishmack hi, some update on this?

- run: nix-shell haskell.nix -A shell --argstr compiler-nix-name ${{ matrix.ghc }} --run "cabal update && cabal build"
62 changes: 62 additions & 0 deletions haskell.nix
Original file line number Diff line number Diff line change
@@ -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";
};
};
}
12 changes: 12 additions & 0 deletions nix/sources.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,18 @@
"url": "https://github.com/hercules-ci/gitignore/archive/c4662e662462e7bf3c2a968483478a665d00e717.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.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/<owner>/<repo>/archive/<rev>.tar.gz"
},
"niv": {
"branch": "master",
"description": "Easy dependency management for Nix projects",
Expand Down