Skip to content

Conversation

@jmgate
Copy link
Contributor

@jmgate jmgate commented May 22, 2025

This commits adds a duplicate of get_collaborator_permission(), which, instead of returning data["permission"], returns data["role_name"]. The former only returns "admin", "write", "read", or "none"; the latter now also tells us whether the collaborator has the "maintain" or "triage" role.

I'm using PyGitHub to monitor ~1K repositories under my company's GitHub organization, to ensure they stay in compliance with our policies, e.g., keeping track of the roles of outside collaborators, and making sure they stay at "triage" or below. It's possible to achieve what we need to using get_collaborators() with some combination of affiliation and permission, but the addition of this new function means making significantly fewer API calls and speeding up our monitoring CI jobs by a factor of 2-3.

I realize this is a brute-force addition. If you're happy to accept it as-is, great. If we need to clean things up such that there's less duplication across the two functions, or clearer docstring to differentiate the two, etc., just let me know.

@EnricoMi
Copy link
Collaborator

EnricoMi commented Jun 5, 2025

Ideally, get_collaborator_permission should return the entire data as some GithubObject, so calling site has access to permission and role_name attributes. But I can't think of a way that doesn't break get_collaborator_permission return type. This is the right name for the method returning the object instead of a string.

@jmgate
Copy link
Contributor Author

jmgate commented Jun 5, 2025

I'm afraid there's not an ideal solution, given the GitHub API. get_collaborator_permission is hitting the permission endpoint, but that returns a data structure, which then has a permission attribute that this method should return for it to make sense from a user perspective. E.g., you wouldn't want the user to have to do something like

permission = repo.get_collaborator_permission("user")["permission"]
#                                  ^^^^^^^^^^          ^^^^^^^^^^
# Why do I need to ask for the permission twice?

That said, we could create a _get_collaborator_permission_data() method to hit the endpoint, and then do something along the lines of

def get_collaborator_permission(...):
    return _get_collaborator_permission_data(...)["permission"]
def get_collaborator_role_name(...):
    return _get_collaborator_permission_data(...)["role_name"]

@jmgate
Copy link
Contributor Author

jmgate commented Jun 23, 2025

@EnricoMi, would you like me to change up this PR such that there's just a get_collaborator_permission_data() method, and then the user can grab whatever details they like from the resulting data structure?

@EnricoMi
Copy link
Collaborator

You are right, this is difficult to resolve, given Githubs API response. This can be fixed separately, lets keep this simple for your additional use case.

@EnricoMi
Copy link
Collaborator

Can you please add a unit test, similar to Repository.testCollaboratorPermission.

You can copy existing replay data tests/ReplayData/Repository.testCollaboratorPermission.txt and add the expected role_name attribute to the test data.

This commits adds a duplicate of `get_collaborator_permission()`, which,
instead of returning `data["permission"]`, returns `data["role_name"]`.
The former only returns "admin", "write", "read", or "none"; the latter
now also tells us whether the collaborator has the "maintain" or
"triage" role.

I'm using PyGitHub to monitor ~1K repositories under my company's GitHub
organization, to ensure they stay in compliance with our policies, e.g.,
keeping track of the roles of outside collaborators, and making sure
they stay at "triage" or below.  It's possible to achieve what we need
to using `get_collaborators()` with some combination of `affiliation`
and `permission`, but the addition of this new function means making
significantly fewer API calls and speeding up our monitoring CI jobs by
a factor of 2-3.

I realize this is a brute-force addition.  If you're happy to accept it
as-is, great.  If we need to clean things up such that there's less
duplication across the two functions, or clearer docstring to
differentiate the two, etc., just let me know.
@jmgate jmgate force-pushed the get-collaborator-role-name branch from 4ede6cd to 6e0913f Compare July 21, 2025 14:06
@jmgate
Copy link
Contributor Author

jmgate commented Jul 21, 2025

@EnricoMi, is the test and corresponding replay data in 6e0913f sufficient?

Copy link
Collaborator

@EnricoMi EnricoMi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@EnricoMi EnricoMi enabled auto-merge July 21, 2025 17:02
@github-actions
Copy link

github-actions bot commented Jul 21, 2025

Test Results

     8 files  ±0       8 suites  ±0   4m 47s ⏱️ ±0s
 1 000 tests +1   1 000 ✅ +1  0 💤 ±0  0 ❌ ±0 
11 075 runs  +8  11 074 ✅ +8  1 💤 ±0  0 ❌ ±0 

Results for commit 1be6753. ± Comparison against base commit 03e47ae.

♻️ This comment has been updated with latest results.

Copy link
Collaborator

@EnricoMi EnricoMi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@EnricoMi EnricoMi added this pull request to the merge queue Jul 21, 2025
Merged via the queue into PyGithub:main with commit 2d4785d Jul 21, 2025
22 checks passed
@jmgate
Copy link
Contributor Author

jmgate commented Jul 21, 2025

Thanks so much for your help getting these changes in, @EnricoMi 😀

matt-davis27 pushed a commit to matt-davis27/PyGithub that referenced this pull request Aug 22, 2025
This commits adds a duplicate of `get_collaborator_permission()`, which,
instead of returning `data["permission"]`, returns `data["role_name"]`.
The former only returns "admin", "write", "read", or "none"; the latter
now also tells us whether the collaborator has the "maintain" or
"triage" role.

I'm using PyGitHub to monitor ~1K repositories under my company's GitHub
organization, to ensure they stay in compliance with our policies, e.g.,
keeping track of the roles of outside collaborators, and making sure
they stay at "triage" or below. It's possible to achieve what we need to
using `get_collaborators()` with some combination of `affiliation` and
`permission`, but the addition of this new function means making
significantly fewer API calls and speeding up our monitoring CI jobs by
a factor of 2-3.

I realize this is a brute-force addition. If you're happy to accept it
as-is, great. If we need to clean things up such that there's less
duplication across the two functions, or clearer docstring to
differentiate the two, etc., just let me know.

---------

Co-authored-by: Enrico Minack <github@enrico.minack.dev>
renovate bot added a commit to codegen-sh/graph-sitter that referenced this pull request Sep 28, 2025
Coming soon: The Renovate bot (GitHub App) will be renamed to Mend. PRs
from Renovate will soon appear from 'Mend'. Learn more
[here](https://redirect.github.com/renovatebot/renovate/discussions/37842).

This PR contains the following updates:

| Package | Change | Age | Confidence |
|---|---|---|---|
| [PyGithub](https://redirect.github.com/pygithub/pygithub) | `==2.6.1`
-> `==2.8.1` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/pygithub/2.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pygithub/2.6.1/2.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>pygithub/pygithub (PyGithub)</summary>

###
[`v2.8.1`](https://redirect.github.com/PyGithub/PyGithub/releases/tag/v2.8.1)

[Compare
Source](https://redirect.github.com/pygithub/pygithub/compare/v2.8.0...v2.8.1)

#### What's Changed

##### Bug Fixes

- Use default type if known type is not supported by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3365](https://redirect.github.com/PyGithub/PyGithub/pull/3365)

**Full Changelog**:
<PyGithub/PyGithub@v2.8.0...v2.8.1>

###
[`v2.8.0`](https://redirect.github.com/PyGithub/PyGithub/releases/tag/v2.8.0)

[Compare
Source](https://redirect.github.com/pygithub/pygithub/compare/v2.7.0...v2.8.0)

#### What's Changed

##### New Features

- Add self hosted runner management to Organization by
[@&#8203;billnapier](https://redirect.github.com/billnapier) in
[PyGithub/PyGithub#3203](https://redirect.github.com/PyGithub/PyGithub/pull/3203)
- Add support to generate release notes by
[@&#8203;mball-agathos](https://redirect.github.com/mball-agathos) in
[PyGithub/PyGithub#3022](https://redirect.github.com/PyGithub/PyGithub/pull/3022)

##### Improvements

- Fix connection pooling to improve connection performance by
[@&#8203;chriskuehl](https://redirect.github.com/chriskuehl) in
[PyGithub/PyGithub#3289](https://redirect.github.com/PyGithub/PyGithub/pull/3289)
- Add `Repository.get_automated_security_fixes` method by
[@&#8203;zstyblik](https://redirect.github.com/zstyblik) in
[PyGithub/PyGithub#3303](https://redirect.github.com/PyGithub/PyGithub/pull/3303)
- Sync `Issue` class with API spec by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3338](https://redirect.github.com/PyGithub/PyGithub/pull/3338)
- Return more union classes like `NamedUser | Organization | Enterprise`
by [@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3224](https://redirect.github.com/PyGithub/PyGithub/pull/3224)
- Sync `Enterprise` class with API spec by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3342](https://redirect.github.com/PyGithub/PyGithub/pull/3342)
- Sync `GitReleaseAsset` class with API spec by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3343](https://redirect.github.com/PyGithub/PyGithub/pull/3343)
- Sync many class with OpenAPI spec by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3344](https://redirect.github.com/PyGithub/PyGithub/pull/3344)
- Point deprecation warnings to the caller code rather than inner class
by [@&#8203;xmo-odoo](https://redirect.github.com/xmo-odoo) in
[PyGithub/PyGithub#3275](https://redirect.github.com/PyGithub/PyGithub/pull/3275)
- Allow for repo strings in all `Team` repo methods by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3356](https://redirect.github.com/PyGithub/PyGithub/pull/3356)

##### Bug Fixes

- Fix API path of `Repository.get_git_ref` by
[@&#8203;csalerno-asml](https://redirect.github.com/csalerno-asml) in
[PyGithub/PyGithub#2992](https://redirect.github.com/PyGithub/PyGithub/pull/2992)
- Rework redirection URL allowance check by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3329](https://redirect.github.com/PyGithub/PyGithub/pull/3329)
- Fix `GitRelease.name`, deprecate `GitRelease.title` by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3346](https://redirect.github.com/PyGithub/PyGithub/pull/3346)
- Remove `"COMMENT"` as the default event for `create_review` by
[@&#8203;eddie-santos](https://redirect.github.com/eddie-santos) in
[PyGithub/PyGithub#3078](https://redirect.github.com/PyGithub/PyGithub/pull/3078)
- Add support for public release assets by
[@&#8203;aolieman](https://redirect.github.com/aolieman) in
[PyGithub/PyGithub#3339](https://redirect.github.com/PyGithub/PyGithub/pull/3339)
- Fix GitHub breaking API change of `maintainers` in
`Organization.create_team` by
[@&#8203;interifter](https://redirect.github.com/interifter) in
[PyGithub/PyGithub#3291](https://redirect.github.com/PyGithub/PyGithub/pull/3291)

##### Maintenance

- Minor fix to release.yml by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3201](https://redirect.github.com/PyGithub/PyGithub/pull/3201)
- Reduce test replay data by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3243](https://redirect.github.com/PyGithub/PyGithub/pull/3243)
- Add check to OpenAPI script to check doc-string verbs by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3332](https://redirect.github.com/PyGithub/PyGithub/pull/3332)
- Improve apply OpenAPI schemas by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3333](https://redirect.github.com/PyGithub/PyGithub/pull/3333)
- Add config to OpenAPI script to ignore schemas by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3334](https://redirect.github.com/PyGithub/PyGithub/pull/3334)
- Add suggest and create method feature to OpenAPI script by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3318](https://redirect.github.com/PyGithub/PyGithub/pull/3318)
- Fix CI OpenApi apply command by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3341](https://redirect.github.com/PyGithub/PyGithub/pull/3341)
- Improve OpenAPI scripts by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3340](https://redirect.github.com/PyGithub/PyGithub/pull/3340)
- Improve OpenAPI CI by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3347](https://redirect.github.com/PyGithub/PyGithub/pull/3347)
- Rework test framework by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3271](https://redirect.github.com/PyGithub/PyGithub/pull/3271)
- Some minor fixes to OpenAPI scripts by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3350](https://redirect.github.com/PyGithub/PyGithub/pull/3350)
- Add manual workflow to fix auto-fixable issues by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3351](https://redirect.github.com/PyGithub/PyGithub/pull/3351)
- Bump actions/download-artifact from 4 to 5 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[PyGithub/PyGithub#3330](https://redirect.github.com/PyGithub/PyGithub/pull/3330)
- Use default per-page const in `PaginatedList` by
[@&#8203;sam93210](https://redirect.github.com/sam93210) in
[PyGithub/PyGithub#3039](https://redirect.github.com/PyGithub/PyGithub/pull/3039)
- Bump actions/setup-python from 4 to 5 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[PyGithub/PyGithub#3283](https://redirect.github.com/PyGithub/PyGithub/pull/3283)
- Bump actions/checkout from 3 to 5 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[PyGithub/PyGithub#3348](https://redirect.github.com/PyGithub/PyGithub/pull/3348)
- Various minor OpenAPI scripts fixes by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3353](https://redirect.github.com/PyGithub/PyGithub/pull/3353)
- Add union class support to OpenAPI script by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3354](https://redirect.github.com/PyGithub/PyGithub/pull/3354)
- Add `github_actions` label to Maintenance section by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3357](https://redirect.github.com/PyGithub/PyGithub/pull/3357)
- Upgrade docformatter pre-commit hook by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3359](https://redirect.github.com/PyGithub/PyGithub/pull/3359)
- Add warning about Checks API in doc-strings by
[@&#8203;atodorov](https://redirect.github.com/atodorov) in
[PyGithub/PyGithub#3229](https://redirect.github.com/PyGithub/PyGithub/pull/3229)
- Update docs on development by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3352](https://redirect.github.com/PyGithub/PyGithub/pull/3352)

#### New Contributors

- [@&#8203;chriskuehl](https://redirect.github.com/chriskuehl) made
their first contribution in
[PyGithub/PyGithub#3289](https://redirect.github.com/PyGithub/PyGithub/pull/3289)
- [@&#8203;zstyblik](https://redirect.github.com/zstyblik) made their
first contribution in
[PyGithub/PyGithub#3303](https://redirect.github.com/PyGithub/PyGithub/pull/3303)
- [@&#8203;csalerno-asml](https://redirect.github.com/csalerno-asml)
made their first contribution in
[PyGithub/PyGithub#2992](https://redirect.github.com/PyGithub/PyGithub/pull/2992)
- [@&#8203;eddie-santos](https://redirect.github.com/eddie-santos) made
their first contribution in
[PyGithub/PyGithub#3078](https://redirect.github.com/PyGithub/PyGithub/pull/3078)
- [@&#8203;aolieman](https://redirect.github.com/aolieman) made their
first contribution in
[PyGithub/PyGithub#3339](https://redirect.github.com/PyGithub/PyGithub/pull/3339)
- [@&#8203;sam93210](https://redirect.github.com/sam93210) made their
first contribution in
[PyGithub/PyGithub#3039](https://redirect.github.com/PyGithub/PyGithub/pull/3039)
- [@&#8203;mball-agathos](https://redirect.github.com/mball-agathos)
made their first contribution in
[PyGithub/PyGithub#3022](https://redirect.github.com/PyGithub/PyGithub/pull/3022)
- [@&#8203;atodorov](https://redirect.github.com/atodorov) made their
first contribution in
[PyGithub/PyGithub#3229](https://redirect.github.com/PyGithub/PyGithub/pull/3229)
- [@&#8203;interifter](https://redirect.github.com/interifter) made
their first contribution in
[PyGithub/PyGithub#3291](https://redirect.github.com/PyGithub/PyGithub/pull/3291)

**Full Changelog**:
<PyGithub/PyGithub@v2.7.0...v2.8.0>

###
[`v2.7.0`](https://redirect.github.com/PyGithub/PyGithub/releases/tag/v2.7.0)

[Compare
Source](https://redirect.github.com/pygithub/pygithub/compare/v2.6.1...v2.7.0)

#### What's Changed

##### Breaking Changes

- Method `Github.get_rate_limit()` now returns `RateLimitOverview`
rather than `RateLimit`
([PyGithub/PyGithub#3205](https://redirect.github.com/PyGithub/PyGithub/pull/3205)).

Code like

```python
gh.get_rate_limit().core.remaining
```

should be replaced with

```python
gh.get_rate_limit().resources.core.remaining
```

- Method `GitTag.verification` now returns `GitCommitVerification`
rather than `dict[str, Any]`
([PyGithub/PyGithub#3226](https://redirect.github.com/PyGithub/PyGithub/pull/3226)).

Code like

```python
tag.verification["reason"]
tag.verification.get("reason")
```

should be replaced with

```python
tag.verification.reason
```

##### New Features

- Add getting list of self-hosted runners of organization by
[@&#8203;climbfuji](https://redirect.github.com/climbfuji) in
[PyGithub/PyGithub#3190](https://redirect.github.com/PyGithub/PyGithub/pull/3190)
- Apply OpenAPI spec by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3317](https://redirect.github.com/PyGithub/PyGithub/pull/3317)
- Add support for Sub-Issues by
[@&#8203;e7217](https://redirect.github.com/e7217) in
[PyGithub/PyGithub#3258](https://redirect.github.com/PyGithub/PyGithub/pull/3258)

##### Improvements

- Refactor search results into separate classes by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3204](https://redirect.github.com/PyGithub/PyGithub/pull/3204)
- Add `OrganizationInvitation` by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3207](https://redirect.github.com/PyGithub/PyGithub/pull/3207)
- Add and apply missing schemas by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3209](https://redirect.github.com/PyGithub/PyGithub/pull/3209)
- Sync `RepositoryAdvisory` tests with OpenAPI spec by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3215](https://redirect.github.com/PyGithub/PyGithub/pull/3215)
- Sync `ProjectColumn` and `ProjectCard` tests with OpenAPI spec by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3216](https://redirect.github.com/PyGithub/PyGithub/pull/3216)
- Sync `CopilotSeat` class with API spec by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3232](https://redirect.github.com/PyGithub/PyGithub/pull/3232)
- Sync `HookDeliverySummary` class with API spec by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3233](https://redirect.github.com/PyGithub/PyGithub/pull/3233)
- Sync `RequiredPullRequestReviews` class with API spec by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3234](https://redirect.github.com/PyGithub/PyGithub/pull/3234)
- Sync `RequiredStatusChecks` class with API spec by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3236](https://redirect.github.com/PyGithub/PyGithub/pull/3236)
- Sync `Team` class with API spec by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3237](https://redirect.github.com/PyGithub/PyGithub/pull/3237)
- Replace `deprecated.deprecated()` with
`typing_extensions.deprecated()` by
[@&#8203;lazka](https://redirect.github.com/lazka) in
[PyGithub/PyGithub#3255](https://redirect.github.com/PyGithub/PyGithub/pull/3255)
- fix(CodeScanAlert): add missing attributes by
[@&#8203;ReenigneArcher](https://redirect.github.com/ReenigneArcher) in
[PyGithub/PyGithub#3274](https://redirect.github.com/PyGithub/PyGithub/pull/3274)
- Allow SHAs when creating PR comments by
[@&#8203;tuchfarber](https://redirect.github.com/tuchfarber) in
[PyGithub/PyGithub#3248](https://redirect.github.com/PyGithub/PyGithub/pull/3248)
- Get collaborator role name by
[@&#8203;jmgate](https://redirect.github.com/jmgate) in
[PyGithub/PyGithub#3295](https://redirect.github.com/PyGithub/PyGithub/pull/3295)
- Adding `prevent_self_review` property to
`Repository.createEnvironment` by
[@&#8203;gopidesupavan](https://redirect.github.com/gopidesupavan) in
[PyGithub/PyGithub#3246](https://redirect.github.com/PyGithub/PyGithub/pull/3246)
- Add `PullRequest.get_issue_timeline` method by
[@&#8203;kukarkinmm](https://redirect.github.com/kukarkinmm) in
[PyGithub/PyGithub#3259](https://redirect.github.com/PyGithub/PyGithub/pull/3259)
- Support built-in `reversed()` on `PaginatedList` by
[@&#8203;mfocko](https://redirect.github.com/mfocko) in
[PyGithub/PyGithub#3260](https://redirect.github.com/PyGithub/PyGithub/pull/3260)
- Relax 404 condition in `Requester` exception handling by
[@&#8203;jsmolar](https://redirect.github.com/jsmolar) in
[PyGithub/PyGithub#3299](https://redirect.github.com/PyGithub/PyGithub/pull/3299)
- Add `delete_self_hosted_runner` to `Organization` by
[@&#8203;uncleDecart](https://redirect.github.com/uncleDecart) in
[PyGithub/PyGithub#3306](https://redirect.github.com/PyGithub/PyGithub/pull/3306)

##### Bug Fixes

- Fix broken pickle support for `Auth` classes by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3211](https://redirect.github.com/PyGithub/PyGithub/pull/3211)
- Remove schema from `Deployment`, remove `message` attribute by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3223](https://redirect.github.com/PyGithub/PyGithub/pull/3223)
- Fix incorrect deprecated import by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3225](https://redirect.github.com/PyGithub/PyGithub/pull/3225)
- Add `CodeSecurityConfigRepository` returned by
`get_repos_for_code_security_config` by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3219](https://redirect.github.com/PyGithub/PyGithub/pull/3219)
- Fix `Branch.get_required_status_checks` return type by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3235](https://redirect.github.com/PyGithub/PyGithub/pull/3235)
- Adds `multi_select` and `true_false` options to
`CustomProperty.value_type` by
[@&#8203;gfog-floqast](https://redirect.github.com/gfog-floqast) in
[PyGithub/PyGithub#3173](https://redirect.github.com/PyGithub/PyGithub/pull/3173)
- Fix url encoding of strings with slashes in URLs by
[@&#8203;OscarVanL](https://redirect.github.com/OscarVanL) in
[PyGithub/PyGithub#3263](https://redirect.github.com/PyGithub/PyGithub/pull/3263)
- Fix side-effect when removing Authorization key from headers by
[@&#8203;alecglen](https://redirect.github.com/alecglen) in
[PyGithub/PyGithub#3313](https://redirect.github.com/PyGithub/PyGithub/pull/3313)
- Make `TimingData.run_duration_ms` optional by
[@&#8203;LifeLex](https://redirect.github.com/LifeLex) in
[PyGithub/PyGithub#3268](https://redirect.github.com/PyGithub/PyGithub/pull/3268)
- Normalize App ID to String & Enhance JWT Issuer Verification by
[@&#8203;x612skm](https://redirect.github.com/x612skm) in
[PyGithub/PyGithub#3272](https://redirect.github.com/PyGithub/PyGithub/pull/3272)

##### Dependencies

- Bump actions/checkout from 3 to 4 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[PyGithub/PyGithub#2754](https://redirect.github.com/PyGithub/PyGithub/pull/2754)

##### Maintenance

- Mention removal of `AppAuth.private_key` in changelog by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3212](https://redirect.github.com/PyGithub/PyGithub/pull/3212)
- Remove wrong schema from Repository by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3220](https://redirect.github.com/PyGithub/PyGithub/pull/3220)
- Rename `HookDeliveryRequest` and `…Response` private headers fields by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3221](https://redirect.github.com/PyGithub/PyGithub/pull/3221)
- Sort classes' functions by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3231](https://redirect.github.com/PyGithub/PyGithub/pull/3231)
- Move all Python files to future annotations by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3241](https://redirect.github.com/PyGithub/PyGithub/pull/3241)
- Fix return type of `PaginatedList[int]` by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3240](https://redirect.github.com/PyGithub/PyGithub/pull/3240)
- Sync with OpenAPI spec by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3244](https://redirect.github.com/PyGithub/PyGithub/pull/3244)
- Make token auth default in tests by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3242](https://redirect.github.com/PyGithub/PyGithub/pull/3242)
- Add `Organization.get_repos_for_code_security_config` test by
[@&#8203;billnapier](https://redirect.github.com/billnapier) in
[PyGithub/PyGithub#3239](https://redirect.github.com/PyGithub/PyGithub/pull/3239)
- Add Python 3.13 to CI by
[@&#8203;lazka](https://redirect.github.com/lazka) in
[PyGithub/PyGithub#3253](https://redirect.github.com/PyGithub/PyGithub/pull/3253)
- Enhance PyGithub webhook documentation by
[@&#8203;ssganesh035](https://redirect.github.com/ssganesh035) in
[PyGithub/PyGithub#3267](https://redirect.github.com/PyGithub/PyGithub/pull/3267)
- Create codeql.yml by
[@&#8203;JLLeitschuh](https://redirect.github.com/JLLeitschuh) in
[PyGithub/PyGithub#3277](https://redirect.github.com/PyGithub/PyGithub/pull/3277)
- Add schema to `TimingData` by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3206](https://redirect.github.com/PyGithub/PyGithub/pull/3206)
- Remove error schemas from classes by
[@&#8203;EnricoMi](https://redirect.github.com/EnricoMi) in
[PyGithub/PyGithub#3202](https://redirect.github.com/PyGithub/PyGithub/pull/3202)

#### New Contributors

- [@&#8203;ssganesh035](https://redirect.github.com/ssganesh035) made
their first contribution in
[PyGithub/PyGithub#3267](https://redirect.github.com/PyGithub/PyGithub/pull/3267)
- [@&#8203;ReenigneArcher](https://redirect.github.com/ReenigneArcher)
made their first contribution in
[PyGithub/PyGithub#3274](https://redirect.github.com/PyGithub/PyGithub/pull/3274)
- [@&#8203;climbfuji](https://redirect.github.com/climbfuji) made their
first contribution in
[PyGithub/PyGithub#3190](https://redirect.github.com/PyGithub/PyGithub/pull/3190)
- [@&#8203;tuchfarber](https://redirect.github.com/tuchfarber) made
their first contribution in
[PyGithub/PyGithub#3248](https://redirect.github.com/PyGithub/PyGithub/pull/3248)
- [@&#8203;jmgate](https://redirect.github.com/jmgate) made their first
contribution in
[PyGithub/PyGithub#3295](https://redirect.github.com/PyGithub/PyGithub/pull/3295)
- [@&#8203;gopidesupavan](https://redirect.github.com/gopidesupavan)
made their first contribution in
[PyGithub/PyGithub#3246](https://redirect.github.com/PyGithub/PyGithub/pull/3246)
- [@&#8203;kukarkinmm](https://redirect.github.com/kukarkinmm) made
their first contribution in
[PyGithub/PyGithub#3259](https://redirect.github.com/PyGithub/PyGithub/pull/3259)
- [@&#8203;mfocko](https://redirect.github.com/mfocko) made their first
contribution in
[PyGithub/PyGithub#3260](https://redirect.github.com/PyGithub/PyGithub/pull/3260)
- [@&#8203;gfog-floqast](https://redirect.github.com/gfog-floqast) made
their first contribution in
[PyGithub/PyGithub#3173](https://redirect.github.com/PyGithub/PyGithub/pull/3173)
- [@&#8203;jsmolar](https://redirect.github.com/jsmolar) made their
first contribution in
[PyGithub/PyGithub#3299](https://redirect.github.com/PyGithub/PyGithub/pull/3299)
- [@&#8203;OscarVanL](https://redirect.github.com/OscarVanL) made their
first contribution in
[PyGithub/PyGithub#3263](https://redirect.github.com/PyGithub/PyGithub/pull/3263)
- [@&#8203;alecglen](https://redirect.github.com/alecglen) made their
first contribution in
[PyGithub/PyGithub#3313](https://redirect.github.com/PyGithub/PyGithub/pull/3313)
- [@&#8203;LifeLex](https://redirect.github.com/LifeLex) made their
first contribution in
[PyGithub/PyGithub#3268](https://redirect.github.com/PyGithub/PyGithub/pull/3268)
- [@&#8203;e7217](https://redirect.github.com/e7217) made their first
contribution in
[PyGithub/PyGithub#3258](https://redirect.github.com/PyGithub/PyGithub/pull/3258)
- [@&#8203;x612skm](https://redirect.github.com/x612skm) made their
first contribution in
[PyGithub/PyGithub#3272](https://redirect.github.com/PyGithub/PyGithub/pull/3272)
- [@&#8203;uncleDecart](https://redirect.github.com/uncleDecart) made
their first contribution in
[PyGithub/PyGithub#3306](https://redirect.github.com/PyGithub/PyGithub/pull/3306)

**Full Changelog**:
<PyGithub/PyGithub@v2.6.0...v2.7.0>

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/codegen-sh/graph-sitter).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xMzAuMSIsInVwZGF0ZWRJblZlciI6IjQxLjEzMC4xIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants