Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
c5da5c3
feat(blueprints): add basis for blueprint update flow
rmnbrd Jul 6, 2026
871c874
Add other steps of the blueprint update flow
rmnbrd Jul 6, 2026
5e63991
First section should be open without user interaction
rmnbrd Jul 7, 2026
f6b2d0d
Fix lint issue
rmnbrd Jul 7, 2026
517f800
Support form field types
rmnbrd Jul 7, 2026
1cd82ac
Remove useless AI section and update the form field for boolean values
rmnbrd Jul 8, 2026
80032a3
UI tweak
rmnbrd Jul 8, 2026
b2f2629
Fix unit tests
rmnbrd Jul 8, 2026
49e8246
Fix lint issues
rmnbrd Jul 8, 2026
1cbb3df
Remove introduction modal
rmnbrd Jul 8, 2026
96a51f1
Improve UX when only one section is present
rmnbrd Jul 8, 2026
5282e34
Align width of update flow steps
rmnbrd Jul 8, 2026
6b46a2b
Improve output loading state
rmnbrd Jul 8, 2026
4322bcf
Increase height of raw output container
rmnbrd Jul 8, 2026
e495fa1
Add basic syntax highlighting for diffs
rmnbrd Jul 8, 2026
0920f23
Improve loader look
rmnbrd Jul 8, 2026
2d9decc
Fix lint issues
rmnbrd Jul 9, 2026
91e70b8
Clean component's props
rmnbrd Jul 9, 2026
5589368
Fix lint issue
rmnbrd Jul 9, 2026
bb63c7d
Remove useless CodeChip component
rmnbrd Jul 9, 2026
a6d1354
Fix wording
rmnbrd Jul 9, 2026
3282788
Split update flow into child routes and add introduction modal when no
rmnbrd Jul 9, 2026
b7c98d4
Fix lint issues
rmnbrd Jul 9, 2026
6e94d4e
Handle undefined edited overrides in blueprint update flow
rmnbrd Jul 10, 2026
e5bc1c4
Add unit tests for getDefaultBlueprintFieldValues
rmnbrd Jul 10, 2026
9f2369e
Use clsx
rmnbrd Jul 10, 2026
e0f5992
Use Section and Heading components
rmnbrd Jul 10, 2026
3aa7060
Use ExternalLink instead of basic `a` tag
rmnbrd Jul 10, 2026
19c657c
Split main component into smaller ones
rmnbrd Jul 10, 2026
0f38921
Remove LoadingModal for now
rmnbrd Jul 10, 2026
38bddb1
Bump API version and improve the Preview step of the blueprint update
rmnbrd Jul 13, 2026
d596022
Improve preview loading state and fix Badge usage
rmnbrd Jul 13, 2026
877d11c
Fix lint issues
rmnbrd Jul 13, 2026
c43ed5f
Add missing unit tests
rmnbrd Jul 13, 2026
0f4476d
Use PropsWithChildren instead of passing down children prop
rmnbrd Jul 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 87 additions & 0 deletions apps/console/src/routeTree.gen.ts

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { createFileRoute, useNavigate } from '@tanstack/react-router'
import { BlueprintUpdateReviewStep } from '@qovery/domains/services/feature'

export const Route = createFileRoute(
'/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/update/blueprint/'
)({
component: RouteComponent,
})

function RouteComponent() {
const { organizationId, projectId, environmentId, serviceId } = Route.useParams()
const navigate = useNavigate()

return (
<BlueprintUpdateReviewStep
onContinue={() => {
navigate({
to: '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/update/blueprint/preview',
params: { organizationId, projectId, environmentId, serviceId },
})
}}
/>
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { createFileRoute, useNavigate } from '@tanstack/react-router'
import { BlueprintUpdatePreviewStep } from '@qovery/domains/services/feature'

export const Route = createFileRoute(
'/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/update/blueprint/preview'
)({
component: RouteComponent,
})

function RouteComponent() {
const { organizationId, projectId, environmentId, serviceId } = Route.useParams()
const navigate = useNavigate()

return (
<BlueprintUpdatePreviewStep
onBack={() => {
navigate({
to: '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/update/blueprint',
params: { organizationId, projectId, environmentId, serviceId },
})
}}
/>
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import { Outlet, createFileRoute, useLocation, useNavigate } from '@tanstack/react-router'
import { useCallback, useEffect } from 'react'
import { useEnvironment } from '@qovery/domains/environments/feature'
import { BlueprintUpdateFlow, useService } from '@qovery/domains/services/feature'

export const Route = createFileRoute(
'/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/update/blueprint'
)({
component: RouteComponent,
})

function RouteComponent() {
const { organizationId, projectId, environmentId, serviceId } = Route.useParams()
const { pathname } = useLocation()
const navigate = useNavigate()
const { data: environment } = useEnvironment({ environmentId, suspense: true })
const { data: service } = useService({ environmentId, serviceId, suspense: true })
const blueprintId = service && 'blueprint_id' in service ? service.blueprint_id : undefined
const currentStep = pathname.endsWith('/preview') ? 2 : 1
const navigateToOverview = useCallback(() => {
navigate({
to: '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/overview',
params: { organizationId, projectId, environmentId, serviceId },
})
}, [environmentId, navigate, organizationId, projectId, serviceId])

useEffect(() => {
if (service && !blueprintId) navigateToOverview()
}, [blueprintId, navigateToOverview, service])

if (!service || !blueprintId) return null

return (
<BlueprintUpdateFlow
blueprintId={blueprintId}
clusterId={environment?.cluster_id}
currentStep={currentStep}
environmentId={environmentId}
service={service}
onExit={navigateToOverview}
>
<Outlet />
</BlueprintUpdateFlow>
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ const hiddenProgressCardRouteIds: FileRouteTypes['id'][] = [
'/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/helm',
'/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/lifecycle-job',
'/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/terraform',
'/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/update/blueprint',
]

function RouteComponent() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -493,6 +493,7 @@ const bypassLayoutRouteIds: FileRouteTypes['id'][] = [
'/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/terraform',
'/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/lifecycle-job',
'/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/cron-job',
'/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/update/blueprint',
]

function useBypassLayout(): boolean {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import {
BlueprintCatalogApi,
type BlueprintCreateRequest,
BlueprintMainCallsApi,
type BlueprintUpdateRequest,
type CleanFailedJobsRequest,
ContainerActionsApi,
type ContainerAdvancedSettings,
Expand Down Expand Up @@ -769,6 +770,16 @@ type CreateBlueprintRequest = {
deploy?: boolean
}

type PreviewBlueprintUpdateRequest = {
blueprintId: string
payload: BlueprintUpdateRequest
}

type UpdateBlueprintRequest = {
blueprintId: string
payload: BlueprintUpdateRequest
}

type EditServiceRequest = {
serviceId: string
payload:
Expand Down Expand Up @@ -1042,6 +1053,14 @@ export const mutations = {
const response = await blueprintApi.createBlueprint(environmentId, payload, deploy)
return response.data
},
async previewBlueprintUpdate({ blueprintId, payload }: PreviewBlueprintUpdateRequest) {
const response = await blueprintApi.previewBlueprintUpdate(blueprintId, payload)
return response.data
},
async updateBlueprint({ blueprintId, payload }: UpdateBlueprintRequest) {
const response = await blueprintApi.updateBlueprint(blueprintId, payload)
return response.data
},
async editService({ serviceId, payload }: EditServiceRequest) {
const { mutation } = match(payload)
.with({ serviceType: 'APPLICATION' }, ({ serviceType, ...payload }) => ({
Expand Down
4 changes: 4 additions & 0 deletions libs/domains/services/feature/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ export * from './lib/hooks/use-blueprint-catalog/use-blueprint-catalog'
export * from './lib/hooks/use-blueprint-catalog-service-readme/use-blueprint-catalog-service-readme'
export * from './lib/hooks/use-blueprint-catalog-service-manifest/use-blueprint-catalog-service-manifest'
export * from './lib/hooks/use-blueprint-update/use-blueprint-update'
export * from './lib/hooks/use-blueprint-update-preview-socket/use-blueprint-update-preview-socket'
export * from './lib/hooks/use-preview-blueprint-update/use-preview-blueprint-update'
export * from './lib/hooks/use-update-blueprint/use-update-blueprint'
export * from './lib/hooks/use-blueprint-service-created-socket/use-blueprint-service-created-socket'
export * from './lib/blueprint-query-boundary/blueprint-query-boundary'
export * from './lib/hooks/use-service-deployment-and-running-statuses/use-service-deployment-and-running-statuses'
Expand Down Expand Up @@ -102,6 +105,7 @@ export * from './lib/service-creation-flow/database/step-resources/step-resource
export * from './lib/service-creation-flow/database/database-summary-view/database-summary-view'
export * from './lib/service-creation-flow/database/step-summary/step-summary'
export * from './lib/service-creation-flow/blueprint/blueprint-creation-flow'
export * from './lib/service-update-flow/blueprint/blueprint-update-flow'
export * from './lib/application-container-healthchecks/application-container-healthchecks-form/application-container-healthchecks-form'
export * from './lib/application-container-healthchecks/healthchecks-utils'
export * from './lib/application-container-healthchecks/step-healthchecks/step-healthchecks'
Expand Down
Loading
Loading