Files
James Bland e88609d724
All checks were successful
kinec.tech/airun-pathfinder-crud-pricing/pipeline/head This commit looks good
feat: crud-pricing initial implementation
Complete CRUD service for AWS pricing operations - single source of truth.

Features:
- Dual pricing model (retail + account-specific with auto EDP/PPA detection)
- Get/Put pricing operations with intelligent caching
- AWS Pricing API integration for public list prices
- AWS Cost Explorer integration for account-specific pricing
- Access counting for self-learning 14-day refresh
- Query most-accessed instances (powers smart refresh)
- TTL: 30 days (retail), 7 days (account-specific)

Architecture:
- All other lambdas use this for pricing operations
- No direct DynamoDB access from other components
- Consistent schema enforcement
- Complete IAM setup for Pricing API, Cost Explorer, STS

Infrastructure:
- Complete Terraform configuration
- Full CI/CD pipeline (Jenkinsfile)
- Comprehensive documentation
- Production-ready scaffolding

Part of Phase 1 - foundation for pricing system.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 04:20:56 -05:00

115 lines
3.5 KiB
Groovy

pipeline {
agent any
options {
ansiColor('xterm')
disableConcurrentBuilds()
}
stages {
stage('Setup') {
steps {
echo '🔧 Verifying Rust environment...'
sh '''
rustc --version
cargo --version
'''
}
}
stage('Install Tools') {
steps {
echo '📦 Installing test tools...'
sh '''
if ! command -v cargo-nextest &> /dev/null; then
cargo install cargo-nextest
fi
if ! command -v cargo-llvm-cov &> /dev/null; then
cargo install cargo-llvm-cov
fi
if ! command -v cargo-audit &> /dev/null; then
cargo install cargo-audit
fi
rustup component add llvm-tools-preview
'''
}
}
stage('Security Audit') {
steps {
echo '🔒 Running cargo audit...'
sh '''
cargo audit --json > audit-report.json || true
'''
}
}
stage('Check Code') {
steps {
echo '🔍 Running cargo check...'
sh '''
cargo check --message-format json > cargo-check.log || true
'''
}
}
stage('Run Tests with Coverage') {
steps {
echo '🧪 Running tests with coverage...'
sh '''
# Run tests with nextest and generate JUnit
cargo nextest run --profile ci --verbose || true
# Create coverage directory and generate coverage
mkdir -p coverage
cargo llvm-cov nextest --cobertura --output-path coverage/cobertura.xml || true
'''
}
}
stage('Generate Docs') {
steps {
echo '📚 Generating documentation...'
sh '''
cargo doc --no-deps || true
'''
}
}
stage('Publish Results') {
steps {
echo '📋 Publishing test results, coverage, and warnings...'
junit allowEmptyResults: true, testResults: 'target/nextest/ci/junit.xml'
recordCoverage(tools: [[parser: 'COBERTURA', pattern: '**/cobertura.xml']])
recordIssues tool: cargo(pattern: 'cargo-check.log')
echo '📚 Publishing documentation...'
publishHTML(target: [
allowMissing: true,
alwaysLinkToLastBuild: true,
keepAll: true,
reportDir: 'target/doc',
reportFiles: 'crud_pricing/index.html',
reportName: 'Rust Documentation'
])
}
}
}
post {
always {
echo '🧹 Archiving artifacts...'
archiveArtifacts artifacts: 'coverage/**/*.xml, target/nextest/**/*.xml, cargo-check.log, audit-report.json', allowEmptyArchive: true
}
success {
echo '✅ Build completed!'
}
unstable {
echo '⚠️ Build unstable - some tests may have failed'
}
failure {
echo '❌ Build failed!'
}
}
}