diff --git a/kontor-spring/build.gradle b/kontor-spring/build.gradle index e1953e8..1bf085d 100644 --- a/kontor-spring/build.gradle +++ b/kontor-spring/build.gradle @@ -1,25 +1,8 @@ -buildscript { - configurations.classpath { - resolutionStrategy.eachDependency { DependencyResolveDetails details -> - if (details.requested.group == 'com.burgstaller' && details.requested.name == 'okhttp-digest' && details.requested.version == '1.10') { - details.useTarget "io.github.rburgst:${details.requested.name}:1.21" - details.because 'Dependency has moved' - } - } - } - repositories { - mavenCentral() - maven { setUrl("https://nexus.thpeetz.de/repository/maven-central") } - maven { setUrl("https://maven.vaadin.com/vaadin-prereleases") } - maven { setUrl("https://repo.spring.io/milestone") } - } -} - plugins { id 'java' id 'application' id 'maven-publish' - id "com.google.cloud.artifactregistry.gradle-plugin" version "2.2.0" + //id "com.google.cloud.artifactregistry.gradle-plugin" version "2.2.0" id 'jvm-test-suite' id 'jacoco' id 'test-report-aggregation' @@ -28,6 +11,9 @@ plugins { alias(libs.plugins.spring.dependencies) alias(libs.plugins.vaadin) alias(libs.plugins.lombok) + //id 'com.github.ksoichiro.build.info' version '0.2.0' + //id 'com.pasam.gradle.buildinfo' version '0.1.3' + id 'com.gorylenko.gradle-git-properties' version '4.0.1' } repositories { @@ -125,6 +111,10 @@ bootRun { args = ["--spring.profiles.active=${project.properties['profile'] ?: 'prod'}"] } +springBoot { + buildInfo() +} + task dockerImage(type: Exec) { dependsOn(bootJar) commandLine "docker", "build", ".", "-t", "kontor:${project.version}" diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/views/admin/AdminLayout.java b/kontor-spring/src/main/java/de/thpeetz/kontor/views/admin/AdminLayout.java index ea09da9..6f42e4e 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/views/admin/AdminLayout.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/views/admin/AdminLayout.java @@ -9,6 +9,7 @@ import de.thpeetz.kontor.security.SecurityService; import de.thpeetz.kontor.services.AdminService; import de.thpeetz.kontor.views.common.KontorLayoutUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.info.BuildProperties; @Slf4j public class AdminLayout extends AppLayout { @@ -19,11 +20,15 @@ public class AdminLayout extends AppLayout { @SuppressWarnings("unused") private final SecurityService securityService; - public AdminLayout(AdminService adminService, SecurityService securityService) { + @SuppressWarnings("unused") + private final BuildProperties buildProperties; + + public AdminLayout(AdminService adminService, SecurityService securityService, BuildProperties buildProperties) { this.adminService = adminService; this.securityService = securityService; + this.buildProperties = buildProperties; - KontorLayoutUtil layout = new KontorLayoutUtil(this, adminService, securityService); + KontorLayoutUtil layout = new KontorLayoutUtil(this, adminService, securityService, buildProperties); layout.setSecondaryNavigation(getSecondaryNavigation()); layout.createHeader(AdminConstants.ADMIN_TITLE); } diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/views/bookshelf/BookshelfLayout.java b/kontor-spring/src/main/java/de/thpeetz/kontor/views/bookshelf/BookshelfLayout.java index 8d4466b..bdd7ff3 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/views/bookshelf/BookshelfLayout.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/views/bookshelf/BookshelfLayout.java @@ -8,6 +8,7 @@ import de.thpeetz.kontor.constants.BookshelfConstants; import de.thpeetz.kontor.security.SecurityService; import de.thpeetz.kontor.services.AdminService; import de.thpeetz.kontor.views.common.KontorLayoutUtil; +import org.springframework.boot.info.BuildProperties; public class BookshelfLayout extends AppLayout { @@ -17,11 +18,15 @@ public class BookshelfLayout extends AppLayout { @SuppressWarnings("unused") private final SecurityService securityService; - public BookshelfLayout(AdminService adminService, SecurityService securityService) { + @SuppressWarnings("unused") + private final BuildProperties buildProperties; + + public BookshelfLayout(AdminService adminService, SecurityService securityService, BuildProperties buildProperties) { this.adminService = adminService; this.securityService = securityService; + this.buildProperties = buildProperties; - KontorLayoutUtil layout = new KontorLayoutUtil(this, adminService, securityService); + KontorLayoutUtil layout = new KontorLayoutUtil(this, adminService, securityService, buildProperties); layout.setSecondaryNavigation(getSecondaryNavigation()); layout.createHeader(BookshelfConstants.BOOKSHELF); } diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/views/comics/ComicLayout.java b/kontor-spring/src/main/java/de/thpeetz/kontor/views/comics/ComicLayout.java index 4bccc2e..7eeccd3 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/views/comics/ComicLayout.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/views/comics/ComicLayout.java @@ -9,6 +9,7 @@ import de.thpeetz.kontor.security.SecurityService; import de.thpeetz.kontor.services.AdminService; import de.thpeetz.kontor.views.common.KontorLayoutUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.info.BuildProperties; /** * Represents a custom layout for the comic view in the application. @@ -21,11 +22,14 @@ public class ComicLayout extends AppLayout { private final SecurityService securityService; - public ComicLayout(AdminService adminService, SecurityService securityService) { + private final BuildProperties buildProperties; + + public ComicLayout(AdminService adminService, SecurityService securityService, BuildProperties buildProperties) { this.adminService = adminService; this.securityService = securityService; + this.buildProperties = buildProperties; - KontorLayoutUtil layout = new KontorLayoutUtil(this, adminService, securityService); + KontorLayoutUtil layout = new KontorLayoutUtil(this, adminService, securityService, buildProperties); layout.setSecondaryNavigation(getSecondaryNavigation()); layout.createHeader(ComicConstants.COMICS); } diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/views/common/AvatarMenuBar.java b/kontor-spring/src/main/java/de/thpeetz/kontor/views/common/AvatarMenuBar.java index 9e55e02..2e6951f 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/views/common/AvatarMenuBar.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/views/common/AvatarMenuBar.java @@ -12,6 +12,7 @@ import de.thpeetz.kontor.security.SecurityService; import de.thpeetz.kontor.services.AdminService; import de.thpeetz.kontor.views.admin.UserProfileView; import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.info.BuildProperties; @Slf4j @Route("avatar-menu-bar") @@ -21,9 +22,12 @@ public class AvatarMenuBar extends Div { final AdminService adminService; - public AvatarMenuBar(SecurityService securityService, AdminService adminService) { + private final BuildProperties buildProperties; + + public AvatarMenuBar(SecurityService securityService, AdminService adminService, BuildProperties buildProperties) { this.adminService = adminService; this.securityService = securityService; + this.buildProperties = buildProperties; Avatar avatar = new Avatar(); securityService.getAuthenticatedUser().ifPresent(user -> { @@ -45,6 +49,10 @@ public class AvatarMenuBar extends Div { profileItem.addClickListener(e -> profileItem.getUI().ifPresent(ui -> ui.navigate(UserProfileView.class))); subMenu.addItem("Settings"); subMenu.addItem("Help"); + subMenu.addSeparator(); + subMenu.addItem("Version"); + subMenu.addItem(this.buildProperties.getVersion()); + subMenu.addItem(this.buildProperties.getTime().toString()); add(menuBar); } } diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/views/common/KontorLayoutUtil.java b/kontor-spring/src/main/java/de/thpeetz/kontor/views/common/KontorLayoutUtil.java index 668f22c..a1dbb79 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/views/common/KontorLayoutUtil.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/views/common/KontorLayoutUtil.java @@ -21,6 +21,7 @@ import de.thpeetz.kontor.security.SecurityService; import de.thpeetz.kontor.services.AdminService; import lombok.*; import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.info.BuildProperties; @Slf4j public class KontorLayoutUtil { @@ -33,9 +34,12 @@ public class KontorLayoutUtil { private final SecurityService securityService; - public KontorLayoutUtil(AppLayout layout, AdminService adminService, SecurityService securityService) { + private final BuildProperties buildProperties; + + public KontorLayoutUtil(AppLayout layout, AdminService adminService, SecurityService securityService, BuildProperties buildProperties) { this.adminService = adminService; this.securityService = securityService; + this.buildProperties = buildProperties; this.appLayout = layout; } @@ -65,7 +69,7 @@ public class KontorLayoutUtil { viewTitle.addClassNames(LumoUtility.FontSize.LARGE, LumoUtility.Margin.NONE); HorizontalLayout subViews = this.secondaryNavigation; - AvatarMenuBar avatar = new AvatarMenuBar(securityService, adminService); + AvatarMenuBar avatar = new AvatarMenuBar(securityService, adminService, buildProperties); HorizontalLayout wrapper = new HorizontalLayout(toggle, viewTitle, avatar); wrapper.setDefaultVerticalComponentAlignment(FlexComponent.Alignment.CENTER); wrapper.expand(viewTitle); diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/views/common/MainLayout.java b/kontor-spring/src/main/java/de/thpeetz/kontor/views/common/MainLayout.java index f33beff..3bc7334 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/views/common/MainLayout.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/views/common/MainLayout.java @@ -24,6 +24,7 @@ import de.thpeetz.kontor.services.AdminService; import de.thpeetz.kontor.views.DataManagementView; import de.thpeetz.kontor.views.EmailView; import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.info.BuildProperties; import java.util.ArrayList; @@ -34,9 +35,12 @@ public class MainLayout extends AppLayout { private final SecurityService securityService; - public MainLayout(AdminService adminService, SecurityService securityService) { + private final BuildProperties buildProperties; + + public MainLayout(AdminService adminService, SecurityService securityService, BuildProperties buildProperties) { this.adminService = adminService; this.securityService = securityService; + this.buildProperties = buildProperties; createHeader("Kontor"); createDrawer(); @@ -57,7 +61,7 @@ public class MainLayout extends AppLayout { H2 viewTitle = new H2(titleName); viewTitle.addClassNames(LumoUtility.FontSize.LARGE, LumoUtility.Margin.NONE); - AvatarMenuBar avatar = new AvatarMenuBar(securityService, adminService); + AvatarMenuBar avatar = new AvatarMenuBar(securityService, adminService, buildProperties); HorizontalLayout wrapper = new HorizontalLayout(toggle, viewTitle, avatar); wrapper.setDefaultVerticalComponentAlignment(FlexComponent.Alignment.CENTER); wrapper.expand(viewTitle); diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/views/common/SeparateMainLayout.java b/kontor-spring/src/main/java/de/thpeetz/kontor/views/common/SeparateMainLayout.java index 47601a5..4ba460e 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/views/common/SeparateMainLayout.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/views/common/SeparateMainLayout.java @@ -3,15 +3,16 @@ package de.thpeetz.kontor.views.common; import com.vaadin.flow.component.applayout.AppLayout; import com.vaadin.flow.component.orderedlayout.HorizontalLayout; import com.vaadin.flow.theme.lumo.LumoUtility; +import org.springframework.boot.info.BuildProperties; import de.thpeetz.kontor.security.SecurityService; import de.thpeetz.kontor.services.AdminService; public class SeparateMainLayout extends AppLayout { - public SeparateMainLayout(AdminService adminService, SecurityService securityService) { + public SeparateMainLayout(AdminService adminService, SecurityService securityService, BuildProperties buildProperties) { - KontorLayoutUtil layout = new KontorLayoutUtil(this, adminService, securityService); + KontorLayoutUtil layout = new KontorLayoutUtil(this, adminService, securityService, buildProperties); layout.setSecondaryNavigation(getSecondaryNavigation()); layout.createHeader("Kontor"); } diff --git a/kontor-spring/src/main/java/de/thpeetz/kontor/views/tysc/TyscLayout.java b/kontor-spring/src/main/java/de/thpeetz/kontor/views/tysc/TyscLayout.java index 5febbf7..989bd7d 100644 --- a/kontor-spring/src/main/java/de/thpeetz/kontor/views/tysc/TyscLayout.java +++ b/kontor-spring/src/main/java/de/thpeetz/kontor/views/tysc/TyscLayout.java @@ -9,6 +9,7 @@ import de.thpeetz.kontor.security.SecurityService; import de.thpeetz.kontor.services.AdminService; import de.thpeetz.kontor.views.common.KontorLayoutUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.info.BuildProperties; /** * Represents a custom layout for the comic view in the application. @@ -21,11 +22,14 @@ public class TyscLayout extends AppLayout { private final SecurityService securityService; - public TyscLayout(AdminService adminService, SecurityService securityService) { + private final BuildProperties buildProperties; + + public TyscLayout(AdminService adminService, SecurityService securityService, BuildProperties buildProperties) { this.adminService = adminService; this.securityService = securityService; + this.buildProperties = buildProperties; - KontorLayoutUtil layout = new KontorLayoutUtil(this, adminService, securityService); + KontorLayoutUtil layout = new KontorLayoutUtil(this, adminService, securityService, buildProperties); layout.setSecondaryNavigation(getSecondaryNavigation()); layout.createHeader(TyscConstants.TYSC); } diff --git a/kontor-spring/src/main/resources/application.yml b/kontor-spring/src/main/resources/application.yml index 5034d8d..f8454b5 100644 --- a/kontor-spring/src/main/resources/application.yml +++ b/kontor-spring/src/main/resources/application.yml @@ -1,7 +1,7 @@ app: - name: 'Kontor' - shortName: 'Kontor' - description: 'Kontor is a Spring Boot application' + name: "Kontor" + shortName: "Kontor" + description: "Kontor is a Spring Boot application" spring: profiles: active: local,dev,test,prod @@ -39,6 +39,9 @@ management: web: exposure: include: health,info,metrics,prometheus,camelroutes + info: + git: + mode: full endpoint: health: show-details: always @@ -61,15 +64,15 @@ logging: springframework: controllers: DEBUG jwt: - auth: - secret: 'J6GOtcwC2NJI1l0VkHu20PacPFGTxpirBxWwynoHjsc=' + auth: + secret: "J6GOtcwC2NJI1l0VkHu20PacPFGTxpirBxWwynoHjsc=" mail: - protocol: 'imap' - host: 'corky.svpdata.eu' - port: 143 - userName: 'thomas.peetz@thpeetz.de' - password: 'fS9f4JYDIO7A' - starttls: true + protocol: "imap" + host: "corky.svpdata.eu" + port: 143 + userName: "thomas.peetz@thpeetz.de" + password: "fS9f4JYDIO7A" + starttls: true --- spring: config: @@ -77,8 +80,8 @@ spring: on-profile: prod datasource: url: jdbc:postgresql://postgres:5432/kontor - username: 'kontor' - password: 'kontor' + username: "kontor" + password: "kontor" artemis: mode: native broker-url: tcp://activemq:61616