Commit graph

132 commits

Author SHA1 Message Date
Michael Daniels
c9225057c9
ci/github-script/check-target-branch: do not "Request changes"
You can technically have multiple reviews requesting changes, but
there's no good way to dismiss all of the reviews requesting changes from
the same user using the UI.

This makes minimization impossible (because all but one of the reviews is not
dismissed, even though the PR is no longer blocked due to the review
in GitHub's system).

As a workaround, we will only comment.

CI will still fail when appropriate.
2026-01-25 19:46:46 -05:00
Michael Daniels
e1e5b8ad91
ci/github-script/check-target-branch: kernel updates should not need to go to staging-xx.xx 2026-01-25 19:10:51 -05:00
Michael Daniels
cd6bc04a06
ci/github-script/check-target-branch: loosen staging threshold for home-assistant 2026-01-25 19:10:50 -05:00
Michael Daniels
50590d21d5
ci/github-script/check-target-branch: simplify rebuildsAllTests variable 2026-01-25 19:10:50 -05:00
Michael Daniels
99c1a35b73
ci/github-script/check-target-branch: add type for changed-paths.json 2026-01-25 19:10:50 -05:00
Michael Daniels
4447561c05
ci/github-script/{reviews,check-target-branch,commits,prepare}: add sticky review support 2026-01-25 19:10:50 -05:00
Michael Daniels
3fb23e6837
ci/github-script/reviews: enable typescript 2026-01-25 16:53:07 -05:00
Aliaksandr
bf5645a0ed
ci(bot): auto-label package updates with '8.has: package (update)'
Checks all PR commit messages for version update pattern
like 'packagename: X.Y.Z -> A.B.C'.

Matches: 1.2.3, 0-unstable-2024-01-15, 1.3rc1, alpha, unstable
2026-01-24 01:15:36 +02:00
Aliaksandr
bb0ec76b44
ci(bot): auto-label new package PRs with '8.has: package (new)'
Checks all PR commit messages for ': init at' pattern and
requires eval to report added packages (attrdiff.added).
2026-01-24 01:15:35 +02:00
Aliaksandr
033eccc028
ci(bot): add fork compatibility for team lookups
Forks don't have NixOS teams, return empty list to avoid 404.
2026-01-24 01:15:35 +02:00
Aliaksandr
0557411308
ci(bot): add fork compatibility for maintainer map
In forks without merge-group history, return empty maintainer
map instead of throwing an error.
2026-01-24 01:15:35 +02:00
Matt Sturgeon
5c558b976c
ci/github-script/bot: handle deleted maintainer accounts gracefully (#481949) 2026-01-20 22:11:58 +00:00
Emily
742b1081c5 Revert "ci/github-script/bot: skip mergeability checks temporarily"
Apparently any effects from this change haven’t shown up noticeably
in GitHub’s metrics, to the point where they’re not sure if it
was taking effect on the backend. Our contact is going to look at
getting something into the API response to help debug whether it’s
actually working or not, but agreed that we should just revert for
now. Since they have apparently reduced replica sync issues further
through other changes on their end, there shouldn’t be any urgent
need to make any changes here anyway.

This reverts commit 18b30c8ce1.
2026-01-20 16:19:16 +00:00
Philip Taron
e6e6c544ae
ci/github-script/bot: handle deleted maintainer accounts gracefully
When a maintainer deletes their GitHub account, the bot would crash with a 404 error when trying to fetch their user info via `/user/{id}`.

This caused the scheduled bot workflow to fail repeatedly until manual intervention (e.g., closing/reopening the affected PR to clear the requested reviewer).

Fix by returning null from getUser() for 404 responses and filtering out null users when building the reviewers list.
2026-01-20 06:27:34 -08:00
Michael Daniels
a4d5f8a6b1
{workflows/eval,ci/github-script}: check for mass rebuilds targeting master/release-* branches 2026-01-19 13:02:09 -05:00
Michael Daniels
0ba1ea61e3
ci/github-script/reviews: allow leaving review comments 2026-01-19 11:29:53 -05:00
Michael Daniels
e05e984689
ci/github-script/reviews: rework dismissal/non-posting logic
Dismissals are done automatically by commits.js, even for reviews from
check-target-branches.js. This is not desirable.

The solution is
(1) do not decline to post a review because it was already dismissed
    (because it may have not been dismissed by a human, and circumstances may
    have changed), and
(2) reword the auto-dismissal message to not imply that whatever
    problems were present are fixed.
2026-01-19 11:29:47 -05:00
aleksana
c04dc5869d workflows/lint: require to contain a colon with a whitespace
This restricts github automatically merging master with commit message
"Merge branch 'NixOS:master' into ...". Although we don't explicitly
prohibit not space after colons, we don't use it in any of the examples.
It's also enforced in https://www.conventionalcommits.org/en/v1.0.0/
2026-01-09 16:40:09 +08:00
Matt Sturgeon
7cfe9b8c85
workflows/lint: fully skip the commits job in Merge Queues
Follow-up to 7cf5972410

While the JS script already returned early, we can save a few resources
by skipping the job entirely when there's no `pull_request` context.
2025-12-18 13:09:17 +00:00
Matt Sturgeon
e97d1c56ad
{workflows/lint,ci/github-script}: lint commit messages (#470523) 2025-12-18 12:41:54 +00:00
Emily
18b30c8ce1 ci/github-script/bot: skip mergeability checks temporarily
This is an experiment and can be reverted a few days from now; if
the results are positive on GitHub’s end, then we may want to make
the merge conflict checks run less frequently than the rest of the
labelling tasks.
2025-12-15 17:40:03 +00:00
Michael Daniels
7cf5972410
{workflows/lint,ci/github-script}: lint commit messages 2025-12-13 16:43:41 -05:00
Michael Daniels
3b4575c8c9
ci/github-script/commits: clarify commit hash not found message
Per matrix.
2025-11-28 18:04:01 -05:00
Michael Daniels
74c008760e
ci/github-script/bot: don't attempt to fetch pagination cursor if it's expired
I fixed this for the maintainer maps, but the artifact that was causing the
particular issue that prompted me to try to fix it was actually the
pagination cursor. So fix that too.

Related: #464046.
2025-11-22 15:36:38 -05:00
Michael Daniels
25b6c45ef4
ci/github-script/reviewers: convert all usernames to lowercase (part 2)
Context: #464046
2025-11-22 15:24:39 -05:00
Michael Daniels
a88711a02d
ci/github-script/reviewers: convert all usernames to lowercase
Should fix https://github.com/nixos/nixpkgs/pull/463686#issuecomment-3563126753
2025-11-22 15:00:42 -05:00
Michael Daniels
040aeda1e7
ci/github-script/bot: log author of pull request
Should help debug "Review cannot be requested from pull request author."
in https://github.com/NixOS/nixpkgs/actions/runs/19591357890/job/56110301046#step:6:4726.
2025-11-22 11:54:25 -05:00
Michael Daniels
ce3d550556
ci/github-script/bot: skip expired artifacts
Should prevent "Unhandled error: HttpError: Artifact has expired", as was
present in e.g. https://github.com/NixOS/nixpkgs/actions/runs/19594659032.
2025-11-22 11:39:10 -05:00
Wolfgang Walther
4cb689fd65
ci/github-script/prepare: fix with missing release- branch
The prepare script is currently failing for staging-25.11 PR's, because
it assumes that a release-25.11 exists respectively. This is not the
case in the transition phase before branch-off.

We can fix this by always including the current target branch in the
branches to check for, even if it's not a WIP branch. This means we
might check some branches twice, but that's better than erroring out
entirely when the branch is in fact correct.
2025-11-18 19:04:30 +01:00
Wolfgang Walther
28a32416fb
Revert "ci/github-script/labels: close empty PRs"
This reverts commit 402b41c125.

GitHub' API repeatedly returns wrong data which causes closed PRs when
the changes had not been merged, yet.

We have closed a bit more than 100 PRs overall, most of them initially -
the feature is not really that important overall.
2025-11-18 09:20:08 +01:00
Wolfgang Walther
d767570291
ci/github-script/bot: skip PR checks when stale
It makes not much sense to run all the checks for PRs when we can
already tell they are stale beforehand. In particular this should avoid
creating ~3.3k temporary merge commits every day, for PRs that surely
won't have had any change.

The number of merge commits *could* play a role in the growing size of
the fork network. We'll have GitHub look into the metrics before and
after this change to see whether that is any improvement.
2025-11-17 20:48:02 +01:00
Diogo Correia
eb8cfea79d
ci: fix "needs: reviewer" label being removed after self review 2025-11-09 13:30:50 +00:00
Matt Sturgeon
b780d50910
ci/github-script/bot: fix concurrency limit (#459207) 2025-11-06 17:59:26 +00:00
Wolfgang Walther
1311ce348c
ci/github-script/merge: add hint about stuck GitHub (#459122) 2025-11-06 17:11:28 +00:00
Wolfgang Walther
a146035a2b
ci/github-script/bot: fix concurrency limit
This was introduced as part of the hotfix PR to avoid hitting API rate
limits - but the condition was wrong. It was supposed to trigger in all
PR contexts, not only for the Test workflow.
2025-11-06 17:46:56 +01:00
Wolfgang Walther
cd7f83638e
ci/github-script/bot: limit concurrency in PR runs
This lead to reaching secondary API limits in a treewide recently, so we
better limit it to where we actually need it.
2025-11-06 16:17:22 +01:00
Wolfgang Walther
17199e5ff6
ci/github-script/reviewers: add TODO about future optimization
We still use a few too many API requests by checking team members for
collaborator status - we can improve on that in the future.
2025-11-06 16:17:17 +01:00
Wolfgang Walther
9efe926863
ci/github-script/reviewers: exit early for treewides
When hitting a treewide, we would previously find the username for each
user and then check all of them for collaborator status - only to then
realize that this results in more than 15 reviewers and exit.

We can put a simple stop-gap in, even before de-duplicating the combined
lists of maintainers and owners as safe guard. We could still hit huge
numbers of code owners, but in practice we don't nearly as many as
maintainers, so this will be sufficient for now.
2025-11-06 16:17:12 +01:00
Wolfgang Walther
51acc56dcb
ci/github-script/merge: ignore PRs with >= 100 files
We use the files endpoint to get a list of all *names* of files touched
in the PR - but this endpoint will also actually download the files /
their diff, too. That's pointless and actually takes quite some time for
huge treewides.

We're just putting in a stop-gap for now, so that we're not burning more
than 1 API requests on this and don't spend so much time on it either. A
limit of 99 files will be more than enough for quite some time - we will
only need to raise this when we're able to represent package sets in
by-name properly and have "package set maintainers", who are not
committers.
2025-11-06 16:17:08 +01:00
Wolfgang Walther
d086c6c6b3
ci/github-script/merge: add hint about stuck GitHub
Unfortunately it still happens frequently that, after enabling
auto-merge, GitHub is stuck even though all checks have passed, and
doesn't merge the PR. Any contributor can trigger GitHub again with an
approval of the PR - this will then immediately queue the PR for merge.

Adding a hint to the posted comment, should help users through this
without my intervention.
2025-11-06 15:18:01 +01:00
Wolfgang Walther
4658d0d5a3
ci/github-script/bot: fix needs reviewer label
The recent change to use the result of requesting reviewers for setting
the `needs: reviewer` label caused a regression: It would not set the
label for PRs where no reviewers were requested, because *too many were
eligible*. Still - these PRs don't have reviewers, so they need
attention otherwise - via the label.
2025-11-06 15:10:58 +01:00
Wolfgang Walther
d76ffa4136
ci/github-script/bot: fix collaborator warning
This was introduced shortly before merge of the reviewers.js file, but
not actually tested - I thought it was not easy to find a PR triggering
this warning. However, the scheduled run told me otherwise: The
staging-next PR is the perfect candidate.
2025-11-06 10:20:48 +01:00
Wolfgang Walther
c4548e58fb
ci/github-script/bot: fix scheduled bot with older artifacts
We only recently introduced the owners.txt file to the comparison
artifact, so once the bot runs on a schedule it will it older artifacts
very quickly - and then can't find the owners file.

We can fallback to an empty owners list in this case, because an older
artifact also means an older workflow run previously, so this will have
pinged owners already.
2025-11-06 09:53:29 +01:00
Wolfgang Walther
e68b0aef13
ci/github-script/reviewers: improve "needs: reviewers" label
This should fix the bug where the "needs: reviewer" label was set too
early, just to be removed immediately, because reviewers were then
requested.
2025-11-05 21:59:02 +01:00
Wolfgang Walther
a23d0ab24c
ci/github-script/bot: request reviewers
This migrates the bash code to request reviewers to github-script. This
will allow multiple nice improvements later on, but at this stage it's
mostly a reduction in code and complexity.
2025-11-05 21:58:56 +01:00
Wolfgang Walther
df6a9a739d
ci/github-script/bot: disregard bot and ghost approvals
We technically counted bot approvals and approvals by deleted users for
the approval labels as well. The former don't exist, yet, but if they
were, I don't think we'd count them. The latter should arguably *not* be
counted, because we can't tell anymore *who* approved, so we can't put
any weight on it as reviewers.

This simplifies the logic, too.
2025-11-05 21:42:28 +01:00
Matt Sturgeon
ae90bb6238
Revert "wprkflows/bot: increase frequency to every 5 minutes" (#458570) 2025-11-04 20:16:42 +00:00
Wolfgang Walther
12c1f0253a
ci/github-script/merge: improve merge operation and error messages (#458412) 2025-11-04 19:54:02 +00:00
Wolfgang Walther
1e6124a504
ci/github-script/merge: list eligible users in comment
When a user tries to merge a PR, but is not allowed to, it is helpful to
explicitly list the users who *are* allowed. This helps explaining *why*
the merge-eligible label was set.

I objected to this proposal before, because it would incur too many API
requests. But after we have restructured the checklist, this is not
actually true anymore - we can now sensibly run this only when a comment
is posted and not whenever we check a PR for eligibility.
2025-11-04 20:50:41 +01:00
Wolfgang Walther
74d6ba3ab4
Revert "wprkflows/bot: increase frequency to every 5 minutes"
This partially reverts commit 1197fe48da.

GitHub just doesn't schedule these narrow intervals. 10 minutes is
alright in practice.
2025-11-04 19:49:07 +01:00