Skip to content

Commit e555167

Browse files
committed
Add seam for customizing GitHubBuilder's prior to instantiating GitHub clients
1 parent a3e81cd commit e555167

File tree

2 files changed

+43
-3
lines changed

2 files changed

+43
-3
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package io.quarkiverse.githubapp;
2+
3+
import org.kohsuke.github.GitHubBuilder;
4+
5+
import io.quarkiverse.githubapp.runtime.config.CheckedConfigProvider;
6+
7+
/**
8+
* Seam for customizing the {@link GitHubBuilder} used to create the {@link org.kohsuke.github.GitHub} instance.
9+
*/
10+
public interface GitHubCustomizer {
11+
12+
/**
13+
* Customize the {@link GitHubBuilder} with various options for runtime.
14+
* <p>
15+
* Note that customizations that use {@link GitHubBuilder#withAppInstallationToken(String)} and
16+
* {@link GitHubBuilder#withEndpoint(String)} are eventually overridden by the
17+
* {@link io.quarkiverse.githubapp.runtime.github.GitHubService}. Installation tokens are created and cached by the service.
18+
* To specify a custom endpoint, prefer the {@link CheckedConfigProvider#restApiEndpoint()}
19+
*
20+
* @param builder to customize
21+
*/
22+
void customize(GitHubBuilder builder);
23+
}

runtime/src/main/java/io/quarkiverse/githubapp/runtime/github/GitHubService.java

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.util.concurrent.TimeUnit;
1010

1111
import jakarta.enterprise.context.ApplicationScoped;
12+
import jakarta.enterprise.inject.Instance;
1213
import jakarta.inject.Inject;
1314

1415
import org.kohsuke.github.GHAppInstallationToken;
@@ -23,6 +24,7 @@
2324
import com.github.benmanes.caffeine.cache.LoadingCache;
2425

2526
import io.quarkiverse.githubapp.GitHubClientProvider;
27+
import io.quarkiverse.githubapp.GitHubCustomizer;
2628
import io.quarkiverse.githubapp.runtime.config.CheckedConfigProvider;
2729
import io.quarkiverse.githubapp.runtime.signing.JwtTokenCreator;
2830
import io.smallrye.graphql.client.dynamic.api.DynamicGraphQLClient;
@@ -40,9 +42,13 @@ public class GitHubService implements GitHubClientProvider {
4042

4143
private final JwtTokenCreator jwtTokenCreator;
4244
private final GitHubConnector gitHubConnector;
45+
private final GitHubCustomizer githubCustomizer;
4346

4447
@Inject
45-
public GitHubService(CheckedConfigProvider checkedConfigProvider, JwtTokenCreator jwtTokenCreator) {
48+
public GitHubService(
49+
CheckedConfigProvider checkedConfigProvider,
50+
JwtTokenCreator jwtTokenCreator,
51+
Instance<GitHubCustomizer> gitHubCustomizer) {
4652
this.checkedConfigProvider = checkedConfigProvider;
4753
this.jwtTokenCreator = jwtTokenCreator;
4854
this.installationTokenCache = Caffeine.newBuilder()
@@ -74,6 +80,9 @@ public long expireAfterRead(Long installationId, CachedInstallationToken cachedI
7480
.build(new CreateInstallationToken());
7581
this.gitHubConnector = new HttpClientGitHubConnector(
7682
HttpClient.newBuilder().version(Version.HTTP_1_1).followRedirects(HttpClient.Redirect.NEVER).build());
83+
// if the customizer is not resolvable, we use a no-op customizer
84+
githubCustomizer = gitHubCustomizer.isResolvable() ? gitHubCustomizer.get() : builder -> {
85+
};
7786
}
7887

7988
@Override
@@ -126,7 +135,11 @@ private GitHub createInstallationClient(long installationId) throws IOException
126135
CachedInstallationToken installationToken = installationTokenCache.get(installationId);
127136

128137
final GitHubBuilder gitHubBuilder = new GitHubBuilder()
129-
.withConnector(gitHubConnector)
138+
.withConnector(gitHubConnector);
139+
// apply customizations
140+
githubCustomizer.customize(gitHubBuilder);
141+
// configure mandatory defaults
142+
gitHubBuilder
130143
.withAppInstallationToken(installationToken.getToken())
131144
.withEndpoint(checkedConfigProvider.restApiEndpoint());
132145

@@ -194,7 +207,11 @@ private GitHub createApplicationGitHub() {
194207

195208
try {
196209
final GitHubBuilder gitHubBuilder = new GitHubBuilder()
197-
.withConnector(gitHubConnector)
210+
.withConnector(gitHubConnector);
211+
// apply customizations
212+
githubCustomizer.customize(gitHubBuilder);
213+
// configure mandatory defaults
214+
gitHubBuilder
198215
.withJwtToken(jwtToken)
199216
.withEndpoint(checkedConfigProvider.restApiEndpoint());
200217

0 commit comments

Comments
 (0)