Files
nixpkgs/ci
Wolfgang Walther eea09eb9d3 workflows/bot: migrate nixpkgs-merge-bot to GHA
Running the nixpkgs-merge-bot in GitHub Actions instead of a separate
workflow has multiple advantages:
- A much better development workflow, with improved testability.
- The ability to label PRs with a "merge-bot eligible" label from the
same codebase.
- Using more data for merge strategy decisions, for example the number
of rebuilds.

This commits re-implements most of the features from the current
nxipkgs-merge-bot directly in the bot workflow. Instead of reacting to
webhook events, this now runs on the regular 10 minute schedule. Some
merges might be delayed a few minutes, but that should not be a problem
in practice.

To give the user early feedback, there are additional workflows running
when a comment or review is posted. These react with "eyes" to make the
user aware that the comment has been recognized.

The only feature not taken over was the size check for files in the PR.
This kind of check is not really relevant for maintainer merges only -
if we want to prevent bigger files from making it into the tree, then we
need a generic CI check, which is out of scope for the merge-bot.

Other than that, everything should be implemented - any omissions are by
accident.
2025-11-01 15:54:51 +01:00
..
2025-10-24 10:40:42 +02:00
2025-10-22 12:59:20 +02:00

CI support files

This directory contains files to support CI, such as GitHub Actions and Ofborg. This is in contrast with maintainers/scripts which is for human use instead.

Pinned Nixpkgs

CI may need certain packages from Nixpkgs. In order to ensure that the needed packages are generally available without building, pinned.json contains a pinned Nixpkgs version tested by Hydra.

Run update-pinned.sh to update it.

GitHub specific code

Some of the code is specific to GitHub. This code is currently spread out over multiple places and written in both Bash and JavaScript. The goal is to eventually have all GitHub specific code in ci/github-script and written in JavaScript via actions/github-script. A lot of code has already been migrated, but some Bash code still remains. New CI features need to be introduced in JavaScript, not Bash.

ci/nixpkgs-vet.sh BASE_BRANCH [REPOSITORY]

Runs the nixpkgs-vet tool on the HEAD commit, closely matching what CI does. This can't do exactly the same as CI, because CI needs to rely on GitHub's server-side Git history to compute the mergeability of PRs before the check can be started. In turn, when contributors are running this tool locally, we don't want to have to push commits to test them, and we can also rely on the local Git history to do the mergeability check.

Arguments:

  • BASE_BRANCH: The base branch to use, e.g. master or release-24.05
  • REPOSITORY: The repository from which to fetch the base branch. Defaults to https://github.com/NixOS/nixpkgs.git.

Branch classification

For the purposes of CI, branches in the NixOS/nixpkgs repository are classified as follows:

  • Channel branches
    • nixos- or nixpkgs- prefix
    • Are only updated from master or release- branches, when hydra passes.
    • Otherwise not worked on, Pull Requests are not allowed.
    • Long-lived, no deletion, no force push.
  • Primary development branches
    • release- prefix and master
    • Pull Requests required.
    • Long-lived, no deletion, no force push.
  • Secondary development branches
    • staging- prefix and haskell-updates
    • Pull Requests normally required, except when merging development branches into each other.
    • Long-lived, no deletion, no force push.
  • Work-In-Progress branches
    • backport-, revert- and wip- prefixes.
    • Deprecated: All other branches, not matched by channel/development.
    • Pull Requests are optional.
    • Short-lived, force push allowed, deleted after merge.

Some branches also have a version component, which is either unstable or YY.MM.

ci/supportedBranches.js is a script imported by CI to classify the base and head branches of a Pull Request. This classification will then be used to skip certain jobs. This script can also be run locally to print basic test cases.