99import java .util .concurrent .TimeUnit ;
1010
1111import jakarta .enterprise .context .ApplicationScoped ;
12+ import jakarta .enterprise .inject .Instance ;
1213import jakarta .inject .Inject ;
1314
1415import org .kohsuke .github .GHAppInstallationToken ;
2324import com .github .benmanes .caffeine .cache .LoadingCache ;
2425
2526import io .quarkiverse .githubapp .GitHubClientProvider ;
27+ import io .quarkiverse .githubapp .GitHubCustomizer ;
2628import io .quarkiverse .githubapp .runtime .config .CheckedConfigProvider ;
2729import io .quarkiverse .githubapp .runtime .signing .JwtTokenCreator ;
2830import 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