feat(ui): add Service Configuration Generator#15
Conversation
WalkthroughThis PR adds a new service configuration generator feature to the UI and refactors the backend ingest pipeline. Users can now manually configure services through an interactive page at Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes
Possibly related PRs
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
Comment |
🐰 CodeRabbit Review ReminderThis PR will be automatically reviewed by CodeRabbit. Please ensure:
Maintainer approval is required after addressing CodeRabbit feedback. |
🧩 Analysis chain🏁 Script executed: Length of output: 4463 🏁 Script executed: Length of output: 11352 @github-actions Hey there! 👋 I see this PR is ready for review. Let me dive into the changes and provide you with a comprehensive analysis of your Service Configuration Generator feature. I'll be looking at:
Give me a moment to analyze all the changes! ✅ Actions performedReview triggered.
|
There was a problem hiding this comment.
Actionable comments posted: 6
🧹 Nitpick comments (5)
orchestrator/kestra_pipelines/01-ingest-repo.yaml (2)
84-111: Schema “normalization” is a good start, but type-checkservices.You only check presence of
"services", not that it’s the expected object shape. If it’s a list/string by accident, downstream logic might explode in weird ways.
60-65: Branch defaulting tomainmight bite you on older repos.Not required, but you may want a fallback to
master(or allow empty branch to use repo default if the plugin supports it).ui/app/configure/page.jsx (1)
1-7: Consider removing"use client"here to avoid client↔server boundary issues.This page doesn’t use hooks; making it a Server Component by default reduces bundle size and avoids the “Client Component importing Server Component” footgun if
Footerever becomes server-only.-"use client"; - import Header from "@/components/Header"; import Footer from "@/components/Footer"; import ServiceConfigGenerator from "@/components/ServiceConfigGenerator"; import styles from "./page.module.css";ui/components/ServiceConfigGenerator.jsx (2)
239-241: Usingkey={index}will make form state “hop” after deletions.Classic React list issue: delete service 0 and suddenly service 1’s inputs appear under service 0. Add a stable
idper service and use that as the key.
241-270: A11y polish: prefer real buttons + label icon-only buttons.
- The expandable header is a
div role="button"; using a<button type="button">is simpler + more accessible.- Add
aria-expanded/aria-controlsfor the collapsible region.- Icon-only delete button + the port “×” button should get
aria-label(screen readers otherwise just get “button”).Also applies to: 369-374
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (8)
orchestrator/kestra_pipelines/01-ingest-repo.yaml(1 hunks)ui/app/configure/page.jsx(1 hunks)ui/app/configure/page.module.css(1 hunks)ui/app/page.jsx(1 hunks)ui/app/page.module.css(1 hunks)ui/components/Header.jsx(1 hunks)ui/components/ServiceConfigGenerator.jsx(1 hunks)ui/components/ServiceConfigGenerator.module.css(1 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
ui/app/configure/page.jsx (3)
ui/components/Header.jsx (1)
Header(17-90)ui/components/ServiceConfigGenerator.jsx (1)
ServiceConfigGenerator(94-454)ui/components/Footer.jsx (1)
Footer(4-45)
🔇 Additional comments (4)
ui/components/Header.jsx (1)
20-24: Nice and clean nav addition.Adding
"Configure"tonavLinksautomatically hooks into both desktop + mobile menus with no extra logic.ui/app/configure/page.module.css (1)
1-48: Looks good for a page-level layout module.Tokens + responsive tweaks are straightforward; nothing sketchy here.
ui/app/page.jsx (1)
87-135: Promo block is simple and does the job.Clear CTA + direct link to the new flow; nothing concerning.
ui/app/page.module.css (1)
273-301: Styling for the new promo CTA looks consistent.
Description
Adds a new
/configurepage with an interactive Service Configuration Generator that allows users to manually configure their project's service profile. Users can specify languages, frameworks, databases, and message queues, then download a JSON configuration file to place in their repository. The ingest-repo pipeline now checks for this user-provided config before falling back to auto-detection.Type of Change
Changes Made
/configurepage to host the configuration generator.infoundry/service_profile.jsonbefore auto-detectionInfrastructure Changes (if applicable)
Testing
terraform validate) passesTest Evidence
/configurewithout hydration errorsChecklist
CodeRabbit Review
This PR will be automatically reviewed by CodeRabbit 🐰
Summary by CodeRabbit
New Features
Backend Improvements
✏️ Tip: You can customize this high-level summary in your review settings.