Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
757a5c7
Bump Spotless to 6.25.0 and JaCoCo to 0.8.12
devin-ai-integration[bot] Jun 17, 2026
72ff82b
Bump org.xerial:sqlite-jdbc from 3.36.0.3 to 3.46.0.0
devin-ai-integration[bot] Jun 17, 2026
19a5bb3
Merge pull request #166 from Cognition-Partner-Workshops/migration/ph…
devin-ai-integration[bot] Jun 17, 2026
ba317b3
Merge pull request #167 from Cognition-Partner-Workshops/migration/ph…
devin-ai-integration[bot] Jun 17, 2026
839ad0e
Replace org.joda.time.DateTime with java.time.Instant
devin-ai-integration[bot] Jun 17, 2026
dbbc38a
Merge pull request #168 from Cognition-Partner-Workshops/migration/ph…
devin-ai-integration[bot] Jun 17, 2026
b194b2c
Upgrade JJWT from 0.11.2 to 0.12.6
devin-ai-integration[bot] Jun 17, 2026
9782eba
Merge pull request #169 from Cognition-Partner-Workshops/migration/ph…
devin-ai-integration[bot] Jun 17, 2026
34f2eb2
Upgrade Gradle wrapper from 7.4 to 8.10.2
devin-ai-integration[bot] Jun 17, 2026
9fef47b
Merge pull request #172 from Cognition-Partner-Workshops/migration/ph…
devin-ai-integration[bot] Jun 17, 2026
da35245
Phase 2: Spring Boot 3.5 + Java 21 (jakarta, SecurityFilterChain, Gra…
devin-ai-integration[bot] Jun 17, 2026
a7deb41
Merge PR #173: Spring Boot 3.5 + Java 21 big bang; reconcile with bas…
devin-ai-integration[bot] Jun 17, 2026
600b571
Phase 3: modernize Selenium 4 E2E deps + migrate @MockBean to @Mockit…
devin-ai-integration[bot] Jun 17, 2026
6021710
Merge PR #174: Phase 3 - modernize Selenium 4 E2E suite + @MockBean->…
devin-ai-integration[bot] Jun 17, 2026
c36953e
feat: upgrade to Spring Boot 3.5.0 and Java 21
devin-ai-integration[bot] Jun 17, 2026
ddb09f8
Merge pull request #176 from Cognition-Partner-Workshops/migration/ph…
devin-ai-integration[bot] Jun 17, 2026
c0c2216
docs: document Phase 3c classpath verification — no javax conflicts f…
devin-ai-integration[bot] Jun 17, 2026
3864547
chore: bump Selenium, WebDriverManager, TestNG, and ExtentReports tes…
devin-ai-integration[bot] Jun 17, 2026
62fad80
Merge pull request #177 from Cognition-Partner-Workshops/migration/ph…
devin-ai-integration[bot] Jun 17, 2026
3ff7b92
Merge pull request #178 from Cognition-Partner-Workshops/migration/ph…
devin-ai-integration[bot] Jun 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/dependency-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: Set up JDK 11
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
distribution: zulu
java-version: '11'
java-version: '21'

- uses: actions/cache@v4
with:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/gradle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ jobs:

steps:
- uses: actions/checkout@v4
- name: Set up JDK 11
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
distribution: zulu
java-version: '11'
java-version: '21'
- uses: actions/cache@v4
with:
path: |
Expand Down
2 changes: 1 addition & 1 deletion .java-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
11
21
65 changes: 38 additions & 27 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,28 +1,27 @@
plugins {
id 'org.springframework.boot' version '2.6.3'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'org.springframework.boot' version '3.5.0'
id 'io.spring.dependency-management' version '1.1.7'
id 'java'
id "com.netflix.dgs.codegen" version "5.0.6"
id "com.diffplug.spotless" version "6.2.1"
id "com.netflix.dgs.codegen" version "7.0.3"
id "com.diffplug.spotless" version "6.25.0"
id 'jacoco'
}

version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
targetCompatibility = '11'
sourceCompatibility = '21'
targetCompatibility = '21'

spotless {
java {
target project.fileTree(project.rootDir) {
include '**/*.java'
exclude 'build/generated/**/*.*', 'build/generated-examples/**/*.*'
include 'src/**/*.java'
}
googleJavaFormat()
}
}

jacoco {
toolVersion = "0.8.7"
toolVersion = "0.8.12"
}

jacocoTestReport {
Expand All @@ -45,6 +44,8 @@ jacocoTestCoverageVerification {
}
}

ext['byte-buddy.version'] = '1.15.4'

repositories {
mavenCentral()
}
Expand All @@ -53,40 +54,50 @@ configurations {
compileOnly {
extendsFrom annotationProcessor
}
configureEach {
resolutionStrategy {
force 'com.graphql-java:java-dataloader:5.0.3'
force 'org.apache.httpcomponents.client5:httpclient5:5.4.4'
}
}
// Phase 3c classpath verification: confirmed no javax.validation:validation-api
// or other Jakarta-conflicting jars on runtimeClasspath or testRuntimeClasspath.
// All validation dependencies resolve to jakarta.validation (Spring Boot 3.x BOM).

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚩 Flyway SQLite support may require additional dependency with Spring Boot 3.5

Spring Boot 3.5.0 ships with Flyway 10+ which modularized database-specific support into separate artifacts. The build only declares implementation 'org.flywaydb:flyway-core' at build.gradle:65. If the bundled Flyway version requires org.flywaydb:flyway-database-sqlite for SQLite support, the application would fail at startup. This depends on the exact Flyway version managed by the Spring Boot 3.5.0 BOM — if it's Flyway 10+, SQLite support was moved out of core. This should be verified by running the application or tests against the SQLite database.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verified — this does not apply to this project's usage. The Boot 3.5 BOM resolves flyway-core to 11.7.2 (no flyway-database-sqlite on the classpath), and SQLite migrations still run successfully:

  • RealworldApplicationTests.contextLoads is @SpringBootTest with the default profile, so it uses spring.datasource.url=jdbc:sqlite:dev.db (file-based) and boots the full context — which triggers Flyway auto-configuration to apply V1__create_tables.sql + V2__seed_data.sql at startup. That test passes (tests="1" failures="0" errors="0"), exercising the exact app-startup migration path you flagged.
  • The MyBatis repository tests (DbTestBase@MybatisTest, @ActiveProfiles("test"), in-memory jdbc:sqlite::memory:, spring.flyway.target=1) also apply V1 via Flyway and pass (e.g. ArticleRepositoryTransactionTest, MyBatisArticleRepositoryTest).

So Flyway 11 handles SQLite here without the separate module, and the green @SpringBootTest context-load test will catch any regression if the managed Flyway version ever drops bundled SQLite support. No change needed.

}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-hateoas'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2'
implementation 'com.netflix.graphql.dgs:graphql-dgs-spring-boot-starter:4.9.21'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3'
implementation 'com.netflix.graphql.dgs:graphql-dgs-spring-graphql-starter:10.6.0'
implementation 'org.flywaydb:flyway-core'
implementation 'io.jsonwebtoken:jjwt-api:0.11.2'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.2',
'io.jsonwebtoken:jjwt-jackson:0.11.2'
implementation 'joda-time:joda-time:2.10.13'
implementation 'org.xerial:sqlite-jdbc:3.36.0.3'
implementation 'io.jsonwebtoken:jjwt-api:0.12.6'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.12.6',
'io.jsonwebtoken:jjwt-jackson:0.12.6'
implementation 'org.xerial:sqlite-jdbc:3.46.0.0'
implementation 'org.apache.httpcomponents.client5:httpclient5'

compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'

testImplementation 'io.rest-assured:rest-assured:4.5.1'
testImplementation 'io.rest-assured:json-path:4.5.1'
testImplementation 'io.rest-assured:xml-path:4.5.1'
testImplementation 'io.rest-assured:spring-mock-mvc:4.5.1'
testImplementation 'io.rest-assured:rest-assured:5.4.0'
testImplementation 'io.rest-assured:json-path:5.4.0'
testImplementation 'io.rest-assured:xml-path:5.4.0'
testImplementation 'io.rest-assured:spring-mock-mvc:5.4.0'
testImplementation 'org.springframework.security:spring-security-test'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:2.2.2'
testImplementation 'org.mockito:mockito-inline:4.0.0'
testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.3'
testImplementation 'org.mockito:mockito-core:5.14.2'
testImplementation 'org.mockito:mockito-junit-jupiter:5.14.2'

// Selenium E2E testing
testImplementation 'org.seleniumhq.selenium:selenium-java:4.15.0'
testImplementation 'io.github.bonigarcia:webdrivermanager:5.6.2'
testImplementation 'org.testng:testng:7.8.0'
testImplementation 'com.aventstack:extentreports:5.1.1'
testImplementation 'org.apache.httpcomponents.client5:httpclient5:5.2.1'
testImplementation 'org.seleniumhq.selenium:selenium-java:4.21.0'
testImplementation 'io.github.bonigarcia:webdrivermanager:5.8.0'
testImplementation 'org.testng:testng:7.10.2'
testImplementation 'com.aventstack:extentreports:5.1.2'
testImplementation 'org.apache.httpcomponents.client5:httpclient5:5.4.4'
}

tasks.named('test') {
Expand Down
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
4 changes: 3 additions & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading
Loading