AI-powered analysis, OpenRewrite auto-fix, LLM code repair, and test generation — fully automated through GitHub Actions.
Turns Spring Boot upgrades from uncertain migrations into planned, low-risk engineering work.
Reads pom.xml, application.yml, and every .java file. Builds a complete inventory of your service — dependencies, plugins, config keys, imports, annotations, and code patterns.
Fetches 51 Spring Boot release notes, migration guides, config changelogs, and the full OpenRewrite recipe catalog. Prioritizes and trims to fit the context budget.
GPT-5.2 compares your repo inventory against all release notes. Identifies only the changes that directly apply to your specific service — not generic advice.
Cross-checks each LLM finding against actual code using 10 validation strategies. Hallucinations are filtered out. Only confirmed findings survive into the report.
OpenRewrite handles deterministic code transforms. Maven bumps versions. The LLM fixes remaining compilation errors through iterative repair cycles.
Creates JUnit 5 test classes for identified coverage gaps — actuator endpoints, JWT auth, Jackson serialization, and observability integration tests.
Read left to right. Your repo goes in, a fully analyzed PR comes out. Click any phase for details.
PR change, weekly cron, or manual dispatch
pom.xml, application.yml, every .java file
42 release notes, 9 wiki guides, 9 recipes
GPT-5.2 · ~50K tokens
Analysis + Fixes + Tests
9 Boot4 recipes
Deterministic transforms
Version bumps
Parent + deps + props
Release notes · Wiki
Issues · PRs · Push
Version bumps, code fixes, generated tests
7-section analysis report with evidence
docs/SPRING-BOOT-UPGRADE-REPORT.md
Fleet-wide visibility (optional)
Click any step to expand its low-level implementation details.
BuildFileParser — SB version, Java version, all dependencies, plugins, properties, multi-module resolutionConfigParser — application.yml flattened to dot-notation, actuator/kafka/DB/security config, secrets redactedCodeScanner — walks every .java file, records imports/annotations/patterns → builds Map<pattern, List<FileLocation>>
releasenotes/ subdir){ riskLevel, findings[{id, severity, category, title, description, action, searchPattern, blastRadius, openRewriteRecipe}], upgradePlan[], testGaps[] }searchPattern is checked against:GitHub Issue (create/update) · docs/SPRING-BOOT-UPGRADE-REPORT.md · Dashboard API POST
sed -i "s|<java.version>[0-9]*</java.version>|<java.version>25</java.version>|g" pom.xmlmaven.compiler.source and maven.compiler.target properties.
<parent><version>4.0.3</version> → 4.0.5 in pom.xml.
confluent.version: 8.1.1 → 8.2.0jackson-databind-nullable.version: 0.2.8 → 0.2.10shared-kafka-utils-mvc.version: 1.0.3 → 1.0.4testcontainers.version: 2.0.3 → 2.0.5
ReplaceMockBeanAndSpyBean → @MockBean → @MockitoBeanMigrateToModularStarters → starter renamesSpringBootProperties_4_0 → config property renamesAddAutoConfigureWebTestClient → test annotationsAddAutoConfigureTestRestTemplate → test annotationsRenameDeprecatedStartersManagedVersionsMigrateAutoConfigurePackages
mvn compile → captures remaining errorsActuatorContractUpgradeTest — health, liveness/readiness, PrometheusOtlpObservabilityTest — OTLP trace export with new propertiesJacksonCompatibilityTest — DTO serialization round-tripsJwtAuthUpgradeTest — JWT validation after Security 7src/test/java/.../generated/ · Uses JUnit 5 + Boot 4 patterns
spring-boot-upgrade/auto-fix-YYYYMMDDHHMMSSgit add -A captures ALL changes from phases 0–6gh pr create (GitHub CLI, pre-installed on runners)GITHUB_TOKEN (automatic)
Every external call the agent makes, in chronological order.
| Agent | ── GET → | GitHub API | /repos/spring-projects/spring-boot/releases?per_page=100 |
| GitHub API | ← 200 ── | Agent | 42 GA release notes (JSON with markdown body) |
| Agent | ── GIT → | GitHub Wiki | git clone --depth=1 spring-boot.wiki.git |
| Wiki | ← clone ─ | Agent | 9 .asciidoc files (releasenotes/ subdir) |
| ── prompt assembly ── | |||
| Agent | ── POST → | Azure OpenAI | chat/completions (190K chars, temp=0, json_object) |
| GPT-5.2 | ← 200 ── | Agent | UpgradeAnalysis JSON (23 findings, 50K tokens) |
| ── validation (local, no API calls) ── | |||
| Agent | ── POST → | GitHub API | /repos/{repo}/issues — create upgrade report Issue |
| GitHub | ← 201 ── | Agent | Issue #N created with 7-section report |
| ── Job 2: Auto-fix ── | |||
| Runner | ── EXEC → | Maven | versions:update-parent + update-properties + use-latest-releases |
| Maven | ── GET → | Maven Central | Search latest versions for each property |
| Runner | ── EXEC → | OpenRewrite | rewrite-maven-plugin:run (UpgradeSpringBoot_4_0) |
| Agent | ── POST → | Azure OpenAI | chat/completions (code fix for each compile error) |
| Agent | ── POST → | Azure OpenAI | chat/completions ×4 (test stub generation) |
| Runner | ── PUSH → | GitHub | git push origin spring-boot-upgrade/auto-fix-* |
| Runner | ── EXEC → | gh CLI | gh pr create --title "chore: Spring Boot upgrade" |
12 Java classes + 7 data model records inside the agent JAR.
Main orchestrator. Runs all steps in sequence. Reads config from environment variables.
Parses pom.xml (XML DOM) + build.gradle (regex). Multi-module + property resolution.
Parses YAML + properties. Flattens, redacts secrets, extracts structured config.
Walks .java files line-by-line. Records imports, annotations, patterns → searchable inventory.
GitHub API (42 notes) + Wiki clone (9 guides). Merge, prioritize, trim to context budget.
9 hardcoded Boot4 recipes. Generates the Maven command for execution.
Builds prompt, calls Azure OpenAI or Claude. Parses structured JSON response.
10 validation strategies. Checks code + pom + config. Filters hallucinations.
7-section Markdown + JSON output. OpenRewrite table. Risk badges.
Delivers to: PR comment, Issue, Markdown file, Dashboard API.
Post-OpenRewrite. Captures compile errors → LLM fix → re-compile. Max 3 iterations.
LLM generates JUnit 5 test stubs for each test gap. Writes to generated/ package.
7 immutable data records that flow through the pipeline.
| Record | Purpose | Key Fields |
|---|---|---|
ProjectDescriptor | Build facts | sbVersion, javaVersion, dependencies[], plugins[], properties |
ConfigFacts | Config facts | allProperties, actuator, kafka, datasource, security, profiles |
CodeFacts | Code inventory | inventory Map, importSummary, annotationSummary |
ReleaseIntelligence | Release notes | versionPath, mergedContent, releaseNotes[] |
UpgradeAnalysis | Raw GPT response | riskLevel, findings[], upgradePlan[], testGaps[] |
ValidatedAnalysis | After validation | findings[] (CONFIRMED/LIKELY only), evidence |
AgentConfig | Runtime config | repoPath, targetVersion, outputModes, apiKeys |
Every external system the agent communicates with.
Trigger matrix and required secrets for the CI/CD pipeline.
| Trigger | Job 1 (Analysis) | Job 2 (Auto-Fix + PR) |
|---|---|---|
| PR with pom.xml change | ✅ Creates Issue | ⏭ Skipped |
| Weekly cron (Mon 2AM) | ✅ Creates Issue | ✅ Creates PR |
| Manual + auto-fix=false | ✅ Creates Issue | ⏭ Skipped |
| Manual + auto-fix=true | ✅ Creates Issue | ✅ Creates PR |
| Secret | Source | Purpose |
|---|---|---|
AGENT_PAT | Personal Access Token | Clone private sb-upgrade-agent repo |
OPENAI_API_KEY | Azure OpenAI | GPT-5.2 API access |
AZURE_OPENAI_ENDPOINT | Azure Portal | Resource URL |
AZURE_OPENAI_DEPLOYMENT | Azure Portal | gpt-5.2 |
AZURE_OPENAI_API_VERSION | Azure Portal | 2025-04-01-preview |
GITHUB_TOKEN | Automatic | PRs, Issues, push |
Everything that powers the agent, dashboard, and CI/CD pipeline.
Plain Java 25 CLI. No Spring framework. Fat JAR via Maven Shade plugin.
Spring Boot 3.5 + Spring Data JDBC + PostgreSQL database.
React + Vite + TypeScript + Tailwind CSS + Recharts.
Azure OpenAI GPT-5.2. Also supports direct OpenAI + Claude APIs.
OpenRewrite rewrite-spring plugin. Maven versions-maven-plugin.
GitHub Actions workflows. PAT for private repos. gh CLI for PR creation.