From 082bb5e4bdef677b4ce6b4113a6657d690036a3d Mon Sep 17 00:00:00 2001
From: Aditya Choudhari
Date: Wed, 8 Apr 2026 15:36:36 -0700
Subject: [PATCH 1/6] refactor: drop old deployment agent table
---
apps/api/openapi/openapi.json | 51 +-
apps/api/openapi/schemas/deployments.jsonnet | 19 +-
.../src/routes/v1/workspaces/deployments.ts | 123 +-
apps/api/src/types/openapi.ts | 16 +-
.../_components/DeploymentProvider.tsx | 7 +-
.../settings/page.$deploymentId.job-agent.tsx | 23 -
.../app/routes/ws/runners/JobAgentCard.tsx | 46 -
apps/workspace-engine/oapi/openapi.json | 29 -
.../oapi/spec/schemas/deployments.jsonnet | 11 -
.../pkg/db/deployments.sql.go | 27 -
apps/workspace-engine/pkg/db/models.go | 6 -
.../pkg/db/queries/deployments.sql | 8 -
.../pkg/db/queries/schema.sql | 6 -
apps/workspace-engine/pkg/oapi/oapi.gen.go | 17 +-
.../pkg/selector/langs/cel/cel.go | 3 -
packages/db/drizzle/0185_steep_scarecrow.sql | 1 +
packages/db/drizzle/meta/0185_snapshot.json | 6423 +++++++++++++++++
packages/db/drizzle/meta/_journal.json | 7 +
packages/db/src/schema/deployment.ts | 33 -
packages/trpc/src/routes/deployments.ts | 13 -
packages/trpc/src/routes/job-agents.ts | 20 +-
packages/workspace-engine-sdk/src/schema.ts | 8 -
22 files changed, 6450 insertions(+), 447 deletions(-)
create mode 100644 packages/db/drizzle/0185_steep_scarecrow.sql
create mode 100644 packages/db/drizzle/meta/0185_snapshot.json
diff --git a/apps/api/openapi/openapi.json b/apps/api/openapi/openapi.json
index e2c470b91..fd3cf28ea 100644
--- a/apps/api/openapi/openapi.json
+++ b/apps/api/openapi/openapi.json
@@ -51,19 +51,10 @@
"additionalProperties": true,
"type": "object"
},
- "jobAgentId": {
- "type": "string"
- },
"jobAgentSelector": {
- "description": "CEL expression to match job agents. Defaults to jobAgent.id == \"\" if not provided.",
+ "description": "CEL expression to match job agents",
"type": "string"
},
- "jobAgents": {
- "items": {
- "$ref": "#/components/schemas/DeploymentJobAgent"
- },
- "type": "array"
- },
"metadata": {
"additionalProperties": {
"type": "string"
@@ -456,19 +447,10 @@
"additionalProperties": true,
"type": "object"
},
- "jobAgentId": {
- "type": "string"
- },
"jobAgentSelector": {
"description": "CEL expression to match job agents",
"type": "string"
},
- "jobAgents": {
- "items": {
- "$ref": "#/components/schemas/DeploymentJobAgent"
- },
- "type": "array"
- },
"metadata": {
"additionalProperties": {
"type": "string"
@@ -525,26 +507,6 @@
],
"type": "object"
},
- "DeploymentJobAgent": {
- "properties": {
- "config": {
- "$ref": "#/components/schemas/JobAgentConfig"
- },
- "ref": {
- "type": "string"
- },
- "selector": {
- "description": "CEL expression to determine if the job agent should be used",
- "type": "string"
- }
- },
- "required": [
- "ref",
- "config",
- "selector"
- ],
- "type": "object"
- },
"DeploymentPlan": {
"properties": {
"id": {
@@ -2593,19 +2555,10 @@
"additionalProperties": true,
"type": "object"
},
- "jobAgentId": {
- "type": "string"
- },
"jobAgentSelector": {
- "description": "CEL expression to match job agents. Defaults to jobAgent.id == \"\" if not provided.",
+ "description": "CEL expression to match job agents",
"type": "string"
},
- "jobAgents": {
- "items": {
- "$ref": "#/components/schemas/DeploymentJobAgent"
- },
- "type": "array"
- },
"metadata": {
"additionalProperties": {
"type": "string"
diff --git a/apps/api/openapi/schemas/deployments.jsonnet b/apps/api/openapi/schemas/deployments.jsonnet
index 73fecfa8d..70646a8dc 100644
--- a/apps/api/openapi/schemas/deployments.jsonnet
+++ b/apps/api/openapi/schemas/deployments.jsonnet
@@ -6,15 +6,6 @@ local jobAgentConfig = {
};
{
- DeploymentJobAgent: {
- type: 'object',
- required: ['ref', 'config', 'selector'],
- properties: {
- ref: { type: 'string' },
- config: openapi.schemaRef('JobAgentConfig'),
- selector: { type: 'string', description: 'CEL expression to determine if the job agent should be used' },
- },
- },
CreateDeploymentRequest: {
type: 'object',
@@ -23,10 +14,8 @@ local jobAgentConfig = {
name: { type: 'string' },
slug: { type: 'string' },
description: { type: 'string' },
- jobAgentId: { type: 'string' },
- jobAgentSelector: { type: 'string', description: 'CEL expression to match job agents. Defaults to jobAgent.id == "" if not provided.' },
+ jobAgentSelector: { type: 'string', description: 'CEL expression to match job agents' },
jobAgentConfig: jobAgentConfig,
- jobAgents: { type: 'array', items: openapi.schemaRef('DeploymentJobAgent') },
resourceSelector: { type: 'string', description: 'CEL expression to determine if the deployment should be used' },
metadata: { type: 'object', additionalProperties: { type: 'string' } },
},
@@ -39,10 +28,8 @@ local jobAgentConfig = {
name: { type: 'string' },
slug: { type: 'string' },
description: { type: 'string' },
- jobAgentId: { type: 'string' },
- jobAgentSelector: { type: 'string', description: 'CEL expression to match job agents. Defaults to jobAgent.id == "" if not provided.' },
+ jobAgentSelector: { type: 'string', description: 'CEL expression to match job agents' },
jobAgentConfig: jobAgentConfig,
- jobAgents: { type: 'array', items: openapi.schemaRef('DeploymentJobAgent') },
resourceSelector: { type: 'string', description: 'CEL expression to determine if the deployment should be used' },
metadata: { type: 'object', additionalProperties: { type: 'string' } },
},
@@ -65,10 +52,8 @@ local jobAgentConfig = {
name: { type: 'string' },
slug: { type: 'string' },
description: { type: 'string' },
- jobAgentId: { type: 'string' },
jobAgentSelector: { type: 'string', description: 'CEL expression to match job agents' },
jobAgentConfig: jobAgentConfig,
- jobAgents: { type: 'array', items: openapi.schemaRef('DeploymentJobAgent') },
resourceSelector: { type: 'string', description: 'CEL expression to determine if the deployment should be used' },
metadata: { type: 'object', additionalProperties: { type: 'string' } },
},
diff --git a/apps/api/src/routes/v1/workspaces/deployments.ts b/apps/api/src/routes/v1/workspaces/deployments.ts
index 13eff3a7a..656de5302 100644
--- a/apps/api/src/routes/v1/workspaces/deployments.ts
+++ b/apps/api/src/routes/v1/workspaces/deployments.ts
@@ -1,9 +1,7 @@
import type { AsyncTypedHandler } from "@/types/api.js";
import { ApiError, asyncHandler } from "@/types/api.js";
import { Router } from "express";
-import _ from "lodash";
import { v4 as uuidv4 } from "uuid";
-import { z } from "zod";
import { and, asc, count, desc, eq, inArray, takeFirst } from "@ctrlplane/db";
import { db } from "@ctrlplane/db/client";
@@ -21,22 +19,6 @@ import { listDeploymentVariablesByDeploymentRouter } from "./deployment-variable
const PLAN_TTL_MS = 60 * 60 * 1000;
-const getJobAgentsByDeploymentId = async (
- deploymentIds: string[],
-): Promise }[]>> => {
- if (deploymentIds.length === 0) return {};
- const links = await db
- .select()
- .from(schema.deploymentJobAgent)
- .where(inArray(schema.deploymentJobAgent.deploymentId, deploymentIds));
- return _.chain(links)
- .groupBy((l) => l.deploymentId)
- .mapValues((group) =>
- group.map((l) => ({ ref: l.jobAgentId, config: l.config })),
- )
- .value();
-};
-
const parseSelector = (raw: string | null | undefined): string | undefined => {
if (raw == null || raw === "false") return undefined;
return raw;
@@ -126,14 +108,8 @@ const listDeployments: AsyncTypedHandler<
systemsByDeploymentId.set(link.deploymentId, arr);
}
- const agentsByDeploymentId = await getJobAgentsByDeploymentId(deploymentIds);
const items = deployments.map((dep) => ({
- deployment: {
- ...formatDeployment(dep),
- jobAgents: (agentsByDeploymentId[dep.id] ?? []).map(
- ({ ref, config }) => ({ ref, config }),
- ),
- },
+ deployment: formatDeployment(dep),
systems: (systemsByDeploymentId.get(dep.id) ?? []).map(formatSystem),
}));
@@ -155,8 +131,6 @@ const getDeployment: AsyncTypedHandler<
if (dep == null) throw new ApiError("Deployment not found", 404);
- const agentsByDeploymentId = await getJobAgentsByDeploymentId([deploymentId]);
-
const systemRows = await db
.select({ system: schema.system })
.from(schema.systemDeployment)
@@ -196,12 +170,7 @@ const getDeployment: AsyncTypedHandler<
}
res.status(200).json({
- deployment: {
- ...formatDeployment(dep),
- jobAgents: (agentsByDeploymentId[dep.id] ?? []).map(
- ({ ref, config }) => ({ ref, config }),
- ),
- },
+ deployment: formatDeployment(dep),
systems: systemRows.map((r) => formatSystem(r.system)),
variables: variables.map((v) => ({
variable: {
@@ -234,48 +203,17 @@ const postDeployment: AsyncTypedHandler<
const id = uuidv4();
- const jobAgentId = body.jobAgentId ?? body.jobAgents?.[0]?.ref;
- if (jobAgentId != null && !z.string().uuid().safeParse(jobAgentId).success)
- throw new ApiError("Invalid job agent ID", 400);
-
- const jobAgentConfig =
- body.jobAgentConfig ?? body.jobAgents?.[0]?.config ?? {};
-
await db.insert(schema.deployment).values({
id,
name: body.name,
description: body.description ?? "",
resourceSelector: body.resourceSelector ?? "false",
- jobAgentSelector:
- body.jobAgentSelector ??
- (jobAgentId ? `jobAgent.id == "${jobAgentId}"` : "false"),
- jobAgentConfig,
+ jobAgentSelector: body.jobAgentSelector ?? "false",
+ jobAgentConfig: body.jobAgentConfig ?? {},
metadata: body.metadata ?? {},
workspaceId,
});
- if (jobAgentId)
- await db
- .insert(schema.deploymentJobAgent)
- .values({
- deploymentId: id,
- jobAgentId,
- config: jobAgentConfig,
- })
- .onConflictDoNothing();
-
- if (body.jobAgents != null && body.jobAgents.length > 0)
- await db
- .insert(schema.deploymentJobAgent)
- .values(
- body.jobAgents.map((agent) => ({
- deploymentId: id,
- jobAgentId: agent.ref,
- config: agent.config,
- })),
- )
- .onConflictDoNothing();
-
enqueueReleaseTargetsForDeployment(db, workspaceId, id);
res.status(202).json({ id, message: "Deployment creation requested" });
@@ -291,12 +229,7 @@ const upsertDeployment: AsyncTypedHandler<
const isValid = validResourceSelector(body.resourceSelector);
if (!isValid) throw new ApiError("Invalid resource selector", 400);
- const jobAgentId = body.jobAgentId ?? body.jobAgents?.[0]?.ref;
- if (jobAgentId != null && !z.string().uuid().safeParse(jobAgentId).success)
- throw new ApiError("Invalid job agent ID", 400);
-
- const jobAgentConfig =
- body.jobAgentConfig ?? body.jobAgents?.[0]?.config ?? {};
+ const jobAgentConfig = body.jobAgentConfig ?? {};
await db
.insert(schema.deployment)
@@ -305,9 +238,7 @@ const upsertDeployment: AsyncTypedHandler<
name: body.name,
description: body.description ?? "",
resourceSelector: body.resourceSelector ?? "false",
- jobAgentSelector:
- body.jobAgentSelector ??
- (jobAgentId ? `jobAgent.id == "${jobAgentId}"` : "false"),
+ jobAgentSelector: body.jobAgentSelector ?? "false",
jobAgentConfig,
metadata: body.metadata ?? {},
workspaceId,
@@ -321,50 +252,10 @@ const upsertDeployment: AsyncTypedHandler<
metadata: body.metadata ?? {},
...(body.jobAgentSelector != null
? { jobAgentSelector: body.jobAgentSelector, jobAgentConfig }
- : jobAgentId != null
- ? {
- jobAgentSelector: `jobAgent.id == "${jobAgentId}"`,
- jobAgentConfig,
- }
- : {}),
+ : {}),
},
});
- if (jobAgentId)
- await db
- .insert(schema.deploymentJobAgent)
- .values({
- deploymentId,
- jobAgentId,
- config: jobAgentConfig,
- })
- .onConflictDoUpdate({
- target: [
- schema.deploymentJobAgent.deploymentId,
- schema.deploymentJobAgent.jobAgentId,
- ],
- set: { config: jobAgentConfig },
- });
-
- if (body.jobAgents != null)
- await db.transaction(async (tx) => {
- await tx
- .delete(schema.deploymentJobAgent)
- .where(eq(schema.deploymentJobAgent.deploymentId, deploymentId));
-
- if (body.jobAgents!.length > 0)
- await tx
- .insert(schema.deploymentJobAgent)
- .values(
- body.jobAgents!.map((agent) => ({
- deploymentId,
- jobAgentId: agent.ref,
- config: agent.config,
- })),
- )
- .onConflictDoNothing();
- });
-
enqueueReleaseTargetsForDeployment(db, workspaceId, deploymentId);
res
diff --git a/apps/api/src/types/openapi.ts b/apps/api/src/types/openapi.ts
index 907e01fff..43c14df94 100644
--- a/apps/api/src/types/openapi.ts
+++ b/apps/api/src/types/openapi.ts
@@ -1063,10 +1063,8 @@ export interface components {
jobAgentConfig?: {
[key: string]: unknown;
};
- jobAgentId?: string;
- /** @description CEL expression to match job agents. Defaults to jobAgent.id == "" if not provided. */
+ /** @description CEL expression to match job agents */
jobAgentSelector?: string;
- jobAgents?: components["schemas"]["DeploymentJobAgent"][];
metadata?: {
[key: string]: string;
};
@@ -1223,10 +1221,8 @@ export interface components {
jobAgentConfig: {
[key: string]: unknown;
};
- jobAgentId?: string;
/** @description CEL expression to match job agents */
jobAgentSelector: string;
- jobAgents?: components["schemas"]["DeploymentJobAgent"][];
metadata?: {
[key: string]: string;
};
@@ -1243,12 +1239,6 @@ export interface components {
/** @description CEL expression to match upstream deployment(s) that must have a successful release before this deployment can proceed. */
dependsOn: string;
};
- DeploymentJobAgent: {
- config: components["schemas"]["JobAgentConfig"];
- ref: string;
- /** @description CEL expression to determine if the job agent should be used */
- selector: string;
- };
DeploymentPlan: {
id: string;
/** @enum {string} */
@@ -1961,10 +1951,8 @@ export interface components {
jobAgentConfig?: {
[key: string]: unknown;
};
- jobAgentId?: string;
- /** @description CEL expression to match job agents. Defaults to jobAgent.id == "" if not provided. */
+ /** @description CEL expression to match job agents */
jobAgentSelector?: string;
- jobAgents?: components["schemas"]["DeploymentJobAgent"][];
metadata?: {
[key: string]: string;
};
diff --git a/apps/web/app/routes/ws/deployments/_components/DeploymentProvider.tsx b/apps/web/app/routes/ws/deployments/_components/DeploymentProvider.tsx
index 9c57757ea..5b64fae65 100644
--- a/apps/web/app/routes/ws/deployments/_components/DeploymentProvider.tsx
+++ b/apps/web/app/routes/ws/deployments/_components/DeploymentProvider.tsx
@@ -6,11 +6,8 @@ type Deployment = {
name: string;
resourceSelector?: string | null;
description?: string | null;
- jobAgents: Array<{
- deploymentId: string;
- jobAgentId: string;
- config: Record;
- }>;
+ jobAgentSelector: string;
+ jobAgentConfig: Record | null;
systemDeployments: Array<{
systemId: string;
system: {
diff --git a/apps/web/app/routes/ws/deployments/settings/page.$deploymentId.job-agent.tsx b/apps/web/app/routes/ws/deployments/settings/page.$deploymentId.job-agent.tsx
index d4b03ced4..3c8f6c95a 100644
--- a/apps/web/app/routes/ws/deployments/settings/page.$deploymentId.job-agent.tsx
+++ b/apps/web/app/routes/ws/deployments/settings/page.$deploymentId.job-agent.tsx
@@ -1,6 +1,4 @@
-import { Alert, AlertDescription, AlertTitle } from "~/components/ui/alert";
import { useDeployment } from "../_components/DeploymentProvider";
-import { DeploymentAgentCard } from "./_components/DeploymentAgentCard";
export default function DeploymentJobAgentPage() {
const { deployment } = useDeployment();
@@ -14,27 +12,6 @@ export default function DeploymentJobAgentPage() {
an agent new deployment versions will not take any action.
-
- {deployment.jobAgents.length === 0 && (
-
-
- No job agents configured
-
-
- Job agents are used to dispatch jobs to the correct service. Without
- any agents new deployment versions will not take any action.
-
-
- )}
-
-
- {deployment.jobAgents.map((deploymentAgent) => (
-
- ))}
-
);
}
diff --git a/apps/web/app/routes/ws/runners/JobAgentCard.tsx b/apps/web/app/routes/ws/runners/JobAgentCard.tsx
index 5d9fa44c9..82a61dc03 100644
--- a/apps/web/app/routes/ws/runners/JobAgentCard.tsx
+++ b/apps/web/app/routes/ws/runners/JobAgentCard.tsx
@@ -2,11 +2,8 @@ import type { WorkspaceEngine } from "@ctrlplane/workspace-engine-sdk";
import { SiArgo, SiGithub, SiTerraform } from "@icons-pack/react-simple-icons";
import { PlayIcon } from "lucide-react";
-import { trpc } from "~/api/trpc";
import { ConfigEntry } from "~/components/config-entry";
import { Card, CardContent, CardHeader, CardTitle } from "~/components/ui/card";
-import { useWorkspace } from "~/components/WorkspaceProvider";
-import { Badge } from "../../../components/ui/badge";
import {
ArgoCDConfig,
argoCdJobAgentConfig,
@@ -71,48 +68,6 @@ function ConfigSection({ config, id }: { config: JobAgentConfig; id: string }) {
);
}
-function useAgentDeployments(jobAgentId: string) {
- const { workspace } = useWorkspace();
- const deploymentsQuery = trpc.jobAgents.deployments.useQuery({
- workspaceId: workspace.id,
- jobAgentId,
- });
- const deployments = deploymentsQuery.data ?? [];
-
- return { deployments, isLoading: deploymentsQuery.isLoading };
-}
-
-function DeploymentList({ jobAgentId }: { jobAgentId: string }) {
- const { deployments, isLoading } = useAgentDeployments(jobAgentId);
- const { workspace } = useWorkspace();
- if (isLoading) return Loading...
;
- if (deployments.length === 0)
- return (
-
- No deployments
-
- );
- return (
-
- );
-}
-
function TypeIcon({ config }: { config: JobAgentConfig }) {
const githubParseResult = githubJobAgentConfig.safeParse(config);
if (githubParseResult.success) return ;
@@ -141,7 +96,6 @@ export function JobAgentCard({ jobAgent }: { jobAgent: JobAgent }) {
-
);
diff --git a/apps/workspace-engine/oapi/openapi.json b/apps/workspace-engine/oapi/openapi.json
index a9dfd94b4..784f81d9c 100644
--- a/apps/workspace-engine/oapi/openapi.json
+++ b/apps/workspace-engine/oapi/openapi.json
@@ -232,19 +232,10 @@
"jobAgentConfig": {
"$ref": "#/components/schemas/JobAgentConfig"
},
- "jobAgentId": {
- "type": "string"
- },
"jobAgentSelector": {
"description": "CEL expression to match job agents",
"type": "string"
},
- "jobAgents": {
- "items": {
- "$ref": "#/components/schemas/DeploymentJobAgent"
- },
- "type": "array"
- },
"metadata": {
"additionalProperties": {
"type": "string"
@@ -302,26 +293,6 @@
],
"type": "object"
},
- "DeploymentJobAgent": {
- "properties": {
- "config": {
- "$ref": "#/components/schemas/JobAgentConfig"
- },
- "ref": {
- "type": "string"
- },
- "selector": {
- "description": "CEL expression to determine if the job agent should be used",
- "type": "string"
- }
- },
- "required": [
- "ref",
- "config",
- "selector"
- ],
- "type": "object"
- },
"DeploymentVariable": {
"properties": {
"defaultValue": {
diff --git a/apps/workspace-engine/oapi/spec/schemas/deployments.jsonnet b/apps/workspace-engine/oapi/spec/schemas/deployments.jsonnet
index c68e6af21..9305ea873 100644
--- a/apps/workspace-engine/oapi/spec/schemas/deployments.jsonnet
+++ b/apps/workspace-engine/oapi/spec/schemas/deployments.jsonnet
@@ -9,24 +9,13 @@ local openapi = import '../lib/openapi.libsonnet';
name: { type: 'string' },
slug: { type: 'string' },
description: { type: 'string' },
- jobAgentId: { type: 'string' },
jobAgentSelector: { type: 'string', description: 'CEL expression to match job agents' },
jobAgentConfig: openapi.schemaRef('JobAgentConfig'),
- jobAgents: { type: 'array', items: openapi.schemaRef('DeploymentJobAgent') },
resourceSelector: { type: 'string', description: 'CEL expression to determine if the deployment should be used' },
metadata: { type: 'object', additionalProperties: { type: 'string' } },
},
},
- DeploymentJobAgent: {
- type: 'object',
- required: ['ref', 'config', 'selector'],
- properties: {
- ref: { type: 'string' },
- config: openapi.schemaRef('JobAgentConfig'),
- selector: { type: 'string', description: 'CEL expression to determine if the job agent should be used' },
- },
- },
DeploymentWithVariablesAndSystems: {
type: 'object',
diff --git a/apps/workspace-engine/pkg/db/deployments.sql.go b/apps/workspace-engine/pkg/db/deployments.sql.go
index 64bc8061d..2e7747855 100644
--- a/apps/workspace-engine/pkg/db/deployments.sql.go
+++ b/apps/workspace-engine/pkg/db/deployments.sql.go
@@ -21,15 +21,6 @@ func (q *Queries) DeleteDeployment(ctx context.Context, id uuid.UUID) error {
return err
}
-const deleteDeploymentJobAgents = `-- name: DeleteDeploymentJobAgents :exec
-DELETE FROM deployment_job_agent WHERE deployment_id = $1
-`
-
-func (q *Queries) DeleteDeploymentJobAgents(ctx context.Context, deploymentID uuid.UUID) error {
- _, err := q.db.Exec(ctx, deleteDeploymentJobAgents, deploymentID)
- return err
-}
-
const deleteSystemDeployment = `-- name: DeleteSystemDeployment :exec
DELETE FROM system_deployment WHERE system_id = $1 AND deployment_id = $2
`
@@ -249,24 +240,6 @@ func (q *Queries) UpsertDeployment(ctx context.Context, arg UpsertDeploymentPara
return i, err
}
-const upsertDeploymentJobAgent = `-- name: UpsertDeploymentJobAgent :exec
-INSERT INTO deployment_job_agent (deployment_id, job_agent_id, config)
-VALUES ($1, $2, $3)
-ON CONFLICT (deployment_id, job_agent_id) DO UPDATE
-SET config = EXCLUDED.config
-`
-
-type UpsertDeploymentJobAgentParams struct {
- DeploymentID uuid.UUID
- JobAgentID uuid.UUID
- Config []byte
-}
-
-func (q *Queries) UpsertDeploymentJobAgent(ctx context.Context, arg UpsertDeploymentJobAgentParams) error {
- _, err := q.db.Exec(ctx, upsertDeploymentJobAgent, arg.DeploymentID, arg.JobAgentID, arg.Config)
- return err
-}
-
const upsertSystemDeployment = `-- name: UpsertSystemDeployment :exec
INSERT INTO system_deployment (system_id, deployment_id)
VALUES ($1, $2)
diff --git a/apps/workspace-engine/pkg/db/models.go b/apps/workspace-engine/pkg/db/models.go
index 6cd547c83..df3deeda6 100644
--- a/apps/workspace-engine/pkg/db/models.go
+++ b/apps/workspace-engine/pkg/db/models.go
@@ -334,12 +334,6 @@ type Deployment struct {
WorkspaceID uuid.UUID
}
-type DeploymentJobAgent struct {
- DeploymentID uuid.UUID
- JobAgentID uuid.UUID
- Config []byte
-}
-
type DeploymentPlan struct {
ID uuid.UUID
WorkspaceID uuid.UUID
diff --git a/apps/workspace-engine/pkg/db/queries/deployments.sql b/apps/workspace-engine/pkg/db/queries/deployments.sql
index c1b238f9a..246ddf205 100644
--- a/apps/workspace-engine/pkg/db/queries/deployments.sql
+++ b/apps/workspace-engine/pkg/db/queries/deployments.sql
@@ -45,11 +45,3 @@ SELECT deployment_id FROM system_deployment WHERE system_id = $1;
-- name: DeleteDeployment :exec
DELETE FROM deployment WHERE id = $1;
--- name: UpsertDeploymentJobAgent :exec
-INSERT INTO deployment_job_agent (deployment_id, job_agent_id, config)
-VALUES ($1, $2, $3)
-ON CONFLICT (deployment_id, job_agent_id) DO UPDATE
-SET config = EXCLUDED.config;
-
--- name: DeleteDeploymentJobAgents :exec
-DELETE FROM deployment_job_agent WHERE deployment_id = $1;
diff --git a/apps/workspace-engine/pkg/db/queries/schema.sql b/apps/workspace-engine/pkg/db/queries/schema.sql
index 88cbbeb5a..e1617b97e 100644
--- a/apps/workspace-engine/pkg/db/queries/schema.sql
+++ b/apps/workspace-engine/pkg/db/queries/schema.sql
@@ -24,12 +24,6 @@ CREATE TABLE deployment (
workspace_id UUID REFERENCES workspace(id)
);
-CREATE TABLE deployment_job_agent (
- deployment_id UUID NOT NULL REFERENCES deployment(id) ON DELETE CASCADE,
- job_agent_id UUID NOT NULL REFERENCES job_agent(id) ON DELETE CASCADE,
- config JSONB NOT NULL DEFAULT '{}',
- PRIMARY KEY (deployment_id, job_agent_id)
-);
CREATE TABLE job_agent (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
diff --git a/apps/workspace-engine/pkg/oapi/oapi.gen.go b/apps/workspace-engine/pkg/oapi/oapi.gen.go
index 37e8bff85..885f84d79 100644
--- a/apps/workspace-engine/pkg/oapi/oapi.gen.go
+++ b/apps/workspace-engine/pkg/oapi/oapi.gen.go
@@ -307,13 +307,11 @@ type Deployment struct {
Description *string `json:"description,omitempty"`
Id string `json:"id"`
JobAgentConfig JobAgentConfig `json:"jobAgentConfig"`
- JobAgentId *string `json:"jobAgentId,omitempty"`
// JobAgentSelector CEL expression to match job agents
- JobAgentSelector string `json:"jobAgentSelector"`
- JobAgents *[]DeploymentJobAgent `json:"jobAgents,omitempty"`
- Metadata map[string]string `json:"metadata"`
- Name string `json:"name"`
+ JobAgentSelector string `json:"jobAgentSelector"`
+ Metadata map[string]string `json:"metadata"`
+ Name string `json:"name"`
// ResourceSelector CEL expression to determine if the deployment should be used
ResourceSelector *string `json:"resourceSelector,omitempty"`
@@ -332,15 +330,6 @@ type DeploymentDependencyRule struct {
DependsOn string `json:"dependsOn"`
}
-// DeploymentJobAgent defines model for DeploymentJobAgent.
-type DeploymentJobAgent struct {
- Config JobAgentConfig `json:"config"`
- Ref string `json:"ref"`
-
- // Selector CEL expression to determine if the job agent should be used
- Selector string `json:"selector"`
-}
-
// DeploymentVariable defines model for DeploymentVariable.
type DeploymentVariable struct {
DefaultValue *LiteralValue `json:"defaultValue,omitempty"`
diff --git a/apps/workspace-engine/pkg/selector/langs/cel/cel.go b/apps/workspace-engine/pkg/selector/langs/cel/cel.go
index ae45a2c1c..826305fdb 100644
--- a/apps/workspace-engine/pkg/selector/langs/cel/cel.go
+++ b/apps/workspace-engine/pkg/selector/langs/cel/cel.go
@@ -176,9 +176,6 @@ func deploymentToMap(d *oapi.Deployment) map[string]any {
if d.Description != nil {
m["description"] = *d.Description
}
- if d.JobAgentId != nil {
- m["jobAgentId"] = *d.JobAgentId
- }
if d.ResourceSelector != nil {
m["resourceSelector"] = d.ResourceSelector
}
diff --git a/packages/db/drizzle/0185_steep_scarecrow.sql b/packages/db/drizzle/0185_steep_scarecrow.sql
new file mode 100644
index 000000000..ac4888c66
--- /dev/null
+++ b/packages/db/drizzle/0185_steep_scarecrow.sql
@@ -0,0 +1 @@
+DROP TABLE "deployment_job_agent" CASCADE;
\ No newline at end of file
diff --git a/packages/db/drizzle/meta/0185_snapshot.json b/packages/db/drizzle/meta/0185_snapshot.json
new file mode 100644
index 000000000..72a880e92
--- /dev/null
+++ b/packages/db/drizzle/meta/0185_snapshot.json
@@ -0,0 +1,6423 @@
+{
+ "id": "a69f6421-a6ca-4b0f-b312-39429522d0c6",
+ "prevId": "d3bcd5cd-fda8-4a04-9c3e-d0ecc24a79fc",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "public.account": {
+ "name": "account",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "provider_id": {
+ "name": "provider_id",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "account_id": {
+ "name": "account_id",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "refresh_token": {
+ "name": "refresh_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "access_token": {
+ "name": "access_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "access_token_expires_at": {
+ "name": "access_token_expires_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "refresh_token_expires_at": {
+ "name": "refresh_token_expires_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "scope": {
+ "name": "scope",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "id_token": {
+ "name": "id_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "password": {
+ "name": "password",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "account_userId_idx": {
+ "name": "account_userId_idx",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "account_user_id_user_id_fk": {
+ "name": "account_user_id_user_id_fk",
+ "tableFrom": "account",
+ "tableTo": "user",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.session": {
+ "name": "session",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "session_token": {
+ "name": "session_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "expires": {
+ "name": "expires",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "ip_address": {
+ "name": "ip_address",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "user_agent": {
+ "name": "user_agent",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "session_userId_idx": {
+ "name": "session_userId_idx",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "session_user_id_user_id_fk": {
+ "name": "session_user_id_user_id_fk",
+ "tableFrom": "session",
+ "tableTo": "user",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "session_session_token_unique": {
+ "name": "session_session_token_unique",
+ "nullsNotDistinct": false,
+ "columns": ["session_token"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.user": {
+ "name": "user",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "email": {
+ "name": "email",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "email_verified": {
+ "name": "email_verified",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "image": {
+ "name": "image",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "active_workspace_id": {
+ "name": "active_workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "null"
+ },
+ "password_hash": {
+ "name": "password_hash",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "null"
+ },
+ "system_role": {
+ "name": "system_role",
+ "type": "system_role",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'user'"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "user_active_workspace_id_workspace_id_fk": {
+ "name": "user_active_workspace_id_workspace_id_fk",
+ "tableFrom": "user",
+ "tableTo": "workspace",
+ "columnsFrom": ["active_workspace_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.user_api_key": {
+ "name": "user_api_key",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "key_preview": {
+ "name": "key_preview",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "key_hash": {
+ "name": "key_hash",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "key_prefix": {
+ "name": "key_prefix",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "user_api_key_key_prefix_key_hash_index": {
+ "name": "user_api_key_key_prefix_key_hash_index",
+ "columns": [
+ {
+ "expression": "key_prefix",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "key_hash",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "user_api_key_user_id_user_id_fk": {
+ "name": "user_api_key_user_id_user_id_fk",
+ "tableFrom": "user_api_key",
+ "tableTo": "user",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.verification": {
+ "name": "verification",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "identifier": {
+ "name": "identifier",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "value": {
+ "name": "value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "verification_identifier_idx": {
+ "name": "verification_identifier_idx",
+ "columns": [
+ {
+ "expression": "identifier",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.changelog_entry": {
+ "name": "changelog_entry",
+ "schema": "",
+ "columns": {
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "entity_type": {
+ "name": "entity_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "entity_id": {
+ "name": "entity_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "entity_data": {
+ "name": "entity_data",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "changelog_entry_workspace_id_workspace_id_fk": {
+ "name": "changelog_entry_workspace_id_workspace_id_fk",
+ "tableFrom": "changelog_entry",
+ "tableTo": "workspace",
+ "columnsFrom": ["workspace_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "changelog_entry_workspace_id_entity_type_entity_id_pk": {
+ "name": "changelog_entry_workspace_id_entity_type_entity_id_pk",
+ "columns": ["workspace_id", "entity_type", "entity_id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.dashboard": {
+ "name": "dashboard",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "dashboard_workspace_id_workspace_id_fk": {
+ "name": "dashboard_workspace_id_workspace_id_fk",
+ "tableFrom": "dashboard",
+ "tableTo": "workspace",
+ "columnsFrom": ["workspace_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.dashboard_widget": {
+ "name": "dashboard_widget",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "dashboard_id": {
+ "name": "dashboard_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "widget": {
+ "name": "widget",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "config": {
+ "name": "config",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'::jsonb"
+ },
+ "x": {
+ "name": "x",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "y": {
+ "name": "y",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "w": {
+ "name": "w",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "h": {
+ "name": "h",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "dashboard_widget_dashboard_id_dashboard_id_fk": {
+ "name": "dashboard_widget_dashboard_id_dashboard_id_fk",
+ "tableFrom": "dashboard_widget",
+ "tableTo": "dashboard",
+ "columnsFrom": ["dashboard_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.deployment_plan": {
+ "name": "deployment_plan",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "deployment_id": {
+ "name": "deployment_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "version_tag": {
+ "name": "version_tag",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "version_name": {
+ "name": "version_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "version_config": {
+ "name": "version_config",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'"
+ },
+ "version_job_agent_config": {
+ "name": "version_job_agent_config",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'"
+ },
+ "version_metadata": {
+ "name": "version_metadata",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'"
+ },
+ "metadata": {
+ "name": "metadata",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "completed_at": {
+ "name": "completed_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "deployment_plan_workspace_id_index": {
+ "name": "deployment_plan_workspace_id_index",
+ "columns": [
+ {
+ "expression": "workspace_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "deployment_plan_deployment_id_index": {
+ "name": "deployment_plan_deployment_id_index",
+ "columns": [
+ {
+ "expression": "deployment_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "deployment_plan_expires_at_index": {
+ "name": "deployment_plan_expires_at_index",
+ "columns": [
+ {
+ "expression": "expires_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "deployment_plan_workspace_id_workspace_id_fk": {
+ "name": "deployment_plan_workspace_id_workspace_id_fk",
+ "tableFrom": "deployment_plan",
+ "tableTo": "workspace",
+ "columnsFrom": ["workspace_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "deployment_plan_deployment_id_deployment_id_fk": {
+ "name": "deployment_plan_deployment_id_deployment_id_fk",
+ "tableFrom": "deployment_plan",
+ "tableTo": "deployment",
+ "columnsFrom": ["deployment_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.deployment_plan_target": {
+ "name": "deployment_plan_target",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "plan_id": {
+ "name": "plan_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "environment_id": {
+ "name": "environment_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "resource_id": {
+ "name": "resource_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "current_release_id": {
+ "name": "current_release_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "deployment_plan_target_plan_id_index": {
+ "name": "deployment_plan_target_plan_id_index",
+ "columns": [
+ {
+ "expression": "plan_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "deployment_plan_target_plan_id_environment_id_resource_id_index": {
+ "name": "deployment_plan_target_plan_id_environment_id_resource_id_index",
+ "columns": [
+ {
+ "expression": "plan_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "environment_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "resource_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "deployment_plan_target_plan_id_deployment_plan_id_fk": {
+ "name": "deployment_plan_target_plan_id_deployment_plan_id_fk",
+ "tableFrom": "deployment_plan_target",
+ "tableTo": "deployment_plan",
+ "columnsFrom": ["plan_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "deployment_plan_target_environment_id_environment_id_fk": {
+ "name": "deployment_plan_target_environment_id_environment_id_fk",
+ "tableFrom": "deployment_plan_target",
+ "tableTo": "environment",
+ "columnsFrom": ["environment_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "deployment_plan_target_resource_id_resource_id_fk": {
+ "name": "deployment_plan_target_resource_id_resource_id_fk",
+ "tableFrom": "deployment_plan_target",
+ "tableTo": "resource",
+ "columnsFrom": ["resource_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "deployment_plan_target_current_release_id_release_id_fk": {
+ "name": "deployment_plan_target_current_release_id_release_id_fk",
+ "tableFrom": "deployment_plan_target",
+ "tableTo": "release",
+ "columnsFrom": ["current_release_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.deployment_plan_target_result": {
+ "name": "deployment_plan_target_result",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "target_id": {
+ "name": "target_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "dispatch_context": {
+ "name": "dispatch_context",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "agent_state": {
+ "name": "agent_state",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "status": {
+ "name": "status",
+ "type": "deployment_plan_target_status",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'computing'"
+ },
+ "has_changes": {
+ "name": "has_changes",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "content_hash": {
+ "name": "content_hash",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "current": {
+ "name": "current",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "proposed": {
+ "name": "proposed",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "message": {
+ "name": "message",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "started_at": {
+ "name": "started_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "completed_at": {
+ "name": "completed_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "deployment_plan_target_result_target_id_index": {
+ "name": "deployment_plan_target_result_target_id_index",
+ "columns": [
+ {
+ "expression": "target_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "deployment_plan_target_result_target_id_deployment_plan_target_id_fk": {
+ "name": "deployment_plan_target_result_target_id_deployment_plan_target_id_fk",
+ "tableFrom": "deployment_plan_target_result",
+ "tableTo": "deployment_plan_target",
+ "columnsFrom": ["target_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.deployment_plan_target_variable": {
+ "name": "deployment_plan_target_variable",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "target_id": {
+ "name": "target_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "key": {
+ "name": "key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "value": {
+ "name": "value",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "encrypted": {
+ "name": "encrypted",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ }
+ },
+ "indexes": {
+ "deployment_plan_target_variable_target_id_key_index": {
+ "name": "deployment_plan_target_variable_target_id_key_index",
+ "columns": [
+ {
+ "expression": "target_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "deployment_plan_target_variable_target_id_deployment_plan_target_id_fk": {
+ "name": "deployment_plan_target_variable_target_id_deployment_plan_target_id_fk",
+ "tableFrom": "deployment_plan_target_variable",
+ "tableTo": "deployment_plan_target",
+ "columnsFrom": ["target_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.deployment_trace_span": {
+ "name": "deployment_trace_span",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "trace_id": {
+ "name": "trace_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "span_id": {
+ "name": "span_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "parent_span_id": {
+ "name": "parent_span_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "start_time": {
+ "name": "start_time",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "end_time": {
+ "name": "end_time",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "release_target_key": {
+ "name": "release_target_key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "release_id": {
+ "name": "release_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "job_id": {
+ "name": "job_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "parent_trace_id": {
+ "name": "parent_trace_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "phase": {
+ "name": "phase",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "node_type": {
+ "name": "node_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "depth": {
+ "name": "depth",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "sequence": {
+ "name": "sequence",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "attributes": {
+ "name": "attributes",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "events": {
+ "name": "events",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "deployment_trace_span_trace_span_idx": {
+ "name": "deployment_trace_span_trace_span_idx",
+ "columns": [
+ {
+ "expression": "trace_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "span_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "deployment_trace_span_trace_id_idx": {
+ "name": "deployment_trace_span_trace_id_idx",
+ "columns": [
+ {
+ "expression": "trace_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "deployment_trace_span_parent_span_id_idx": {
+ "name": "deployment_trace_span_parent_span_id_idx",
+ "columns": [
+ {
+ "expression": "parent_span_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "deployment_trace_span_workspace_id_idx": {
+ "name": "deployment_trace_span_workspace_id_idx",
+ "columns": [
+ {
+ "expression": "workspace_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "deployment_trace_span_release_target_key_idx": {
+ "name": "deployment_trace_span_release_target_key_idx",
+ "columns": [
+ {
+ "expression": "release_target_key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "deployment_trace_span_release_id_idx": {
+ "name": "deployment_trace_span_release_id_idx",
+ "columns": [
+ {
+ "expression": "release_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "deployment_trace_span_job_id_idx": {
+ "name": "deployment_trace_span_job_id_idx",
+ "columns": [
+ {
+ "expression": "job_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "deployment_trace_span_parent_trace_id_idx": {
+ "name": "deployment_trace_span_parent_trace_id_idx",
+ "columns": [
+ {
+ "expression": "parent_trace_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "deployment_trace_span_created_at_idx": {
+ "name": "deployment_trace_span_created_at_idx",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "deployment_trace_span_phase_idx": {
+ "name": "deployment_trace_span_phase_idx",
+ "columns": [
+ {
+ "expression": "phase",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "deployment_trace_span_node_type_idx": {
+ "name": "deployment_trace_span_node_type_idx",
+ "columns": [
+ {
+ "expression": "node_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "deployment_trace_span_status_idx": {
+ "name": "deployment_trace_span_status_idx",
+ "columns": [
+ {
+ "expression": "status",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "deployment_trace_span_workspace_id_workspace_id_fk": {
+ "name": "deployment_trace_span_workspace_id_workspace_id_fk",
+ "tableFrom": "deployment_trace_span",
+ "tableTo": "workspace",
+ "columnsFrom": ["workspace_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.deployment_variable": {
+ "name": "deployment_variable",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "deployment_id": {
+ "name": "deployment_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "key": {
+ "name": "key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "default_value": {
+ "name": "default_value",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "deployment_variable_deployment_id_index": {
+ "name": "deployment_variable_deployment_id_index",
+ "columns": [
+ {
+ "expression": "deployment_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "deployment_variable_deployment_id_deployment_id_fk": {
+ "name": "deployment_variable_deployment_id_deployment_id_fk",
+ "tableFrom": "deployment_variable",
+ "tableTo": "deployment",
+ "columnsFrom": ["deployment_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "deployment_variable_deployment_id_key_unique": {
+ "name": "deployment_variable_deployment_id_key_unique",
+ "nullsNotDistinct": false,
+ "columns": ["deployment_id", "key"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.deployment_variable_value": {
+ "name": "deployment_variable_value",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "deployment_variable_id": {
+ "name": "deployment_variable_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "value": {
+ "name": "value",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "resource_selector": {
+ "name": "resource_selector",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "priority": {
+ "name": "priority",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ }
+ },
+ "indexes": {
+ "deployment_variable_value_deployment_variable_id_index": {
+ "name": "deployment_variable_value_deployment_variable_id_index",
+ "columns": [
+ {
+ "expression": "deployment_variable_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "deployment_variable_value_deployment_variable_id_deployment_variable_id_fk": {
+ "name": "deployment_variable_value_deployment_variable_id_deployment_variable_id_fk",
+ "tableFrom": "deployment_variable_value",
+ "tableTo": "deployment_variable",
+ "columnsFrom": ["deployment_variable_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.deployment_version": {
+ "name": "deployment_version",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "tag": {
+ "name": "tag",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "config": {
+ "name": "config",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'"
+ },
+ "job_agent_config": {
+ "name": "job_agent_config",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'"
+ },
+ "deployment_id": {
+ "name": "deployment_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "status": {
+ "name": "status",
+ "type": "deployment_version_status",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'ready'"
+ },
+ "message": {
+ "name": "message",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp (3) with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "metadata": {
+ "name": "metadata",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'"
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "deployment_version_deployment_id_tag_index": {
+ "name": "deployment_version_deployment_id_tag_index",
+ "columns": [
+ {
+ "expression": "deployment_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "tag",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "deployment_version_created_at_idx": {
+ "name": "deployment_version_created_at_idx",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "deployment_version_workspace_id_workspace_id_fk": {
+ "name": "deployment_version_workspace_id_workspace_id_fk",
+ "tableFrom": "deployment_version",
+ "tableTo": "workspace",
+ "columnsFrom": ["workspace_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.computed_deployment_resource": {
+ "name": "computed_deployment_resource",
+ "schema": "",
+ "columns": {
+ "deployment_id": {
+ "name": "deployment_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "resource_id": {
+ "name": "resource_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "last_evaluated_at": {
+ "name": "last_evaluated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "computed_deployment_resource_deployment_id_deployment_id_fk": {
+ "name": "computed_deployment_resource_deployment_id_deployment_id_fk",
+ "tableFrom": "computed_deployment_resource",
+ "tableTo": "deployment",
+ "columnsFrom": ["deployment_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "computed_deployment_resource_resource_id_resource_id_fk": {
+ "name": "computed_deployment_resource_resource_id_resource_id_fk",
+ "tableFrom": "computed_deployment_resource",
+ "tableTo": "resource",
+ "columnsFrom": ["resource_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "computed_deployment_resource_deployment_id_resource_id_pk": {
+ "name": "computed_deployment_resource_deployment_id_resource_id_pk",
+ "columns": ["deployment_id", "resource_id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.deployment": {
+ "name": "deployment",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "resource_selector": {
+ "name": "resource_selector",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'false'"
+ },
+ "job_agent_selector": {
+ "name": "job_agent_selector",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'false'"
+ },
+ "job_agent_config": {
+ "name": "job_agent_config",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'{}'"
+ },
+ "metadata": {
+ "name": "metadata",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'"
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "deployment_workspace_id_index": {
+ "name": "deployment_workspace_id_index",
+ "columns": [
+ {
+ "expression": "workspace_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "deployment_workspace_id_workspace_id_fk": {
+ "name": "deployment_workspace_id_workspace_id_fk",
+ "tableFrom": "deployment",
+ "tableTo": "workspace",
+ "columnsFrom": ["workspace_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.computed_environment_resource": {
+ "name": "computed_environment_resource",
+ "schema": "",
+ "columns": {
+ "environment_id": {
+ "name": "environment_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "resource_id": {
+ "name": "resource_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "last_evaluated_at": {
+ "name": "last_evaluated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "computed_environment_resource_environment_id_environment_id_fk": {
+ "name": "computed_environment_resource_environment_id_environment_id_fk",
+ "tableFrom": "computed_environment_resource",
+ "tableTo": "environment",
+ "columnsFrom": ["environment_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "computed_environment_resource_resource_id_resource_id_fk": {
+ "name": "computed_environment_resource_resource_id_resource_id_fk",
+ "tableFrom": "computed_environment_resource",
+ "tableTo": "resource",
+ "columnsFrom": ["resource_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "computed_environment_resource_environment_id_resource_id_pk": {
+ "name": "computed_environment_resource_environment_id_resource_id_pk",
+ "columns": ["environment_id", "resource_id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.environment": {
+ "name": "environment",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "''"
+ },
+ "resource_selector": {
+ "name": "resource_selector",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'false'"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "metadata": {
+ "name": "metadata",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'"
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "environment_workspace_id_index": {
+ "name": "environment_workspace_id_index",
+ "columns": [
+ {
+ "expression": "workspace_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "environment_workspace_id_workspace_id_fk": {
+ "name": "environment_workspace_id_workspace_id_fk",
+ "tableFrom": "environment",
+ "tableTo": "workspace",
+ "columnsFrom": ["workspace_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.event": {
+ "name": "event",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "action": {
+ "name": "action",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "payload": {
+ "name": "payload",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "event_workspace_id_workspace_id_fk": {
+ "name": "event_workspace_id_workspace_id_fk",
+ "tableFrom": "event",
+ "tableTo": "workspace",
+ "columnsFrom": ["workspace_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.resource": {
+ "name": "resource",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "version": {
+ "name": "version",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "kind": {
+ "name": "kind",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "identifier": {
+ "name": "identifier",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "provider_id": {
+ "name": "provider_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "config": {
+ "name": "config",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "metadata": {
+ "name": "metadata",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'{}'"
+ },
+ "deleted_at": {
+ "name": "deleted_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "resource_identifier_workspace_id_index": {
+ "name": "resource_identifier_workspace_id_index",
+ "columns": [
+ {
+ "expression": "identifier",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "workspace_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "resource_workspace_id_active_idx": {
+ "name": "resource_workspace_id_active_idx",
+ "columns": [
+ {
+ "expression": "workspace_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "resource_workspace_id_deleted_at_index": {
+ "name": "resource_workspace_id_deleted_at_index",
+ "columns": [
+ {
+ "expression": "workspace_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "deleted_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "resource_provider_id_resource_provider_id_fk": {
+ "name": "resource_provider_id_resource_provider_id_fk",
+ "tableFrom": "resource",
+ "tableTo": "resource_provider",
+ "columnsFrom": ["provider_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ },
+ "resource_workspace_id_workspace_id_fk": {
+ "name": "resource_workspace_id_workspace_id_fk",
+ "tableFrom": "resource",
+ "tableTo": "workspace",
+ "columnsFrom": ["workspace_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.resource_aggregate": {
+ "name": "resource_aggregate",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_by": {
+ "name": "created_by",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "filter": {
+ "name": "filter",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'true'"
+ },
+ "group_by": {
+ "name": "group_by",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "resource_aggregate_workspace_id_index": {
+ "name": "resource_aggregate_workspace_id_index",
+ "columns": [
+ {
+ "expression": "workspace_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "resource_aggregate_workspace_id_workspace_id_fk": {
+ "name": "resource_aggregate_workspace_id_workspace_id_fk",
+ "tableFrom": "resource_aggregate",
+ "tableTo": "workspace",
+ "columnsFrom": ["workspace_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "resource_aggregate_created_by_user_id_fk": {
+ "name": "resource_aggregate_created_by_user_id_fk",
+ "tableFrom": "resource_aggregate",
+ "tableTo": "user",
+ "columnsFrom": ["created_by"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.resource_schema": {
+ "name": "resource_schema",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "version": {
+ "name": "version",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "kind": {
+ "name": "kind",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "json_schema": {
+ "name": "json_schema",
+ "type": "json",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "resource_schema_version_kind_workspace_id_index": {
+ "name": "resource_schema_version_kind_workspace_id_index",
+ "columns": [
+ {
+ "expression": "version",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "kind",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "workspace_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "resource_schema_workspace_id_workspace_id_fk": {
+ "name": "resource_schema_workspace_id_workspace_id_fk",
+ "tableFrom": "resource_schema",
+ "tableTo": "workspace",
+ "columnsFrom": ["workspace_id"],
+ "columnsTo": ["id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.resource_provider": {
+ "name": "resource_provider",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "metadata": {
+ "name": "metadata",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'"
+ }
+ },
+ "indexes": {
+ "resource_provider_workspace_id_name_index": {
+ "name": "resource_provider_workspace_id_name_index",
+ "columns": [
+ {
+ "expression": "workspace_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "name",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "resource_provider_workspace_id_workspace_id_fk": {
+ "name": "resource_provider_workspace_id_workspace_id_fk",
+ "tableFrom": "resource_provider",
+ "tableTo": "workspace",
+ "columnsFrom": ["workspace_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.system": {
+ "name": "system",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "metadata": {
+ "name": "metadata",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'"
+ }
+ },
+ "indexes": {
+ "system_workspace_id_index": {
+ "name": "system_workspace_id_index",
+ "columns": [
+ {
+ "expression": "workspace_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "system_workspace_id_workspace_id_fk": {
+ "name": "system_workspace_id_workspace_id_fk",
+ "tableFrom": "system",
+ "tableTo": "workspace",
+ "columnsFrom": ["workspace_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.system_deployment": {
+ "name": "system_deployment",
+ "schema": "",
+ "columns": {
+ "system_id": {
+ "name": "system_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "deployment_id": {
+ "name": "deployment_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "system_deployment_system_id_system_id_fk": {
+ "name": "system_deployment_system_id_system_id_fk",
+ "tableFrom": "system_deployment",
+ "tableTo": "system",
+ "columnsFrom": ["system_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "system_deployment_deployment_id_deployment_id_fk": {
+ "name": "system_deployment_deployment_id_deployment_id_fk",
+ "tableFrom": "system_deployment",
+ "tableTo": "deployment",
+ "columnsFrom": ["deployment_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "system_deployment_system_id_deployment_id_pk": {
+ "name": "system_deployment_system_id_deployment_id_pk",
+ "columns": ["system_id", "deployment_id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.system_environment": {
+ "name": "system_environment",
+ "schema": "",
+ "columns": {
+ "system_id": {
+ "name": "system_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "environment_id": {
+ "name": "environment_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "system_environment_system_id_system_id_fk": {
+ "name": "system_environment_system_id_system_id_fk",
+ "tableFrom": "system_environment",
+ "tableTo": "system",
+ "columnsFrom": ["system_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "system_environment_environment_id_environment_id_fk": {
+ "name": "system_environment_environment_id_environment_id_fk",
+ "tableFrom": "system_environment",
+ "tableTo": "environment",
+ "columnsFrom": ["environment_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "system_environment_system_id_environment_id_pk": {
+ "name": "system_environment_system_id_environment_id_pk",
+ "columns": ["system_id", "environment_id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.team": {
+ "name": "team",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "text": {
+ "name": "text",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "team_workspace_id_workspace_id_fk": {
+ "name": "team_workspace_id_workspace_id_fk",
+ "tableFrom": "team",
+ "tableTo": "workspace",
+ "columnsFrom": ["workspace_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.team_member": {
+ "name": "team_member",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "team_id": {
+ "name": "team_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "team_member_team_id_user_id_index": {
+ "name": "team_member_team_id_user_id_index",
+ "columns": [
+ {
+ "expression": "team_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "team_member_team_id_team_id_fk": {
+ "name": "team_member_team_id_team_id_fk",
+ "tableFrom": "team_member",
+ "tableTo": "team",
+ "columnsFrom": ["team_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "team_member_user_id_user_id_fk": {
+ "name": "team_member_user_id_user_id_fk",
+ "tableFrom": "team_member",
+ "tableTo": "user",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.job": {
+ "name": "job",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "job_agent_id": {
+ "name": "job_agent_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "job_agent_config": {
+ "name": "job_agent_config",
+ "type": "json",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'"
+ },
+ "external_id": {
+ "name": "external_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "trace_token": {
+ "name": "trace_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "dispatch_context": {
+ "name": "dispatch_context",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'"
+ },
+ "status": {
+ "name": "status",
+ "type": "job_status",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'pending'"
+ },
+ "message": {
+ "name": "message",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "reason": {
+ "name": "reason",
+ "type": "job_reason",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'policy_passing'"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "started_at": {
+ "name": "started_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "completed_at": {
+ "name": "completed_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "job_created_at_idx": {
+ "name": "job_created_at_idx",
+ "columns": [
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "job_status_idx": {
+ "name": "job_status_idx",
+ "columns": [
+ {
+ "expression": "status",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "job_external_id_idx": {
+ "name": "job_external_id_idx",
+ "columns": [
+ {
+ "expression": "external_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "job_job_agent_id_job_agent_id_fk": {
+ "name": "job_job_agent_id_job_agent_id_fk",
+ "tableFrom": "job",
+ "tableTo": "job_agent",
+ "columnsFrom": ["job_agent_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.job_metadata": {
+ "name": "job_metadata",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "job_id": {
+ "name": "job_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "key": {
+ "name": "key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "value": {
+ "name": "value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "job_metadata_key_job_id_index": {
+ "name": "job_metadata_key_job_id_index",
+ "columns": [
+ {
+ "expression": "key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "job_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "job_metadata_job_id_idx": {
+ "name": "job_metadata_job_id_idx",
+ "columns": [
+ {
+ "expression": "job_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "job_metadata_job_id_job_id_fk": {
+ "name": "job_metadata_job_id_job_id_fk",
+ "tableFrom": "job_metadata",
+ "tableTo": "job",
+ "columnsFrom": ["job_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.job_variable": {
+ "name": "job_variable",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "job_id": {
+ "name": "job_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "key": {
+ "name": "key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "value": {
+ "name": "value",
+ "type": "json",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "sensitive": {
+ "name": "sensitive",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ }
+ },
+ "indexes": {
+ "job_variable_job_id_key_index": {
+ "name": "job_variable_job_id_key_index",
+ "columns": [
+ {
+ "expression": "job_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "job_variable_job_id_job_id_fk": {
+ "name": "job_variable_job_id_job_id_fk",
+ "tableFrom": "job_variable",
+ "tableTo": "job",
+ "columnsFrom": ["job_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.workspace": {
+ "name": "workspace",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "slug": {
+ "name": "slug",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "workspace_slug_unique": {
+ "name": "workspace_slug_unique",
+ "nullsNotDistinct": false,
+ "columns": ["slug"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.workspace_email_domain_matching": {
+ "name": "workspace_email_domain_matching",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "domain": {
+ "name": "domain",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "role_id": {
+ "name": "role_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "verified": {
+ "name": "verified",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "verification_code": {
+ "name": "verification_code",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "verification_email": {
+ "name": "verification_email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "workspace_email_domain_matching_workspace_id_domain_index": {
+ "name": "workspace_email_domain_matching_workspace_id_domain_index",
+ "columns": [
+ {
+ "expression": "workspace_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "domain",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "workspace_email_domain_matching_workspace_id_workspace_id_fk": {
+ "name": "workspace_email_domain_matching_workspace_id_workspace_id_fk",
+ "tableFrom": "workspace_email_domain_matching",
+ "tableTo": "workspace",
+ "columnsFrom": ["workspace_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "workspace_email_domain_matching_role_id_role_id_fk": {
+ "name": "workspace_email_domain_matching_role_id_role_id_fk",
+ "tableFrom": "workspace_email_domain_matching",
+ "tableTo": "role",
+ "columnsFrom": ["role_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.workspace_invite_token": {
+ "name": "workspace_invite_token",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "role_id": {
+ "name": "role_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_by": {
+ "name": "created_by",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "token": {
+ "name": "token",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "workspace_invite_token_role_id_role_id_fk": {
+ "name": "workspace_invite_token_role_id_role_id_fk",
+ "tableFrom": "workspace_invite_token",
+ "tableTo": "role",
+ "columnsFrom": ["role_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "workspace_invite_token_workspace_id_workspace_id_fk": {
+ "name": "workspace_invite_token_workspace_id_workspace_id_fk",
+ "tableFrom": "workspace_invite_token",
+ "tableTo": "workspace",
+ "columnsFrom": ["workspace_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "workspace_invite_token_created_by_user_id_fk": {
+ "name": "workspace_invite_token_created_by_user_id_fk",
+ "tableFrom": "workspace_invite_token",
+ "tableTo": "user",
+ "columnsFrom": ["created_by"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "workspace_invite_token_token_unique": {
+ "name": "workspace_invite_token_token_unique",
+ "nullsNotDistinct": false,
+ "columns": ["token"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.entity_role": {
+ "name": "entity_role",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "role_id": {
+ "name": "role_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "entity_type": {
+ "name": "entity_type",
+ "type": "entity_type",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "entity_id": {
+ "name": "entity_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "scope_id": {
+ "name": "scope_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "scope_type": {
+ "name": "scope_type",
+ "type": "scope_type",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "entity_role_role_id_entity_type_entity_id_scope_id_scope_type_index": {
+ "name": "entity_role_role_id_entity_type_entity_id_scope_id_scope_type_index",
+ "columns": [
+ {
+ "expression": "role_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "entity_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "entity_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "scope_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "scope_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "entity_role_role_id_role_id_fk": {
+ "name": "entity_role_role_id_role_id_fk",
+ "tableFrom": "entity_role",
+ "tableTo": "role",
+ "columnsFrom": ["role_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.role": {
+ "name": "role",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "role_workspace_id_workspace_id_fk": {
+ "name": "role_workspace_id_workspace_id_fk",
+ "tableFrom": "role",
+ "tableTo": "workspace",
+ "columnsFrom": ["workspace_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.role_permission": {
+ "name": "role_permission",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "role_id": {
+ "name": "role_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "permission": {
+ "name": "permission",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "role_permission_role_id_permission_index": {
+ "name": "role_permission_role_id_permission_index",
+ "columns": [
+ {
+ "expression": "role_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "permission",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "role_permission_role_id_role_id_fk": {
+ "name": "role_permission_role_id_role_id_fk",
+ "tableFrom": "role_permission",
+ "tableTo": "role",
+ "columnsFrom": ["role_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.release": {
+ "name": "release",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "resource_id": {
+ "name": "resource_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "environment_id": {
+ "name": "environment_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "deployment_id": {
+ "name": "deployment_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "version_id": {
+ "name": "version_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "release_resource_id_environment_id_deployment_id_index": {
+ "name": "release_resource_id_environment_id_deployment_id_index",
+ "columns": [
+ {
+ "expression": "resource_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "environment_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "deployment_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "release_deployment_id_index": {
+ "name": "release_deployment_id_index",
+ "columns": [
+ {
+ "expression": "deployment_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "release_resource_id_resource_id_fk": {
+ "name": "release_resource_id_resource_id_fk",
+ "tableFrom": "release",
+ "tableTo": "resource",
+ "columnsFrom": ["resource_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "release_environment_id_environment_id_fk": {
+ "name": "release_environment_id_environment_id_fk",
+ "tableFrom": "release",
+ "tableTo": "environment",
+ "columnsFrom": ["environment_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "release_deployment_id_deployment_id_fk": {
+ "name": "release_deployment_id_deployment_id_fk",
+ "tableFrom": "release",
+ "tableTo": "deployment",
+ "columnsFrom": ["deployment_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "release_version_id_deployment_version_id_fk": {
+ "name": "release_version_id_deployment_version_id_fk",
+ "tableFrom": "release",
+ "tableTo": "deployment_version",
+ "columnsFrom": ["version_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.release_job": {
+ "name": "release_job",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "job_id": {
+ "name": "job_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "release_id": {
+ "name": "release_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "release_job_release_id_job_id_index": {
+ "name": "release_job_release_id_job_id_index",
+ "columns": [
+ {
+ "expression": "release_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "job_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "release_job_job_id_index": {
+ "name": "release_job_job_id_index",
+ "columns": [
+ {
+ "expression": "job_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "release_job_release_id_index": {
+ "name": "release_job_release_id_index",
+ "columns": [
+ {
+ "expression": "release_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "release_job_job_id_job_id_fk": {
+ "name": "release_job_job_id_job_id_fk",
+ "tableFrom": "release_job",
+ "tableTo": "job",
+ "columnsFrom": ["job_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "release_job_release_id_release_id_fk": {
+ "name": "release_job_release_id_release_id_fk",
+ "tableFrom": "release_job",
+ "tableTo": "release",
+ "columnsFrom": ["release_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.release_target_desired_release": {
+ "name": "release_target_desired_release",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "resource_id": {
+ "name": "resource_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "environment_id": {
+ "name": "environment_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "deployment_id": {
+ "name": "deployment_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "desired_release_id": {
+ "name": "desired_release_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "release_target_desired_release_resource_id_environment_id_deployment_id_index": {
+ "name": "release_target_desired_release_resource_id_environment_id_deployment_id_index",
+ "columns": [
+ {
+ "expression": "resource_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "environment_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "deployment_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "release_target_desired_release_resource_id_resource_id_fk": {
+ "name": "release_target_desired_release_resource_id_resource_id_fk",
+ "tableFrom": "release_target_desired_release",
+ "tableTo": "resource",
+ "columnsFrom": ["resource_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "release_target_desired_release_environment_id_environment_id_fk": {
+ "name": "release_target_desired_release_environment_id_environment_id_fk",
+ "tableFrom": "release_target_desired_release",
+ "tableTo": "environment",
+ "columnsFrom": ["environment_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "release_target_desired_release_deployment_id_deployment_id_fk": {
+ "name": "release_target_desired_release_deployment_id_deployment_id_fk",
+ "tableFrom": "release_target_desired_release",
+ "tableTo": "deployment",
+ "columnsFrom": ["deployment_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "release_target_desired_release_desired_release_id_release_id_fk": {
+ "name": "release_target_desired_release_desired_release_id_release_id_fk",
+ "tableFrom": "release_target_desired_release",
+ "tableTo": "release",
+ "columnsFrom": ["desired_release_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.release_variable": {
+ "name": "release_variable",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "release_id": {
+ "name": "release_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "key": {
+ "name": "key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "value": {
+ "name": "value",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "encrypted": {
+ "name": "encrypted",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "release_variable_release_id_key_index": {
+ "name": "release_variable_release_id_key_index",
+ "columns": [
+ {
+ "expression": "release_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "key",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "release_variable_release_id_release_id_fk": {
+ "name": "release_variable_release_id_release_id_fk",
+ "tableFrom": "release_variable",
+ "tableTo": "release",
+ "columnsFrom": ["release_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.reconcile_work_scope": {
+ "name": "reconcile_work_scope",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "bigint",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "byDefault",
+ "name": "reconcile_work_scope_id_seq",
+ "schema": "public",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "9223372036854775807",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "kind": {
+ "name": "kind",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "scope_type": {
+ "name": "scope_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "scope_id": {
+ "name": "scope_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "event_ts": {
+ "name": "event_ts",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "priority": {
+ "name": "priority",
+ "type": "smallint",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 100
+ },
+ "not_before": {
+ "name": "not_before",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "attempt_count": {
+ "name": "attempt_count",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "last_error": {
+ "name": "last_error",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "claimed_by": {
+ "name": "claimed_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "claimed_until": {
+ "name": "claimed_until",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "reconcile_work_scope_workspace_id_kind_scope_type_scope_id_index": {
+ "name": "reconcile_work_scope_workspace_id_kind_scope_type_scope_id_index",
+ "columns": [
+ {
+ "expression": "workspace_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "kind",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "scope_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "scope_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "reconcile_work_scope_unclaimed_idx": {
+ "name": "reconcile_work_scope_unclaimed_idx",
+ "columns": [
+ {
+ "expression": "kind",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "priority",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "event_ts",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"reconcile_work_scope\".\"claimed_until\" is null",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "reconcile_work_scope_expired_claims_idx": {
+ "name": "reconcile_work_scope_expired_claims_idx",
+ "columns": [
+ {
+ "expression": "claimed_until",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "where": "\"reconcile_work_scope\".\"claimed_until\" is not null",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.policy": {
+ "name": "policy",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "selector": {
+ "name": "selector",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'true'"
+ },
+ "metadata": {
+ "name": "metadata",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'"
+ },
+ "priority": {
+ "name": "priority",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "enabled": {
+ "name": "enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "policy_workspace_id_index": {
+ "name": "policy_workspace_id_index",
+ "columns": [
+ {
+ "expression": "workspace_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "policy_workspace_id_workspace_id_fk": {
+ "name": "policy_workspace_id_workspace_id_fk",
+ "tableFrom": "policy",
+ "tableTo": "workspace",
+ "columnsFrom": ["workspace_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.policy_rule_any_approval": {
+ "name": "policy_rule_any_approval",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "policy_id": {
+ "name": "policy_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "min_approvals": {
+ "name": "min_approvals",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "policy_rule_any_approval_policy_id_policy_id_fk": {
+ "name": "policy_rule_any_approval_policy_id_policy_id_fk",
+ "tableFrom": "policy_rule_any_approval",
+ "tableTo": "policy",
+ "columnsFrom": ["policy_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.policy_rule_deployment_dependency": {
+ "name": "policy_rule_deployment_dependency",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "policy_id": {
+ "name": "policy_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "depends_on": {
+ "name": "depends_on",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "policy_rule_deployment_dependency_policy_id_policy_id_fk": {
+ "name": "policy_rule_deployment_dependency_policy_id_policy_id_fk",
+ "tableFrom": "policy_rule_deployment_dependency",
+ "tableTo": "policy",
+ "columnsFrom": ["policy_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.policy_rule_deployment_window": {
+ "name": "policy_rule_deployment_window",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "policy_id": {
+ "name": "policy_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "allow_window": {
+ "name": "allow_window",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "duration_minutes": {
+ "name": "duration_minutes",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "rrule": {
+ "name": "rrule",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "timezone": {
+ "name": "timezone",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "policy_rule_deployment_window_policy_id_policy_id_fk": {
+ "name": "policy_rule_deployment_window_policy_id_policy_id_fk",
+ "tableFrom": "policy_rule_deployment_window",
+ "tableTo": "policy",
+ "columnsFrom": ["policy_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.policy_rule_environment_progression": {
+ "name": "policy_rule_environment_progression",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "policy_id": {
+ "name": "policy_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "depends_on_environment_selector": {
+ "name": "depends_on_environment_selector",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "maximum_age_hours": {
+ "name": "maximum_age_hours",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "minimum_soak_time_minutes": {
+ "name": "minimum_soak_time_minutes",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "minimum_success_percentage": {
+ "name": "minimum_success_percentage",
+ "type": "real",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "success_statuses": {
+ "name": "success_statuses",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "policy_rule_environment_progression_policy_id_policy_id_fk": {
+ "name": "policy_rule_environment_progression_policy_id_policy_id_fk",
+ "tableFrom": "policy_rule_environment_progression",
+ "tableTo": "policy",
+ "columnsFrom": ["policy_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.policy_rule_gradual_rollout": {
+ "name": "policy_rule_gradual_rollout",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "policy_id": {
+ "name": "policy_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "rollout_type": {
+ "name": "rollout_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "time_scale_interval": {
+ "name": "time_scale_interval",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "policy_rule_gradual_rollout_policy_id_policy_id_fk": {
+ "name": "policy_rule_gradual_rollout_policy_id_policy_id_fk",
+ "tableFrom": "policy_rule_gradual_rollout",
+ "tableTo": "policy",
+ "columnsFrom": ["policy_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.policy_rule_retry": {
+ "name": "policy_rule_retry",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "policy_id": {
+ "name": "policy_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "max_retries": {
+ "name": "max_retries",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "backoff_seconds": {
+ "name": "backoff_seconds",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "backoff_strategy": {
+ "name": "backoff_strategy",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "max_backoff_seconds": {
+ "name": "max_backoff_seconds",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "retry_on_statuses": {
+ "name": "retry_on_statuses",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "policy_rule_retry_policy_id_policy_id_fk": {
+ "name": "policy_rule_retry_policy_id_policy_id_fk",
+ "tableFrom": "policy_rule_retry",
+ "tableTo": "policy",
+ "columnsFrom": ["policy_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.policy_rule_rollback": {
+ "name": "policy_rule_rollback",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "policy_id": {
+ "name": "policy_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "on_job_statuses": {
+ "name": "on_job_statuses",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "on_verification_failure": {
+ "name": "on_verification_failure",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "policy_rule_rollback_policy_id_policy_id_fk": {
+ "name": "policy_rule_rollback_policy_id_policy_id_fk",
+ "tableFrom": "policy_rule_rollback",
+ "tableTo": "policy",
+ "columnsFrom": ["policy_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.policy_rule_verification": {
+ "name": "policy_rule_verification",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "policy_id": {
+ "name": "policy_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "metrics": {
+ "name": "metrics",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'[]'"
+ },
+ "trigger_on": {
+ "name": "trigger_on",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "policy_rule_verification_policy_id_policy_id_fk": {
+ "name": "policy_rule_verification_policy_id_policy_id_fk",
+ "tableFrom": "policy_rule_verification",
+ "tableTo": "policy",
+ "columnsFrom": ["policy_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.policy_rule_version_cooldown": {
+ "name": "policy_rule_version_cooldown",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "policy_id": {
+ "name": "policy_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "interval_seconds": {
+ "name": "interval_seconds",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "policy_rule_version_cooldown_policy_id_policy_id_fk": {
+ "name": "policy_rule_version_cooldown_policy_id_policy_id_fk",
+ "tableFrom": "policy_rule_version_cooldown",
+ "tableTo": "policy",
+ "columnsFrom": ["policy_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.policy_rule_version_selector": {
+ "name": "policy_rule_version_selector",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "policy_id": {
+ "name": "policy_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "selector": {
+ "name": "selector",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "policy_rule_version_selector_policy_id_policy_id_fk": {
+ "name": "policy_rule_version_selector_policy_id_policy_id_fk",
+ "tableFrom": "policy_rule_version_selector",
+ "tableTo": "policy",
+ "columnsFrom": ["policy_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.user_approval_record": {
+ "name": "user_approval_record",
+ "schema": "",
+ "columns": {
+ "version_id": {
+ "name": "version_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "environment_id": {
+ "name": "environment_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "reason": {
+ "name": "reason",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {
+ "user_approval_record_version_id_user_id_environment_id_pk": {
+ "name": "user_approval_record_version_id_user_id_environment_id_pk",
+ "columns": ["version_id", "user_id", "environment_id"]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.resource_variable": {
+ "name": "resource_variable",
+ "schema": "",
+ "columns": {
+ "resource_id": {
+ "name": "resource_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "key": {
+ "name": "key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "value": {
+ "name": "value",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "resource_variable_resource_id_resource_id_fk": {
+ "name": "resource_variable_resource_id_resource_id_fk",
+ "tableFrom": "resource_variable",
+ "tableTo": "resource",
+ "columnsFrom": ["resource_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "resource_variable_resource_id_key_pk": {
+ "name": "resource_variable_resource_id_key_pk",
+ "columns": ["resource_id", "key"]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.workflow": {
+ "name": "workflow",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "inputs": {
+ "name": "inputs",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'[]'"
+ },
+ "job_agents": {
+ "name": "job_agents",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'[]'"
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "workflow_workspace_id_workspace_id_fk": {
+ "name": "workflow_workspace_id_workspace_id_fk",
+ "tableFrom": "workflow",
+ "tableTo": "workspace",
+ "columnsFrom": ["workspace_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.workflow_job": {
+ "name": "workflow_job",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "workflow_run_id": {
+ "name": "workflow_run_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "job_id": {
+ "name": "job_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "workflow_job_workflow_run_id_workflow_run_id_fk": {
+ "name": "workflow_job_workflow_run_id_workflow_run_id_fk",
+ "tableFrom": "workflow_job",
+ "tableTo": "workflow_run",
+ "columnsFrom": ["workflow_run_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "workflow_job_job_id_job_id_fk": {
+ "name": "workflow_job_job_id_job_id_fk",
+ "tableFrom": "workflow_job",
+ "tableTo": "job",
+ "columnsFrom": ["job_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.workflow_run": {
+ "name": "workflow_run",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "workflow_id": {
+ "name": "workflow_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "inputs": {
+ "name": "inputs",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "workflow_run_workflow_id_workflow_id_fk": {
+ "name": "workflow_run_workflow_id_workflow_id_fk",
+ "tableFrom": "workflow_run",
+ "tableTo": "workflow",
+ "columnsFrom": ["workflow_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.policy_skip": {
+ "name": "policy_skip",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "created_by": {
+ "name": "created_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "environment_id": {
+ "name": "environment_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "reason": {
+ "name": "reason",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "resource_id": {
+ "name": "resource_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "rule_id": {
+ "name": "rule_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "version_id": {
+ "name": "version_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.computed_policy_release_target": {
+ "name": "computed_policy_release_target",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "policy_id": {
+ "name": "policy_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "environment_id": {
+ "name": "environment_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "deployment_id": {
+ "name": "deployment_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "resource_id": {
+ "name": "resource_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "computed_at": {
+ "name": "computed_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "computed_policy_release_target_policy_id_environment_id_deployment_id_resource_id_index": {
+ "name": "computed_policy_release_target_policy_id_environment_id_deployment_id_resource_id_index",
+ "columns": [
+ {
+ "expression": "policy_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "environment_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "deployment_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "resource_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "computed_policy_release_target_policy_id_index": {
+ "name": "computed_policy_release_target_policy_id_index",
+ "columns": [
+ {
+ "expression": "policy_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "computed_policy_release_target_resource_id_environment_id_deployment_id_index": {
+ "name": "computed_policy_release_target_resource_id_environment_id_deployment_id_index",
+ "columns": [
+ {
+ "expression": "resource_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "environment_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "deployment_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "computed_policy_release_target_policy_id_policy_id_fk": {
+ "name": "computed_policy_release_target_policy_id_policy_id_fk",
+ "tableFrom": "computed_policy_release_target",
+ "tableTo": "policy",
+ "columnsFrom": ["policy_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "computed_policy_release_target_environment_id_environment_id_fk": {
+ "name": "computed_policy_release_target_environment_id_environment_id_fk",
+ "tableFrom": "computed_policy_release_target",
+ "tableTo": "environment",
+ "columnsFrom": ["environment_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "computed_policy_release_target_deployment_id_deployment_id_fk": {
+ "name": "computed_policy_release_target_deployment_id_deployment_id_fk",
+ "tableFrom": "computed_policy_release_target",
+ "tableTo": "deployment",
+ "columnsFrom": ["deployment_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "computed_policy_release_target_resource_id_resource_id_fk": {
+ "name": "computed_policy_release_target_resource_id_resource_id_fk",
+ "tableFrom": "computed_policy_release_target",
+ "tableTo": "resource",
+ "columnsFrom": ["resource_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.policy_rule_evaluation": {
+ "name": "policy_rule_evaluation",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "rule_type": {
+ "name": "rule_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "rule_id": {
+ "name": "rule_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "environment_id": {
+ "name": "environment_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "version_id": {
+ "name": "version_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "resource_id": {
+ "name": "resource_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "allowed": {
+ "name": "allowed",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "action_required": {
+ "name": "action_required",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "action_type": {
+ "name": "action_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "message": {
+ "name": "message",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "details": {
+ "name": "details",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'"
+ },
+ "satisfied_at": {
+ "name": "satisfied_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "next_evaluation_at": {
+ "name": "next_evaluation_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "evaluated_at": {
+ "name": "evaluated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "policy_rule_evaluation_rule_id_environment_id_version_id_resource_id_index": {
+ "name": "policy_rule_evaluation_rule_id_environment_id_version_id_resource_id_index",
+ "columns": [
+ {
+ "expression": "rule_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "environment_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "version_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "resource_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "policy_rule_evaluation_environment_id_version_id_resource_id_rule_type_index": {
+ "name": "policy_rule_evaluation_environment_id_version_id_resource_id_rule_type_index",
+ "columns": [
+ {
+ "expression": "environment_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "version_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "resource_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "rule_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "policy_rule_evaluation_environment_id_environment_id_fk": {
+ "name": "policy_rule_evaluation_environment_id_environment_id_fk",
+ "tableFrom": "policy_rule_evaluation",
+ "tableTo": "environment",
+ "columnsFrom": ["environment_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "policy_rule_evaluation_version_id_deployment_version_id_fk": {
+ "name": "policy_rule_evaluation_version_id_deployment_version_id_fk",
+ "tableFrom": "policy_rule_evaluation",
+ "tableTo": "deployment_version",
+ "columnsFrom": ["version_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "policy_rule_evaluation_resource_id_resource_id_fk": {
+ "name": "policy_rule_evaluation_resource_id_resource_id_fk",
+ "tableFrom": "policy_rule_evaluation",
+ "tableTo": "resource",
+ "columnsFrom": ["resource_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.job_verification_metric_measurement": {
+ "name": "job_verification_metric_measurement",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "job_verification_metric_status_id": {
+ "name": "job_verification_metric_status_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "data": {
+ "name": "data",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'"
+ },
+ "measured_at": {
+ "name": "measured_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "message": {
+ "name": "message",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "status": {
+ "name": "status",
+ "type": "job_verification_status",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "job_verification_metric_measurement_job_verification_metric_status_id_index": {
+ "name": "job_verification_metric_measurement_job_verification_metric_status_id_index",
+ "columns": [
+ {
+ "expression": "job_verification_metric_status_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "job_verification_metric_measurement_job_verification_metric_status_id_job_verification_metric_id_fk": {
+ "name": "job_verification_metric_measurement_job_verification_metric_status_id_job_verification_metric_id_fk",
+ "tableFrom": "job_verification_metric_measurement",
+ "tableTo": "job_verification_metric",
+ "columnsFrom": ["job_verification_metric_status_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.job_verification_metric": {
+ "name": "job_verification_metric",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "job_id": {
+ "name": "job_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "policy_rule_verification_metric_id": {
+ "name": "policy_rule_verification_metric_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "provider": {
+ "name": "provider",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "interval_seconds": {
+ "name": "interval_seconds",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "count": {
+ "name": "count",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "success_condition": {
+ "name": "success_condition",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "success_threshold": {
+ "name": "success_threshold",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 0
+ },
+ "failure_condition": {
+ "name": "failure_condition",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'false'"
+ },
+ "failure_threshold": {
+ "name": "failure_threshold",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 0
+ }
+ },
+ "indexes": {
+ "job_verification_metric_job_id_index": {
+ "name": "job_verification_metric_job_id_index",
+ "columns": [
+ {
+ "expression": "job_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "job_verification_metric_policy_rule_verification_metric_id_index": {
+ "name": "job_verification_metric_policy_rule_verification_metric_id_index",
+ "columns": [
+ {
+ "expression": "policy_rule_verification_metric_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "job_verification_metric_policy_rule_verification_metric_id_policy_rule_job_verification_metric_id_fk": {
+ "name": "job_verification_metric_policy_rule_verification_metric_id_policy_rule_job_verification_metric_id_fk",
+ "tableFrom": "job_verification_metric",
+ "tableTo": "policy_rule_job_verification_metric",
+ "columnsFrom": ["policy_rule_verification_metric_id"],
+ "columnsTo": ["id"],
+ "onDelete": "set null",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.policy_rule_job_verification_metric": {
+ "name": "policy_rule_job_verification_metric",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "trigger_on": {
+ "name": "trigger_on",
+ "type": "job_verification_trigger_on",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'jobSuccess'"
+ },
+ "policy_id": {
+ "name": "policy_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "provider": {
+ "name": "provider",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "interval_seconds": {
+ "name": "interval_seconds",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "count": {
+ "name": "count",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "success_condition": {
+ "name": "success_condition",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "success_threshold": {
+ "name": "success_threshold",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 0
+ },
+ "failure_condition": {
+ "name": "failure_condition",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'false'"
+ },
+ "failure_threshold": {
+ "name": "failure_threshold",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "default": 0
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "policy_rule_job_verification_metric_policy_id_policy_id_fk": {
+ "name": "policy_rule_job_verification_metric_policy_id_policy_id_fk",
+ "tableFrom": "policy_rule_job_verification_metric",
+ "tableTo": "policy",
+ "columnsFrom": ["policy_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.computed_entity_relationship": {
+ "name": "computed_entity_relationship",
+ "schema": "",
+ "columns": {
+ "rule_id": {
+ "name": "rule_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "from_entity_type": {
+ "name": "from_entity_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "from_entity_id": {
+ "name": "from_entity_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "to_entity_type": {
+ "name": "to_entity_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "to_entity_id": {
+ "name": "to_entity_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "last_evaluated_at": {
+ "name": "last_evaluated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "computed_entity_relationship_from_idx": {
+ "name": "computed_entity_relationship_from_idx",
+ "columns": [
+ {
+ "expression": "from_entity_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "from_entity_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "computed_entity_relationship_to_idx": {
+ "name": "computed_entity_relationship_to_idx",
+ "columns": [
+ {
+ "expression": "to_entity_type",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "to_entity_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "computed_entity_relationship_rule_id_relationship_rule_id_fk": {
+ "name": "computed_entity_relationship_rule_id_relationship_rule_id_fk",
+ "tableFrom": "computed_entity_relationship",
+ "tableTo": "relationship_rule",
+ "columnsFrom": ["rule_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "computed_entity_relationship_rule_id_from_entity_type_from_entity_id_to_entity_type_to_entity_id_pk": {
+ "name": "computed_entity_relationship_rule_id_from_entity_type_from_entity_id_to_entity_type_to_entity_id_pk",
+ "columns": [
+ "rule_id",
+ "from_entity_type",
+ "from_entity_id",
+ "to_entity_type",
+ "to_entity_id"
+ ]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.relationship_rule": {
+ "name": "relationship_rule",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "reference": {
+ "name": "reference",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "cel": {
+ "name": "cel",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "metadata": {
+ "name": "metadata",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'{}'"
+ }
+ },
+ "indexes": {
+ "relationship_rule_workspace_id_reference_index": {
+ "name": "relationship_rule_workspace_id_reference_index",
+ "columns": [
+ {
+ "expression": "workspace_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "reference",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "relationship_rule_workspace_id_index": {
+ "name": "relationship_rule_workspace_id_index",
+ "columns": [
+ {
+ "expression": "workspace_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "relationship_rule_workspace_id_workspace_id_fk": {
+ "name": "relationship_rule_workspace_id_workspace_id_fk",
+ "tableFrom": "relationship_rule",
+ "tableTo": "workspace",
+ "columnsFrom": ["workspace_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.job_agent": {
+ "name": "job_agent",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "type": {
+ "name": "type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "config": {
+ "name": "config",
+ "type": "json",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'"
+ }
+ },
+ "indexes": {
+ "job_agent_workspace_id_name_index": {
+ "name": "job_agent_workspace_id_name_index",
+ "columns": [
+ {
+ "expression": "workspace_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "name",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "job_agent_workspace_id_workspace_id_fk": {
+ "name": "job_agent_workspace_id_workspace_id_fk",
+ "tableFrom": "job_agent",
+ "tableTo": "workspace",
+ "columnsFrom": ["workspace_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.variable_set": {
+ "name": "variable_set",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "''"
+ },
+ "selector": {
+ "name": "selector",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "metadata": {
+ "name": "metadata",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'"
+ },
+ "priority": {
+ "name": "priority",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "workspace_id": {
+ "name": "workspace_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "variable_set_workspace_id_workspace_id_fk": {
+ "name": "variable_set_workspace_id_workspace_id_fk",
+ "tableFrom": "variable_set",
+ "tableTo": "workspace",
+ "columnsFrom": ["workspace_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.variable_set_variable": {
+ "name": "variable_set_variable",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "variable_set_id": {
+ "name": "variable_set_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "key": {
+ "name": "key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "value": {
+ "name": "value",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "variable_set_variable_variable_set_id_variable_set_id_fk": {
+ "name": "variable_set_variable_variable_set_id_variable_set_id_fk",
+ "tableFrom": "variable_set_variable",
+ "tableTo": "variable_set",
+ "columnsFrom": ["variable_set_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "variable_set_variable_variable_set_id_key_unique": {
+ "name": "variable_set_variable_variable_set_id_key_unique",
+ "nullsNotDistinct": false,
+ "columns": ["variable_set_id", "key"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {
+ "public.system_role": {
+ "name": "system_role",
+ "schema": "public",
+ "values": ["user", "admin"]
+ },
+ "public.deployment_plan_target_status": {
+ "name": "deployment_plan_target_status",
+ "schema": "public",
+ "values": ["computing", "completed", "errored", "unsupported"]
+ },
+ "public.deployment_version_status": {
+ "name": "deployment_version_status",
+ "schema": "public",
+ "values": [
+ "unspecified",
+ "building",
+ "ready",
+ "failed",
+ "rejected",
+ "paused"
+ ]
+ },
+ "public.job_reason": {
+ "name": "job_reason",
+ "schema": "public",
+ "values": [
+ "policy_passing",
+ "policy_override",
+ "env_policy_override",
+ "config_policy_override",
+ "redeploy"
+ ]
+ },
+ "public.job_status": {
+ "name": "job_status",
+ "schema": "public",
+ "values": [
+ "cancelled",
+ "skipped",
+ "in_progress",
+ "action_required",
+ "pending",
+ "failure",
+ "invalid_job_agent",
+ "invalid_integration",
+ "external_run_not_found",
+ "successful"
+ ]
+ },
+ "public.entity_type": {
+ "name": "entity_type",
+ "schema": "public",
+ "values": ["user", "team"]
+ },
+ "public.scope_type": {
+ "name": "scope_type",
+ "schema": "public",
+ "values": [
+ "deploymentVersion",
+ "resource",
+ "resourceProvider",
+ "workspace",
+ "environment",
+ "system",
+ "deployment"
+ ]
+ },
+ "public.job_verification_status": {
+ "name": "job_verification_status",
+ "schema": "public",
+ "values": ["failed", "inconclusive", "passed"]
+ },
+ "public.job_verification_trigger_on": {
+ "name": "job_verification_trigger_on",
+ "schema": "public",
+ "values": ["jobCreated", "jobStarted", "jobSuccess", "jobFailure"]
+ }
+ },
+ "schemas": {},
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
diff --git a/packages/db/drizzle/meta/_journal.json b/packages/db/drizzle/meta/_journal.json
index 0b23e17ba..013387a63 100644
--- a/packages/db/drizzle/meta/_journal.json
+++ b/packages/db/drizzle/meta/_journal.json
@@ -1296,6 +1296,13 @@
"when": 1775515484711,
"tag": "0184_reflective_bishop",
"breakpoints": true
+ },
+ {
+ "idx": 185,
+ "version": "7",
+ "when": 1775686833517,
+ "tag": "0185_steep_scarecrow",
+ "breakpoints": true
}
]
}
diff --git a/packages/db/src/schema/deployment.ts b/packages/db/src/schema/deployment.ts
index 5ae4ede7d..5cab2322d 100644
--- a/packages/db/src/schema/deployment.ts
+++ b/packages/db/src/schema/deployment.ts
@@ -9,7 +9,6 @@ import {
uuid,
} from "drizzle-orm/pg-core";
-import { jobAgent } from "./job-agent.js";
import { resource } from "./resource.js";
import { systemDeployment } from "./system.js";
import { workspace } from "./workspace.js";
@@ -40,40 +39,8 @@ export const deployment = pgTable(
export const deploymentRelations = relations(deployment, ({ many }) => ({
systemDeployments: many(systemDeployment),
- jobAgents: many(deploymentJobAgent),
}));
-export const deploymentJobAgent = pgTable(
- "deployment_job_agent",
- {
- deploymentId: uuid("deployment_id")
- .notNull()
- .references(() => deployment.id, { onDelete: "cascade" }),
- jobAgentId: uuid("job_agent_id")
- .notNull()
- .references(() => jobAgent.id, { onDelete: "cascade" }),
- config: jsonb("config")
- .default("{}")
- .$type>()
- .notNull(),
- },
- (t) => [primaryKey({ columns: [t.deploymentId, t.jobAgentId] })],
-);
-
-export const deploymentJobAgentRelations = relations(
- deploymentJobAgent,
- ({ one }) => ({
- deployment: one(deployment, {
- fields: [deploymentJobAgent.deploymentId],
- references: [deployment.id],
- }),
- jobAgent: one(jobAgent, {
- fields: [deploymentJobAgent.jobAgentId],
- references: [jobAgent.id],
- }),
- }),
-);
-
export const computedDeploymentResource = pgTable(
"computed_deployment_resource",
{
diff --git a/packages/trpc/src/routes/deployments.ts b/packages/trpc/src/routes/deployments.ts
index b169fd964..95c92e440 100644
--- a/packages/trpc/src/routes/deployments.ts
+++ b/packages/trpc/src/routes/deployments.ts
@@ -37,7 +37,6 @@ export const deploymentsRouter = router({
},
},
},
- jobAgents: true,
},
});
@@ -254,17 +253,6 @@ export const deploymentsRouter = router({
message: "Job agent not found in this workspace",
});
- await ctx.db
- .insert(schema.deploymentJobAgent)
- .values({ deploymentId, jobAgentId, config })
- .onConflictDoUpdate({
- target: [
- schema.deploymentJobAgent.deploymentId,
- schema.deploymentJobAgent.jobAgentId,
- ],
- set: { config },
- });
-
await ctx.db
.update(schema.deployment)
.set({
@@ -276,7 +264,6 @@ export const deploymentsRouter = router({
const [updated] = await Promise.all([
ctx.db.query.deployment.findFirst({
where: eq(schema.deployment.id, deploymentId),
- with: { jobAgents: true },
}),
enqueueDeploymentSelectorEval(ctx.db, { workspaceId, deploymentId }),
enqueueReleaseTargetsForDeployment(ctx.db, workspaceId, deploymentId),
diff --git a/packages/trpc/src/routes/job-agents.ts b/packages/trpc/src/routes/job-agents.ts
index d53059660..3f1626028 100644
--- a/packages/trpc/src/routes/job-agents.ts
+++ b/packages/trpc/src/routes/job-agents.ts
@@ -1,7 +1,7 @@
import { TRPCError } from "@trpc/server";
import z from "zod";
-import { and, eq, takeFirst } from "@ctrlplane/db";
+import { eq, takeFirst } from "@ctrlplane/db";
import * as schema from "@ctrlplane/db/schema";
import { protectedProcedure, router } from "../trpc.js";
@@ -89,22 +89,4 @@ export const jobAgentsRouter = router({
return jobAgent;
}),
-
- deployments: protectedProcedure
- .input(z.object({ workspaceId: z.uuid(), jobAgentId: z.string() }))
- .query(({ input, ctx }) =>
- ctx.db
- .select({ deployment: schema.deployment })
- .from(schema.deploymentJobAgent)
- .innerJoin(
- schema.deployment,
- eq(schema.deploymentJobAgent.deploymentId, schema.deployment.id),
- )
- .where(
- and(
- eq(schema.deploymentJobAgent.jobAgentId, input.jobAgentId),
- eq(schema.deployment.workspaceId, input.workspaceId),
- ),
- ),
- ),
});
diff --git a/packages/workspace-engine-sdk/src/schema.ts b/packages/workspace-engine-sdk/src/schema.ts
index b3ee02bd8..a42323424 100644
--- a/packages/workspace-engine-sdk/src/schema.ts
+++ b/packages/workspace-engine-sdk/src/schema.ts
@@ -240,10 +240,8 @@ export interface components {
description?: string;
id: string;
jobAgentConfig: components["schemas"]["JobAgentConfig"];
- jobAgentId?: string;
/** @description CEL expression to match job agents */
jobAgentSelector: string;
- jobAgents?: components["schemas"]["DeploymentJobAgent"][];
metadata: {
[key: string]: string;
};
@@ -260,12 +258,6 @@ export interface components {
/** @description CEL expression to match upstream deployment(s) that must have a successful release before this deployment can proceed. */
dependsOn: string;
};
- DeploymentJobAgent: {
- config: components["schemas"]["JobAgentConfig"];
- ref: string;
- /** @description CEL expression to determine if the job agent should be used */
- selector: string;
- };
DeploymentVariable: {
defaultValue?: components["schemas"]["LiteralValue"];
deploymentId: string;
From 8a285c7af54d35555bd889aa4cdfda829ebedde6 Mon Sep 17 00:00:00 2001
From: Aditya Choudhari
Date: Wed, 8 Apr 2026 15:51:16 -0700
Subject: [PATCH 2/6] fix build
---
.../pkg/workspace/relationships/property.go | 7 ++-----
.../pkg/workspace/relationships/property_test.go | 13 ++++++-------
2 files changed, 8 insertions(+), 12 deletions(-)
diff --git a/apps/workspace-engine/pkg/workspace/relationships/property.go b/apps/workspace-engine/pkg/workspace/relationships/property.go
index 53449741c..1568d604d 100644
--- a/apps/workspace-engine/pkg/workspace/relationships/property.go
+++ b/apps/workspace-engine/pkg/workspace/relationships/property.go
@@ -109,11 +109,8 @@ func getDeploymentProperty(
return convertValue(*deployment.Description)
}
return nil, fmt.Errorf("description is nil")
- case "job_agent_id", "jobagentid":
- if deployment.JobAgentId != nil {
- return convertValue(*deployment.JobAgentId)
- }
- return nil, fmt.Errorf("job_agent_id is nil")
+ case "job_agent_selector", "jobagentselector":
+ return convertValue(deployment.JobAgentSelector)
case "job_agent_config", "jobagentconfig":
if len(propertyPath) == 1 {
return convertValue(deployment.JobAgentConfig)
diff --git a/apps/workspace-engine/pkg/workspace/relationships/property_test.go b/apps/workspace-engine/pkg/workspace/relationships/property_test.go
index d09e551ce..958ede263 100644
--- a/apps/workspace-engine/pkg/workspace/relationships/property_test.go
+++ b/apps/workspace-engine/pkg/workspace/relationships/property_test.go
@@ -126,7 +126,7 @@ func TestPropertyValueExtraction_Deployment(t *testing.T) {
Name: "my-deployment",
Slug: "my-deployment-slug",
Description: &desc,
- JobAgentId: &agentID,
+ JobAgentSelector: "jobAgent.id == \"" + agentID + "\"",
JobAgentConfig: map[string]any{
"repo": "my-repo",
"nested": map[string]any{
@@ -146,8 +146,8 @@ func TestPropertyValueExtraction_Deployment(t *testing.T) {
{name: "name", path: []string{"name"}},
{name: "slug", path: []string{"slug"}},
{name: "description", path: []string{"description"}},
- {name: "job_agent_id", path: []string{"job_agent_id"}},
- {name: "jobagentid alias", path: []string{"jobagentid"}},
+ {name: "job_agent_selector", path: []string{"job_agent_selector"}},
+ {name: "jobagentselector alias", path: []string{"jobagentselector"}},
{
name: "job_agent_config whole",
path: []string{"job_agent_config"},
@@ -187,7 +187,7 @@ func TestPropertyValueExtraction_Deployment_NilFields(t *testing.T) {
Name: "my-deployment",
Slug: "my-slug",
Description: nil,
- JobAgentId: nil,
+ JobAgentSelector: "",
}
entity := makeDeploymentEntity(deployment)
@@ -195,9 +195,8 @@ func TestPropertyValueExtraction_Deployment_NilFields(t *testing.T) {
require.Error(t, err)
assert.Contains(t, err.Error(), "nil")
- _, err = GetPropertyValue(entity, []string{"job_agent_id"})
- require.Error(t, err)
- assert.Contains(t, err.Error(), "nil")
+ _, err = GetPropertyValue(entity, []string{"job_agent_selector"})
+ require.NoError(t, err)
}
func TestPropertyValueExtraction_Environment(t *testing.T) {
From 7b0fe2c30f8f2308461805083491116001fe41f5 Mon Sep 17 00:00:00 2001
From: Aditya Choudhari
Date: Wed, 8 Apr 2026 16:06:34 -0700
Subject: [PATCH 3/6] more fix
---
apps/workspace-engine/pkg/db/convert_test.go | 2 +-
.../selector/langs/cel/cel_matches_test.go | 2 +-
.../pkg/workspace/jobs/factory_test.go | 25 +++++++------------
3 files changed, 11 insertions(+), 18 deletions(-)
diff --git a/apps/workspace-engine/pkg/db/convert_test.go b/apps/workspace-engine/pkg/db/convert_test.go
index c2a8180cb..9d65c7d02 100644
--- a/apps/workspace-engine/pkg/db/convert_test.go
+++ b/apps/workspace-engine/pkg/db/convert_test.go
@@ -80,7 +80,7 @@ func TestToOapiDeployment(t *testing.T) {
assert.NotNil(t, dep.Description)
assert.Equal(t, "Main API deployment", *dep.Description)
assert.Equal(t, map[string]string{"team": "platform"}, dep.Metadata)
- assert.Nil(t, dep.JobAgents, "base convert should not populate job agents")
+ assert.Equal(t, "", dep.JobAgentSelector, "empty selector when not set")
}
func TestToOapiDeployment_NilOptionalFields(t *testing.T) {
diff --git a/apps/workspace-engine/pkg/selector/langs/cel/cel_matches_test.go b/apps/workspace-engine/pkg/selector/langs/cel/cel_matches_test.go
index 86dc0cb73..b58122307 100644
--- a/apps/workspace-engine/pkg/selector/langs/cel/cel_matches_test.go
+++ b/apps/workspace-engine/pkg/selector/langs/cel/cel_matches_test.go
@@ -206,7 +206,7 @@ func TestCelSelector_Matches_DeploymentWithOptionalFields(t *testing.T) {
Name: "web",
Slug: "web-slug",
Description: &desc,
- JobAgentId: &agentId,
+ JobAgentSelector: "jobAgent.id == \"" + agentId + "\"",
}
matched, err := condition.Matches(d)
require.NoError(t, err)
diff --git a/apps/workspace-engine/pkg/workspace/jobs/factory_test.go b/apps/workspace-engine/pkg/workspace/jobs/factory_test.go
index c1f9c8831..a4a7778c5 100644
--- a/apps/workspace-engine/pkg/workspace/jobs/factory_test.go
+++ b/apps/workspace-engine/pkg/workspace/jobs/factory_test.go
@@ -63,7 +63,6 @@ func (m *mockGetters) GetResource(_ context.Context, id uuid.UUID) (*oapi.Resour
func createTestDeployment(
t *testing.T,
id string,
- jobAgentId *string,
jobAgentConfig oapi.JobAgentConfig,
) *oapi.Deployment {
t.Helper()
@@ -72,7 +71,6 @@ func createTestDeployment(
Id: id,
Name: "test-deployment",
Slug: "test-deployment",
- JobAgentId: jobAgentId,
JobAgentConfig: jobAgentConfig,
ResourceSelector: &resourceSelector,
}
@@ -203,7 +201,7 @@ func TestFactory_CreateJobForRelease_SetsCorrectJobFields(t *testing.T) {
deploymentConfig := mustCreateJobAgentConfig(t, `{"type": "custom"}`)
jobAgent := createTestJobAgent(t, jobAgentId, "custom", jobAgentConfig)
- deployment := createTestDeployment(t, deployID, &jobAgentId, deploymentConfig)
+ deployment := createTestDeployment(t, deployID,deploymentConfig)
environment := createTestEnvironment(t, envID, "production")
resource := createTestResource(
t,
@@ -261,7 +259,7 @@ func TestFactory_CreateJobForRelease_UniqueJobIds(t *testing.T) {
deploymentConfig := mustCreateJobAgentConfig(t, `{"type": "custom"}`)
jobAgent := createTestJobAgent(t, jobAgentId, "custom", jobAgentConfig)
- deployment := createTestDeployment(t, deployID, &jobAgentId, deploymentConfig)
+ deployment := createTestDeployment(t, deployID,deploymentConfig)
resource := createTestResource(
t,
resourceID,
@@ -311,7 +309,6 @@ func setupFullMock(t *testing.T) (*mockGetters, *oapi.JobAgent, string, string,
deployment := createTestDeployment(
t,
deploymentId,
- &jobAgentId,
mustCreateJobAgentConfig(t, `{"deploy_key": "deploy_val"}`),
)
environment := &oapi.Environment{
@@ -417,7 +414,7 @@ func TestFactory_CreateJobForRelease_UsesResolvedJobAgentConfig(t *testing.T) {
versionConfig := oapi.JobAgentConfig{"shared": "from_version", "version_only": "yes"}
jobAgent := createTestJobAgent(t, jobAgentId, "custom", agentConfig)
- deployment := createTestDeployment(t, deployID, &jobAgentId, deployConfig)
+ deployment := createTestDeployment(t, deployID,deployConfig)
environment := &oapi.Environment{
Id: envID, Name: "prod", Metadata: map[string]string{},
}
@@ -468,7 +465,7 @@ func TestFactory_CreateJobForRelease_DeploymentTemplateOverridesAgentTemplate(t
deployConfig := mustCreateJobAgentConfig(t, `{"template": "deployment-template"}`)
jobAgent := createTestJobAgent(t, jobAgentId, "argocd", agentConfig)
- deployment := createTestDeployment(t, deployID, &jobAgentId, deployConfig)
+ deployment := createTestDeployment(t, deployID,deployConfig)
environment := &oapi.Environment{
Id: envID, Name: "prod", Metadata: map[string]string{},
}
@@ -513,7 +510,7 @@ func TestFactory_CreateJobForRelease_VersionTemplateOverridesDeploymentAndAgentT
versionConfig := oapi.JobAgentConfig{"template": "version-template"}
jobAgent := createTestJobAgent(t, jobAgentID, "argocd", agentConfig)
- deployment := createTestDeployment(t, deployID, &jobAgentID, deployConfig)
+ deployment := createTestDeployment(t, deployID,deployConfig)
environment := &oapi.Environment{
Id: envID, Name: "prod", Metadata: map[string]string{},
}
@@ -571,11 +568,7 @@ func TestFactory_CreateJobForRelease_DeploymentTemplateOverrideWithMultipleDeplo
deployConfig := mustCreateJobAgentConfig(t, `{"template": "deployment-template"}`)
selectedAgent := createTestJobAgent(t, selectedAgentID, "argocd", selectedAgentConfig)
- deployment := createTestDeployment(t, deployID, &selectedAgentID, deployConfig)
- deployment.JobAgents = &[]oapi.DeploymentJobAgent{
- {Ref: selectedAgentID, Selector: "true", Config: oapi.JobAgentConfig{}},
- {Ref: otherAgentID, Selector: "false", Config: oapi.JobAgentConfig{}},
- }
+ deployment := createTestDeployment(t, deployID, deployConfig)
environment := &oapi.Environment{
Id: envID, Name: "prod", Metadata: map[string]string{},
@@ -618,7 +611,7 @@ func TestFactory_CreateJobForRelease_UsesResolvedConfigWithoutReMerge(t *testing
}`)
jobAgent := createTestJobAgent(t, jobAgentID, "argocd", resolvedConfig)
- deployment := createTestDeployment(t, deployID, &jobAgentID, deployConfig)
+ deployment := createTestDeployment(t, deployID,deployConfig)
environment := &oapi.Environment{
Id: envID, Name: "prod", Metadata: map[string]string{},
}
@@ -653,7 +646,7 @@ func TestFactory_CreateJobForRelease_DispatchContextEnvironmentNotFound(t *testi
missingEnvID := newID()
agent := createTestJobAgent(t, jobAgentId, "custom", mustCreateJobAgentConfig(t, `{}`))
- deployment := createTestDeployment(t, deployID, &jobAgentId, mustCreateJobAgentConfig(t, `{}`))
+ deployment := createTestDeployment(t, deployID,mustCreateJobAgentConfig(t, `{}`))
resource := &oapi.Resource{
Id: resourceID, Name: "server-1", Kind: "server", Identifier: "server-1",
Config: map[string]any{}, Metadata: map[string]string{}, CreatedAt: time.Now(),
@@ -682,7 +675,7 @@ func TestFactory_CreateJobForRelease_DispatchContextResourceNotFound(t *testing.
missingResourceID := newID()
agent := createTestJobAgent(t, jobAgentId, "custom", mustCreateJobAgentConfig(t, `{}`))
- deployment := createTestDeployment(t, deployID, &jobAgentId, mustCreateJobAgentConfig(t, `{}`))
+ deployment := createTestDeployment(t, deployID,mustCreateJobAgentConfig(t, `{}`))
environment := &oapi.Environment{
Id: envID, Name: "prod", Metadata: map[string]string{},
}
From 65b5a2f21be5a7977b2db54840d85e4ed8c61a5d Mon Sep 17 00:00:00 2001
From: Aditya Choudhari
Date: Wed, 8 Apr 2026 16:15:39 -0700
Subject: [PATCH 4/6] update tests
---
e2e/tests/api/deployments.spec.ts | 41 ++++++++++++-------------------
1 file changed, 16 insertions(+), 25 deletions(-)
diff --git a/e2e/tests/api/deployments.spec.ts b/e2e/tests/api/deployments.spec.ts
index 976f11f7a..7aee74768 100644
--- a/e2e/tests/api/deployments.spec.ts
+++ b/e2e/tests/api/deployments.spec.ts
@@ -89,11 +89,12 @@ test.describe("Deployment API", () => {
);
});
- test("should create a deployment with a job agent", async ({
+ test("should create a deployment with a job agent selector", async ({
api,
workspace,
}) => {
const name = `deploy-agent-${faker.string.alphanumeric(8)}`;
+ const selector = `jobAgent.id == "${jobAgentId}"`;
const createRes = await api.POST(
"/v1/workspaces/{workspaceId}/deployments",
{
@@ -101,9 +102,8 @@ test.describe("Deployment API", () => {
body: {
name,
slug: name,
- jobAgents: [
- { ref: jobAgentId, config: { repo: "my-repo" }, selector: "true" },
- ],
+ jobAgentSelector: selector,
+ jobAgentConfig: { repo: "my-repo" },
},
},
);
@@ -122,9 +122,8 @@ test.describe("Deployment API", () => {
expect(getRes.response.status).toBe(200);
const { deployment } = getRes.data!;
- expect(deployment.jobAgents).toHaveLength(1);
- expect(deployment.jobAgents![0]!.ref).toBe(jobAgentId);
- expect(deployment.jobAgents![0]!.config).toEqual({ repo: "my-repo" });
+ expect(deployment.jobAgentSelector).toBe(selector);
+ expect(deployment.jobAgentConfig).toEqual({ repo: "my-repo" });
await api.DELETE(
"/v1/workspaces/{workspaceId}/deployments/{deploymentId}",
@@ -132,12 +131,13 @@ test.describe("Deployment API", () => {
);
});
- test("should upsert a deployment with a job agent", async ({
+ test("should upsert a deployment with a job agent selector", async ({
api,
workspace,
}) => {
const deploymentId = uuidv4();
const name = `deploy-upsert-${faker.string.alphanumeric(8)}`;
+ const selector = `jobAgent.id == "${jobAgentId}"`;
const upsertRes = await api.PUT(
"/v1/workspaces/{workspaceId}/deployments/{deploymentId}",
@@ -149,13 +149,8 @@ test.describe("Deployment API", () => {
name,
slug: name,
resourceSelector: "false",
- jobAgents: [
- {
- ref: jobAgentId,
- config: { workflow: "deploy.yaml" },
- selector: "true",
- },
- ],
+ jobAgentSelector: selector,
+ jobAgentConfig: { workflow: "deploy.yaml" },
},
},
);
@@ -174,11 +169,8 @@ test.describe("Deployment API", () => {
expect(getRes.response.status).toBe(200);
const { deployment } = getRes.data!;
expect(deployment.name).toBe(name);
- expect(deployment.jobAgents).toHaveLength(1);
- expect(deployment.jobAgents![0]!.ref).toBe(jobAgentId);
- expect(deployment.jobAgents![0]!.config).toEqual({
- workflow: "deploy.yaml",
- });
+ expect(deployment.jobAgentSelector).toBe(selector);
+ expect(deployment.jobAgentConfig).toEqual({ workflow: "deploy.yaml" });
await api.DELETE(
"/v1/workspaces/{workspaceId}/deployments/{deploymentId}",
@@ -228,11 +220,12 @@ test.describe("Deployment API", () => {
);
});
- test("should default jobAgentSelector from jobAgentId", async ({
+ test("should create deployment with jobAgentSelector and jobAgentConfig", async ({
api,
workspace,
}) => {
const name = `deploy-default-sel-${faker.string.alphanumeric(8)}`;
+ const selector = `jobAgent.id == "${jobAgentId}"`;
const createRes = await api.POST(
"/v1/workspaces/{workspaceId}/deployments",
{
@@ -240,7 +233,7 @@ test.describe("Deployment API", () => {
body: {
name,
slug: name,
- jobAgentId,
+ jobAgentSelector: selector,
jobAgentConfig: { image: "app:latest" },
},
},
@@ -260,9 +253,7 @@ test.describe("Deployment API", () => {
expect(getRes.response.status).toBe(200);
const { deployment } = getRes.data!;
- expect(deployment.jobAgentSelector).toBe(
- `jobAgent.id == "${jobAgentId}"`,
- );
+ expect(deployment.jobAgentSelector).toBe(selector);
expect(deployment.jobAgentConfig).toEqual({ image: "app:latest" });
await api.DELETE(
From fa14018285eefa6bbd4dccacfa799901ab59ef06 Mon Sep 17 00:00:00 2001
From: Aditya Choudhari
Date: Wed, 8 Apr 2026 16:26:58 -0700
Subject: [PATCH 5/6] fmt
---
.../pkg/selector/langs/cel/cel_matches_test.go | 8 ++++----
.../pkg/workspace/jobs/factory_test.go | 16 ++++++++--------
.../pkg/workspace/relationships/property_test.go | 16 ++++++++--------
3 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/apps/workspace-engine/pkg/selector/langs/cel/cel_matches_test.go b/apps/workspace-engine/pkg/selector/langs/cel/cel_matches_test.go
index b58122307..3669d5992 100644
--- a/apps/workspace-engine/pkg/selector/langs/cel/cel_matches_test.go
+++ b/apps/workspace-engine/pkg/selector/langs/cel/cel_matches_test.go
@@ -202,10 +202,10 @@ func TestCelSelector_Matches_DeploymentWithOptionalFields(t *testing.T) {
require.NoError(t, err)
d := &oapi.Deployment{
- Id: "d-1",
- Name: "web",
- Slug: "web-slug",
- Description: &desc,
+ Id: "d-1",
+ Name: "web",
+ Slug: "web-slug",
+ Description: &desc,
JobAgentSelector: "jobAgent.id == \"" + agentId + "\"",
}
matched, err := condition.Matches(d)
diff --git a/apps/workspace-engine/pkg/workspace/jobs/factory_test.go b/apps/workspace-engine/pkg/workspace/jobs/factory_test.go
index a4a7778c5..ceae73a35 100644
--- a/apps/workspace-engine/pkg/workspace/jobs/factory_test.go
+++ b/apps/workspace-engine/pkg/workspace/jobs/factory_test.go
@@ -201,7 +201,7 @@ func TestFactory_CreateJobForRelease_SetsCorrectJobFields(t *testing.T) {
deploymentConfig := mustCreateJobAgentConfig(t, `{"type": "custom"}`)
jobAgent := createTestJobAgent(t, jobAgentId, "custom", jobAgentConfig)
- deployment := createTestDeployment(t, deployID,deploymentConfig)
+ deployment := createTestDeployment(t, deployID, deploymentConfig)
environment := createTestEnvironment(t, envID, "production")
resource := createTestResource(
t,
@@ -259,7 +259,7 @@ func TestFactory_CreateJobForRelease_UniqueJobIds(t *testing.T) {
deploymentConfig := mustCreateJobAgentConfig(t, `{"type": "custom"}`)
jobAgent := createTestJobAgent(t, jobAgentId, "custom", jobAgentConfig)
- deployment := createTestDeployment(t, deployID,deploymentConfig)
+ deployment := createTestDeployment(t, deployID, deploymentConfig)
resource := createTestResource(
t,
resourceID,
@@ -414,7 +414,7 @@ func TestFactory_CreateJobForRelease_UsesResolvedJobAgentConfig(t *testing.T) {
versionConfig := oapi.JobAgentConfig{"shared": "from_version", "version_only": "yes"}
jobAgent := createTestJobAgent(t, jobAgentId, "custom", agentConfig)
- deployment := createTestDeployment(t, deployID,deployConfig)
+ deployment := createTestDeployment(t, deployID, deployConfig)
environment := &oapi.Environment{
Id: envID, Name: "prod", Metadata: map[string]string{},
}
@@ -465,7 +465,7 @@ func TestFactory_CreateJobForRelease_DeploymentTemplateOverridesAgentTemplate(t
deployConfig := mustCreateJobAgentConfig(t, `{"template": "deployment-template"}`)
jobAgent := createTestJobAgent(t, jobAgentId, "argocd", agentConfig)
- deployment := createTestDeployment(t, deployID,deployConfig)
+ deployment := createTestDeployment(t, deployID, deployConfig)
environment := &oapi.Environment{
Id: envID, Name: "prod", Metadata: map[string]string{},
}
@@ -510,7 +510,7 @@ func TestFactory_CreateJobForRelease_VersionTemplateOverridesDeploymentAndAgentT
versionConfig := oapi.JobAgentConfig{"template": "version-template"}
jobAgent := createTestJobAgent(t, jobAgentID, "argocd", agentConfig)
- deployment := createTestDeployment(t, deployID,deployConfig)
+ deployment := createTestDeployment(t, deployID, deployConfig)
environment := &oapi.Environment{
Id: envID, Name: "prod", Metadata: map[string]string{},
}
@@ -611,7 +611,7 @@ func TestFactory_CreateJobForRelease_UsesResolvedConfigWithoutReMerge(t *testing
}`)
jobAgent := createTestJobAgent(t, jobAgentID, "argocd", resolvedConfig)
- deployment := createTestDeployment(t, deployID,deployConfig)
+ deployment := createTestDeployment(t, deployID, deployConfig)
environment := &oapi.Environment{
Id: envID, Name: "prod", Metadata: map[string]string{},
}
@@ -646,7 +646,7 @@ func TestFactory_CreateJobForRelease_DispatchContextEnvironmentNotFound(t *testi
missingEnvID := newID()
agent := createTestJobAgent(t, jobAgentId, "custom", mustCreateJobAgentConfig(t, `{}`))
- deployment := createTestDeployment(t, deployID,mustCreateJobAgentConfig(t, `{}`))
+ deployment := createTestDeployment(t, deployID, mustCreateJobAgentConfig(t, `{}`))
resource := &oapi.Resource{
Id: resourceID, Name: "server-1", Kind: "server", Identifier: "server-1",
Config: map[string]any{}, Metadata: map[string]string{}, CreatedAt: time.Now(),
@@ -675,7 +675,7 @@ func TestFactory_CreateJobForRelease_DispatchContextResourceNotFound(t *testing.
missingResourceID := newID()
agent := createTestJobAgent(t, jobAgentId, "custom", mustCreateJobAgentConfig(t, `{}`))
- deployment := createTestDeployment(t, deployID,mustCreateJobAgentConfig(t, `{}`))
+ deployment := createTestDeployment(t, deployID, mustCreateJobAgentConfig(t, `{}`))
environment := &oapi.Environment{
Id: envID, Name: "prod", Metadata: map[string]string{},
}
diff --git a/apps/workspace-engine/pkg/workspace/relationships/property_test.go b/apps/workspace-engine/pkg/workspace/relationships/property_test.go
index 958ede263..721b698e8 100644
--- a/apps/workspace-engine/pkg/workspace/relationships/property_test.go
+++ b/apps/workspace-engine/pkg/workspace/relationships/property_test.go
@@ -122,10 +122,10 @@ func TestPropertyValueExtraction_Deployment(t *testing.T) {
desc := "my deployment"
agentID := "agent-1"
deployment := &oapi.Deployment{
- Id: "dep-1",
- Name: "my-deployment",
- Slug: "my-deployment-slug",
- Description: &desc,
+ Id: "dep-1",
+ Name: "my-deployment",
+ Slug: "my-deployment-slug",
+ Description: &desc,
JobAgentSelector: "jobAgent.id == \"" + agentID + "\"",
JobAgentConfig: map[string]any{
"repo": "my-repo",
@@ -183,10 +183,10 @@ func TestPropertyValueExtraction_Deployment(t *testing.T) {
func TestPropertyValueExtraction_Deployment_NilFields(t *testing.T) {
deployment := &oapi.Deployment{
- Id: "dep-1",
- Name: "my-deployment",
- Slug: "my-slug",
- Description: nil,
+ Id: "dep-1",
+ Name: "my-deployment",
+ Slug: "my-slug",
+ Description: nil,
JobAgentSelector: "",
}
entity := makeDeploymentEntity(deployment)
From faf85a4163826af596ba5157c3a75dc543da785e Mon Sep 17 00:00:00 2001
From: Aditya Choudhari
Date: Wed, 8 Apr 2026 16:36:43 -0700
Subject: [PATCH 6/6] litn
---
apps/workspace-engine/pkg/db/convert_test.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/apps/workspace-engine/pkg/db/convert_test.go b/apps/workspace-engine/pkg/db/convert_test.go
index 9d65c7d02..3d92f1029 100644
--- a/apps/workspace-engine/pkg/db/convert_test.go
+++ b/apps/workspace-engine/pkg/db/convert_test.go
@@ -80,7 +80,7 @@ func TestToOapiDeployment(t *testing.T) {
assert.NotNil(t, dep.Description)
assert.Equal(t, "Main API deployment", *dep.Description)
assert.Equal(t, map[string]string{"team": "platform"}, dep.Metadata)
- assert.Equal(t, "", dep.JobAgentSelector, "empty selector when not set")
+ assert.Empty(t, dep.JobAgentSelector, "empty selector when not set")
}
func TestToOapiDeployment_NilOptionalFields(t *testing.T) {