15 Commits

Author SHA1 Message Date
3064d0231c Simplify printing
All checks were successful
test / test (pull_request) Successful in 36s
build / build (pull_request) Successful in 2m53s
2024-10-10 00:59:43 +02:00
5c73d55d91 Run ruff format
All checks were successful
test / test (push) Successful in 34s
build / build (push) Successful in 2m2s
2024-10-09 22:29:14 +02:00
9e70fc25d4 Update README
Some checks failed
test / test (push) Successful in 33s
build / build (push) Has been cancelled
2024-10-09 22:27:27 +02:00
63ee619aef Merge branch '16-watchlist'
Some checks failed
test / test (push) Successful in 33s
build / build (push) Has been cancelled
2024-10-09 22:25:48 +02:00
06abde6f6f Add watchlist command
All checks were successful
test / test (pull_request) Successful in 34s
build / build (pull_request) Successful in 2m3s
2024-10-09 22:21:28 +02:00
99e0887505 Limit package source using sourceFilesBySuffices
All checks were successful
test / test (push) Successful in 35s
build / build (push) Successful in 2m0s
2024-10-09 21:14:32 +02:00
4bc78716ee Merge pull request 'Update README' (#15) from 14-readme into master
All checks were successful
test / test (push) Successful in 33s
build / build (push) Successful in 2m4s
Reviewed-on: #15
2024-10-07 20:07:29 +00:00
a27f88a62b Update README
All checks were successful
test / test (pull_request) Successful in 39s
build / build (pull_request) Successful in 2m1s
2024-10-07 22:04:13 +02:00
2d94c8b561 Disable rich markup
All checks were successful
test / test (push) Successful in 37s
build / build (push) Successful in 1m52s
2024-10-07 17:16:25 +02:00
b4b2b2ec5d Merge pull request 'Don't check merge base branch' (#13) from 10-no-recheck-master into master
All checks were successful
test / test (push) Successful in 53s
build / build (push) Successful in 2m22s
Reviewed-on: #13
2024-10-07 14:39:35 +00:00
ec8e3e491e Don't check merge base branch
All checks were successful
test / test (pull_request) Successful in 51s
build / build (pull_request) Successful in 2m9s
2024-10-07 16:32:49 +02:00
2245698405 Merge pull request 'Add title to output' (#12) from 11-title into master
Some checks failed
test / test (push) Successful in 38s
build / build (push) Failing after 14m37s
Reviewed-on: #12
2024-10-07 14:07:30 +00:00
9ee3ec2018 Add title to pr command output
All checks were successful
test / test (pull_request) Successful in 53s
build / build (pull_request) Successful in 2m11s
2024-10-07 16:02:45 +02:00
356da4d8ec Merge pull request 'Backport checking' (#9) from 8-backport into master
Some checks failed
test / test (push) Successful in 38s
build / build (push) Failing after 13m51s
2024-10-06 23:53:18 +00:00
b40d4958f0 Check for backports if pr has label
Some checks failed
test / test (pull_request) Successful in 37s
build / build (pull_request) Failing after 11m22s
2024-10-07 01:50:22 +02:00
16 changed files with 25780 additions and 54 deletions

View File

@@ -5,15 +5,27 @@ Nixpkgs PR status checker.
## Example
```console
$ nixprstatus 345501
$ nixprstatus pr 345501
ktailctl: 0.18.0 -> 0.18.1
✅ merged
✅ master
nixos-unstable-small
nixos-unstable
nixos-unstable-small
nixos-unstable
❌ nixos-24.05
$ nixprstatus --help
Usage: python -m nixprstatus [OPTIONS] COMMAND [ARGS]...
Options:
--install-completion Install completion for the current shell.
--show-completion Show completion for the current shell, to copy it or
customize the installation.
--help Show this message and exit.
Commands:
pr Get merge status of pull request.
since Return the count of commits that has happened between the...
watchlist Manage watchlist.
```
## TODO
* Support backported commits
* JSON output

View File

@@ -32,7 +32,12 @@
{
packages = {
nixprstatus = mkPoetryApplication {
projectDir = ./.;
projectDir = pkgs.lib.sourceFilesBySuffices ./. [
"pyproject.toml"
"poetry.lock"
"README.md"
".py"
];
python = pkgs.python312;
nativeBuildInputs = [ pkgs.installShellFiles ];
postInstall = ''

View File

@@ -1,11 +1,14 @@
import typer
import json
from typing import Annotated
from rich.console import Console
from nixprstatus.pr import pr_merge_status
from nixprstatus.pr import commits_since
from nixprstatus.watchlist import Watchlist
from nixprstatus.watchlist import OutputFormat
app = typer.Typer()
app = typer.Typer(rich_markup_mode=None)
watchlist_app = typer.Typer()
app.add_typer(watchlist_app, name="watchlist", help="Manage watchlist.")
DEFAULT_HEADERS = {
"Accept": "application/vnd.github.text+json",
@@ -20,24 +23,17 @@ def pr(
branches: Annotated[
list[str] | None, typer.Option(help="Check specific branch")
] = None,
format: Annotated[
OutputFormat, typer.Option(help="Output format")
] = OutputFormat.CONSOLE,
):
"""Get status of pull request"""
console = Console()
"""Get merge status of pull request."""
if branches:
status = pr_merge_status(pr, branches)
else:
status = pr_merge_status(pr)
merged = ":white_check_mark: merged" if status.merged else ":x: merged"
console.print(merged, highlight=False)
for branch in status.branches:
output = (
f":white_check_mark: {branch}"
if status.branches[branch]
else f":x: {branch}"
)
console.print(output, highlight=False)
status.print(format=format)
@app.command()
@@ -60,6 +56,34 @@ def since(
typer.echo(count)
@watchlist_app.command()
def list(watchlist: str | None = None, format: OutputFormat = OutputFormat.CONSOLE):
"""List PRs in watchlist."""
wl = Watchlist.from_file(path=watchlist)
wl.print(format=format)
@watchlist_app.command()
def add(pr: int, watchlist: str | None = None):
"""Add PR to watchlist."""
wl = Watchlist.from_file(path=watchlist)
info = wl.add_pr(pr)
wl.to_file(path=watchlist)
print(f"Added #{info.pr}: {info.title} to watchlist.")
@watchlist_app.command()
def remove(pr: int):
"""Remove PR from watchlist."""
wl = Watchlist.from_file()
if pr not in wl:
print(f"#{pr} not in watchlist.")
return
wl.remove(pr)
wl.to_file()
print(f"Removed #{pr} from watchlist.")
def main():
app()

6
nixprstatus/output.py Normal file
View File

@@ -0,0 +1,6 @@
from enum import Enum
class OutputFormat(str, Enum):
CONSOLE = "console"
JSON = "json"

View File

@@ -1,16 +1,41 @@
import requests
from pydantic import BaseModel
from rich.console import Console
from nixprstatus.output import OutputFormat
DEFAULT_HEADERS = {
"Accept": "application/vnd.github.text+json",
}
DEFAULT_BRANCHES = ["master", "nixos-unstable-small", "nixos-unstable", "nixos-24.05"]
BACKPORT_LABEL = "backport release-24.05"
class PRStatus(BaseModel):
title: str
merged: bool
branches: dict[str, bool]
def print(self, format: OutputFormat = OutputFormat.CONSOLE):
match format:
case OutputFormat.JSON:
print(self.model_dump_json())
case OutputFormat.CONSOLE:
console = Console(highlight=False)
console.print(f"{self.title}\n")
merged = ":white_check_mark: merged" if self.merged else ":x: merged"
console.print(merged)
for branch in self.branches:
output = (
f":white_check_mark: {branch}"
if self.branches[branch]
else f":x: {branch}"
)
console.print(output)
case _:
raise ValueError(f"Unknown format: {format}")
def commit_in_branch(commit_sha: str, branch: str) -> bool:
url = f"https://api.github.com/repos/NixOS/nixpkgs/compare/{branch}...{commit_sha}"
@@ -31,23 +56,74 @@ def commits_since(first_ref: str, last_ref: str) -> int:
return commit_response.json()["behind_by"]
def pr_merge_status(pr: int, branches: list[str] = DEFAULT_BRANCHES) -> PRStatus:
def get_pr(pr: int) -> dict:
url = f"https://api.github.com/repos/NixOS/nixpkgs/pulls/{pr}"
pr_response = requests.get(url, headers=DEFAULT_HEADERS)
pr_response.raise_for_status()
return pr_response.json()
def pr_merge_status(
pr: int, branches: list[str] = DEFAULT_BRANCHES, check_backport: bool = True
) -> PRStatus:
url = f"https://api.github.com/repos/NixOS/nixpkgs/pulls/{pr}"
pr_response = requests.get(url, headers=DEFAULT_HEADERS)
pr_response.raise_for_status()
pr_data = pr_response.json()
title = pr_data["title"]
merged = pr_data["merged"]
if merged is False:
return PRStatus(merged=False, branches={branch: False for branch in branches})
return PRStatus(
title=title, merged=False, branches={branch: False for branch in branches}
)
commit_sha = pr_data.get("merge_commit_sha")
# Check for backport label
has_backport_label = BACKPORT_LABEL in [
label.get("name") for label in pr_data["labels"]
]
results = {}
# Check if base branch is in our list, if it is
# no need to call commit_in_branch
merge_base_branch = pr_data.get("base", {}).get("ref")
if merge_base_branch in branches:
results[merge_base_branch] = True
branches.remove(merge_base_branch)
for branch in branches:
in_branch = commit_in_branch(commit_sha, branch)
results[branch] = in_branch
return PRStatus(merged=True, branches=results)
if check_backport and has_backport_label and "nixos-24.05" in branches:
# Check comments for message about backport
comment_url = f"https://api.github.com/repos/NixOS/nixpkgs/issues/{pr}/comments"
comment_response = requests.get(comment_url, headers=DEFAULT_HEADERS)
comment_response.raise_for_status()
for comment in comment_response.json():
body = comment.get("body_text", "")
if "Successfully created backport PR" in body:
backport_pr = body.split("\n")[-1].replace("#", "")
# Check if backport pr has been merged
backport_url = (
f"https://api.github.com/repos/NixOS/nixpkgs/pulls/{backport_pr}"
)
backport_response = requests.get(backport_url, headers=DEFAULT_HEADERS)
backport_sha = backport_response.json().get("merge_commit_sha")
if backport_sha is None:
results[f"nixos-24.05 (#{backport_pr})"] = False
return PRStatus(title=title, merged=True, branches=results)
results.pop("nixos-24.05")
results[f"nixos-24.05 (#{backport_pr})"] = commit_in_branch(
backport_sha, "nixos-24.05"
)
return PRStatus(title=title, merged=True, branches=results)

88
nixprstatus/watchlist.py Normal file
View File

@@ -0,0 +1,88 @@
import json
import os
from pathlib import Path
from pydantic import BaseModel
from rich.console import Console
from nixprstatus.pr import get_pr
from nixprstatus.output import OutputFormat
class PRInfo(BaseModel):
pr: int
title: str
class Watchlist(BaseModel):
prs: list[PRInfo]
@classmethod
def from_file(cls, path: str | None = None) -> "Watchlist":
if not path:
path = _default_path()
p = Path(path).expanduser()
if not p.exists():
return cls(prs=[])
with open(p, "r") as f:
data = json.load(f)
return cls(**data)
def to_file(self, path: str | None = None):
if not path:
_ensure_default_path()
path = _default_path()
p = Path(path).expanduser()
with open(p, "w") as f:
f.write(self.model_dump_json())
def add_pr(self, pr: int) -> PRInfo:
# Lookup PR info
info = get_pr(pr)
title = info["title"]
info = PRInfo(pr=pr, title=title)
self.prs.append(info)
return info
def remove(self, pr: int):
self.prs = [p for p in self.prs if p.pr != pr]
def print(self, format: OutputFormat = OutputFormat.CONSOLE):
match format:
case OutputFormat.CONSOLE:
console = Console()
for pr in self.prs:
console.print(f"{pr.pr}: {pr.title}")
case OutputFormat.JSON:
print(self.model_dump_json())
case _:
raise ValueError(f"Unknown format: {format}")
def pr(self, pr: int) -> PRInfo | None:
for p in self.prs:
if p.pr == pr:
return p
return None
def __contains__(self, item: PRInfo | int):
match item:
case PRInfo():
return any([x == item for x in self.prs])
case int():
return any([x.pr == item for x in self.prs])
def _default_path() -> str:
if "XDG_STATE_HOME" in os.environ:
return f"{os.environ['XDG_STATE_HOME']}/nixprstatus/watchlist.json"
return "~/.config/nixprstatus/watchlist.json"
def _ensure_default_path():
p = Path(_default_path()).expanduser()
p.parent.mkdir(parents=True, exist_ok=True)

View File

@@ -1,6 +1,6 @@
[tool.poetry]
name = "nixprstatus"
version = "0.1.1"
version = "0.1.5"
description = "Nixpkgs PR status checker"
authors = ["Torjus Håkestad <torjus@usit.uio.no>"]
license = "MIT"

0
tests/__init__.py Normal file
View File

177
tests/fixtures/comments_345769.json vendored Normal file
View File

@@ -0,0 +1,177 @@
[
{
"url": "https://api.github.com/repos/NixOS/nixpkgs/issues/comments/2388655041",
"html_url": "https://github.com/NixOS/nixpkgs/pull/345769#issuecomment-2388655041",
"issue_url": "https://api.github.com/repos/NixOS/nixpkgs/issues/345769",
"id": 2388655041,
"node_id": "IC_kwDOAEVQ_M6OX_vB",
"user": {
"login": "mweinelt",
"id": 131599,
"node_id": "MDQ6VXNlcjEzMTU5OQ==",
"avatar_url": "https://avatars.githubusercontent.com/u/131599?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/mweinelt",
"html_url": "https://github.com/mweinelt",
"followers_url": "https://api.github.com/users/mweinelt/followers",
"following_url": "https://api.github.com/users/mweinelt/following{/other_user}",
"gists_url": "https://api.github.com/users/mweinelt/gists{/gist_id}",
"starred_url": "https://api.github.com/users/mweinelt/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/mweinelt/subscriptions",
"organizations_url": "https://api.github.com/users/mweinelt/orgs",
"repos_url": "https://api.github.com/users/mweinelt/repos",
"events_url": "https://api.github.com/users/mweinelt/events{/privacy}",
"received_events_url": "https://api.github.com/users/mweinelt/received_events",
"type": "User",
"site_admin": false
},
"created_at": "2024-10-02T13:31:48Z",
"updated_at": "2024-10-02T13:31:48Z",
"author_association": "MEMBER",
"body_text": "@ofborg build firefox-unwrapped.tests",
"reactions": {
"url": "https://api.github.com/repos/NixOS/nixpkgs/issues/comments/2388655041/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null
},
{
"url": "https://api.github.com/repos/NixOS/nixpkgs/issues/comments/2389811254",
"html_url": "https://github.com/NixOS/nixpkgs/pull/345769#issuecomment-2389811254",
"issue_url": "https://api.github.com/repos/NixOS/nixpkgs/issues/345769",
"id": 2389811254,
"node_id": "IC_kwDOAEVQ_M6OcaA2",
"user": {
"login": "github-actions[bot]",
"id": 41898282,
"node_id": "MDM6Qm90NDE4OTgyODI=",
"avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/github-actions%5Bbot%5D",
"html_url": "https://github.com/apps/github-actions",
"followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
"following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
"gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
"starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
"organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
"repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
"events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
"received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
"type": "Bot",
"site_admin": false
},
"created_at": "2024-10-02T22:45:02Z",
"updated_at": "2024-10-02T22:45:02Z",
"author_association": "CONTRIBUTOR",
"body_text": "Successfully created backport PR for `release-24.05`:\n\n#346022",
"reactions": {
"url": "https://api.github.com/repos/NixOS/nixpkgs/issues/comments/2389811254/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": {
"id": 15368,
"client_id": "Iv1.05c79e9ad1f6bdfa",
"slug": "github-actions",
"node_id": "MDM6QXBwMTUzNjg=",
"owner": {
"login": "github",
"id": 9919,
"node_id": "MDEyOk9yZ2FuaXphdGlvbjk5MTk=",
"avatar_url": "https://avatars.githubusercontent.com/u/9919?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/github",
"html_url": "https://github.com/github",
"followers_url": "https://api.github.com/users/github/followers",
"following_url": "https://api.github.com/users/github/following{/other_user}",
"gists_url": "https://api.github.com/users/github/gists{/gist_id}",
"starred_url": "https://api.github.com/users/github/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/github/subscriptions",
"organizations_url": "https://api.github.com/users/github/orgs",
"repos_url": "https://api.github.com/users/github/repos",
"events_url": "https://api.github.com/users/github/events{/privacy}",
"received_events_url": "https://api.github.com/users/github/received_events",
"type": "Organization",
"site_admin": false
},
"name": "GitHub Actions",
"description": "Automate your workflow from idea to production",
"external_url": "https://help.github.com/en/actions",
"html_url": "https://github.com/apps/github-actions",
"created_at": "2018-07-30T09:30:17Z",
"updated_at": "2024-04-10T20:33:16Z",
"permissions": {
"actions": "write",
"administration": "read",
"attestations": "write",
"checks": "write",
"contents": "write",
"deployments": "write",
"discussions": "write",
"issues": "write",
"merge_queues": "write",
"metadata": "read",
"packages": "write",
"pages": "write",
"pull_requests": "write",
"repository_hooks": "write",
"repository_projects": "write",
"security_events": "write",
"statuses": "write",
"vulnerability_alerts": "read"
},
"events": [
"branch_protection_rule",
"check_run",
"check_suite",
"create",
"delete",
"deployment",
"deployment_status",
"discussion",
"discussion_comment",
"fork",
"gollum",
"issues",
"issue_comment",
"label",
"merge_group",
"milestone",
"page_build",
"project",
"project_card",
"project_column",
"public",
"pull_request",
"pull_request_review",
"pull_request_review_comment",
"push",
"registry_package",
"release",
"repository",
"repository_dispatch",
"status",
"watch",
"workflow_dispatch",
"workflow_run"
]
}
}
]

View File

@@ -0,0 +1,186 @@
{
"url": "https://api.github.com/repos/NixOS/nixpkgs/compare/nixos-24.05...1e6376619b9192dc7603e07d7187572c45048dd7",
"html_url": "https://github.com/NixOS/nixpkgs/compare/nixos-24.05...1e6376619b9192dc7603e07d7187572c45048dd7",
"permalink_url": "https://github.com/NixOS/nixpkgs/compare/NixOS:ecbc1ca...NixOS:1e63766",
"diff_url": "https://github.com/NixOS/nixpkgs/compare/nixos-24.05...1e6376619b9192dc7603e07d7187572c45048dd7.diff",
"patch_url": "https://github.com/NixOS/nixpkgs/compare/nixos-24.05...1e6376619b9192dc7603e07d7187572c45048dd7.patch",
"base_commit": {
"sha": "ecbc1ca8ffd6aea8372ad16be9ebbb39889e55b6",
"node_id": "C_kwDOAEVQ_NoAKGVjYmMxY2E4ZmZkNmFlYTgzNzJhZDE2YmU5ZWJiYjM5ODg5ZTU1YjY",
"commit": {
"author": {
"name": "OTABI Tomoya",
"email": "tomoya.otabi@gmail.com",
"date": "2024-10-06T05:47:56Z"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2024-10-06T05:47:56Z"
},
"message": "[Backport release-24.05] brave: 1.70.119 -> 1.70.123 (#346428)",
"tree": {
"sha": "f0b5ae7d234fd6c2d86f5603b4522f2ba74eda5b",
"url": "https://api.github.com/repos/NixOS/nixpkgs/git/trees/f0b5ae7d234fd6c2d86f5603b4522f2ba74eda5b"
},
"url": "https://api.github.com/repos/NixOS/nixpkgs/git/commits/ecbc1ca8ffd6aea8372ad16be9ebbb39889e55b6",
"comment_count": 0,
"verification": {
"verified": true,
"reason": "valid",
"signature": "-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJnAiSMCRC1aQ7uu5UhlAAA0TYQAKRPy/FYu1l+CaEVlEayD+7E\ngFboJbXErmlX5/5lmwW/J3VQb2t3wlhlP5R82Utb66Gucy49vSbKcWAC3DgAT0fG\n2UOozKXq6bAJ+tzBPX/lFNNJHYmTFN3uGifkP+cHZdh7CE0EHH8IFE7rWOfYSMpK\n7Syjl1DsJ72j6ZNdWB3c1J4jCnGQKJRtgJI5yw7feqt6MYVUNLIENuo/RZHZtEF8\nCLZwx9a950pXPLUAH3HyTnoV76H9wC2ahWGUq3Mum/Cdf3WqPi0nuw+rqtjQvvCh\nK1cuS/wOlSTPqVt9S1U4GgUIdE1u82o2Zkxm/b8hOAxBNNg7nCf8RYyITL3gkubc\nIM4UgiOxL/ybpsYmNZ7zzpi8z1N28SrbGlfVG0Zp/7asniKCe/uJoXTQlxR+2GsN\nTld9B272Ttvrnyfokb05+DbTqEPV7NEG7HzXRIKcIYvcP0QdFFYch893n/t1fbFP\niOyqV3FJB68Dcjsr35zqQBPMcGNUtoo2hQFbmCZV3xYWKRfgUD6RnP+oFyIqrw5s\ne1WBwaiAbVnlCACkugGSXNF8s563cHauQkJi7553o75hqXsE8ezHCW12C4OUAQM8\nIspE3A8C/yC137IdAz3L/CpG6Qdp11AZQ1EG0oO0v7TtxQQHR3cBEUTO1vknG5iV\nuWuPBHuc5atQWRe2eVco\n=gGAX\n-----END PGP SIGNATURE-----\n",
"payload": "tree f0b5ae7d234fd6c2d86f5603b4522f2ba74eda5b\nparent 17ae88b569bb15590549ff478bab6494dde4a907\nparent d4eb7924598b8bd830e85c93aeb6aa7c5294de9a\nauthor OTABI Tomoya <tomoya.otabi@gmail.com> 1728193676 +0900\ncommitter GitHub <noreply@github.com> 1728193676 +0900\n\n[Backport release-24.05] brave: 1.70.119 -> 1.70.123 (#346428)\n\n"
}
},
"url": "https://api.github.com/repos/NixOS/nixpkgs/commits/ecbc1ca8ffd6aea8372ad16be9ebbb39889e55b6",
"html_url": "https://github.com/NixOS/nixpkgs/commit/ecbc1ca8ffd6aea8372ad16be9ebbb39889e55b6",
"comments_url": "https://api.github.com/repos/NixOS/nixpkgs/commits/ecbc1ca8ffd6aea8372ad16be9ebbb39889e55b6/comments",
"author": {
"login": "natsukium",
"id": 25083790,
"node_id": "MDQ6VXNlcjI1MDgzNzkw",
"avatar_url": "https://avatars.githubusercontent.com/u/25083790?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/natsukium",
"html_url": "https://github.com/natsukium",
"followers_url": "https://api.github.com/users/natsukium/followers",
"following_url": "https://api.github.com/users/natsukium/following{/other_user}",
"gists_url": "https://api.github.com/users/natsukium/gists{/gist_id}",
"starred_url": "https://api.github.com/users/natsukium/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/natsukium/subscriptions",
"organizations_url": "https://api.github.com/users/natsukium/orgs",
"repos_url": "https://api.github.com/users/natsukium/repos",
"events_url": "https://api.github.com/users/natsukium/events{/privacy}",
"received_events_url": "https://api.github.com/users/natsukium/received_events",
"type": "User",
"site_admin": false
},
"committer": {
"login": "web-flow",
"id": 19864447,
"node_id": "MDQ6VXNlcjE5ODY0NDQ3",
"avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/web-flow",
"html_url": "https://github.com/web-flow",
"followers_url": "https://api.github.com/users/web-flow/followers",
"following_url": "https://api.github.com/users/web-flow/following{/other_user}",
"gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}",
"starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/web-flow/subscriptions",
"organizations_url": "https://api.github.com/users/web-flow/orgs",
"repos_url": "https://api.github.com/users/web-flow/repos",
"events_url": "https://api.github.com/users/web-flow/events{/privacy}",
"received_events_url": "https://api.github.com/users/web-flow/received_events",
"type": "User",
"site_admin": false
},
"parents": [
{
"sha": "17ae88b569bb15590549ff478bab6494dde4a907",
"url": "https://api.github.com/repos/NixOS/nixpkgs/commits/17ae88b569bb15590549ff478bab6494dde4a907",
"html_url": "https://github.com/NixOS/nixpkgs/commit/17ae88b569bb15590549ff478bab6494dde4a907"
},
{
"sha": "d4eb7924598b8bd830e85c93aeb6aa7c5294de9a",
"url": "https://api.github.com/repos/NixOS/nixpkgs/commits/d4eb7924598b8bd830e85c93aeb6aa7c5294de9a",
"html_url": "https://github.com/NixOS/nixpkgs/commit/d4eb7924598b8bd830e85c93aeb6aa7c5294de9a"
}
]
},
"merge_base_commit": {
"sha": "1e6376619b9192dc7603e07d7187572c45048dd7",
"node_id": "C_kwDOAEVQ_NoAKDFlNjM3NjYxOWI5MTkyZGM3NjAzZTA3ZDcxODc1NzJjNDUwNDhkZDc",
"commit": {
"author": {
"name": "Martin Weinelt",
"email": "mweinelt@users.noreply.github.com",
"date": "2024-10-04T00:25:13Z"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2024-10-04T00:25:13Z"
},
"message": "[Backport release-24.05] Firefox: 130.0.1 -> 131.0; 128.2.0esr -> 128.3.0esr; 115.15.0esr -> 115.16.0esr (#346022)",
"tree": {
"sha": "ca267bfaced108f8b846f36b4222f50bcbea132e",
"url": "https://api.github.com/repos/NixOS/nixpkgs/git/trees/ca267bfaced108f8b846f36b4222f50bcbea132e"
},
"url": "https://api.github.com/repos/NixOS/nixpkgs/git/commits/1e6376619b9192dc7603e07d7187572c45048dd7",
"comment_count": 0,
"verification": {
"verified": true,
"reason": "valid",
"signature": "-----BEGIN PGP SIGNATURE-----\n\nwsFcBAABCAAQBQJm/zXpCRC1aQ7uu5UhlAAAwfYQAKQ+YS049CLiRZX5L6663sip\nQ0lB49M6NgX6cx/uzDP2wkNdPZ+Ft/76Fngki9B3UBvJsdfgYsWMZ0L8lNCJPV5v\n65FCH0yzbwHz2gCgE2dTPMbd1qQGFaO1rSqksmLlovoA5NTHLrkoN7PEdNt97YQm\nvsJKHNAMzBgwmdom7OyxcBQfAmvNT4nijFqDW0AJ8VzS72EYW2il0S/uVzK2EE0k\nZdVX+oK2pYYYwaWchPofOalDLgXY5dteqNU7cQRdSI1saxoFbXVyLqo2N/lSm4/b\nv9+Uwwycjl7FyRCwucWXVBuMbbDsJW68xHSg060HbxBUEL3os8CleTiRWcXVa64d\nc619UC4/PQM+7pQFhOvATVBX+jWe508PQX5RCWIzQJWoOu+xcBbNeSImstM6jFWB\nDhKRYGM56+nPH+WRliTK6w07KAOhYMFDRAGHbUm3x5L03oqXowVjYx9UfdFBeNqW\noeETR77F6zfH/lBcW68JQMWM4ZG/sCo4HM81DY4vR99EPNKOPKNycjmV2Jb3WHRN\nO1DSmEeiCt7lgeuGmvIOXA5Z+QvAEGv8ZWRZ/K276GuK9kePh6xbu0ntAXRvy5iw\n/f426Ikzy7UM/yEL7458jrhyyqHlxiOXm+B+TSwbNSjLXHJdH5Ap3seIQjdo+num\nTWeoCrlH/oi+Tv83Iiye\n=G4zI\n-----END PGP SIGNATURE-----\n",
"payload": "tree ca267bfaced108f8b846f36b4222f50bcbea132e\nparent 0799dfba72420acad00f6c6b643e42f14589da6f\nparent 0010c39a77012492a1602258ad8e3fd5e9377bf6\nauthor Martin Weinelt <mweinelt@users.noreply.github.com> 1728001513 +0200\ncommitter GitHub <noreply@github.com> 1728001513 +0200\n\n[Backport release-24.05] Firefox: 130.0.1 -> 131.0; 128.2.0esr -> 128.3.0esr; 115.15.0esr -> 115.16.0esr (#346022)\n\n"
}
},
"url": "https://api.github.com/repos/NixOS/nixpkgs/commits/1e6376619b9192dc7603e07d7187572c45048dd7",
"html_url": "https://github.com/NixOS/nixpkgs/commit/1e6376619b9192dc7603e07d7187572c45048dd7",
"comments_url": "https://api.github.com/repos/NixOS/nixpkgs/commits/1e6376619b9192dc7603e07d7187572c45048dd7/comments",
"author": {
"login": "mweinelt",
"id": 131599,
"node_id": "MDQ6VXNlcjEzMTU5OQ==",
"avatar_url": "https://avatars.githubusercontent.com/u/131599?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/mweinelt",
"html_url": "https://github.com/mweinelt",
"followers_url": "https://api.github.com/users/mweinelt/followers",
"following_url": "https://api.github.com/users/mweinelt/following{/other_user}",
"gists_url": "https://api.github.com/users/mweinelt/gists{/gist_id}",
"starred_url": "https://api.github.com/users/mweinelt/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/mweinelt/subscriptions",
"organizations_url": "https://api.github.com/users/mweinelt/orgs",
"repos_url": "https://api.github.com/users/mweinelt/repos",
"events_url": "https://api.github.com/users/mweinelt/events{/privacy}",
"received_events_url": "https://api.github.com/users/mweinelt/received_events",
"type": "User",
"site_admin": false
},
"committer": {
"login": "web-flow",
"id": 19864447,
"node_id": "MDQ6VXNlcjE5ODY0NDQ3",
"avatar_url": "https://avatars.githubusercontent.com/u/19864447?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/web-flow",
"html_url": "https://github.com/web-flow",
"followers_url": "https://api.github.com/users/web-flow/followers",
"following_url": "https://api.github.com/users/web-flow/following{/other_user}",
"gists_url": "https://api.github.com/users/web-flow/gists{/gist_id}",
"starred_url": "https://api.github.com/users/web-flow/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/web-flow/subscriptions",
"organizations_url": "https://api.github.com/users/web-flow/orgs",
"repos_url": "https://api.github.com/users/web-flow/repos",
"events_url": "https://api.github.com/users/web-flow/events{/privacy}",
"received_events_url": "https://api.github.com/users/web-flow/received_events",
"type": "User",
"site_admin": false
},
"parents": [
{
"sha": "0799dfba72420acad00f6c6b643e42f14589da6f",
"url": "https://api.github.com/repos/NixOS/nixpkgs/commits/0799dfba72420acad00f6c6b643e42f14589da6f",
"html_url": "https://github.com/NixOS/nixpkgs/commit/0799dfba72420acad00f6c6b643e42f14589da6f"
},
{
"sha": "0010c39a77012492a1602258ad8e3fd5e9377bf6",
"url": "https://api.github.com/repos/NixOS/nixpkgs/commits/0010c39a77012492a1602258ad8e3fd5e9377bf6",
"html_url": "https://github.com/NixOS/nixpkgs/commit/0010c39a77012492a1602258ad8e3fd5e9377bf6"
}
]
},
"status": "behind",
"ahead_by": 0,
"behind_by": 68,
"total_commits": 0,
"commits": [
],
"files": [
]
}

File diff suppressed because one or more lines are too long

453
tests/fixtures/pulls_345769.json vendored Normal file
View File

@@ -0,0 +1,453 @@
{
"url": "https://api.github.com/repos/NixOS/nixpkgs/pulls/345769",
"id": 2102240863,
"node_id": "PR_kwDOAEVQ_M59TaZf",
"html_url": "https://github.com/NixOS/nixpkgs/pull/345769",
"diff_url": "https://github.com/NixOS/nixpkgs/pull/345769.diff",
"patch_url": "https://github.com/NixOS/nixpkgs/pull/345769.patch",
"issue_url": "https://api.github.com/repos/NixOS/nixpkgs/issues/345769",
"number": 345769,
"state": "closed",
"locked": false,
"title": "Firefox: 130.0.1 -> 131.0; 128.2.0esr -> 128.3.0esr; 115.15.0esr -> 115.16.0esr",
"user": {
"login": "mweinelt",
"id": 131599,
"node_id": "MDQ6VXNlcjEzMTU5OQ==",
"avatar_url": "https://avatars.githubusercontent.com/u/131599?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/mweinelt",
"html_url": "https://github.com/mweinelt",
"followers_url": "https://api.github.com/users/mweinelt/followers",
"following_url": "https://api.github.com/users/mweinelt/following{/other_user}",
"gists_url": "https://api.github.com/users/mweinelt/gists{/gist_id}",
"starred_url": "https://api.github.com/users/mweinelt/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/mweinelt/subscriptions",
"organizations_url": "https://api.github.com/users/mweinelt/orgs",
"repos_url": "https://api.github.com/users/mweinelt/repos",
"events_url": "https://api.github.com/users/mweinelt/events{/privacy}",
"received_events_url": "https://api.github.com/users/mweinelt/received_events",
"type": "User",
"site_admin": false
},
"body": "https://www.mozilla.org/en-US/firefox/131.0/releasenotes/\r\nhttps://www.mozilla.org/en-US/firefox/128.3.0/releasenotes/\r\nhttps://www.mozilla.org/en-US/firefox/115.16.0/releasenotes/\r\nhttps://www.mozilla.org/security/advisories/mfsa2024-46\r\nhttps://www.mozilla.org/security/advisories/mfsa2024-47\r\nhttps://www.mozilla.org/security/advisories/mfsa2024-48\r\n\r\n## Things done\r\n\r\n<!-- Please check what applies. Note that these are not hard requirements but merely serve as information for reviewers. -->\r\n\r\n- Built on platform(s)\r\n - [ ] x86_64-linux\r\n - [x] aarch64-linux\r\n - [ ] x86_64-darwin\r\n - [ ] aarch64-darwin\r\n- For non-Linux: Is sandboxing enabled in `nix.conf`? (See [Nix manual](https://nixos.org/manual/nix/stable/command-ref/conf-file.html))\r\n - [ ] `sandbox = relaxed`\r\n - [ ] `sandbox = true`\r\n- [x] Tested, as applicable:\r\n - [NixOS test(s)](https://nixos.org/manual/nixos/unstable/index.html#sec-nixos-tests) (look inside [nixos/tests](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests))\r\n - and/or [package tests](https://github.com/NixOS/nixpkgs/blob/master/pkgs/README.md#package-tests)\r\n - or, for functions and \"core\" functionality, tests in [lib/tests](https://github.com/NixOS/nixpkgs/blob/master/lib/tests) or [pkgs/test](https://github.com/NixOS/nixpkgs/blob/master/pkgs/test)\r\n - made sure NixOS tests are [linked](https://github.com/NixOS/nixpkgs/blob/master/pkgs/README.md#linking-nixos-module-tests-to-a-package) to the relevant packages\r\n- [ ] Tested compilation of all packages that depend on this change using `nix-shell -p nixpkgs-review --run \"nixpkgs-review rev HEAD\"`. Note: all changes have to be committed, also see [nixpkgs-review usage](https://github.com/Mic92/nixpkgs-review#usage)\r\n- [ ] Tested basic functionality of all binary files (usually in `./result/bin/`)\r\n- [24.11 Release Notes](https://github.com/NixOS/nixpkgs/blob/master/nixos/doc/manual/release-notes/rl-2411.section.md) (or backporting [23.11](https://github.com/NixOS/nixpkgs/blob/master/nixos/doc/manual/release-notes/rl-2311.section.md) and [24.05](https://github.com/NixOS/nixpkgs/blob/master/nixos/doc/manual/release-notes/rl-2405.section.md) Release notes)\r\n - [ ] (Package updates) Added a release notes entry if the change is major or breaking\r\n - [ ] (Module updates) Added a release notes entry if the change is significant\r\n - [ ] (Module addition) Added a release notes entry if adding a new NixOS module\r\n- [x] Fits [CONTRIBUTING.md](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md).\r\n\r\n<!--\r\nTo help with the large amounts of pull requests, we would appreciate your\r\nreviews of other pull requests, especially simple package updates. Just leave a\r\ncomment describing what you have tested in the relevant package/service.\r\nReviewing helps to reduce the average time-to-merge for everyone.\r\nThanks a lot if you do!\r\n\r\nList of open PRs: https://github.com/NixOS/nixpkgs/pulls\r\nReviewing guidelines: https://github.com/NixOS/nixpkgs/blob/master/pkgs/README.md#reviewing-contributions\r\n-->\r\n\r\n---\r\n\r\nAdd a :+1: [reaction] to [pull requests you find important].\r\n\r\n[reaction]: https://github.blog/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/\r\n[pull requests you find important]: https://github.com/NixOS/nixpkgs/pulls?q=is%3Aopen+sort%3Areactions-%2B1-desc\r\n",
"created_at": "2024-10-01T20:21:32Z",
"updated_at": "2024-10-02T22:45:03Z",
"closed_at": "2024-10-02T22:44:30Z",
"merged_at": "2024-10-02T22:44:30Z",
"merge_commit_sha": "3569a56280e8afba7c10f9171dac71ff882ff1c1",
"assignee": null,
"assignees": [
],
"requested_reviewers": [
{
"login": "lovesegfault",
"id": 7243783,
"node_id": "MDQ6VXNlcjcyNDM3ODM=",
"avatar_url": "https://avatars.githubusercontent.com/u/7243783?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/lovesegfault",
"html_url": "https://github.com/lovesegfault",
"followers_url": "https://api.github.com/users/lovesegfault/followers",
"following_url": "https://api.github.com/users/lovesegfault/following{/other_user}",
"gists_url": "https://api.github.com/users/lovesegfault/gists{/gist_id}",
"starred_url": "https://api.github.com/users/lovesegfault/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/lovesegfault/subscriptions",
"organizations_url": "https://api.github.com/users/lovesegfault/orgs",
"repos_url": "https://api.github.com/users/lovesegfault/repos",
"events_url": "https://api.github.com/users/lovesegfault/events{/privacy}",
"received_events_url": "https://api.github.com/users/lovesegfault/received_events",
"type": "User",
"site_admin": false
}
],
"requested_teams": [
],
"labels": [
{
"id": 126506420,
"node_id": "MDU6TGFiZWwxMjY1MDY0MjA=",
"url": "https://api.github.com/repos/NixOS/nixpkgs/labels/1.severity:%20security",
"name": "1.severity: security",
"color": "e11d21",
"default": false,
"description": null
},
{
"id": 731734101,
"node_id": "MDU6TGFiZWw3MzE3MzQxMDE=",
"url": "https://api.github.com/repos/NixOS/nixpkgs/labels/10.rebuild-linux:%2011-100",
"name": "10.rebuild-linux: 11-100",
"color": "fbca04",
"default": false,
"description": null
},
{
"id": 731735222,
"node_id": "MDU6TGFiZWw3MzE3MzUyMjI=",
"url": "https://api.github.com/repos/NixOS/nixpkgs/labels/10.rebuild-darwin:%201-10",
"name": "10.rebuild-darwin: 1-10",
"color": "eeffee",
"default": false,
"description": null
},
{
"id": 740714914,
"node_id": "MDU6TGFiZWw3NDA3MTQ5MTQ=",
"url": "https://api.github.com/repos/NixOS/nixpkgs/labels/11.by:%20package-maintainer",
"name": "11.by: package-maintainer",
"color": "ddeecc",
"default": false,
"description": null
},
{
"id": 6984924132,
"node_id": "LA_kwDOAEVQ_M8AAAABoFV75A",
"url": "https://api.github.com/repos/NixOS/nixpkgs/labels/backport%20release-24.05",
"name": "backport release-24.05",
"color": "0fafaa",
"default": false,
"description": "Backport PR automatically"
}
],
"milestone": null,
"draft": false,
"commits_url": "https://api.github.com/repos/NixOS/nixpkgs/pulls/345769/commits",
"review_comments_url": "https://api.github.com/repos/NixOS/nixpkgs/pulls/345769/comments",
"review_comment_url": "https://api.github.com/repos/NixOS/nixpkgs/pulls/comments{/number}",
"comments_url": "https://api.github.com/repos/NixOS/nixpkgs/issues/345769/comments",
"statuses_url": "https://api.github.com/repos/NixOS/nixpkgs/statuses/ee93526fc9f1de32f23df4187f3e573eeafc562d",
"head": {
"label": "mweinelt:firefox-131.0",
"ref": "firefox-131.0",
"sha": "ee93526fc9f1de32f23df4187f3e573eeafc562d",
"user": {
"login": "mweinelt",
"id": 131599,
"node_id": "MDQ6VXNlcjEzMTU5OQ==",
"avatar_url": "https://avatars.githubusercontent.com/u/131599?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/mweinelt",
"html_url": "https://github.com/mweinelt",
"followers_url": "https://api.github.com/users/mweinelt/followers",
"following_url": "https://api.github.com/users/mweinelt/following{/other_user}",
"gists_url": "https://api.github.com/users/mweinelt/gists{/gist_id}",
"starred_url": "https://api.github.com/users/mweinelt/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/mweinelt/subscriptions",
"organizations_url": "https://api.github.com/users/mweinelt/orgs",
"repos_url": "https://api.github.com/users/mweinelt/repos",
"events_url": "https://api.github.com/users/mweinelt/events{/privacy}",
"received_events_url": "https://api.github.com/users/mweinelt/received_events",
"type": "User",
"site_admin": false
},
"repo": {
"id": 101918349,
"node_id": "MDEwOlJlcG9zaXRvcnkxMDE5MTgzNDk=",
"name": "nixpkgs",
"full_name": "mweinelt/nixpkgs",
"private": false,
"owner": {
"login": "mweinelt",
"id": 131599,
"node_id": "MDQ6VXNlcjEzMTU5OQ==",
"avatar_url": "https://avatars.githubusercontent.com/u/131599?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/mweinelt",
"html_url": "https://github.com/mweinelt",
"followers_url": "https://api.github.com/users/mweinelt/followers",
"following_url": "https://api.github.com/users/mweinelt/following{/other_user}",
"gists_url": "https://api.github.com/users/mweinelt/gists{/gist_id}",
"starred_url": "https://api.github.com/users/mweinelt/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/mweinelt/subscriptions",
"organizations_url": "https://api.github.com/users/mweinelt/orgs",
"repos_url": "https://api.github.com/users/mweinelt/repos",
"events_url": "https://api.github.com/users/mweinelt/events{/privacy}",
"received_events_url": "https://api.github.com/users/mweinelt/received_events",
"type": "User",
"site_admin": false
},
"html_url": "https://github.com/mweinelt/nixpkgs",
"description": "Nix Packages collection",
"fork": true,
"url": "https://api.github.com/repos/mweinelt/nixpkgs",
"forks_url": "https://api.github.com/repos/mweinelt/nixpkgs/forks",
"keys_url": "https://api.github.com/repos/mweinelt/nixpkgs/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/mweinelt/nixpkgs/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/mweinelt/nixpkgs/teams",
"hooks_url": "https://api.github.com/repos/mweinelt/nixpkgs/hooks",
"issue_events_url": "https://api.github.com/repos/mweinelt/nixpkgs/issues/events{/number}",
"events_url": "https://api.github.com/repos/mweinelt/nixpkgs/events",
"assignees_url": "https://api.github.com/repos/mweinelt/nixpkgs/assignees{/user}",
"branches_url": "https://api.github.com/repos/mweinelt/nixpkgs/branches{/branch}",
"tags_url": "https://api.github.com/repos/mweinelt/nixpkgs/tags",
"blobs_url": "https://api.github.com/repos/mweinelt/nixpkgs/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/mweinelt/nixpkgs/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/mweinelt/nixpkgs/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/mweinelt/nixpkgs/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/mweinelt/nixpkgs/statuses/{sha}",
"languages_url": "https://api.github.com/repos/mweinelt/nixpkgs/languages",
"stargazers_url": "https://api.github.com/repos/mweinelt/nixpkgs/stargazers",
"contributors_url": "https://api.github.com/repos/mweinelt/nixpkgs/contributors",
"subscribers_url": "https://api.github.com/repos/mweinelt/nixpkgs/subscribers",
"subscription_url": "https://api.github.com/repos/mweinelt/nixpkgs/subscription",
"commits_url": "https://api.github.com/repos/mweinelt/nixpkgs/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/mweinelt/nixpkgs/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/mweinelt/nixpkgs/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/mweinelt/nixpkgs/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/mweinelt/nixpkgs/contents/{+path}",
"compare_url": "https://api.github.com/repos/mweinelt/nixpkgs/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/mweinelt/nixpkgs/merges",
"archive_url": "https://api.github.com/repos/mweinelt/nixpkgs/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/mweinelt/nixpkgs/downloads",
"issues_url": "https://api.github.com/repos/mweinelt/nixpkgs/issues{/number}",
"pulls_url": "https://api.github.com/repos/mweinelt/nixpkgs/pulls{/number}",
"milestones_url": "https://api.github.com/repos/mweinelt/nixpkgs/milestones{/number}",
"notifications_url": "https://api.github.com/repos/mweinelt/nixpkgs/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/mweinelt/nixpkgs/labels{/name}",
"releases_url": "https://api.github.com/repos/mweinelt/nixpkgs/releases{/id}",
"deployments_url": "https://api.github.com/repos/mweinelt/nixpkgs/deployments",
"created_at": "2017-08-30T18:59:28Z",
"updated_at": "2023-01-31T16:52:24Z",
"pushed_at": "2024-10-04T00:24:53Z",
"git_url": "git://github.com/mweinelt/nixpkgs.git",
"ssh_url": "git@github.com:mweinelt/nixpkgs.git",
"clone_url": "https://github.com/mweinelt/nixpkgs.git",
"svn_url": "https://github.com/mweinelt/nixpkgs",
"homepage": null,
"size": 4358923,
"stargazers_count": 1,
"watchers_count": 1,
"language": "Nix",
"has_issues": true,
"has_projects": true,
"has_downloads": true,
"has_wiki": false,
"has_pages": false,
"has_discussions": false,
"forks_count": 0,
"mirror_url": null,
"archived": false,
"disabled": false,
"open_issues_count": 2,
"license": {
"key": "mit",
"name": "MIT License",
"spdx_id": "MIT",
"url": "https://api.github.com/licenses/mit",
"node_id": "MDc6TGljZW5zZTEz"
},
"allow_forking": true,
"is_template": false,
"web_commit_signoff_required": false,
"topics": [
],
"visibility": "public",
"forks": 0,
"open_issues": 2,
"watchers": 1,
"default_branch": "master"
}
},
"base": {
"label": "NixOS:master",
"ref": "master",
"sha": "2b40f1b3c890531e18d8d09a53bc1a62c4add99e",
"user": {
"login": "NixOS",
"id": 487568,
"node_id": "MDEyOk9yZ2FuaXphdGlvbjQ4NzU2OA==",
"avatar_url": "https://avatars.githubusercontent.com/u/487568?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/NixOS",
"html_url": "https://github.com/NixOS",
"followers_url": "https://api.github.com/users/NixOS/followers",
"following_url": "https://api.github.com/users/NixOS/following{/other_user}",
"gists_url": "https://api.github.com/users/NixOS/gists{/gist_id}",
"starred_url": "https://api.github.com/users/NixOS/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/NixOS/subscriptions",
"organizations_url": "https://api.github.com/users/NixOS/orgs",
"repos_url": "https://api.github.com/users/NixOS/repos",
"events_url": "https://api.github.com/users/NixOS/events{/privacy}",
"received_events_url": "https://api.github.com/users/NixOS/received_events",
"type": "Organization",
"site_admin": false
},
"repo": {
"id": 4542716,
"node_id": "MDEwOlJlcG9zaXRvcnk0NTQyNzE2",
"name": "nixpkgs",
"full_name": "NixOS/nixpkgs",
"private": false,
"owner": {
"login": "NixOS",
"id": 487568,
"node_id": "MDEyOk9yZ2FuaXphdGlvbjQ4NzU2OA==",
"avatar_url": "https://avatars.githubusercontent.com/u/487568?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/NixOS",
"html_url": "https://github.com/NixOS",
"followers_url": "https://api.github.com/users/NixOS/followers",
"following_url": "https://api.github.com/users/NixOS/following{/other_user}",
"gists_url": "https://api.github.com/users/NixOS/gists{/gist_id}",
"starred_url": "https://api.github.com/users/NixOS/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/NixOS/subscriptions",
"organizations_url": "https://api.github.com/users/NixOS/orgs",
"repos_url": "https://api.github.com/users/NixOS/repos",
"events_url": "https://api.github.com/users/NixOS/events{/privacy}",
"received_events_url": "https://api.github.com/users/NixOS/received_events",
"type": "Organization",
"site_admin": false
},
"html_url": "https://github.com/NixOS/nixpkgs",
"description": "Nix Packages collection & NixOS",
"fork": false,
"url": "https://api.github.com/repos/NixOS/nixpkgs",
"forks_url": "https://api.github.com/repos/NixOS/nixpkgs/forks",
"keys_url": "https://api.github.com/repos/NixOS/nixpkgs/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/NixOS/nixpkgs/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/NixOS/nixpkgs/teams",
"hooks_url": "https://api.github.com/repos/NixOS/nixpkgs/hooks",
"issue_events_url": "https://api.github.com/repos/NixOS/nixpkgs/issues/events{/number}",
"events_url": "https://api.github.com/repos/NixOS/nixpkgs/events",
"assignees_url": "https://api.github.com/repos/NixOS/nixpkgs/assignees{/user}",
"branches_url": "https://api.github.com/repos/NixOS/nixpkgs/branches{/branch}",
"tags_url": "https://api.github.com/repos/NixOS/nixpkgs/tags",
"blobs_url": "https://api.github.com/repos/NixOS/nixpkgs/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/NixOS/nixpkgs/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/NixOS/nixpkgs/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/NixOS/nixpkgs/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/NixOS/nixpkgs/statuses/{sha}",
"languages_url": "https://api.github.com/repos/NixOS/nixpkgs/languages",
"stargazers_url": "https://api.github.com/repos/NixOS/nixpkgs/stargazers",
"contributors_url": "https://api.github.com/repos/NixOS/nixpkgs/contributors",
"subscribers_url": "https://api.github.com/repos/NixOS/nixpkgs/subscribers",
"subscription_url": "https://api.github.com/repos/NixOS/nixpkgs/subscription",
"commits_url": "https://api.github.com/repos/NixOS/nixpkgs/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/NixOS/nixpkgs/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/NixOS/nixpkgs/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/NixOS/nixpkgs/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/NixOS/nixpkgs/contents/{+path}",
"compare_url": "https://api.github.com/repos/NixOS/nixpkgs/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/NixOS/nixpkgs/merges",
"archive_url": "https://api.github.com/repos/NixOS/nixpkgs/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/NixOS/nixpkgs/downloads",
"issues_url": "https://api.github.com/repos/NixOS/nixpkgs/issues{/number}",
"pulls_url": "https://api.github.com/repos/NixOS/nixpkgs/pulls{/number}",
"milestones_url": "https://api.github.com/repos/NixOS/nixpkgs/milestones{/number}",
"notifications_url": "https://api.github.com/repos/NixOS/nixpkgs/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/NixOS/nixpkgs/labels{/name}",
"releases_url": "https://api.github.com/repos/NixOS/nixpkgs/releases{/id}",
"deployments_url": "https://api.github.com/repos/NixOS/nixpkgs/deployments",
"created_at": "2012-06-04T02:49:46Z",
"updated_at": "2024-10-06T22:10:34Z",
"pushed_at": "2024-10-06T22:19:24Z",
"git_url": "git://github.com/NixOS/nixpkgs.git",
"ssh_url": "git@github.com:NixOS/nixpkgs.git",
"clone_url": "https://github.com/NixOS/nixpkgs.git",
"svn_url": "https://github.com/NixOS/nixpkgs",
"homepage": "",
"size": 4523255,
"stargazers_count": 17645,
"watchers_count": 17645,
"language": "Nix",
"has_issues": true,
"has_projects": true,
"has_downloads": true,
"has_wiki": false,
"has_pages": false,
"has_discussions": false,
"forks_count": 13801,
"mirror_url": null,
"archived": false,
"disabled": false,
"open_issues_count": 15261,
"license": {
"key": "mit",
"name": "MIT License",
"spdx_id": "MIT",
"url": "https://api.github.com/licenses/mit",
"node_id": "MDc6TGljZW5zZTEz"
},
"allow_forking": true,
"is_template": false,
"web_commit_signoff_required": false,
"topics": [
"hacktoberfest",
"linux",
"nix",
"nixos",
"nixpkgs"
],
"visibility": "public",
"forks": 13801,
"open_issues": 15261,
"watchers": 17645,
"default_branch": "master"
}
},
"_links": {
"self": {
"href": "https://api.github.com/repos/NixOS/nixpkgs/pulls/345769"
},
"html": {
"href": "https://github.com/NixOS/nixpkgs/pull/345769"
},
"issue": {
"href": "https://api.github.com/repos/NixOS/nixpkgs/issues/345769"
},
"comments": {
"href": "https://api.github.com/repos/NixOS/nixpkgs/issues/345769/comments"
},
"review_comments": {
"href": "https://api.github.com/repos/NixOS/nixpkgs/pulls/345769/comments"
},
"review_comment": {
"href": "https://api.github.com/repos/NixOS/nixpkgs/pulls/comments{/number}"
},
"commits": {
"href": "https://api.github.com/repos/NixOS/nixpkgs/pulls/345769/commits"
},
"statuses": {
"href": "https://api.github.com/repos/NixOS/nixpkgs/statuses/ee93526fc9f1de32f23df4187f3e573eeafc562d"
}
},
"author_association": "MEMBER",
"auto_merge": null,
"active_lock_reason": null,
"merged": true,
"mergeable": null,
"rebaseable": null,
"mergeable_state": "unknown",
"merged_by": {
"login": "mweinelt",
"id": 131599,
"node_id": "MDQ6VXNlcjEzMTU5OQ==",
"avatar_url": "https://avatars.githubusercontent.com/u/131599?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/mweinelt",
"html_url": "https://github.com/mweinelt",
"followers_url": "https://api.github.com/users/mweinelt/followers",
"following_url": "https://api.github.com/users/mweinelt/following{/other_user}",
"gists_url": "https://api.github.com/users/mweinelt/gists{/gist_id}",
"starred_url": "https://api.github.com/users/mweinelt/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/mweinelt/subscriptions",
"organizations_url": "https://api.github.com/users/mweinelt/orgs",
"repos_url": "https://api.github.com/users/mweinelt/repos",
"events_url": "https://api.github.com/users/mweinelt/events{/privacy}",
"received_events_url": "https://api.github.com/users/mweinelt/received_events",
"type": "User",
"site_admin": false
},
"comments": 2,
"review_comments": 0,
"maintainer_can_modify": false,
"commits": 4,
"additions": 419,
"deletions": 419,
"changed_files": 2
}

468
tests/fixtures/pulls_346022.json vendored Normal file
View File

@@ -0,0 +1,468 @@
{
"url": "https://api.github.com/repos/NixOS/nixpkgs/pulls/346022",
"id": 2104407907,
"node_id": "PR_kwDOAEVQ_M59brdj",
"html_url": "https://github.com/NixOS/nixpkgs/pull/346022",
"diff_url": "https://github.com/NixOS/nixpkgs/pull/346022.diff",
"patch_url": "https://github.com/NixOS/nixpkgs/pull/346022.patch",
"issue_url": "https://api.github.com/repos/NixOS/nixpkgs/issues/346022",
"number": 346022,
"state": "closed",
"locked": false,
"title": "[Backport release-24.05] Firefox: 130.0.1 -> 131.0; 128.2.0esr -> 128.3.0esr; 115.15.0esr -> 115.16.0esr",
"user": {
"login": "github-actions[bot]",
"id": 41898282,
"node_id": "MDM6Qm90NDE4OTgyODI=",
"avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/github-actions%5Bbot%5D",
"html_url": "https://github.com/apps/github-actions",
"followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
"following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
"gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
"starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
"organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
"repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
"events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
"received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
"type": "Bot",
"site_admin": false
},
"body": "Bot-based backport to `release-24.05`, triggered by a label in #345769.\n\n* [x] Before merging, ensure that this backport is [acceptable for the release](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#changes-acceptable-for-releases).\n * Even as a non-commiter, if you find that it is not acceptable, leave a comment.",
"created_at": "2024-10-02T22:45:00Z",
"updated_at": "2024-10-04T00:25:16Z",
"closed_at": "2024-10-04T00:25:13Z",
"merged_at": "2024-10-04T00:25:13Z",
"merge_commit_sha": "1e6376619b9192dc7603e07d7187572c45048dd7",
"assignee": null,
"assignees": [
],
"requested_reviewers": [
{
"login": "mweinelt",
"id": 131599,
"node_id": "MDQ6VXNlcjEzMTU5OQ==",
"avatar_url": "https://avatars.githubusercontent.com/u/131599?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/mweinelt",
"html_url": "https://github.com/mweinelt",
"followers_url": "https://api.github.com/users/mweinelt/followers",
"following_url": "https://api.github.com/users/mweinelt/following{/other_user}",
"gists_url": "https://api.github.com/users/mweinelt/gists{/gist_id}",
"starred_url": "https://api.github.com/users/mweinelt/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/mweinelt/subscriptions",
"organizations_url": "https://api.github.com/users/mweinelt/orgs",
"repos_url": "https://api.github.com/users/mweinelt/repos",
"events_url": "https://api.github.com/users/mweinelt/events{/privacy}",
"received_events_url": "https://api.github.com/users/mweinelt/received_events",
"type": "User",
"site_admin": false
},
{
"login": "lovesegfault",
"id": 7243783,
"node_id": "MDQ6VXNlcjcyNDM3ODM=",
"avatar_url": "https://avatars.githubusercontent.com/u/7243783?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/lovesegfault",
"html_url": "https://github.com/lovesegfault",
"followers_url": "https://api.github.com/users/lovesegfault/followers",
"following_url": "https://api.github.com/users/lovesegfault/following{/other_user}",
"gists_url": "https://api.github.com/users/lovesegfault/gists{/gist_id}",
"starred_url": "https://api.github.com/users/lovesegfault/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/lovesegfault/subscriptions",
"organizations_url": "https://api.github.com/users/lovesegfault/orgs",
"repos_url": "https://api.github.com/users/lovesegfault/repos",
"events_url": "https://api.github.com/users/lovesegfault/events{/privacy}",
"received_events_url": "https://api.github.com/users/lovesegfault/received_events",
"type": "User",
"site_admin": false
}
],
"requested_teams": [
],
"labels": [
{
"id": 126506420,
"node_id": "MDU6TGFiZWwxMjY1MDY0MjA=",
"url": "https://api.github.com/repos/NixOS/nixpkgs/labels/1.severity:%20security",
"name": "1.severity: security",
"color": "e11d21",
"default": false,
"description": null
},
{
"id": 731734101,
"node_id": "MDU6TGFiZWw3MzE3MzQxMDE=",
"url": "https://api.github.com/repos/NixOS/nixpkgs/labels/10.rebuild-linux:%2011-100",
"name": "10.rebuild-linux: 11-100",
"color": "fbca04",
"default": false,
"description": null
},
{
"id": 731735222,
"node_id": "MDU6TGFiZWw3MzE3MzUyMjI=",
"url": "https://api.github.com/repos/NixOS/nixpkgs/labels/10.rebuild-darwin:%201-10",
"name": "10.rebuild-darwin: 1-10",
"color": "eeffee",
"default": false,
"description": null
},
{
"id": 1955058051,
"node_id": "MDU6TGFiZWwxOTU1MDU4MDUx",
"url": "https://api.github.com/repos/NixOS/nixpkgs/labels/10.rebuild-darwin:%201",
"name": "10.rebuild-darwin: 1",
"color": "eeffee",
"default": false,
"description": ""
}
],
"milestone": null,
"draft": false,
"commits_url": "https://api.github.com/repos/NixOS/nixpkgs/pulls/346022/commits",
"review_comments_url": "https://api.github.com/repos/NixOS/nixpkgs/pulls/346022/comments",
"review_comment_url": "https://api.github.com/repos/NixOS/nixpkgs/pulls/comments{/number}",
"comments_url": "https://api.github.com/repos/NixOS/nixpkgs/issues/346022/comments",
"statuses_url": "https://api.github.com/repos/NixOS/nixpkgs/statuses/0010c39a77012492a1602258ad8e3fd5e9377bf6",
"head": {
"label": "NixOS:backport-345769-to-release-24.05",
"ref": "backport-345769-to-release-24.05",
"sha": "0010c39a77012492a1602258ad8e3fd5e9377bf6",
"user": {
"login": "NixOS",
"id": 487568,
"node_id": "MDEyOk9yZ2FuaXphdGlvbjQ4NzU2OA==",
"avatar_url": "https://avatars.githubusercontent.com/u/487568?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/NixOS",
"html_url": "https://github.com/NixOS",
"followers_url": "https://api.github.com/users/NixOS/followers",
"following_url": "https://api.github.com/users/NixOS/following{/other_user}",
"gists_url": "https://api.github.com/users/NixOS/gists{/gist_id}",
"starred_url": "https://api.github.com/users/NixOS/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/NixOS/subscriptions",
"organizations_url": "https://api.github.com/users/NixOS/orgs",
"repos_url": "https://api.github.com/users/NixOS/repos",
"events_url": "https://api.github.com/users/NixOS/events{/privacy}",
"received_events_url": "https://api.github.com/users/NixOS/received_events",
"type": "Organization",
"site_admin": false
},
"repo": {
"id": 4542716,
"node_id": "MDEwOlJlcG9zaXRvcnk0NTQyNzE2",
"name": "nixpkgs",
"full_name": "NixOS/nixpkgs",
"private": false,
"owner": {
"login": "NixOS",
"id": 487568,
"node_id": "MDEyOk9yZ2FuaXphdGlvbjQ4NzU2OA==",
"avatar_url": "https://avatars.githubusercontent.com/u/487568?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/NixOS",
"html_url": "https://github.com/NixOS",
"followers_url": "https://api.github.com/users/NixOS/followers",
"following_url": "https://api.github.com/users/NixOS/following{/other_user}",
"gists_url": "https://api.github.com/users/NixOS/gists{/gist_id}",
"starred_url": "https://api.github.com/users/NixOS/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/NixOS/subscriptions",
"organizations_url": "https://api.github.com/users/NixOS/orgs",
"repos_url": "https://api.github.com/users/NixOS/repos",
"events_url": "https://api.github.com/users/NixOS/events{/privacy}",
"received_events_url": "https://api.github.com/users/NixOS/received_events",
"type": "Organization",
"site_admin": false
},
"html_url": "https://github.com/NixOS/nixpkgs",
"description": "Nix Packages collection & NixOS",
"fork": false,
"url": "https://api.github.com/repos/NixOS/nixpkgs",
"forks_url": "https://api.github.com/repos/NixOS/nixpkgs/forks",
"keys_url": "https://api.github.com/repos/NixOS/nixpkgs/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/NixOS/nixpkgs/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/NixOS/nixpkgs/teams",
"hooks_url": "https://api.github.com/repos/NixOS/nixpkgs/hooks",
"issue_events_url": "https://api.github.com/repos/NixOS/nixpkgs/issues/events{/number}",
"events_url": "https://api.github.com/repos/NixOS/nixpkgs/events",
"assignees_url": "https://api.github.com/repos/NixOS/nixpkgs/assignees{/user}",
"branches_url": "https://api.github.com/repos/NixOS/nixpkgs/branches{/branch}",
"tags_url": "https://api.github.com/repos/NixOS/nixpkgs/tags",
"blobs_url": "https://api.github.com/repos/NixOS/nixpkgs/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/NixOS/nixpkgs/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/NixOS/nixpkgs/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/NixOS/nixpkgs/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/NixOS/nixpkgs/statuses/{sha}",
"languages_url": "https://api.github.com/repos/NixOS/nixpkgs/languages",
"stargazers_url": "https://api.github.com/repos/NixOS/nixpkgs/stargazers",
"contributors_url": "https://api.github.com/repos/NixOS/nixpkgs/contributors",
"subscribers_url": "https://api.github.com/repos/NixOS/nixpkgs/subscribers",
"subscription_url": "https://api.github.com/repos/NixOS/nixpkgs/subscription",
"commits_url": "https://api.github.com/repos/NixOS/nixpkgs/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/NixOS/nixpkgs/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/NixOS/nixpkgs/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/NixOS/nixpkgs/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/NixOS/nixpkgs/contents/{+path}",
"compare_url": "https://api.github.com/repos/NixOS/nixpkgs/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/NixOS/nixpkgs/merges",
"archive_url": "https://api.github.com/repos/NixOS/nixpkgs/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/NixOS/nixpkgs/downloads",
"issues_url": "https://api.github.com/repos/NixOS/nixpkgs/issues{/number}",
"pulls_url": "https://api.github.com/repos/NixOS/nixpkgs/pulls{/number}",
"milestones_url": "https://api.github.com/repos/NixOS/nixpkgs/milestones{/number}",
"notifications_url": "https://api.github.com/repos/NixOS/nixpkgs/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/NixOS/nixpkgs/labels{/name}",
"releases_url": "https://api.github.com/repos/NixOS/nixpkgs/releases{/id}",
"deployments_url": "https://api.github.com/repos/NixOS/nixpkgs/deployments",
"created_at": "2012-06-04T02:49:46Z",
"updated_at": "2024-10-06T23:37:45Z",
"pushed_at": "2024-10-06T23:20:18Z",
"git_url": "git://github.com/NixOS/nixpkgs.git",
"ssh_url": "git@github.com:NixOS/nixpkgs.git",
"clone_url": "https://github.com/NixOS/nixpkgs.git",
"svn_url": "https://github.com/NixOS/nixpkgs",
"homepage": "",
"size": 4523386,
"stargazers_count": 17644,
"watchers_count": 17644,
"language": "Nix",
"has_issues": true,
"has_projects": true,
"has_downloads": true,
"has_wiki": false,
"has_pages": false,
"has_discussions": false,
"forks_count": 13801,
"mirror_url": null,
"archived": false,
"disabled": false,
"open_issues_count": 15261,
"license": {
"key": "mit",
"name": "MIT License",
"spdx_id": "MIT",
"url": "https://api.github.com/licenses/mit",
"node_id": "MDc6TGljZW5zZTEz"
},
"allow_forking": true,
"is_template": false,
"web_commit_signoff_required": false,
"topics": [
"hacktoberfest",
"linux",
"nix",
"nixos",
"nixpkgs"
],
"visibility": "public",
"forks": 13801,
"open_issues": 15261,
"watchers": 17644,
"default_branch": "master"
}
},
"base": {
"label": "NixOS:release-24.05",
"ref": "release-24.05",
"sha": "5966581aa04be7eff830b9e1457d56dc70a0b798",
"user": {
"login": "NixOS",
"id": 487568,
"node_id": "MDEyOk9yZ2FuaXphdGlvbjQ4NzU2OA==",
"avatar_url": "https://avatars.githubusercontent.com/u/487568?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/NixOS",
"html_url": "https://github.com/NixOS",
"followers_url": "https://api.github.com/users/NixOS/followers",
"following_url": "https://api.github.com/users/NixOS/following{/other_user}",
"gists_url": "https://api.github.com/users/NixOS/gists{/gist_id}",
"starred_url": "https://api.github.com/users/NixOS/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/NixOS/subscriptions",
"organizations_url": "https://api.github.com/users/NixOS/orgs",
"repos_url": "https://api.github.com/users/NixOS/repos",
"events_url": "https://api.github.com/users/NixOS/events{/privacy}",
"received_events_url": "https://api.github.com/users/NixOS/received_events",
"type": "Organization",
"site_admin": false
},
"repo": {
"id": 4542716,
"node_id": "MDEwOlJlcG9zaXRvcnk0NTQyNzE2",
"name": "nixpkgs",
"full_name": "NixOS/nixpkgs",
"private": false,
"owner": {
"login": "NixOS",
"id": 487568,
"node_id": "MDEyOk9yZ2FuaXphdGlvbjQ4NzU2OA==",
"avatar_url": "https://avatars.githubusercontent.com/u/487568?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/NixOS",
"html_url": "https://github.com/NixOS",
"followers_url": "https://api.github.com/users/NixOS/followers",
"following_url": "https://api.github.com/users/NixOS/following{/other_user}",
"gists_url": "https://api.github.com/users/NixOS/gists{/gist_id}",
"starred_url": "https://api.github.com/users/NixOS/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/NixOS/subscriptions",
"organizations_url": "https://api.github.com/users/NixOS/orgs",
"repos_url": "https://api.github.com/users/NixOS/repos",
"events_url": "https://api.github.com/users/NixOS/events{/privacy}",
"received_events_url": "https://api.github.com/users/NixOS/received_events",
"type": "Organization",
"site_admin": false
},
"html_url": "https://github.com/NixOS/nixpkgs",
"description": "Nix Packages collection & NixOS",
"fork": false,
"url": "https://api.github.com/repos/NixOS/nixpkgs",
"forks_url": "https://api.github.com/repos/NixOS/nixpkgs/forks",
"keys_url": "https://api.github.com/repos/NixOS/nixpkgs/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/NixOS/nixpkgs/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/NixOS/nixpkgs/teams",
"hooks_url": "https://api.github.com/repos/NixOS/nixpkgs/hooks",
"issue_events_url": "https://api.github.com/repos/NixOS/nixpkgs/issues/events{/number}",
"events_url": "https://api.github.com/repos/NixOS/nixpkgs/events",
"assignees_url": "https://api.github.com/repos/NixOS/nixpkgs/assignees{/user}",
"branches_url": "https://api.github.com/repos/NixOS/nixpkgs/branches{/branch}",
"tags_url": "https://api.github.com/repos/NixOS/nixpkgs/tags",
"blobs_url": "https://api.github.com/repos/NixOS/nixpkgs/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/NixOS/nixpkgs/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/NixOS/nixpkgs/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/NixOS/nixpkgs/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/NixOS/nixpkgs/statuses/{sha}",
"languages_url": "https://api.github.com/repos/NixOS/nixpkgs/languages",
"stargazers_url": "https://api.github.com/repos/NixOS/nixpkgs/stargazers",
"contributors_url": "https://api.github.com/repos/NixOS/nixpkgs/contributors",
"subscribers_url": "https://api.github.com/repos/NixOS/nixpkgs/subscribers",
"subscription_url": "https://api.github.com/repos/NixOS/nixpkgs/subscription",
"commits_url": "https://api.github.com/repos/NixOS/nixpkgs/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/NixOS/nixpkgs/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/NixOS/nixpkgs/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/NixOS/nixpkgs/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/NixOS/nixpkgs/contents/{+path}",
"compare_url": "https://api.github.com/repos/NixOS/nixpkgs/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/NixOS/nixpkgs/merges",
"archive_url": "https://api.github.com/repos/NixOS/nixpkgs/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/NixOS/nixpkgs/downloads",
"issues_url": "https://api.github.com/repos/NixOS/nixpkgs/issues{/number}",
"pulls_url": "https://api.github.com/repos/NixOS/nixpkgs/pulls{/number}",
"milestones_url": "https://api.github.com/repos/NixOS/nixpkgs/milestones{/number}",
"notifications_url": "https://api.github.com/repos/NixOS/nixpkgs/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/NixOS/nixpkgs/labels{/name}",
"releases_url": "https://api.github.com/repos/NixOS/nixpkgs/releases{/id}",
"deployments_url": "https://api.github.com/repos/NixOS/nixpkgs/deployments",
"created_at": "2012-06-04T02:49:46Z",
"updated_at": "2024-10-06T23:37:45Z",
"pushed_at": "2024-10-06T23:20:18Z",
"git_url": "git://github.com/NixOS/nixpkgs.git",
"ssh_url": "git@github.com:NixOS/nixpkgs.git",
"clone_url": "https://github.com/NixOS/nixpkgs.git",
"svn_url": "https://github.com/NixOS/nixpkgs",
"homepage": "",
"size": 4523386,
"stargazers_count": 17644,
"watchers_count": 17644,
"language": "Nix",
"has_issues": true,
"has_projects": true,
"has_downloads": true,
"has_wiki": false,
"has_pages": false,
"has_discussions": false,
"forks_count": 13801,
"mirror_url": null,
"archived": false,
"disabled": false,
"open_issues_count": 15261,
"license": {
"key": "mit",
"name": "MIT License",
"spdx_id": "MIT",
"url": "https://api.github.com/licenses/mit",
"node_id": "MDc6TGljZW5zZTEz"
},
"allow_forking": true,
"is_template": false,
"web_commit_signoff_required": false,
"topics": [
"hacktoberfest",
"linux",
"nix",
"nixos",
"nixpkgs"
],
"visibility": "public",
"forks": 13801,
"open_issues": 15261,
"watchers": 17644,
"default_branch": "master"
}
},
"_links": {
"self": {
"href": "https://api.github.com/repos/NixOS/nixpkgs/pulls/346022"
},
"html": {
"href": "https://github.com/NixOS/nixpkgs/pull/346022"
},
"issue": {
"href": "https://api.github.com/repos/NixOS/nixpkgs/issues/346022"
},
"comments": {
"href": "https://api.github.com/repos/NixOS/nixpkgs/issues/346022/comments"
},
"review_comments": {
"href": "https://api.github.com/repos/NixOS/nixpkgs/pulls/346022/comments"
},
"review_comment": {
"href": "https://api.github.com/repos/NixOS/nixpkgs/pulls/comments{/number}"
},
"commits": {
"href": "https://api.github.com/repos/NixOS/nixpkgs/pulls/346022/commits"
},
"statuses": {
"href": "https://api.github.com/repos/NixOS/nixpkgs/statuses/0010c39a77012492a1602258ad8e3fd5e9377bf6"
}
},
"author_association": "CONTRIBUTOR",
"auto_merge": null,
"active_lock_reason": null,
"merged": true,
"mergeable": null,
"rebaseable": null,
"mergeable_state": "unknown",
"merged_by": {
"login": "mweinelt",
"id": 131599,
"node_id": "MDQ6VXNlcjEzMTU5OQ==",
"avatar_url": "https://avatars.githubusercontent.com/u/131599?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/mweinelt",
"html_url": "https://github.com/mweinelt",
"followers_url": "https://api.github.com/users/mweinelt/followers",
"following_url": "https://api.github.com/users/mweinelt/following{/other_user}",
"gists_url": "https://api.github.com/users/mweinelt/gists{/gist_id}",
"starred_url": "https://api.github.com/users/mweinelt/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/mweinelt/subscriptions",
"organizations_url": "https://api.github.com/users/mweinelt/orgs",
"repos_url": "https://api.github.com/users/mweinelt/repos",
"events_url": "https://api.github.com/users/mweinelt/events{/privacy}",
"received_events_url": "https://api.github.com/users/mweinelt/received_events",
"type": "User",
"site_admin": false
},
"comments": 1,
"review_comments": 0,
"maintainer_can_modify": false,
"commits": 4,
"additions": 419,
"deletions": 419,
"changed_files": 2
}

32
tests/helpers/mocks.py Normal file
View File

@@ -0,0 +1,32 @@
import requests
import json
def mocked_requests_get(*args, **kwargs):
class MockedResponse:
def __init__(self, json_data, status_code):
self.json_data = json_data
self.status_code = status_code
def json(self):
return json.loads(self.json_data)
def raise_for_status(self):
if self.status_code not in [200, 201]:
raise requests.exceptions.HTTPError()
if "pulls" in args[0]:
pr = args[0].split("/")[-1]
with open(f"tests/fixtures/pulls_{pr}.json") as f:
data = f.read()
return MockedResponse(data, 200)
elif "compare" in args[0]:
branch, commit_sha = args[0].split("/")[-1].split("...")
with open(f"tests/fixtures/compare_{branch}_{commit_sha}.json") as f:
data = f.read()
return MockedResponse(data, 200)
elif "comments" in args[0]:
pr = args[0].split("/")[-2]
with open(f"tests/fixtures/comments_{pr}.json") as f:
data = f.read()
return MockedResponse(data, 200)

View File

@@ -1,34 +1,8 @@
import unittest
import unittest.mock
import requests
import json
from nixprstatus.pr import commit_in_branch, pr_merge_status, commits_since
def mocked_requests_get(*args, **kwargs):
class MockedResponse:
def __init__(self, json_data, status_code):
self.json_data = json_data
self.status_code = status_code
def json(self):
return json.loads(self.json_data)
def raise_for_status(self):
if self.status_code not in [200, 201]:
raise requests.exceptions.HTTPError()
if "pulls" in args[0]:
pr = args[0].split("/")[-1]
with open(f"tests/fixtures/pulls_{pr}.json") as f:
data = f.read()
return MockedResponse(data, 200)
elif "compare" in args[0]:
branch, commit_sha = args[0].split("/")[-1].split("...")
with open(f"tests/fixtures/compare_{branch}_{commit_sha}.json") as f:
data = f.read()
return MockedResponse(data, 200)
from tests.helpers.mocks import mocked_requests_get
class TestPRMergeStatus(unittest.TestCase):
@@ -37,12 +11,43 @@ class TestPRMergeStatus(unittest.TestCase):
pr = 345583
branches = ["master", "nixos-unstable", "nixos-24.05"]
res = pr_merge_status(pr, branches)
res = pr_merge_status(pr, branches, check_backport=False)
self.assertTrue(res.merged)
self.assertTrue(res.branches["master"])
self.assertTrue(res.branches["nixos-unstable"])
self.assertFalse(res.branches["nixos-24.05"])
@unittest.mock.patch("requests.get", side_effect=mocked_requests_get)
def test_pr_merge_status_backport_345769(self, mock_get):
pr = 345769
branches = ["nixos-24.05"]
res = pr_merge_status(pr, branches, check_backport=True)
self.assertTrue(res.merged)
self.assertTrue(res.branches["nixos-24.05 (#346022)"])
@unittest.mock.patch("requests.get", side_effect=mocked_requests_get)
def test_pr_merge_status_title_345769(self, mock_get):
pr = 345769
branches = ["nixos-24.05"]
expected_title = "Firefox: 130.0.1 -> 131.0; 128.2.0esr -> 128.3.0esr; 115.15.0esr -> 115.16.0esr"
res = pr_merge_status(pr, branches, check_backport=True)
self.assertEqual(res.title, expected_title)
@unittest.mock.patch("requests.get", side_effect=mocked_requests_get)
def test_pr_merge_status_no_check_master_345583(self, mock_get):
pr = 345583
branches = ["master", "nixos-unstable", "nixos-24.05"]
master_compare_url = "https://api.github.com/repos/NixOS/nixpkgs/compare/master...2c5fac3edf2d00d948253e392ec1604b29b38f14"
res = pr_merge_status(pr, branches, check_backport=False)
self.assertTrue(res.merged)
self.assertTrue(res.branches["master"])
urls_called = [call[0][0] for call in mock_get.call_args_list]
self.assertFalse(master_compare_url in urls_called)
class TestCommitInBranch(unittest.TestCase):
@unittest.mock.patch("requests.get", side_effect=mocked_requests_get)

40
tests/test_watchlist.py Normal file
View File

@@ -0,0 +1,40 @@
from nixprstatus.watchlist import Watchlist, PRInfo
from tempfile import TemporaryDirectory
import unittest
from tests.helpers.mocks import mocked_requests_get
class TestWatchlist(unittest.TestCase):
def test_save_load(self):
with TemporaryDirectory() as d:
filename = f"{d}/test.json"
watchlist = Watchlist(prs=[PRInfo(pr=1, title="PR 1")])
watchlist.to_file(filename)
# Check that the file was written correctly
with open(filename, "r") as f:
self.assertEqual(watchlist.model_dump_json(), f.read())
# Check that the file can be read back
loaded = Watchlist.from_file(filename)
self.assertEqual(watchlist, loaded)
@unittest.mock.patch("requests.get", side_effect=mocked_requests_get)
def test_add_pr(self, mock_get):
w = Watchlist(prs=[])
w.add_pr(345583)
self.assertEqual(len(w.prs), 1)
self.assertEqual(w.prs[0].title, "wireshark: 4.2.6 -> 4.2.7")
def test_get_pr(self):
w = Watchlist(prs=[PRInfo(pr=1, title="PR 1")])
self.assertEqual(w.pr(1), PRInfo(pr=1, title="PR 1"))
self.assertEqual(w.pr(2), None)
def test_contains(self):
w = Watchlist(prs=[PRInfo(pr=1, title="PR 1")])
self.assertIn(PRInfo(pr=1, title="PR 1"), w)
self.assertIn(1, w)
self.assertNotIn(2, w)