steering_docs/kotlin-tech/orchestration.md
Coordinate the modular components to generate complete AWS SDK for Kotlin code examples. Each component can be used independently or in sequence.
graph TD
A[Knowledge Base Consultation] --> B[Hello Example]
A --> C[Actions Class]
A --> D[Scenario]
C --> E[Tests - Unit Tests]
E --> F[Tests - Integration Tests]
E --> G[Tests - Scenario Tests]
B --> H[Metadata Generation]
C --> H
D --> H
H --> I[README Generation]
J[Service Specification] --> H
J --> C
J --> D
Complete implementation of a new AWS service:
# 1. Knowledge Base Consultation (MANDATORY FIRST)
# Use ListKnowledgeBases + QueryKnowledgeBases for standards and patterns
# 2. Generate Core Components
# - Hello example: Hello{Service}.kt
# - Actions class: {Service}Actions.kt
# - Scenario: {Service}Basics.kt or {Service}Scenario.kt
# - Build configuration: build.gradle.kts updates
# 3. Generate Test Suite
# - Unit tests: {Service}ActionsTest.kt
# - Integration tests: {Service}IntegrationTest.kt
# - Scenario tests: {Service}ScenarioTest.kt
# 4. Generate Metadata
# - Read service specification for exact metadata keys
# - Create .doc_gen/metadata/{service}_metadata.yaml
# 5. Generate Documentation
# - Run writeme tool to create/update README.md
# Focus: hello.md guidance
# Files: Hello{Service}.kt
# Validation: Compile and run hello example
# Focus: actions.md guidance
# Files: {Service}Actions.kt
# Validation: Run unit tests for actions methods
# Focus: basics.md guidance
# Files: {Service}Basics.kt or {Service}Scenario.kt
# Validation: Run scenario tests, check user interaction
# Focus: tests.md guidance
# Files: All test files in test/ directory
# Validation: Run ./gradlew test with all test categories
# Focus: metadata.md guidance
# Files: .doc_gen/metadata/{service}_metadata.yaml
# Validation: Run writeme tool validation
# Focus: readme.md guidance
# Files: README.md (generated)
# Validation: Check README completeness and accuracy
Each component has specific validation requirements:
cd kotlin/services/{service}
./gradlew run --args="us-east-1"
cd kotlin/services/{service}
./gradlew compileKotlin
# Verify compilation succeeds and no syntax errors
cd kotlin/services/{service}
./gradlew run --args="us-east-1"
cd kotlin/services/{service}
./gradlew test --tests "*ActionsTest"
./gradlew test --tests "*IntegrationTest"
cd kotlin/services/{service}
./gradlew ktlintCheck
./gradlew detekt
cd .tools/readmes
source .venv/bin/activate
python -m writeme --languages Kotlin:1 --services {service}
Full integration testing across all components:
# 1. All unit tests pass
cd kotlin/services/{service}
./gradlew test --exclude-task integrationTest
# 2. All integration tests pass
./gradlew integrationTest
# 3. All examples execute successfully
./gradlew run --args="us-east-1"
# 4. Code quality passes
./gradlew ktlintCheck detekt
# 5. Documentation generates successfully
cd .tools/readmes && source .venv/bin/activate && python -m writeme --languages Kotlin:1 --services {service}
If any component fails, you can:
# Fix compilation issues and re-run
cd kotlin/services/{service}
./gradlew clean compileKotlin
# Fix test issues and re-run
./gradlew test --tests "FailingTest" --info
# Check metadata syntax
python -c "import yaml; yaml.safe_load(open('.doc_gen/metadata/{service}_metadata.yaml'))"
# Validate against specification
# Compare with scenarios/basics/{service}/SPECIFICATION.md
# Check for missing dependencies
cd .tools/readmes && source .venv/bin/activate && pip list
# Validate metadata first
python -m writeme --languages Kotlin:1 --services {service} --verbose
Ensure proper Gradle configuration in build.gradle.kts:
plugins {
kotlin("jvm") version "1.9.10"
application
id("org.jlleitschuh.gradle.ktlint") version "11.6.1"
id("io.gitlab.arturbosch.detekt") version "1.23.1"
}
dependencies {
implementation("aws.sdk.kotlin:{service}:1.0.0")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")
testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
testImplementation("org.junit.jupiter:junit-jupiter-engine:5.10.0")
testImplementation("io.mockk:mockk:1.13.8")
testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.3")
}
application {
mainClass.set("com.kotlin.{service}.Hello{Service}Kt")
}
tasks.test {
useJUnitPlatform()
exclude("**/*IntegrationTest*")
}
tasks.register<Test>("integrationTest") {
useJUnitPlatform()
include("**/*IntegrationTest*")
group = "verification"
description = "Runs integration tests"
}
ktlint {
version.set("0.50.0")
}
detekt {
config.setFrom("$projectDir/detekt.yml")
buildUponDefaultConfig = true
}
tasks.register<Test>("unitTest") {
useJUnitPlatform()
exclude("**/*IntegrationTest*")
group = "verification"
description = "Runs unit tests"
}
tasks.register<Test>("integrationTest") {
useJUnitPlatform()
include("**/*IntegrationTest*")
group = "verification"
description = "Runs integration tests"
}
# In CI/CD pipeline, validate all components
cd kotlin/services/{service}
# 1. Compile all code
./gradlew compileKotlin compileTestKotlin
# 2. Run unit tests
./gradlew unitTest
# 3. Run integration tests (if credentials available)
./gradlew integrationTest
# 4. Check code quality
./gradlew ktlintCheck detekt
# 5. Validate documentation
cd .tools/readmes
source .venv/bin/activate
python -m writeme --languages Kotlin:1 --services {service} --check
Kotlin examples use coroutines for async operations:
suspend fun main() {
// Async operations
}
suspend fun performAction(): Response {
// Suspend function implementation
}
Leverage Kotlin's null safety features:
val response: Response? = client.operation()
response?.let {
// Handle non-null response
}
Use extension functions for utility operations:
fun List<Resource>.filterByStatus(status: Status): List<Resource> {
return this.filter { it.status == status }
}
Use data classes for structured data:
data class ResourceInfo(
val id: String,
val name: String,
val status: Status
)
Always use Gradle wrapper for consistency:
./gradlew build
./gradlew test
./gradlew run
For complex services, consider multi-module structure:
kotlin/services/{service}/
├── build.gradle.kts
├── actions/
│ ├── build.gradle.kts
│ └── src/main/kotlin/
├── scenarios/
│ ├── build.gradle.kts
│ └── src/main/kotlin/
└── examples/
├── build.gradle.kts
└── src/main/kotlin/
This modular approach allows for targeted updates, easier debugging, and more maintainable code generation processes while maintaining Kotlin-specific build and testing requirements.