diff --git a/apps/dashboard/app/(app)/projects/[projectId]/deployments/components/table/components/env-status-badge.tsx b/apps/dashboard/app/(app)/projects/[projectId]/deployments/components/table/components/env-status-badge.tsx index 769283e81d..77d8697b80 100644 --- a/apps/dashboard/app/(app)/projects/[projectId]/deployments/components/table/components/env-status-badge.tsx +++ b/apps/dashboard/app/(app)/projects/[projectId]/deployments/components/table/components/env-status-badge.tsx @@ -11,7 +11,7 @@ const statusBadgeVariants = cva( enabled: "text-successA-11 bg-successA-3", disabled: "text-warningA-11 bg-warningA-3", live: "text-feature-11 bg-feature-4", - rolledBack: "text-warningA-11 bg-warningA-2", + rolledBack: "text-warningA-11 bg-warningA-4", }, }, defaultVariants: { diff --git a/apps/dashboard/app/(app)/projects/[projectId]/deployments/components/table/deployments-list.tsx b/apps/dashboard/app/(app)/projects/[projectId]/deployments/components/table/deployments-list.tsx index baeb499a5d..76a87a8b36 100644 --- a/apps/dashboard/app/(app)/projects/[projectId]/deployments/components/table/deployments-list.tsx +++ b/apps/dashboard/app/(app)/projects/[projectId]/deployments/components/table/deployments-list.tsx @@ -46,7 +46,7 @@ export const DeploymentsList = () => { } | null>(null); const isCompactView = useIsMobile({ breakpoint: COMPACT_BREAKPOINT }); - const { liveDeployment, deployments } = useDeployments(); + const { liveDeployment, deployments, project } = useDeployments(); const columns: Column<{ deployment: Deployment; @@ -60,7 +60,7 @@ export const DeploymentsList = () => { headerClassName: "pl-[18px]", render: ({ deployment, environment }) => { const isLive = liveDeployment?.id === deployment.id; - const isRolledBack = deployment.isRolledBack; + const isRolledBack = deployment.id === project?.rolledBackDeploymentId; const isSelected = deployment.id === selectedDeployment?.deployment.id; const iconContainer = (
{ }, }, ]; - }, [selectedDeployment?.deployment.id, isCompactView, liveDeployment]); + }, [selectedDeployment?.deployment.id, isCompactView, liveDeployment, project]); return ( { onRowClick={setSelectedDeployment} selectedItem={selectedDeployment} keyExtractor={(deployment) => deployment.id} - rowClassName={(deployment) => getRowClassName(deployment, selectedDeployment?.deployment.id)} + rowClassName={(deployment) => + getRowClassName( + deployment, + selectedDeployment?.deployment.id ?? null, + project?.rolledBackDeploymentId ?? null, + ) + } emptyState={
diff --git a/apps/dashboard/app/(app)/projects/[projectId]/deployments/components/table/utils/get-row-class.ts b/apps/dashboard/app/(app)/projects/[projectId]/deployments/components/table/utils/get-row-class.ts index 1faf3f5e66..99497c2c68 100644 --- a/apps/dashboard/app/(app)/projects/[projectId]/deployments/components/table/utils/get-row-class.ts +++ b/apps/dashboard/app/(app)/projects/[projectId]/deployments/components/table/utils/get-row-class.ts @@ -46,13 +46,15 @@ export const ROLLED_BACK_STYLES = { focusRing: "focus:ring-warning-7", }; -export const getRowClassName = (deployment: Deployment, selectedDeploymentId?: string) => { +export const getRowClassName = ( + deployment: Deployment, + selectedDeploymentId: string | null, + rolledBackDeploymentId: string | null, +) => { const isFailed = deployment.status === "failed"; - const style = isFailed - ? FAILED_STATUS_STYLES - : deployment.isRolledBack - ? ROLLED_BACK_STYLES - : STATUS_STYLES; + const isRolledBack = deployment.id === rolledBackDeploymentId; + + const style = isFailed ? FAILED_STATUS_STYLES : isRolledBack ? ROLLED_BACK_STYLES : STATUS_STYLES; const isSelected = typeof selectedDeploymentId !== "undefined" && deployment.id === selectedDeploymentId; diff --git a/apps/dashboard/app/(app)/projects/[projectId]/deployments/hooks/use-deployments.ts b/apps/dashboard/app/(app)/projects/[projectId]/deployments/hooks/use-deployments.ts index 2510c5b1d2..413823ea21 100644 --- a/apps/dashboard/app/(app)/projects/[projectId]/deployments/hooks/use-deployments.ts +++ b/apps/dashboard/app/(app)/projects/[projectId]/deployments/hooks/use-deployments.ts @@ -113,6 +113,7 @@ export const useDeployments = () => { ); return { + project, deployments, liveDeployment, }; diff --git a/apps/dashboard/app/(app)/projects/_components/create-project/create-project-dialog.tsx b/apps/dashboard/app/(app)/projects/_components/create-project/create-project-dialog.tsx index 8efa472b85..d9b8174f95 100644 --- a/apps/dashboard/app/(app)/projects/_components/create-project/create-project-dialog.tsx +++ b/apps/dashboard/app/(app)/projects/_components/create-project/create-project-dialog.tsx @@ -40,6 +40,7 @@ export const CreateProjectDialog = () => { slug: values.slug, gitRepositoryUrl: values.gitRepositoryUrl || null, liveDeploymentId: null, + rolledBackDeploymentId: null, updatedAt: null, id: "will-be-replace-by-server", author: "will-be-replace-by-server", diff --git a/apps/dashboard/lib/collections/deploy/deployments.ts b/apps/dashboard/lib/collections/deploy/deployments.ts index 36e34feeeb..5bc7498674 100644 --- a/apps/dashboard/lib/collections/deploy/deployments.ts +++ b/apps/dashboard/lib/collections/deploy/deployments.ts @@ -31,7 +31,6 @@ const schema = z.object({ cpus: z.number().min(1).max(16), memory: z.number().min(1).max(1024), }), - isRolledBack: z.boolean(), // Deployment status status: z.enum(["pending", "building", "deploying", "network", "ready", "failed"]), createdAt: z.number(), diff --git a/apps/dashboard/lib/collections/deploy/projects.ts b/apps/dashboard/lib/collections/deploy/projects.ts index 8ff351c45d..1f0023d0a8 100644 --- a/apps/dashboard/lib/collections/deploy/projects.ts +++ b/apps/dashboard/lib/collections/deploy/projects.ts @@ -11,6 +11,7 @@ const schema = z.object({ gitRepositoryUrl: z.string().nullable(), updatedAt: z.number().int().nullable(), liveDeploymentId: z.string().nullable(), + rolledBackDeploymentId: z.string().nullable(), // Flattened deployment fields for UI commitTitle: z.string(), branch: z.string(), @@ -43,6 +44,7 @@ export const projects = createCollection( queryClient, queryKey: ["projects"], retry: 3, + refetchInterval: 5000, queryFn: async () => { return await trpcClient.deploy.project.list.query(); }, diff --git a/apps/dashboard/lib/trpc/routers/deploy/deployment/list.ts b/apps/dashboard/lib/trpc/routers/deploy/deployment/list.ts index 0e07f01a05..12ffe8657e 100644 --- a/apps/dashboard/lib/trpc/routers/deploy/deployment/list.ts +++ b/apps/dashboard/lib/trpc/routers/deploy/deployment/list.ts @@ -27,7 +27,6 @@ export const listDeployments = t.procedure gitCommitTimestamp: true, runtimeConfig: true, status: true, - isRolledBack: true, createdAt: true, }, limit: 500, diff --git a/apps/dashboard/lib/trpc/routers/deploy/project/list.ts b/apps/dashboard/lib/trpc/routers/deploy/project/list.ts index b465ba1eed..f45ed07c58 100644 --- a/apps/dashboard/lib/trpc/routers/deploy/project/list.ts +++ b/apps/dashboard/lib/trpc/routers/deploy/project/list.ts @@ -11,6 +11,7 @@ type ProjectRow = { updated_at: number | null; git_repository_url: string | null; live_deployment_id: string | null; + rolled_back_deployment_id: string | null; git_commit_message: string | null; git_branch: string | null; git_commit_author_name: string | null; @@ -32,6 +33,7 @@ export const listProjects = t.procedure ${projects.updatedAt}, ${projects.gitRepositoryUrl}, ${projects.liveDeploymentId}, + ${projects.rolledBackDeploymentId}, ${deployments.gitCommitMessage}, ${deployments.gitBranch}, ${deployments.gitCommitAuthorName}, @@ -57,6 +59,7 @@ export const listProjects = t.procedure updatedAt: row.updated_at, gitRepositoryUrl: row.git_repository_url, liveDeploymentId: row.live_deployment_id, + rolledBackDeploymentId: row.rolled_back_deployment_id, commitTitle: row.git_commit_message ?? "[DUMMY] Initial commit", branch: row.git_branch ?? "main", author: row.git_commit_author_name ?? "[DUMMY] Unknown Author", diff --git a/go/apps/ctrl/services/deployment/deploy_workflow.go b/go/apps/ctrl/services/deployment/deploy_workflow.go index ce9116d81b..9a5cf02cc7 100644 --- a/go/apps/ctrl/services/deployment/deploy_workflow.go +++ b/go/apps/ctrl/services/deployment/deploy_workflow.go @@ -393,36 +393,30 @@ func (w *DeployWorkflow) Run(ctx hydra.WorkflowContext, req *DeployRequest) erro } // Update deployment status to ready - _, err = hydra.Step(ctx, "update-deployment-ready", func(stepCtx context.Context) (*DeploymentResult, error) { - w.logger.Info("updating deployment status to ready", "deployment_id", req.DeploymentID) - completionTime := time.Now().UnixMilli() - activeErr := db.Query.UpdateDeploymentStatus(stepCtx, w.db.RW(), db.UpdateDeploymentStatusParams{ + err = hydra.StepVoid(ctx, "update-deployment-ready", func(stepCtx context.Context) error { + return db.Query.UpdateDeploymentStatus(stepCtx, w.db.RW(), db.UpdateDeploymentStatusParams{ ID: req.DeploymentID, Status: db.DeploymentsStatusReady, - UpdatedAt: sql.NullInt64{Valid: true, Int64: completionTime}, + UpdatedAt: sql.NullInt64{Valid: true, Int64: time.Now().UnixMilli()}, }) - if activeErr != nil { - return nil, fmt.Errorf("failed to update deployment %s status to ready: %w", req.DeploymentID, activeErr) - } - w.logger.Info("deployment status updated to ready", "deployment_id", req.DeploymentID) + }) + if err != nil { + return err + } - // TODO: This section will be removed in the future in favor of "Promote to Production" - err = db.Query.UpdateProjectLiveDeploymentId(stepCtx, w.db.RW(), db.UpdateProjectLiveDeploymentIdParams{ - ID: req.ProjectID, - LiveDeploymentID: sql.NullString{Valid: true, String: req.DeploymentID}, - UpdatedAt: sql.NullInt64{Valid: true, Int64: time.Now().UnixMilli()}, + if !project.RolledBackDeploymentID.Valid { + // only update this if the deployment is not rolled back + err = hydra.StepVoid(ctx, "update-project-deployment-pointers", func(stepCtx context.Context) error { + return db.Query.UpdateProjectDeployments(stepCtx, w.db.RW(), db.UpdateProjectDeploymentsParams{ + ID: req.ProjectID, + LiveDeploymentID: sql.NullString{Valid: true, String: req.DeploymentID}, + RolledBackDeploymentID: sql.NullString{Valid: false, String: ""}, + UpdatedAt: sql.NullInt64{Valid: true, Int64: time.Now().UnixMilli()}, + }) }) if err != nil { - return nil, fmt.Errorf("failed to update project %s active deployment ID to %s: %w", req.ProjectID, req.DeploymentID, err) + return err } - - return &DeploymentResult{ - DeploymentID: req.DeploymentID, - Status: "ready", - }, nil - }) - if err != nil { - return err } /* diff --git a/go/apps/ctrl/services/deployment/rollback.go b/go/apps/ctrl/services/deployment/rollback.go index 79a9f50227..b1cc6cb17f 100644 --- a/go/apps/ctrl/services/deployment/rollback.go +++ b/go/apps/ctrl/services/deployment/rollback.go @@ -166,45 +166,20 @@ func (s *Service) Rollback(ctx context.Context, req *connect.Request[ctrlv1.Roll } } - err = db.Query.UpdateProjectLiveDeploymentId(ctx, s.db.RW(), db.UpdateProjectLiveDeploymentIdParams{ - ID: project.ID, - LiveDeploymentID: sql.NullString{Valid: true, String: targetDeployment.ID}, - UpdatedAt: sql.NullInt64{Valid: true, Int64: time.Now().UnixMilli()}, + err = db.Query.UpdateProjectDeployments(ctx, s.db.RW(), db.UpdateProjectDeploymentsParams{ + ID: project.ID, + LiveDeploymentID: sql.NullString{Valid: true, String: targetDeployment.ID}, + RolledBackDeploymentID: sql.NullString{Valid: true, String: sourceDeployment.ID}, + UpdatedAt: sql.NullInt64{Valid: true, Int64: time.Now().UnixMilli()}, }) if err != nil { - s.logger.Error("failed to update project active deployment ID", + s.logger.Error("failed to update project deployments", "project_id", project.ID, "error", err.Error(), ) return nil, connect.NewError(connect.CodeInternal, fmt.Errorf("failed to update project's live deployment id: %w", err)) } - err = db.Query.UpdateDeploymentRollback(ctx, s.db.RW(), db.UpdateDeploymentRollbackParams{ - ID: sourceDeployment.ID, - IsRolledBack: false, - UpdatedAt: sql.NullInt64{Valid: true, Int64: time.Now().UnixMilli()}, - }) - if err != nil { - s.logger.Error("failed to update deployment rollback status", - "deployment_id", sourceDeployment.ID, - "error", err.Error(), - ) - return nil, connect.NewError(connect.CodeInternal, fmt.Errorf("failed to update deployment: %w", err)) - } - - err = db.Query.UpdateDeploymentRollback(ctx, s.db.RW(), db.UpdateDeploymentRollbackParams{ - ID: targetDeployment.ID, - IsRolledBack: true, - UpdatedAt: sql.NullInt64{Valid: true, Int64: time.Now().UnixMilli()}, - }) - if err != nil { - s.logger.Error("failed to update deployment rollback status", - "deployment_id", targetDeployment.ID, - "error", err.Error(), - ) - return nil, connect.NewError(connect.CodeInternal, fmt.Errorf("failed to update deployment: %w", err)) - } - res := &ctrlv1.RollbackResponse{ Domains: make([]string, len(domainChanges)), } diff --git a/go/pkg/db/deployment_update_rollback.sql_generated.go b/go/pkg/db/deployment_update_rollback.sql_generated.go deleted file mode 100644 index c5f992e077..0000000000 --- a/go/pkg/db/deployment_update_rollback.sql_generated.go +++ /dev/null @@ -1,33 +0,0 @@ -// Code generated by sqlc. DO NOT EDIT. -// versions: -// sqlc v1.29.0 -// source: deployment_update_rollback.sql - -package db - -import ( - "context" - "database/sql" -) - -const updateDeploymentRollback = `-- name: UpdateDeploymentRollback :exec -UPDATE deployments -SET is_rolled_back = ?, updated_at = ? -WHERE id = ? -` - -type UpdateDeploymentRollbackParams struct { - IsRolledBack bool `db:"is_rolled_back"` - UpdatedAt sql.NullInt64 `db:"updated_at"` - ID string `db:"id"` -} - -// UpdateDeploymentRollback -// -// UPDATE deployments -// SET is_rolled_back = ?, updated_at = ? -// WHERE id = ? -func (q *Queries) UpdateDeploymentRollback(ctx context.Context, db DBTX, arg UpdateDeploymentRollbackParams) error { - _, err := db.ExecContext(ctx, updateDeploymentRollback, arg.IsRolledBack, arg.UpdatedAt, arg.ID) - return err -} diff --git a/go/pkg/db/models_generated.go b/go/pkg/db/models_generated.go index 5b25ddeef2..ced74268a4 100644 --- a/go/pkg/db/models_generated.go +++ b/go/pkg/db/models_generated.go @@ -571,7 +571,6 @@ type Deployment struct { WorkspaceID string `db:"workspace_id"` ProjectID string `db:"project_id"` EnvironmentID string `db:"environment_id"` - IsRolledBack bool `db:"is_rolled_back"` GitCommitSha sql.NullString `db:"git_commit_sha"` GitBranch sql.NullString `db:"git_branch"` GitCommitMessage sql.NullString `db:"git_commit_message"` @@ -715,16 +714,17 @@ type Permission struct { } type Project struct { - ID string `db:"id"` - WorkspaceID string `db:"workspace_id"` - Name string `db:"name"` - Slug string `db:"slug"` - GitRepositoryUrl sql.NullString `db:"git_repository_url"` - LiveDeploymentID sql.NullString `db:"live_deployment_id"` - DefaultBranch sql.NullString `db:"default_branch"` - DeleteProtection sql.NullBool `db:"delete_protection"` - CreatedAt int64 `db:"created_at"` - UpdatedAt sql.NullInt64 `db:"updated_at"` + ID string `db:"id"` + WorkspaceID string `db:"workspace_id"` + Name string `db:"name"` + Slug string `db:"slug"` + GitRepositoryUrl sql.NullString `db:"git_repository_url"` + LiveDeploymentID sql.NullString `db:"live_deployment_id"` + RolledBackDeploymentID sql.NullString `db:"rolled_back_deployment_id"` + DefaultBranch sql.NullString `db:"default_branch"` + DeleteProtection sql.NullBool `db:"delete_protection"` + CreatedAt int64 `db:"created_at"` + UpdatedAt sql.NullInt64 `db:"updated_at"` } type Quotum struct { diff --git a/go/pkg/db/project_find_by_id.sql_generated.go b/go/pkg/db/project_find_by_id.sql_generated.go index a53ee21b17..dd00aea217 100644 --- a/go/pkg/db/project_find_by_id.sql_generated.go +++ b/go/pkg/db/project_find_by_id.sql_generated.go @@ -20,6 +20,7 @@ SELECT default_branch, delete_protection, live_deployment_id, + rolled_back_deployment_id, created_at, updated_at FROM projects @@ -27,16 +28,17 @@ WHERE id = ? ` type FindProjectByIdRow struct { - ID string `db:"id"` - WorkspaceID string `db:"workspace_id"` - Name string `db:"name"` - Slug string `db:"slug"` - GitRepositoryUrl sql.NullString `db:"git_repository_url"` - DefaultBranch sql.NullString `db:"default_branch"` - DeleteProtection sql.NullBool `db:"delete_protection"` - LiveDeploymentID sql.NullString `db:"live_deployment_id"` - CreatedAt int64 `db:"created_at"` - UpdatedAt sql.NullInt64 `db:"updated_at"` + ID string `db:"id"` + WorkspaceID string `db:"workspace_id"` + Name string `db:"name"` + Slug string `db:"slug"` + GitRepositoryUrl sql.NullString `db:"git_repository_url"` + DefaultBranch sql.NullString `db:"default_branch"` + DeleteProtection sql.NullBool `db:"delete_protection"` + LiveDeploymentID sql.NullString `db:"live_deployment_id"` + RolledBackDeploymentID sql.NullString `db:"rolled_back_deployment_id"` + CreatedAt int64 `db:"created_at"` + UpdatedAt sql.NullInt64 `db:"updated_at"` } // FindProjectById @@ -50,6 +52,7 @@ type FindProjectByIdRow struct { // default_branch, // delete_protection, // live_deployment_id, +// rolled_back_deployment_id, // created_at, // updated_at // FROM projects @@ -66,6 +69,7 @@ func (q *Queries) FindProjectById(ctx context.Context, db DBTX, id string) (Find &i.DefaultBranch, &i.DeleteProtection, &i.LiveDeploymentID, + &i.RolledBackDeploymentID, &i.CreatedAt, &i.UpdatedAt, ) diff --git a/go/pkg/db/project_update_deployments.sql_generated.go b/go/pkg/db/project_update_deployments.sql_generated.go new file mode 100644 index 0000000000..bb566944ee --- /dev/null +++ b/go/pkg/db/project_update_deployments.sql_generated.go @@ -0,0 +1,45 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.29.0 +// source: project_update_deployments.sql + +package db + +import ( + "context" + "database/sql" +) + +const updateProjectDeployments = `-- name: UpdateProjectDeployments :exec +UPDATE projects +SET + live_deployment_id = ?, + rolled_back_deployment_id = ?, + updated_at = ? +WHERE id = ? +` + +type UpdateProjectDeploymentsParams struct { + LiveDeploymentID sql.NullString `db:"live_deployment_id"` + RolledBackDeploymentID sql.NullString `db:"rolled_back_deployment_id"` + UpdatedAt sql.NullInt64 `db:"updated_at"` + ID string `db:"id"` +} + +// UpdateProjectDeployments +// +// UPDATE projects +// SET +// live_deployment_id = ?, +// rolled_back_deployment_id = ?, +// updated_at = ? +// WHERE id = ? +func (q *Queries) UpdateProjectDeployments(ctx context.Context, db DBTX, arg UpdateProjectDeploymentsParams) error { + _, err := db.ExecContext(ctx, updateProjectDeployments, + arg.LiveDeploymentID, + arg.RolledBackDeploymentID, + arg.UpdatedAt, + arg.ID, + ) + return err +} diff --git a/go/pkg/db/project_update_live_deployment_id.sql_generated.go b/go/pkg/db/project_update_live_deployment_id.sql_generated.go deleted file mode 100644 index e68c491f75..0000000000 --- a/go/pkg/db/project_update_live_deployment_id.sql_generated.go +++ /dev/null @@ -1,33 +0,0 @@ -// Code generated by sqlc. DO NOT EDIT. -// versions: -// sqlc v1.29.0 -// source: project_update_live_deployment_id.sql - -package db - -import ( - "context" - "database/sql" -) - -const updateProjectLiveDeploymentId = `-- name: UpdateProjectLiveDeploymentId :exec -UPDATE projects -SET live_deployment_id = ?, updated_at = ? -WHERE id = ? -` - -type UpdateProjectLiveDeploymentIdParams struct { - LiveDeploymentID sql.NullString `db:"live_deployment_id"` - UpdatedAt sql.NullInt64 `db:"updated_at"` - ID string `db:"id"` -} - -// UpdateProjectLiveDeploymentId -// -// UPDATE projects -// SET live_deployment_id = ?, updated_at = ? -// WHERE id = ? -func (q *Queries) UpdateProjectLiveDeploymentId(ctx context.Context, db DBTX, arg UpdateProjectLiveDeploymentIdParams) error { - _, err := db.ExecContext(ctx, updateProjectLiveDeploymentId, arg.LiveDeploymentID, arg.UpdatedAt, arg.ID) - return err -} diff --git a/go/pkg/db/querier_generated.go b/go/pkg/db/querier_generated.go index 0b917bfd16..1f6af13fb1 100644 --- a/go/pkg/db/querier_generated.go +++ b/go/pkg/db/querier_generated.go @@ -597,6 +597,7 @@ type Querier interface { // default_branch, // delete_protection, // live_deployment_id, + // rolled_back_deployment_id, // created_at, // updated_at // FROM projects @@ -1612,12 +1613,6 @@ type Querier interface { // SET openapi_spec = ?, updated_at = ? // WHERE id = ? UpdateDeploymentOpenapiSpec(ctx context.Context, db DBTX, arg UpdateDeploymentOpenapiSpecParams) error - //UpdateDeploymentRollback - // - // UPDATE deployments - // SET is_rolled_back = ?, updated_at = ? - // WHERE id = ? - UpdateDeploymentRollback(ctx context.Context, db DBTX, arg UpdateDeploymentRollbackParams) error //UpdateDeploymentStatus // // UPDATE deployments @@ -1700,12 +1695,15 @@ type Querier interface { // // UPDATE `key_auth` SET store_encrypted_keys = ? WHERE id = ? UpdateKeyringKeyEncryption(ctx context.Context, db DBTX, arg UpdateKeyringKeyEncryptionParams) error - //UpdateProjectLiveDeploymentId + //UpdateProjectDeployments // // UPDATE projects - // SET live_deployment_id = ?, updated_at = ? + // SET + // live_deployment_id = ?, + // rolled_back_deployment_id = ?, + // updated_at = ? // WHERE id = ? - UpdateProjectLiveDeploymentId(ctx context.Context, db DBTX, arg UpdateProjectLiveDeploymentIdParams) error + UpdateProjectDeployments(ctx context.Context, db DBTX, arg UpdateProjectDeploymentsParams) error //UpdateRatelimit // // UPDATE `ratelimits` diff --git a/go/pkg/db/queries/deployment_update_rollback.sql b/go/pkg/db/queries/deployment_update_rollback.sql deleted file mode 100644 index 1c3b08445d..0000000000 --- a/go/pkg/db/queries/deployment_update_rollback.sql +++ /dev/null @@ -1,4 +0,0 @@ --- name: UpdateDeploymentRollback :exec -UPDATE deployments -SET is_rolled_back = ?, updated_at = ? -WHERE id = ?; diff --git a/go/pkg/db/queries/project_find_by_id.sql b/go/pkg/db/queries/project_find_by_id.sql index 0321dc9836..4d157da891 100644 --- a/go/pkg/db/queries/project_find_by_id.sql +++ b/go/pkg/db/queries/project_find_by_id.sql @@ -8,6 +8,7 @@ SELECT default_branch, delete_protection, live_deployment_id, + rolled_back_deployment_id, created_at, updated_at FROM projects diff --git a/go/pkg/db/queries/project_update_deployments.sql b/go/pkg/db/queries/project_update_deployments.sql new file mode 100644 index 0000000000..0d9432144f --- /dev/null +++ b/go/pkg/db/queries/project_update_deployments.sql @@ -0,0 +1,7 @@ +-- name: UpdateProjectDeployments :exec +UPDATE projects +SET + live_deployment_id = sqlc.arg(live_deployment_id), + rolled_back_deployment_id = sqlc.arg(rolled_back_deployment_id), + updated_at = sqlc.arg(updated_at) +WHERE id = sqlc.arg(id); diff --git a/go/pkg/db/queries/project_update_live_deployment_id.sql b/go/pkg/db/queries/project_update_live_deployment_id.sql deleted file mode 100644 index 45d8c52dc3..0000000000 --- a/go/pkg/db/queries/project_update_live_deployment_id.sql +++ /dev/null @@ -1,4 +0,0 @@ --- name: UpdateProjectLiveDeploymentId :exec -UPDATE projects -SET live_deployment_id = ?, updated_at = ? -WHERE id = ?; diff --git a/go/pkg/db/schema.sql b/go/pkg/db/schema.sql index 4baaf8e81f..1815769695 100644 --- a/go/pkg/db/schema.sql +++ b/go/pkg/db/schema.sql @@ -314,6 +314,7 @@ CREATE TABLE `projects` ( `slug` varchar(256) NOT NULL, `git_repository_url` varchar(500), `live_deployment_id` varchar(256), + `rolled_back_deployment_id` varchar(256), `default_branch` varchar(256) DEFAULT 'main', `delete_protection` boolean DEFAULT false, `created_at` bigint NOT NULL, @@ -327,7 +328,6 @@ CREATE TABLE `deployments` ( `workspace_id` varchar(256) NOT NULL, `project_id` varchar(256) NOT NULL, `environment_id` varchar(256) NOT NULL, - `is_rolled_back` boolean NOT NULL DEFAULT false, `git_commit_sha` varchar(40), `git_branch` varchar(256), `git_commit_message` text, diff --git a/internal/db/src/schema/deployments.ts b/internal/db/src/schema/deployments.ts index 9f14b43d8c..b532a77960 100644 --- a/internal/db/src/schema/deployments.ts +++ b/internal/db/src/schema/deployments.ts @@ -1,14 +1,5 @@ import { relations } from "drizzle-orm"; -import { - bigint, - boolean, - index, - json, - mysqlEnum, - mysqlTable, - text, - varchar, -} from "drizzle-orm/mysql-core"; +import { bigint, index, json, mysqlEnum, mysqlTable, text, varchar } from "drizzle-orm/mysql-core"; import { deploymentSteps } from "./deployment_steps"; import { environments } from "./environments"; import { projects } from "./projects"; @@ -25,8 +16,6 @@ export const deployments = mysqlTable( // Environment configuration (production, preview, etc.) environmentId: varchar("environment_id", { length: 256 }).notNull(), - isRolledBack: boolean("is_rolled_back").notNull().default(false), - // Git information gitCommitSha: varchar("git_commit_sha", { length: 40 }), gitBranch: varchar("git_branch", { length: 256 }), diff --git a/internal/db/src/schema/projects.ts b/internal/db/src/schema/projects.ts index 91fd36a846..48ae8d366d 100644 --- a/internal/db/src/schema/projects.ts +++ b/internal/db/src/schema/projects.ts @@ -19,6 +19,9 @@ export const projects = mysqlTable( // this is likely temporary but we need a way to point to the current prod deployment. // in the future I think we want to have a special deployment per environment, but for now this is fine liveDeploymentId: varchar("live_deployment_id", { length: 256 }), + rolledBackDeploymentId: varchar("rolled_back_deployment_id", { + length: 256, + }), defaultBranch: varchar("default_branch", { length: 256 }).default("main"), ...deleteProtection,