Skip to content

Commit e0bd56e

Browse files
authored
Merge pull request #249 from MagicRB/use_installation_token_for_change_hook
Use installation tokens for GitHub change hooks
2 parents 5f030db + e18e41e commit e0bd56e

File tree

2 files changed

+20
-8
lines changed

2 files changed

+20
-8
lines changed

buildbot_nix/github_projects.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ def get_general_token(self) -> RepoToken:
291291
pass
292292

293293
@abstractmethod
294-
def get_repo_token(self, repo: RepoData) -> RepoToken:
294+
def get_repo_token(self, repo_full_name: str) -> RepoToken:
295295
pass
296296

297297
@abstractmethod
@@ -354,7 +354,7 @@ def __init__(self, auth_type: GitHubLegacyConfig) -> None:
354354
def get_general_token(self) -> RepoToken:
355355
return self.token
356356

357-
def get_repo_token(self, repo: RepoData) -> RepoToken:
357+
def get_repo_token(self, repo_full_name: str) -> RepoToken:
358358
return self.token
359359

360360
def create_secret_providers(self) -> list[SecretProviderBase]:
@@ -436,9 +436,9 @@ def __init__(self, auth_type: GitHubAppConfig) -> None:
436436
def get_general_token(self) -> RepoToken:
437437
return self.jwt_token
438438

439-
def get_repo_token(self, repo: RepoData) -> RepoToken:
440-
assert repo.installation_id is not None, f"Missing installation_id in {repo}"
441-
return self.installation_tokens[repo.installation_id]
439+
def get_repo_token(self, repo_full_name: str) -> RepoToken:
440+
installation_id = self.project_id_map[repo_full_name]
441+
return self.installation_tokens[installation_id]
442442

443443
def create_secret_providers(self) -> list[SecretProviderBase]:
444444
return [GitHubAppSecretService(self.installation_tokens, self.jwt_token)]
@@ -585,10 +585,15 @@ def create_reporter(self) -> ReporterBase:
585585
return self.auth_backend.create_reporter()
586586

587587
def create_change_hook(self) -> dict[str, Any]:
588+
def get_github_token(props: Properties) -> str:
589+
return self.auth_backend.get_repo_token(
590+
props.getProperty("full_name")
591+
).get()
592+
588593
return {
589594
"secret": self.webhook_secret,
590595
"strict": True,
591-
"token": self.auth_backend.get_general_token().get(),
596+
"token": WithProperties("%(github_token)s", github_token=get_github_token),
592597
"github_property_whitelist": ["github.base.sha", "github.head.sha"],
593598
}
594599

@@ -638,7 +643,7 @@ def load_projects(self) -> list["GitProject"]:
638643
)
639644
return [
640645
GithubProject(
641-
self.auth_backend.get_repo_token(repo),
646+
self.auth_backend.get_repo_token(repo.full_name),
642647
self.config,
643648
self.webhook_secret,
644649
RepoData.model_validate(repo),

nix/master.nix

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -681,7 +681,14 @@ in
681681
dbUrl = config.services.buildbot-nix.master.dbUrl;
682682

683683
package = cfg.buildbotNixpkgs.buildbot.overrideAttrs (old: {
684-
patches = old.patches ++ [ ./0001-master-reporters-github-render-token-for-each-reques.patch ];
684+
patches = old.patches ++ [
685+
./0001-master-reporters-github-render-token-for-each-reques.patch
686+
(pkgs.fetchpatch {
687+
name = "give-access-to-full-name-in-the-git-hub-hook-properties.patch";
688+
url = "https://github.com/buildbot/buildbot/commit/27eb8c311c0beeb35c9b0c21be437684744dce21.patch";
689+
hash = "sha256-VPH7EoDVZXwx6oc6rzkUcsNEq+nGLcTNmNMlrrW6Mog=";
690+
})
691+
];
685692
});
686693
pythonPackages =
687694
let

0 commit comments

Comments
 (0)