-
-
Notifications
You must be signed in to change notification settings - Fork 14.4k
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
Haskell updates #123682
Merged
Merged
Haskell updates #123682
Changes from 13 commits
Commits
Show all changes
73 commits
Select commit
Hold shift + click to select a range
3e84cfa
haskell-updates: add documentation for workflow
cdepillabout f56b6e1
haskell-updates: more documentation
cdepillabout c40e194
haskell-updates: more documentation
cdepillabout ffb24a4
Stackage Nightly: 2021-05-10 -> 2021-05-19
cdepillabout 22cefb0
all-cabal-hashes: 2021-05-12T11:46:04Z -> 2021-05-19T07:17:55Z
cdepillabout 0a1c857
hackage-packages.nix: Regenerate based on current config
cdepillabout 20dd457
haskellPackages: fix infinite recursion by disabling random's tests
sternenseemann 89ca334
haskellPackages.lsp-test: remove unnecessary override
sternenseemann e467c28
haskellPackages.hashable: make test suite work with random 1.2.0
sternenseemann f3119f0
haskell.packages.*.cabal-install: remove random, hashable overrides
sternenseemann e4c634d
haskellPackages.glirc: remove unnecessary random override
sternenseemann dcaa389
haskellPackages.glirc: remove jailbreak
sternenseemann 9c6c587
haskell.packages.ghc{8104,901}: correct cabal-install override comment
sternenseemann 9b79de3
haskellPackages.hnix: make sure patches apply
sternenseemann 8014f4f
haskellPackages.dhall-nix{,pkgs}: remove cabal revision pins
sternenseemann 99acf08
haskellPackages.MissingH: jailbreak
sternenseemann 81cfe88
haskellPackages.parallel-io: jailbreak
sternenseemann 0eb2dc5
hackage-packages.nix: mark broken packages and regenerate based on cu…
cdepillabout 408d7aa
Merge remote-tracking branch 'origin/master' into haskell-updates
cdepillabout 8f9f704
haskellPackages.dyre: fix build by removing out-dated patch and pulli…
cdepillabout fa700b5
haskellPackages.language-docker: use sdist
sternenseemann a16119c
haskellPackages.Euterpea: jailbreak
sternenseemann 88ad7c8
haskellPackages.alpaca-netcode: disable flaky test
sternenseemann 154ff7e
haskellPackages.diagrams-core: restrict to < 1.5.0
sternenseemann eb196de
haskellPackages.lsp-test: disable test suite again
sternenseemann 00cca09
haskellPackages: Remove obsoletes patches for gtk-sni-tray and taffybar
maralorn 830ef64
haskell-generic-builder: disable static PIE
rnhmjoj 2ce6cdb
haskellPackages.sbv_7_13: pin dependency crackNum to < 3.0
sternenseemann 885573b
Merge remote-tracking branch 'origin/master' into haskell-updates
cdepillabout 60aa19c
haskellPackages: Add maintainer expipiplus1
expipiplus1 d37cb25
Merge pull request #123975 from expipiplus1/joe-haskell-maintainer
cdepillabout d45bcb5
hackage-packages.nix: Regenerate based on current config
cdepillabout 4d9f735
haskellPackages.hnix: Patch to fix broken location annotations
expipiplus1 e5341ff
Merge pull request #123991 from expipiplus1/joe-unf-hu
cdepillabout 0fddf5b
top-level/release-haskell.nix: test static linking as well
sternenseemann 7559b35
haskellPackages.libarchive: don't parallelize test suite
sternenseemann 18a832e
Merge pull request #124025 from sternenseemann/haskell-static-hydra
cdepillabout aa34fee
haskellPackages.taffybar: override src until next Hackage update
rvl d662775
Merge pull request #124099 from rvl/haskell-updates-taffybar
cdepillabout a9a4eb1
haskell: Add maintained packages for maralorn
maralorn 34de748
haskellPackages.orbits: disable doctest on aarch64
sternenseemann 66722bc
top-level/release-haskell.nix: no darwin in static aggregate job
sternenseemann a1b16d9
haskellPackages.hls-class-plugin: Disable tests on darwin
maralorn d1f97a0
haskellPackages.ap-normalize: 0.1.0.0 -> 0.1.0.1
sternenseemann 7144de7
bustle: remove darwin from platforms
sternenseemann 2c9b564
hackage2nix: Mark failing builds broken
cdepillabout faf5bbb
Merge remote-tracking branch 'origin/master' into haskell-updates
cdepillabout 3640440
haskell-updates: more documentation
cdepillabout efd2910
haskell-updates: small fixes
cdepillabout 259177f
haskellPackages.cabal2nix-unstable: update to latest version from github
cdepillabout cd36dc4
haskellPackages.greenclip: unmark broken
cdepillabout 99e97c8
hackage-packages.nix: Regenerate based on current config
cdepillabout b29dc52
haskellPackages.nvfetcher: add to top-level
berberman aa21d85
Merge pull request #124719 from berberman/nvfetcher
cdepillabout 532ce05
haskell-updates: more fixes for workflow documentation
cdepillabout dcc4f8e
haskell-updates: add dot slash to commands in maintainer docs
cdepillabout 197dae2
haskell-updates: add link for HACKING.md
cdepillabout bd6a1e1
haskell-updates: update workflow documentation to put goal first
cdepillabout 6b80742
haskell-updates: update workflow documentation to explain transitive …
cdepillabout adfec8b
haskell-updates: update workflow documentation to expand section on m…
cdepillabout 95e7f26
haskell-updates: update workflow documentation with a few small fixes
cdepillabout 718ab6d
Merge pull request #122728 from cdepillabout/haskell-updates-workflow
cdepillabout 2451208
haskell-updates: team workflow update link to matrix space
cdepillabout 8f33bb9
haskellPackages.hakyll: unbreak, jailbreak, patch for pandoc version
erictapen d68632f
haskell.packages: regenerate package set
sternenseemann b401b43
haskellPackages.webify: unbreak, jailbreak, as patches are not upstre…
erictapen 81c8d15
ghc: add missing meta data
guibou 8f218b3
haskell: add erictapen as maintainer for some packages
erictapen e342bd5
hackage-packages.nix: Regenerate based on current config
sternenseemann 471399b
haskellPackages.arch-web: unbreak
berberman b24ae98
Merge pull request #125327 from berberman/arch-web
cdepillabout 7191381
hackage-packages.nix: Regenerate based on current config
cdepillabout e308370
Merge remote-tracking branch 'origin/master' into haskell-updates
sternenseemann File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,270 @@ | ||
|
||
## Maintainer Workflow | ||
|
||
The goal of the [@NixOS/haskell](https://github.com/orgs/NixOS/teams/haskell) | ||
team is to keep the Haskell packages in Nixpkgs up-to-date, while making sure | ||
there are no Haskell-related evaluation errors or build errors that get into | ||
the Nixpkgs `master` branch. | ||
|
||
We do this by periodically merging an updated set of Haskell packages on the | ||
`haskell-updates` branch into the `master` branch. Each member of the team | ||
takes a two week period where they are in charge of merging the | ||
`haskell-updates` branch into `master`. This is the documentation for this | ||
workflow. | ||
|
||
The workflow generally proceeds in three main steps: | ||
|
||
1. create the initial `haskell-updates` PR, and update Stackage and Hackage snapshots | ||
1. wait for contributors to fix newly broken Haskell packages | ||
1. merge `haskell-updates` into `master` | ||
|
||
Each of these steps is described in a separate section. | ||
|
||
### Initial `haskell-updates` PR | ||
|
||
In this section we create the PR for merging `haskell-updates` into `master`. | ||
|
||
1. Make sure the `haskell-updates` branch is up-to-date with `master`. | ||
|
||
1. Update the Stackage Nightly resolver used by Nixpkgs and create a commit: | ||
|
||
```console | ||
$ ./maintainers/scripts/haskell/update-stackage.sh --do-commit | ||
``` | ||
|
||
1. Update the Hackage package set used by Nixpkgs and create a commit: | ||
|
||
```console | ||
$ ./maintainers/scripts/haskell/update-hackage.sh --do-commit | ||
``` | ||
|
||
1. Regenerate the Haskell package set used in Nixpkgs and create a commit: | ||
|
||
```console | ||
$ ./maintainers/scripts/haskell/regenerate-hackage-packages.sh --do-commit | ||
``` | ||
|
||
1. Push these commits to the Nixpkgs repository. | ||
|
||
1. Open a PR on Nixpkgs merging `haskell-updates` into `master`. | ||
|
||
Use the following message body: | ||
|
||
```markdown | ||
### This Merge | ||
|
||
This PR is the regular merge of the `haskell-updates` branch into `master`. | ||
|
||
This branch is being continually built and tested by hydra at https://hydra.nixos.org/jobset/nixpkgs/haskell-updates. | ||
|
||
I will aim to merge this PR **by 2021-TODO-TODO**. If I can merge it earlier, there might be successor PRs in that time window. As part of our rotation @TODO will continue these merges from 2021-TODO-TODO to 2021-TODO-TODO. | ||
|
||
### haskellPackages Workflow Summary | ||
|
||
Our workflow is currently described in | ||
[`pkgs/development/haskell-modules/HACKING.md`](https://github.com/NixOS/nixpkgs/blob/haskell-updates/pkgs/development/haskell-modules/HACKING.md). | ||
|
||
The short version is this: | ||
* We regularly update the Stackage and Hackage pins on `haskell-updates` (normally at the beginning of a merge window). | ||
* The community fixes builds of Haskell packages on that branch. | ||
* We aim at at least one merge of `haskell-updates` into `master` every two weeks. | ||
* We only do the merge if the `mergeable` job is succeeding on hydra. | ||
* If a maintained package is still broken at the time of merge, we will only merge if the maintainer has been pinged 7 days in advance. (If you care about a Haskell package, become a maintainer!) | ||
|
||
--- | ||
|
||
This is the follow-up to #TODO. | ||
``` | ||
|
||
Make sure to replace all TODO with the actual values. | ||
|
||
### Notify Maintainers and Fix Broken Packages | ||
|
||
After you've done the previous steps, Hydra will start building the new and | ||
updated Haskell packages. You can see the progress Hydra is making at | ||
https://hydra.nixos.org/jobset/nixpkgs/haskell-updates. This Hydra jobset is | ||
defined in the file [release-haskell.nix](../../top-level/release-haskell.nix). | ||
|
||
#### Notify Maintainers | ||
|
||
When Hydra finishes building all the updated packages for the `haskell-updates` | ||
jobset, you should generate a build report to notify maintainers of their | ||
newly broken packages. You can do that with the following commands: | ||
|
||
```console | ||
$ ./maintainers/scripts/haskell/hydra-report.hs get-report | ||
$ ./maintainers/scripts/haskell/hydra-report.hs ping-maintainers | ||
``` | ||
|
||
The `hyda-report.hs ping-maintainers` command generates a Markdown document | ||
that you can paste in a GitHub comment on the PR opened above. This | ||
comment describes which Haskell packages are now failing to build. It also | ||
pings the maintainers so that they know to fix up their packages. | ||
|
||
It may be helpful to pipe `hydra-report.hs ping-maintainers` into `xclip` | ||
(XOrg) or `wl-copy` (Wayland) in order to post on GitHub. | ||
|
||
This build report can be fetched and re-generated for new Hydra evaluations. | ||
It may help contributors to try to keep the GitHub comment updated with the | ||
most recent build report. | ||
|
||
Maintainers should be given at least 7 days to fix up their packages when they | ||
break. If maintainers don't fix up their packages with 7 days, then they | ||
may be marked broken before merging `haskell-updates` into `master`. | ||
|
||
#### Fix Broken Packages | ||
|
||
After getting the build report, you can see which packages and Hydra jobs are | ||
failing to build. The most important jobs are the `maintained` and `mergeable` | ||
jobs. These are both defined in | ||
[`release-haskell.nix`](../../top-level/release-haskell.nix). | ||
|
||
`mergeable` is a set of the most important Haskell packages, including things | ||
like Pandoc and XMonad. These packages are widely used. We would like to | ||
always keep these building. | ||
|
||
`maintained` is a set of Haskell packages that have maintainers in Nixpkgs. | ||
We should be proactive in working with maintainers to keep their packages | ||
building. | ||
|
||
Steps to fix Haskell packages that are failing to build is out of scope for | ||
this document, but it usually requires fixing up dependencies that are now | ||
out-of-bounds. | ||
|
||
#### Mark Broken Packages | ||
|
||
Packages that do not get fixed can be marked broken with the following | ||
commands. First check which packages are broken: | ||
|
||
```console | ||
$ ./maintainers/scripts/haskell/hydra-report.hs get-report | ||
$ ./maintainers/scripts/haskell/hydra-report.hs mark-broken-list | ||
``` | ||
|
||
This shows a list of packages that reported a build failure on `x86_64-linux` on Hydra. | ||
|
||
Next, run the following command: | ||
|
||
```console | ||
$ ./maintainers/scripts/haskell/mark-broken.sh --do-commit | ||
``` | ||
|
||
This first opens up an editor with the broken package list. Some of these | ||
packages may have a maintainer in Nixpkgs. If these maintainers have not been | ||
given 7 days to fix up their package, then make sure to remove those packages | ||
from the list before continuing. After saving and exiting the editor, the | ||
following will happen: | ||
|
||
- Packages from the list will be added to | ||
[`configuration-hackage2nix/broken.yaml`](configuration-hackage2nix/broken.yaml). | ||
This is a list of Haskell packages that are known to be broken. | ||
|
||
- [`hackage-packages.nix`](hackage-packages.nix) will be regenerated. This | ||
will mark all Haskell pacakges in `configuration-hackage2nix/broken.yaml` | ||
as `broken`. | ||
|
||
- The | ||
[`configuration-hackage2nix/transitive-broken.yaml`](configuration-hackage2nix/transitive-broken.yaml) | ||
file will be updated. This is a list of Haskell packages that | ||
depend on a package in `configuration-hackage2nix/broken.yaml` or | ||
`configuration-hackage2nix/transitive-broken.yaml` | ||
|
||
- `hackage-packages.nix` will be regenerated again. This will set | ||
`hydraPlatforms = none` for all the packages in | ||
`configuration-hackage2nix/transitive-broken.yaml`. This makes | ||
sure that Hydra does not try to build any of these packages. | ||
|
||
- All updated files will be committed. | ||
|
||
#### Merge `master` into `haskell-updates` | ||
|
||
You should occasionally merge the `master` branch into the `haskell-updates` | ||
branch. | ||
|
||
In an ideal world, when we merge `haskell-updates` into `master`, it would | ||
cause few Hydra rebuilds on `master`. Ideally, the `nixos-unstable` channel | ||
would never be prevented from progressing because of needing to wait for | ||
rebuilding Haskell packages. | ||
|
||
In order to make sure that there are a minimal number of rebuilds after merging | ||
`haskell-updates` into `master`, `master` should occasionally be merged into | ||
the `haskell-updates` branch. | ||
|
||
This is especially important after `staging-next` is merged into `master`, | ||
since there is a high chance that this will cause all the Haskell packages to | ||
rebuild. | ||
|
||
### Merge `haskell-updates` into `master` | ||
|
||
Now it is time to merge the `haskell-updates` PR you opened above. | ||
|
||
Before doing this, make sure of the following: | ||
|
||
- All Haskell packages that fail to build are correctly marked broken or | ||
transitively broken. | ||
|
||
- The `maintained` and `mergeable` jobs are passing on Hydra. | ||
|
||
- The maintainers for any maintained Haskell packages that are newly broken | ||
have been pinged on GitHub and given at least a week to fix their packages. | ||
This is especially important for widely-used packages like `cachix`. | ||
|
||
- Make sure you first merge the `master` branch into `haskell-updates`. Wait | ||
for Hydra to evaluate the new `haskell-updates` jobset. Make sure you only | ||
merge `haskell-updates` into `master` when there are no evaluation errors. | ||
|
||
When you've double-checked these points, go ahead and merge the `haskell-updates` PR. | ||
After merging, **make sure not to delete the `haskell-updates` branch**, since it | ||
causes all currently open Haskell-related pull-requests to be automatically closed on GitHub. | ||
|
||
### Additional Info | ||
|
||
Here are some additional tips that didn't fit in above. | ||
|
||
- Hydra tries to evalute the `haskell-updates` branch (in the | ||
[`nixpkgs:haskell-updates`](https://hydra.nixos.org/jobset/nixpkgs/haskell-updates) | ||
jobset) every 4 hours. It is possible to force a new Hydra evaluation without | ||
waiting 4 hours by the following steps: | ||
|
||
1. Log into Hydra with your GitHub or Google account. | ||
1. Go to the [nixpkgs:haskell-updates](https://hydra.nixos.org/jobset/nixpkgs/haskell-updates) jobset. | ||
1. Click the `Actions` button. | ||
1. Select `Evaluate this jobset`. | ||
1. If you refresh the page, there should be a new `Evaluation running since:` line. | ||
1. Evaluations take about 10 minutes to finish. | ||
|
||
- It is sometimes helpful to update the version of | ||
[`cabal2nix` / `hackage2nix`](https://github.com/NixOS/cabal2nix) that our | ||
maintainer scripts use. This can be done with the | ||
[`maintainers/scripts/haskell/update-cabal2nix-unstable.sh`](../../../maintainers/scripts/haskell/update-cabal2nix-unstable.sh) | ||
script. | ||
|
||
You might want to do this if a user contributes a fix to `cabal2nix` that | ||
will immediately fix a Haskell package in Nixpkgs. First, merge in | ||
the PR to `cabal2nix`, then run `update-cabal2nix-upstable.sh`. Finally, run | ||
[`regenerate-hackage-packages.sh`](../../../maintainers/scripts/haskell/regenerate-hackage-packages.sh) | ||
to regenerate the Hackage package set with the updated version of `hackage2nix`. | ||
|
||
- Make sure never to update the Hackage package hashes in | ||
[`pkgs/data/misc/hackage/`](../../../pkgs/data/misc/hackage/), or the | ||
pinned Stackage Nightly versions on the release branches (like | ||
`release-21.05`). | ||
|
||
This means that the | ||
[`update-hackage.sh`](../../../maintainers/scripts/haskell/update-hackage.sh) | ||
and | ||
[`update-stackage.sh`](../../../maintainers/scripts/haskell/update-stackage.sh) | ||
scripts should never be used on the release branches. | ||
|
||
However, changing other files in `./.` and regenerating the package set is encouraged. | ||
This can be done with | ||
[`regenerate-hackage-packages.sh`](../../../maintainers/scripts/haskell/regenerate-hackage-packages.sh) | ||
as described above. | ||
|
||
- The Haskell team members generally hang out in the Matrix room | ||
[#haskell-space:matrix.org](https://matrix.to/#/#haskell-space:matrix.org). | ||
|
||
## Contributor Workflow | ||
|
||
(TODO: this section is to describe the type of workflow for non-committers to | ||
contribute to `haskell-updates`) |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Shouldn't we link
#haskell:nixos.org
directly here? My server doesn't support spaces, so I wouldn't be able to get there from the space, I think.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Whoops, completely pasted the wrong link here.
I've fixed this in 2451208 and changed the link to #haskell:nixos.org. I think that should be correct?