From 17cd87c7025d8317aa14b3af6a9492c479c38684 Mon Sep 17 00:00:00 2001 From: siujamo Date: Thu, 4 Jun 2026 17:12:48 +0800 Subject: [PATCH] feat: inject build-time variables via Gradle processResources Replace hardcoded AppProperties values with Gradle ${} placeholders, allowing version/channel/vendor to be configured via gradle.properties or -P flags at build time. Also refactor webhook configuration to flatten the properties hierarchy by removing the intermediate WebhookProperties wrapper. --- build.gradle.kts | 12 ++++++++++++ .../deltaforceguide/config/WebhookConfig.java | 4 ++-- .../interceptor/GitHubWebhookInterceptor.java | 2 +- .../deltaforceguide/manager/AppManager.java | 6 +++++- .../manager/WebhookManager.java | 19 +++++++++++-------- .../properties/AppProperties.java | 4 +++- .../properties/GitHubWebhookProperties.java | 3 +++ .../properties/WebhookProperties.java | 9 --------- .../service/WebhookService.java | 2 +- src/main/resources/application.yaml | 12 ++++++------ 10 files changed, 44 insertions(+), 29 deletions(-) delete mode 100644 src/main/java/com/onixbyte/deltaforceguide/properties/WebhookProperties.java diff --git a/build.gradle.kts b/build.gradle.kts index 878912f..a98947a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,6 +5,8 @@ plugins { } val artefactVersion: String by project +val buildChannel: String by project +val vendor: String by project group = "com.onixbyte.helix" version = artefactVersion @@ -61,6 +63,16 @@ dependencies { testRuntimeOnly(libs.junit.launcher) } +tasks.processResources { + filesMatching("application.yaml") { + expand( + "appVersion" to artefactVersion, + "channel" to buildChannel, + "vendor" to vendor + ) + } +} + tasks.test { useJUnitPlatform() } diff --git a/src/main/java/com/onixbyte/deltaforceguide/config/WebhookConfig.java b/src/main/java/com/onixbyte/deltaforceguide/config/WebhookConfig.java index 1cb1a6c..d9c5db7 100644 --- a/src/main/java/com/onixbyte/deltaforceguide/config/WebhookConfig.java +++ b/src/main/java/com/onixbyte/deltaforceguide/config/WebhookConfig.java @@ -1,10 +1,10 @@ package com.onixbyte.deltaforceguide.config; -import com.onixbyte.deltaforceguide.properties.WebhookProperties; +import com.onixbyte.deltaforceguide.properties.GitHubWebhookProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Configuration; @Configuration -@EnableConfigurationProperties(WebhookProperties.class) +@EnableConfigurationProperties({GitHubWebhookProperties.class}) public class WebhookConfig { } diff --git a/src/main/java/com/onixbyte/deltaforceguide/interceptor/GitHubWebhookInterceptor.java b/src/main/java/com/onixbyte/deltaforceguide/interceptor/GitHubWebhookInterceptor.java index 40df977..c1b552a 100644 --- a/src/main/java/com/onixbyte/deltaforceguide/interceptor/GitHubWebhookInterceptor.java +++ b/src/main/java/com/onixbyte/deltaforceguide/interceptor/GitHubWebhookInterceptor.java @@ -48,7 +48,7 @@ public class GitHubWebhookInterceptor implements HandlerInterceptor { "Request body is not readable"); } - var secret = webhookManager.github().secret(); + var secret = webhookManager.secret(); if (secret == null || secret.isBlank()) { log.debug("No GitHub webhook secret configured, skipping signature verification"); return true; diff --git a/src/main/java/com/onixbyte/deltaforceguide/manager/AppManager.java b/src/main/java/com/onixbyte/deltaforceguide/manager/AppManager.java index 64f8ddd..378fe9b 100644 --- a/src/main/java/com/onixbyte/deltaforceguide/manager/AppManager.java +++ b/src/main/java/com/onixbyte/deltaforceguide/manager/AppManager.java @@ -18,6 +18,10 @@ public class AppManager { * @return the version string of this application */ public String getVersion() { - return appProperties.version(); + return "v%s-%s by @%s".formatted( + appProperties.version(), + appProperties.channel(), + appProperties.vendor() + ); } } diff --git a/src/main/java/com/onixbyte/deltaforceguide/manager/WebhookManager.java b/src/main/java/com/onixbyte/deltaforceguide/manager/WebhookManager.java index 1e63f36..21c5b52 100644 --- a/src/main/java/com/onixbyte/deltaforceguide/manager/WebhookManager.java +++ b/src/main/java/com/onixbyte/deltaforceguide/manager/WebhookManager.java @@ -1,21 +1,24 @@ package com.onixbyte.deltaforceguide.manager; import com.onixbyte.deltaforceguide.properties.GitHubWebhookProperties; -import com.onixbyte.deltaforceguide.properties.WebhookProperties; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.List; + @Component public class WebhookManager { - private final WebhookProperties webhookProperties; + private final GitHubWebhookProperties gitHubWebhookProperties; - @Autowired - public WebhookManager(WebhookProperties webhookProperties) { - this.webhookProperties = webhookProperties; + public WebhookManager(GitHubWebhookProperties gitHubWebhookProperties) { + this.gitHubWebhookProperties = gitHubWebhookProperties; } - public GitHubWebhookProperties github() { - return webhookProperties.github(); + public String secret() { + return gitHubWebhookProperties.secret(); + } + + public List allowedUsers() { + return gitHubWebhookProperties.allowedUsers(); } } diff --git a/src/main/java/com/onixbyte/deltaforceguide/properties/AppProperties.java b/src/main/java/com/onixbyte/deltaforceguide/properties/AppProperties.java index 79b056c..b13bca2 100644 --- a/src/main/java/com/onixbyte/deltaforceguide/properties/AppProperties.java +++ b/src/main/java/com/onixbyte/deltaforceguide/properties/AppProperties.java @@ -4,6 +4,8 @@ import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties(prefix = "app.common") public record AppProperties( - String version + String version, + String channel, + String vendor ) { } diff --git a/src/main/java/com/onixbyte/deltaforceguide/properties/GitHubWebhookProperties.java b/src/main/java/com/onixbyte/deltaforceguide/properties/GitHubWebhookProperties.java index bf91c6a..673051a 100644 --- a/src/main/java/com/onixbyte/deltaforceguide/properties/GitHubWebhookProperties.java +++ b/src/main/java/com/onixbyte/deltaforceguide/properties/GitHubWebhookProperties.java @@ -1,7 +1,10 @@ package com.onixbyte.deltaforceguide.properties; +import org.springframework.boot.context.properties.ConfigurationProperties; + import java.util.List; +@ConfigurationProperties(prefix = "app.webhook.github") public record GitHubWebhookProperties( String secret, List allowedUsers diff --git a/src/main/java/com/onixbyte/deltaforceguide/properties/WebhookProperties.java b/src/main/java/com/onixbyte/deltaforceguide/properties/WebhookProperties.java deleted file mode 100644 index d420105..0000000 --- a/src/main/java/com/onixbyte/deltaforceguide/properties/WebhookProperties.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.onixbyte.deltaforceguide.properties; - -import org.springframework.boot.context.properties.ConfigurationProperties; - -@ConfigurationProperties(prefix = "app.webhook") -public record WebhookProperties( - GitHubWebhookProperties github -) { -} diff --git a/src/main/java/com/onixbyte/deltaforceguide/service/WebhookService.java b/src/main/java/com/onixbyte/deltaforceguide/service/WebhookService.java index c5c2b33..e864a77 100644 --- a/src/main/java/com/onixbyte/deltaforceguide/service/WebhookService.java +++ b/src/main/java/com/onixbyte/deltaforceguide/service/WebhookService.java @@ -172,7 +172,7 @@ public class WebhookService { private boolean isAllowedSender( GitHubWebhookSender sender ) { - var allowedUsers = webhookManager.github().allowedUsers(); + var allowedUsers = webhookManager.allowedUsers(); if (allowedUsers == null || allowedUsers.isEmpty()) { return true; } diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 74de069..8fcdf2f 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -39,13 +39,13 @@ mybatis: type-handlers-package: com.onixbyte.deltaforceguide.mapper.handler mapper-locations: classpath:/mapper/*.xml -app: - webhook: - github: - secret: ${GITHUB_WEBHOOK_SECRET:} - allowed-users: [] - logging: level: org.hibernate: orm.connections.pooling: off + +app: + common: + version: ${appVersion} + channel: ${channel} + vendor: ${vendor}