From 6b5a3b5687cecccabb980a18aacea2502a4c1b17 Mon Sep 17 00:00:00 2001 From: kasun Date: Thu, 25 Jun 2026 20:23:22 +0200 Subject: [PATCH 01/27] added sonarqube config --- .gitea/workflows/build.yml | 50 ++++++++++++++++++++++++++++++++++++++ backend/build.gradle.kts | 8 ++++++ 2 files changed, 58 insertions(+) create mode 100644 .gitea/workflows/build.yml diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml new file mode 100644 index 0000000..cbe4dc2 --- /dev/null +++ b/.gitea/workflows/build.yml @@ -0,0 +1,50 @@ +name: SonarQube Analysis + +on: + push: + branches: + - main + pull_request: + branches: + - main + workflow_dispatch: + +jobs: + analyze: + name: Build and Analyze + runs-on: ubuntu-latest + + steps: + - name: Checkout Code + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + with: + fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis + + - name: Set up JDK 17 + uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4.8.0 + with: + java-version: "17" + distribution: "zulu" # Alternative distribution options are available. + + - name: Cache SonarQube packages + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 + with: + path: ~/.sonar/cache + key: ${{ runner.os }}-sonar + restore-keys: ${{ runner.os }}-sonar + + - name: Cache Gradle packages + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 + with: + path: ~/.gradle/caches + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/*.gradle.kts*') }} + restore-keys: ${{ runner.os }}-gradle + + - name: Make Gradle Executable + run: chmod +x ./gradlew + + - name: Build and Analyze + env: + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }} + run: ./gradlew build sonar --info diff --git a/backend/build.gradle.kts b/backend/build.gradle.kts index 4560b98..acaadd8 100644 --- a/backend/build.gradle.kts +++ b/backend/build.gradle.kts @@ -2,6 +2,7 @@ plugins { java id("org.springframework.boot") version "4.1.0" id("io.spring.dependency-management") version "1.1.7" + id "org.sonarqube" version "7.3.0.8198" } group = "com.vaessl" @@ -13,6 +14,13 @@ java { } } +sonar { + properties { + property "sonar.projectKey", "Vaessl" + property "sonar.projectName", "Vaessl" + } +} + configurations { compileOnly { extendsFrom(configurations.annotationProcessor.get()) -- 2.54.0 From 2ea346651f513faf952a37e9c16afb9662a05389 Mon Sep 17 00:00:00 2001 From: kasun Date: Thu, 25 Jun 2026 20:30:08 +0200 Subject: [PATCH 02/27] adjusted gradlew path --- .gitea/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index cbe4dc2..a60f838 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -41,7 +41,7 @@ jobs: restore-keys: ${{ runner.os }}-gradle - name: Make Gradle Executable - run: chmod +x ./gradlew + run: chmod +x ./backend/gradlew - name: Build and Analyze env: -- 2.54.0 From 7652645f42bff281dd833a06d3cff37bd0aa69a2 Mon Sep 17 00:00:00 2001 From: kasun Date: Thu, 25 Jun 2026 20:30:33 +0200 Subject: [PATCH 03/27] adjusted gradlew path --- .gitea/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index a60f838..aa83c46 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -47,4 +47,4 @@ jobs: env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }} - run: ./gradlew build sonar --info + run: ./backend/gradlew build sonar --info -- 2.54.0 From 5c58fe43d92221abb853bee49c3c73361bedc2b7 Mon Sep 17 00:00:00 2001 From: kasun Date: Thu, 25 Jun 2026 20:37:13 +0200 Subject: [PATCH 04/27] adjusted gradlew path --- .gitea/workflows/build.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index aa83c46..725cf31 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -41,10 +41,12 @@ jobs: restore-keys: ${{ runner.os }}-gradle - name: Make Gradle Executable - run: chmod +x ./backend/gradlew + run: chmod +x ./gradlew + working-directory: backend - name: Build and Analyze env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }} - run: ./backend/gradlew build sonar --info + run: ./gradlew build sonar --info + working-directory: backend -- 2.54.0 From 77ee6f68c67ba502b0d763d01ed39c512c7035db Mon Sep 17 00:00:00 2001 From: kasun Date: Thu, 25 Jun 2026 20:43:19 +0200 Subject: [PATCH 05/27] fixed typo in build.gradle --- backend/build.gradle.kts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/build.gradle.kts b/backend/build.gradle.kts index acaadd8..6dc1f07 100644 --- a/backend/build.gradle.kts +++ b/backend/build.gradle.kts @@ -2,7 +2,7 @@ plugins { java id("org.springframework.boot") version "4.1.0" id("io.spring.dependency-management") version "1.1.7" - id "org.sonarqube" version "7.3.0.8198" + id("org.sonarqube") version "7.3.0.8198" } group = "com.vaessl" @@ -16,8 +16,8 @@ java { sonar { properties { - property "sonar.projectKey", "Vaessl" - property "sonar.projectName", "Vaessl" + property("sonar.projectKey", "Vaessl") + property("sonar.projectName", "Vaessl") } } -- 2.54.0 From 5838084b73ba18bb7678dbf1b0e785c7171eb088 Mon Sep 17 00:00:00 2001 From: kasun Date: Thu, 25 Jun 2026 20:46:34 +0200 Subject: [PATCH 06/27] adjusted java version --- .gitea/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 725cf31..1e48be2 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -20,10 +20,10 @@ jobs: with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - - name: Set up JDK 17 + - name: Set up JDK 25 uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4.8.0 with: - java-version: "17" + java-version: "25" distribution: "zulu" # Alternative distribution options are available. - name: Cache SonarQube packages -- 2.54.0 From 8183bf61ea7956b3550038370d4dc9739dc5aacd Mon Sep 17 00:00:00 2001 From: kasun Date: Thu, 25 Jun 2026 21:03:55 +0200 Subject: [PATCH 07/27] added network connection to self hosted postgreql db --- .gitea/workflows/build.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 1e48be2..0d388e7 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -14,6 +14,10 @@ jobs: name: Build and Analyze runs-on: ubuntu-latest + container: + image: node:24 + options: --network pg_network + steps: - name: Checkout Code uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 -- 2.54.0 From 597c941994b66f55e37433c080d5d16efd2b4e4d Mon Sep 17 00:00:00 2001 From: kasun Date: Thu, 25 Jun 2026 21:10:06 +0200 Subject: [PATCH 08/27] added test failure logging --- backend/build.gradle.kts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/backend/build.gradle.kts b/backend/build.gradle.kts index 6dc1f07..a5f6052 100644 --- a/backend/build.gradle.kts +++ b/backend/build.gradle.kts @@ -65,3 +65,16 @@ tasks.withType { tasks.withType { useJUnitPlatform() } + +tasks.withType { + useJUnitPlatform() + + // log exact test failures, standard out, and errors in CI + testLogging { + events("failed", "standardError") + exceptionFormat = org.gradle.api.tasks.testing.logging.TestExceptionFormat.FULL + showExceptions = true + showCauses = true + showStackTraces = true + } +} -- 2.54.0 From bdbfece62c2942312b83822f8543c0a818abb08a Mon Sep 17 00:00:00 2001 From: kasun Date: Thu, 25 Jun 2026 21:32:28 +0200 Subject: [PATCH 09/27] added env variables --- .gitea/workflows/build.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 0d388e7..1a4d38f 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest container: - image: node:24 + image: ubuntu-latest options: --network pg_network steps: @@ -52,5 +52,14 @@ jobs: env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }} + + DB_URL: ${{ secrets.DB_URL }} + DB_USERNAME: ${{ secrets.DB_USERNAME }} + DB_PASSWORD: ${{ secrets.DB_PASSWORD }} + PG_DRIVER_CLASS_NAME: org.postgresql.Driver + + OPENAI_BASE_URL: https://api.openai.com/v1 + OPENAI_KEY: ${{ secrets.OPENAI_KEY }} + ALLOWED_ORIGINS: http://localhost:3000 run: ./gradlew build sonar --info working-directory: backend -- 2.54.0 From b3566821759da51cb90486f1c2fc0f42dad4d136 Mon Sep 17 00:00:00 2001 From: kasun Date: Thu, 25 Jun 2026 21:33:29 +0200 Subject: [PATCH 10/27] fixed typo --- .gitea/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 1a4d38f..c673395 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest container: - image: ubuntu-latest + image: ubuntu:latest options: --network pg_network steps: -- 2.54.0 From 048120688f54293fad42fcf39f149ed92b998f4d Mon Sep 17 00:00:00 2001 From: kasun Date: Thu, 25 Jun 2026 21:36:10 +0200 Subject: [PATCH 11/27] changed image --- .gitea/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index c673395..133b608 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest container: - image: ubuntu:latest + image: node:24 options: --network pg_network steps: -- 2.54.0 From adb51584e73707a2d5bce5832fdce86de154de04 Mon Sep 17 00:00:00 2001 From: kasun Date: Thu, 25 Jun 2026 21:44:18 +0200 Subject: [PATCH 12/27] added missing env --- .gitea/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 133b608..9cbe07b 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -54,6 +54,7 @@ jobs: SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }} DB_URL: ${{ secrets.DB_URL }} + DB_TEST_URL: $ {{ secrets.DB_TEST_URL }} DB_USERNAME: ${{ secrets.DB_USERNAME }} DB_PASSWORD: ${{ secrets.DB_PASSWORD }} PG_DRIVER_CLASS_NAME: org.postgresql.Driver -- 2.54.0 From a2e110d3ddc83aba51bdee8f70c5433eda656ba0 Mon Sep 17 00:00:00 2001 From: kasun Date: Thu, 25 Jun 2026 21:50:11 +0200 Subject: [PATCH 13/27] fixed typo --- .gitea/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 9cbe07b..67b0c27 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -54,7 +54,7 @@ jobs: SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }} DB_URL: ${{ secrets.DB_URL }} - DB_TEST_URL: $ {{ secrets.DB_TEST_URL }} + DB_TEST_URL: ${{ secrets.DB_TEST_URL }} DB_USERNAME: ${{ secrets.DB_USERNAME }} DB_PASSWORD: ${{ secrets.DB_PASSWORD }} PG_DRIVER_CLASS_NAME: org.postgresql.Driver -- 2.54.0 From 4318fc13f63916fba0b48ad930bff504a2b325bd Mon Sep 17 00:00:00 2001 From: kasun Date: Thu, 25 Jun 2026 22:01:47 +0200 Subject: [PATCH 14/27] added self contained postgresql db --- .gitea/workflows/build.yml | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 67b0c27..4734e9b 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -16,7 +16,19 @@ jobs: container: image: node:24 - options: --network pg_network + + services: + postgres: + image: postgres:17 + env: + POSTGRES_USER: vaessl + POSTGRES_PASSWORD: vaessl + POSTGRES_DB: vaessl + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 steps: - name: Checkout Code @@ -53,10 +65,10 @@ jobs: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }} - DB_URL: ${{ secrets.DB_URL }} - DB_TEST_URL: ${{ secrets.DB_TEST_URL }} - DB_USERNAME: ${{ secrets.DB_USERNAME }} - DB_PASSWORD: ${{ secrets.DB_PASSWORD }} + DB_URL: jdbc:postgresql://postgres:5432/vaessl + DB_TEST_URL: jdbc:postgresql://postgres:5432/vaessl + DB_USERNAME: vaessl + DB_PASSWORD: vaessl PG_DRIVER_CLASS_NAME: org.postgresql.Driver OPENAI_BASE_URL: https://api.openai.com/v1 -- 2.54.0 From 8c18d7ff73c93ed167ed4d748477abd715f81abc Mon Sep 17 00:00:00 2001 From: kasun Date: Thu, 25 Jun 2026 22:09:19 +0200 Subject: [PATCH 15/27] fix CI database name to satisfy vaessl_test assertion Co-Authored-By: Claude Sonnet 4.6 --- .gitea/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 4734e9b..b0f9854 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -23,7 +23,7 @@ jobs: env: POSTGRES_USER: vaessl POSTGRES_PASSWORD: vaessl - POSTGRES_DB: vaessl + POSTGRES_DB: vaessl_test options: >- --health-cmd pg_isready --health-interval 10s @@ -65,8 +65,8 @@ jobs: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }} - DB_URL: jdbc:postgresql://postgres:5432/vaessl - DB_TEST_URL: jdbc:postgresql://postgres:5432/vaessl + DB_URL: jdbc:postgresql://postgres:5432/vaessl_test + DB_TEST_URL: jdbc:postgresql://postgres:5432/vaessl_test DB_USERNAME: vaessl DB_PASSWORD: vaessl PG_DRIVER_CLASS_NAME: org.postgresql.Driver -- 2.54.0 From fffdd2a575edf4cf595293f85537270fccbc0237 Mon Sep 17 00:00:00 2001 From: kasun Date: Thu, 25 Jun 2026 22:18:07 +0200 Subject: [PATCH 16/27] add JaCoCo coverage reporting for SonarQube Co-Authored-By: Claude Sonnet 4.6 --- backend/build.gradle.kts | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/backend/build.gradle.kts b/backend/build.gradle.kts index a5f6052..e8ad77f 100644 --- a/backend/build.gradle.kts +++ b/backend/build.gradle.kts @@ -1,5 +1,6 @@ plugins { java + jacoco id("org.springframework.boot") version "4.1.0" id("io.spring.dependency-management") version "1.1.7" id("org.sonarqube") version "7.3.0.8198" @@ -18,6 +19,8 @@ sonar { properties { property("sonar.projectKey", "Vaessl") property("sonar.projectName", "Vaessl") + property("sonar.coverage.jacoco.xmlReportPaths", + "${layout.buildDirectory.get()}/reports/jacoco/test/jacocoTestReport.xml") } } @@ -62,14 +65,9 @@ tasks.withType { options.compilerArgs.add("-parameters") } -tasks.withType { - useJUnitPlatform() -} - tasks.withType { useJUnitPlatform() - - // log exact test failures, standard out, and errors in CI + finalizedBy(tasks.jacocoTestReport) testLogging { events("failed", "standardError") exceptionFormat = org.gradle.api.tasks.testing.logging.TestExceptionFormat.FULL @@ -78,3 +76,10 @@ tasks.withType { showStackTraces = true } } + +tasks.jacocoTestReport { + dependsOn(tasks.withType()) + reports { + xml.required = true + } +} -- 2.54.0 From 9c2cbd16088a159d993e18a4a1327882904f38e3 Mon Sep 17 00:00:00 2001 From: kasun Date: Sat, 27 Jun 2026 01:07:36 +0200 Subject: [PATCH 17/27] replaced streams with for loop for serviceprovider lookup to resolves null type safety warning from Collectors.toMap --- .../com/vaessl/app/connection/ConnectionService.java | 9 ++++++--- .../main/java/com/vaessl/app/search/SearchService.java | 10 +++++++--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/backend/src/main/java/com/vaessl/app/connection/ConnectionService.java b/backend/src/main/java/com/vaessl/app/connection/ConnectionService.java index 518e0f9..93e341a 100644 --- a/backend/src/main/java/com/vaessl/app/connection/ConnectionService.java +++ b/backend/src/main/java/com/vaessl/app/connection/ConnectionService.java @@ -1,9 +1,9 @@ package com.vaessl.app.connection; import java.time.Instant; +import java.util.EnumMap; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; import org.springframework.stereotype.Service; @@ -18,8 +18,11 @@ public class ConnectionService { private final ConnectionRepository cRepository; public ConnectionService(List providers, ConnectionRepository cRepository) { - this.providerRegistry = providers.stream() - .collect(Collectors.toMap(ConnectionProvider::getServiceType, p -> p)); + Map registry = new EnumMap<>(ServiceType.class); + for (ConnectionProvider provider : providers) { + registry.put(provider.getServiceType(), provider); + } + this.providerRegistry = registry; this.cRepository = cRepository; } diff --git a/backend/src/main/java/com/vaessl/app/search/SearchService.java b/backend/src/main/java/com/vaessl/app/search/SearchService.java index a5314c7..4717205 100644 --- a/backend/src/main/java/com/vaessl/app/search/SearchService.java +++ b/backend/src/main/java/com/vaessl/app/search/SearchService.java @@ -1,8 +1,8 @@ package com.vaessl.app.search; +import java.util.EnumMap; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -16,8 +16,12 @@ public class SearchService { private final Map providerRegistry; public SearchService(List providers) { - this.providerRegistry = Map.copyOf(providers.stream() - .collect(Collectors.toMap(SearchProvider::getServiceType, p -> p))); + Map registry = new EnumMap<>(ServiceType.class); + for (SearchProvider provider : providers) { + registry.put(provider.getServiceType(), provider); + } + this.providerRegistry = registry; + } /** -- 2.54.0 From 9bbf2fd098ed745627342852a90acff331d8cb9f Mon Sep 17 00:00:00 2001 From: kasun Date: Sat, 27 Jun 2026 01:07:50 +0200 Subject: [PATCH 18/27] format --- .../java/com/vaessl/app/connection/ConnectionService.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/backend/src/main/java/com/vaessl/app/connection/ConnectionService.java b/backend/src/main/java/com/vaessl/app/connection/ConnectionService.java index 93e341a..2a1ecb3 100644 --- a/backend/src/main/java/com/vaessl/app/connection/ConnectionService.java +++ b/backend/src/main/java/com/vaessl/app/connection/ConnectionService.java @@ -52,7 +52,8 @@ public class ConnectionService { return new LoginResult(saved.getId(), response.expiresAt()); } - public ConnectionStatusResponse getConnectionStatus(ServiceType serviceType, Long connectionId) { + public ConnectionStatusResponse getConnectionStatus(ServiceType serviceType, + Long connectionId) { ConnectionEntity entity = cRepository.findById(connectionId).orElse(null); if (entity == null) return null; @@ -61,7 +62,7 @@ public class ConnectionService { Instant expiresAt = (provider != null) ? provider.getTokenExpiry(entity) : null; boolean connected = expiresAt == null || expiresAt.isAfter(Instant.now()); - return new ConnectionStatusResponse(serviceType.name(), entity.getAppUrl(), entity.getUsername(), - expiresAt, connected); + return new ConnectionStatusResponse(serviceType.name(), entity.getAppUrl(), + entity.getUsername(), expiresAt, connected); } } -- 2.54.0 From 12fc7909fdb51556d74a70e30f909db656c7c720 Mon Sep 17 00:00:00 2001 From: kasun Date: Sat, 27 Jun 2026 01:08:49 +0200 Subject: [PATCH 19/27] added missing javadoc --- backend/src/main/java/com/vaessl/app/search/SearchProvider.java | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/src/main/java/com/vaessl/app/search/SearchProvider.java b/backend/src/main/java/com/vaessl/app/search/SearchProvider.java index ef6196c..8b5d042 100644 --- a/backend/src/main/java/com/vaessl/app/search/SearchProvider.java +++ b/backend/src/main/java/com/vaessl/app/search/SearchProvider.java @@ -14,6 +14,7 @@ public interface SearchProvider extends ServiceProvider { * Executes a search query against the remote service and returns matching results. * * @param request the search request containing the query string, app URL, and user credentials + * @param pageable the Pageable interface * @return a list of Page items matching the query */ Page getSearchResults(SearchRequest request, Pageable pageable); -- 2.54.0 From ee2685aa075e6e0c333b052d514f85ea46e3d2cc Mon Sep 17 00:00:00 2001 From: kasun Date: Sat, 27 Jun 2026 01:15:55 +0200 Subject: [PATCH 20/27] resolve null type safety warnings from method references in stream collectors --- .../java/com/vaessl/app/exception/GlobalExceptionHandler.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/backend/src/main/java/com/vaessl/app/exception/GlobalExceptionHandler.java b/backend/src/main/java/com/vaessl/app/exception/GlobalExceptionHandler.java index 8019f6a..1328c25 100644 --- a/backend/src/main/java/com/vaessl/app/exception/GlobalExceptionHandler.java +++ b/backend/src/main/java/com/vaessl/app/exception/GlobalExceptionHandler.java @@ -3,7 +3,6 @@ package com.vaessl.app.exception; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.ProblemDetail; -import org.springframework.validation.FieldError; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; @@ -24,7 +23,7 @@ public class GlobalExceptionHandler { public ProblemDetail handleEmptyCredentialInput(MethodArgumentNotValidException e) { String defaultMessages = e.getBindingResult().getFieldErrors().stream() - .map(FieldError::getDefaultMessage).collect(Collectors.joining(", ")); + .map(field -> field.getDefaultMessage()).collect(Collectors.joining(", ")); return ProblemDetail.forStatusAndDetail(BAD_REQUEST_EMPTY_FIELDS.getStatus(), BAD_REQUEST_EMPTY_FIELDS.getMessage() + " [" + defaultMessages + "]"); -- 2.54.0 From 5b0c2d6d0268852fac198fb43eabd8d7ae366297 Mon Sep 17 00:00:00 2001 From: kasun Date: Sat, 27 Jun 2026 01:21:51 +0200 Subject: [PATCH 21/27] bumb test db to postgres 18 --- .gitea/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index b0f9854..2b653be 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -19,7 +19,7 @@ jobs: services: postgres: - image: postgres:17 + image: postgres:18 env: POSTGRES_USER: vaessl POSTGRES_PASSWORD: vaessl -- 2.54.0 From 3fed8a4ea2126916595840568390a3d643044bc8 Mon Sep 17 00:00:00 2001 From: kasun Date: Sat, 27 Jun 2026 02:53:39 +0200 Subject: [PATCH 22/27] revised build.yaml dropped caching --- .gitea/workflows/build.yml | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 2b653be..fcd578f 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -14,9 +14,6 @@ jobs: name: Build and Analyze runs-on: ubuntu-latest - container: - image: node:24 - services: postgres: image: postgres:18 @@ -42,20 +39,6 @@ jobs: java-version: "25" distribution: "zulu" # Alternative distribution options are available. - - name: Cache SonarQube packages - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 - with: - path: ~/.sonar/cache - key: ${{ runner.os }}-sonar - restore-keys: ${{ runner.os }}-sonar - - - name: Cache Gradle packages - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 - with: - path: ~/.gradle/caches - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/*.gradle.kts*') }} - restore-keys: ${{ runner.os }}-gradle - - name: Make Gradle Executable run: chmod +x ./gradlew working-directory: backend -- 2.54.0 From 78b6e04db625f1ae3a5a519130ee3e364bc31597 Mon Sep 17 00:00:00 2001 From: kasun Date: Sat, 27 Jun 2026 03:05:17 +0200 Subject: [PATCH 23/27] bump test db to postgres 18.4 --- .gitea/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index fcd578f..7307083 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -16,7 +16,7 @@ jobs: services: postgres: - image: postgres:18 + image: postgres:18.4 env: POSTGRES_USER: vaessl POSTGRES_PASSWORD: vaessl -- 2.54.0 From 46a86f15d854699f011d1aafe22e198de3bcfcd2 Mon Sep 17 00:00:00 2001 From: kasun Date: Sat, 27 Jun 2026 03:09:26 +0200 Subject: [PATCH 24/27] fixed sonarqube issue with hardcoded dependency version --- backend/build.gradle.kts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/build.gradle.kts b/backend/build.gradle.kts index e8ad77f..149a349 100644 --- a/backend/build.gradle.kts +++ b/backend/build.gradle.kts @@ -36,6 +36,8 @@ repositories { extra["springAiVersion"] = "2.0.0" +const val wiremockVersion = "3.12.0" + dependencies { implementation("org.springframework.boot:spring-boot-starter-data-jpa") implementation("org.springframework.boot:spring-boot-starter-session-jdbc") @@ -52,7 +54,7 @@ dependencies { testImplementation("org.springframework.boot:spring-boot-starter-validation-test") testImplementation("org.springframework.boot:spring-boot-starter-webmvc-test") testRuntimeOnly("org.junit.platform:junit-platform-launcher") - testImplementation("org.wiremock:wiremock-standalone:3.12.0") + testImplementation("org.wiremock:wiremock-standalone:$wiremockVersion") testImplementation("org.springframework.boot:spring-boot-starter-session-jdbc-test")} dependencyManagement { -- 2.54.0 From 7f6fd4259b184d894e344b99bda425dc0e390296 Mon Sep 17 00:00:00 2001 From: kasun Date: Sat, 27 Jun 2026 03:12:01 +0200 Subject: [PATCH 25/27] fixed sonarqube issue with hardcoded dependency version --- backend/build.gradle.kts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/build.gradle.kts b/backend/build.gradle.kts index 149a349..543fb30 100644 --- a/backend/build.gradle.kts +++ b/backend/build.gradle.kts @@ -1,3 +1,5 @@ +const val wiremockVersion = "3.12.0" + plugins { java jacoco @@ -36,7 +38,6 @@ repositories { extra["springAiVersion"] = "2.0.0" -const val wiremockVersion = "3.12.0" dependencies { implementation("org.springframework.boot:spring-boot-starter-data-jpa") -- 2.54.0 From a55270f6d57b9eca4d630a0adeaf13fac00e7b78 Mon Sep 17 00:00:00 2001 From: kasun Date: Sat, 27 Jun 2026 03:14:06 +0200 Subject: [PATCH 26/27] fixed sonarqube issue with hardcoded dependency version --- backend/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/build.gradle.kts b/backend/build.gradle.kts index 543fb30..56e47ee 100644 --- a/backend/build.gradle.kts +++ b/backend/build.gradle.kts @@ -1,4 +1,4 @@ -const val wiremockVersion = "3.12.0" +val wiremockVersion = "3.12.0" plugins { java -- 2.54.0 From 51382d0bd1d3ed937a5f9952eb25d7eacd40b1f0 Mon Sep 17 00:00:00 2001 From: kasun Date: Sat, 27 Jun 2026 03:19:27 +0200 Subject: [PATCH 27/27] fixed sonarqube issue for grouping dependencies --- backend/build.gradle.kts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/backend/build.gradle.kts b/backend/build.gradle.kts index 56e47ee..c5abb42 100644 --- a/backend/build.gradle.kts +++ b/backend/build.gradle.kts @@ -46,17 +46,24 @@ dependencies { implementation("org.springframework.boot:spring-boot-starter-validation") implementation("org.springframework.boot:spring-boot-starter-webmvc") implementation("org.springframework.ai:spring-ai-starter-model-openai") + compileOnly("org.projectlombok:lombok") + developmentOnly("org.springframework.boot:spring-boot-devtools") + runtimeOnly("org.postgresql:postgresql") + annotationProcessor("org.projectlombok:lombok") + testImplementation("org.springframework.boot:spring-boot-starter-data-jpa-test") // testImplementation("org.springframework.boot:spring-boot-starter-security-test") testImplementation("org.springframework.boot:spring-boot-starter-validation-test") testImplementation("org.springframework.boot:spring-boot-starter-webmvc-test") - testRuntimeOnly("org.junit.platform:junit-platform-launcher") testImplementation("org.wiremock:wiremock-standalone:$wiremockVersion") - testImplementation("org.springframework.boot:spring-boot-starter-session-jdbc-test")} + testImplementation("org.springframework.boot:spring-boot-starter-session-jdbc-test") + + testRuntimeOnly("org.junit.platform:junit-platform-launcher") +} dependencyManagement { imports { -- 2.54.0