haskell-updates: more documentation
This commit is contained in:
parent
c40e194de2
commit
3640440ed8
@ -4,8 +4,8 @@
|
|||||||
This is the documentation for periodically merging the `haskell-updates` branch
|
This is the documentation for periodically merging the `haskell-updates` branch
|
||||||
into the `master` branch. This workflow is performed by members in the
|
into the `master` branch. This workflow is performed by members in the
|
||||||
[@NixOS/haskell](https://github.com/orgs/NixOS/teams/haskell) team.
|
[@NixOS/haskell](https://github.com/orgs/NixOS/teams/haskell) team.
|
||||||
Each member of the team takes a two week period where they much merge the
|
Each member of the team takes a two week period where they are in charge of
|
||||||
`haskell-updates` branch into `master`.
|
merging the `haskell-updates` branch into `master`.
|
||||||
|
|
||||||
The goal of this workflow is to regularly merge the `haskell-updates` branch
|
The goal of this workflow is to regularly merge the `haskell-updates` branch
|
||||||
into the `master` branch, while making sure there are no evaluation errors or
|
into the `master` branch, while making sure there are no evaluation errors or
|
||||||
@ -13,7 +13,7 @@ build errors that get into `master`.
|
|||||||
|
|
||||||
The workflow generally proceeds in three main steps:
|
The workflow generally proceeds in three main steps:
|
||||||
|
|
||||||
1. create the initial `haskell-updates` PR
|
1. create the initial `haskell-updates` PR, and update Stackage and Hackage snapshots
|
||||||
1. wait for contributors to fix newly broken Haskell packages
|
1. wait for contributors to fix newly broken Haskell packages
|
||||||
1. merge `haskell-updates` into `master`
|
1. merge `haskell-updates` into `master`
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ In this section we create the PR for merging `haskell-updates` into `master`.
|
|||||||
$ maintainers/scripts/haskell/regenerate-hackage-packages.sh --do-commit
|
$ maintainers/scripts/haskell/regenerate-hackage-packages.sh --do-commit
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Push these commits to the Nixpkgs repo.
|
1. Push these commits to the Nixpkgs repository.
|
||||||
|
|
||||||
1. Open a PR on Nixpkgs merging `haskell-updates` into `master`.
|
1. Open a PR on Nixpkgs merging `haskell-updates` into `master`.
|
||||||
|
|
||||||
@ -52,7 +52,7 @@ Use the following message body:
|
|||||||
```markdown
|
```markdown
|
||||||
### This Merge
|
### This Merge
|
||||||
|
|
||||||
This PR is the regularly merge of the `haskell-updates` branch into `master`.
|
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.
|
This branch is being continually built and tested by hydra at https://hydra.nixos.org/jobset/nixpkgs/haskell-updates.
|
||||||
|
|
||||||
@ -85,9 +85,9 @@ defined in the file [release-haskell.nix](../../top-level/release-haskell.nix).
|
|||||||
|
|
||||||
#### Notify Maintainers
|
#### Notify Maintainers
|
||||||
|
|
||||||
When Hydra finishes building all the packages, you should generate a build
|
When Hydra finishes building all the updated packages for the `haskell-updates`
|
||||||
report to notify maintainers of their broken packages. You can do that with the
|
jobset, you should generate a build report to notify maintainers of their
|
||||||
following commands:
|
newly broken packages. You can do that with the following commands:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
$ maintainers/scripts/haskell/hydra-report.hs get-report
|
$ maintainers/scripts/haskell/hydra-report.hs get-report
|
||||||
@ -115,7 +115,7 @@ may be marked broken before merging `haskell-updates` into `master`.
|
|||||||
After getting the build report, you can see which packages and Hydra jobs are
|
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`
|
failing to build. The most important jobs are the `maintained` and `mergeable`
|
||||||
jobs. These are both defined in
|
jobs. These are both defined in
|
||||||
[`release-haskell.nix](../../top-level/release-haskell.nix).
|
[`release-haskell.nix`](../../top-level/release-haskell.nix).
|
||||||
|
|
||||||
`mergeable` is a set of the most important Haskell packages, including things
|
`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
|
like Pandoc and XMonad. These packages are widely used. We would like to
|
||||||
@ -139,9 +139,9 @@ $ maintainers/scripts/haskell/hydra-report.hs get-report
|
|||||||
$ maintainers/scripts/haskell/hydra-report.hs mark-broken-list
|
$ maintainers/scripts/haskell/hydra-report.hs mark-broken-list
|
||||||
```
|
```
|
||||||
|
|
||||||
This shows a list of packages that are thought to be broken.
|
This shows a list of packages that reported broken on `x86_64-linux` on Hydra.
|
||||||
|
|
||||||
Next, run the following command.
|
Next, run the following command:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
$ maintainers/scripts/haskell/mark-broken.sh --do-commit
|
$ maintainers/scripts/haskell/mark-broken.sh --do-commit
|
||||||
@ -150,31 +150,79 @@ $ maintainers/scripts/haskell/mark-broken.sh --do-commit
|
|||||||
This first opens up an editor with the broken package list. Some of these
|
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
|
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
|
given 7 days to fix up their package, then make sure to remove those packages
|
||||||
from the list. After saving and exiting the editor, the following will
|
from the list before continuing. After saving and exiting the editor, the
|
||||||
happen:
|
following will happen:
|
||||||
|
|
||||||
- packages from the list will be added to
|
- packages from the list will be added to
|
||||||
[`configuration-hackage2nix/broken.yaml`](configuration-hackage2nix/broken.yaml)
|
[`configuration-hackage2nix/broken.yaml`](configuration-hackage2nix/broken.yaml)
|
||||||
- `hackage-packages.nix` will be regenerated
|
- `hackage-packages.nix` will be regenerated
|
||||||
- the
|
- the
|
||||||
[`configuration-hackage2nix/transitive-broken.yaml`](configuration-hackage2nix/transitive-broken.yaml)
|
[`configuration-hackage2nix/transitive-broken.yaml`](configuration-hackage2nix/transitive-broken.yaml)
|
||||||
file will be regenerated
|
file will be updated
|
||||||
- `hackage-packages.nix` will be regenerated again
|
- `hackage-packages.nix` will be regenerated again
|
||||||
- everything will be committed
|
- everything will be committed
|
||||||
|
|
||||||
### Merge `haskell-updates` into `master`
|
### Merge `haskell-updates` into `master`
|
||||||
|
|
||||||
(TODO)
|
Now it is time to merge the `haskell-updates` PR you opened above.
|
||||||
|
|
||||||
- mark broken packages with `mark-broken.sh`
|
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`.
|
||||||
|
|
||||||
|
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
|
### Additional Info
|
||||||
|
|
||||||
(TODO)
|
Here are some additional tips that didn't fit in above.
|
||||||
|
|
||||||
- you can restart a Hydra evaluation by logging in with github.
|
- It is possible to start a new Hydra evaluation by logging into Hydra with
|
||||||
|
your GitHub or Google account.
|
||||||
|
|
||||||
|
- 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` is merged into `master`, since
|
||||||
|
there is a high chance that this will cause all the Haskell packages to
|
||||||
|
rebuild.
|
||||||
|
|
||||||
|
However, as we are working on cleaning up `haskell-updates`, `master` will
|
||||||
|
continually progress. It may not always be possible to keep the
|
||||||
|
`haskell-updates` branch fully up-to-date with `master` without causing
|
||||||
|
mass-rebuilds on the `haskell-updates` jobset.
|
||||||
|
|
||||||
|
- Make sure never to update the Hackage package hashes in
|
||||||
|
`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
|
||||||
|
[`regenerated-hackage-packages.sh`](../../../maintainers/scripts/haskell/regenerated-hackage-packages.sh)
|
||||||
|
as described above.
|
||||||
|
|
||||||
## Contributor Workflow
|
## Contributor Workflow
|
||||||
|
|
||||||
(TODO: this section is to describe the type of workflow for non-comitters to
|
(TODO: this section is to describe the type of workflow for non-committers to
|
||||||
contribute to `haskell-updates`)
|
contribute to `haskell-updates`)
|
||||||
|
Loading…
Reference in New Issue
Block a user