Snapshot of the in-flight state that already existed, identically, in both this worktree and the main checkout before this session began: the initial HTTP Client platform implementation (previously untracked), the redis-lab removal, and the JPA / object-storage / notification integration work. Kept separate from this session's HTTP Client review response, which lands in the following commit, so the two bodies of work stay reviewable apart. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
110 lines
5.4 KiB
Groovy
110 lines
5.4 KiB
Groovy
// Driven adapter: provider-neutral semantic object-storage ports plus a bounded local-development
|
|
// provider. Canonical app.object-storage activation is disabled by default. The old whole-byte[]
|
|
// filesystem/S3 adapters remain isolated, explicit legacy compatibility only.
|
|
//
|
|
// software.amazon.awssdk:* versions are NOT managed by the Spring Boot BOM, and this repo has no
|
|
// version catalog, so the AWS SDK v2 BOM platform is imported HERE (module scope) using the root
|
|
// `ext.awsSdkVersion` SSOT — this keeps the strict-locking blast radius to this module (the shared
|
|
// root dependencyManagement block stays awssdk-free), mirroring the grpc module's grpc-bom import.
|
|
description = 'Outbound adapter: object storage (S3/MinIO + local filesystem)'
|
|
|
|
apply from: "${rootProject.projectDir}/gradle/strict-qualification-test.gradle"
|
|
|
|
sourceSets {
|
|
objectStorageMinioContractTest {
|
|
java.srcDir 'src/objectStorageMinioContractTest/java'
|
|
resources.srcDir 'src/objectStorageMinioContractTest/resources'
|
|
compileClasspath += sourceSets.main.output + sourceSets.test.output
|
|
runtimeClasspath += output + compileClasspath
|
|
}
|
|
objectStorageMinioFaultTest {
|
|
java.srcDir 'src/objectStorageMinioFaultTest/java'
|
|
resources.srcDir 'src/objectStorageMinioFaultTest/resources'
|
|
compileClasspath += sourceSets.main.output + sourceSets.test.output
|
|
runtimeClasspath += output + compileClasspath
|
|
}
|
|
objectStorageAwsQualificationTest {
|
|
java.srcDir 'src/objectStorageAwsQualificationTest/java'
|
|
resources.srcDir 'src/objectStorageAwsQualificationTest/resources'
|
|
compileClasspath += sourceSets.main.output + sourceSets.test.output
|
|
runtimeClasspath += output + compileClasspath
|
|
}
|
|
}
|
|
|
|
configurations {
|
|
objectStorageMinioContractTestImplementation.extendsFrom testImplementation
|
|
objectStorageMinioContractTestRuntimeOnly.extendsFrom testRuntimeOnly
|
|
objectStorageMinioFaultTestImplementation.extendsFrom testImplementation
|
|
objectStorageMinioFaultTestRuntimeOnly.extendsFrom testRuntimeOnly
|
|
objectStorageAwsQualificationTestImplementation.extendsFrom testImplementation
|
|
objectStorageAwsQualificationTestRuntimeOnly.extendsFrom testRuntimeOnly
|
|
}
|
|
|
|
dependencyManagement {
|
|
imports {
|
|
mavenBom "software.amazon.awssdk:bom:${awsSdkVersion}"
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
implementation project(':application-core')
|
|
implementation project(':shared-contract')
|
|
|
|
implementation 'org.springframework.boot:spring-boot-autoconfigure'
|
|
implementation 'org.slf4j:slf4j-api'
|
|
implementation 'software.amazon.awssdk:s3'
|
|
implementation 'software.amazon.awssdk:netty-nio-client'
|
|
|
|
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
|
|
|
|
// test-only: Testcontainers MinIO integration test for the S3 backend. Uses the core
|
|
// GenericContainer (no dedicated module) so the S3 round-trip runs against a real MinIO when
|
|
// Docker is available and is skipped (disabledWithoutDocker) otherwise.
|
|
testImplementation 'org.testcontainers:testcontainers'
|
|
testImplementation 'org.testcontainers:testcontainers-junit-jupiter'
|
|
testImplementation 'org.testcontainers:testcontainers-toxiproxy'
|
|
testImplementation 'com.tngtech.archunit:archunit-junit5:1.3.0'
|
|
testImplementation 'net.jqwik:jqwik:1.9.1'
|
|
}
|
|
|
|
def objectStorageReadinessRegistry = rootProject.projectDir.parentFile.toPath()
|
|
.resolve('docs/registries/object-storage-readiness.yaml').toFile()
|
|
tasks.named('test') {
|
|
inputs.file(objectStorageReadinessRegistry)
|
|
.withPathSensitivity(PathSensitivity.RELATIVE)
|
|
systemProperty 'objectstorage.readiness.registry', objectStorageReadinessRegistry.absolutePath
|
|
}
|
|
|
|
def objectStorageMinioContractQualification = registerStrictQualificationTest(
|
|
name: 'objectStorageMinioContractTest',
|
|
sourceSet: sourceSets.objectStorageMinioContractTest,
|
|
requiredClasses: [
|
|
'dev.caskeleton.adapter.outbound.objectstorage.qualification.MinioDirectTransferContractTest',
|
|
'dev.caskeleton.adapter.outbound.objectstorage.qualification.MinioManagedObjectContractTest'
|
|
],
|
|
description: 'Runs the non-skipping exact-release MinIO managed object contract.')
|
|
objectStorageMinioContractQualification.configure {
|
|
shouldRunAfter tasks.named('test')
|
|
}
|
|
|
|
def objectStorageMinioFaultQualification = registerStrictQualificationTest(
|
|
name: 'objectStorageMinioFaultTest',
|
|
sourceSet: sourceSets.objectStorageMinioFaultTest,
|
|
requiredClasses: [
|
|
'dev.caskeleton.adapter.outbound.objectstorage.qualification.MinioDirectTransferFaultTest',
|
|
'dev.caskeleton.adapter.outbound.objectstorage.qualification.MinioManagedObjectFaultTest'
|
|
],
|
|
description: 'Runs the non-skipping digest-pinned MinIO/Toxiproxy fault contract.')
|
|
objectStorageMinioFaultQualification.configure {
|
|
shouldRunAfter objectStorageMinioContractQualification
|
|
}
|
|
|
|
registerStrictQualificationTest(
|
|
name: 'objectStorageAwsQualificationTest',
|
|
sourceSet: sourceSets.objectStorageAwsQualificationTest,
|
|
requiredClasses: [
|
|
'dev.caskeleton.adapter.outbound.objectstorage.qualification.AwsS3DirectTransferQualificationTest',
|
|
'dev.caskeleton.adapter.outbound.objectstorage.qualification.AwsS3ManagedCommonSubsetQualificationTest'
|
|
],
|
|
description: 'Runs only with explicit protected AWS sandbox authority and exact inputs.')
|