Files
clean-architecture-backend-…/src/adapter/outbound/objectstorage/build.gradle
T
DongHyeonkaandClaude Opus 5 5f10b791d3 chore: record pre-existing uncommitted repository state
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>
2026-08-11 16:48:43 +09:00

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.')