Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 0 additions & 9 deletions apps/api/src/routes/v1/workspaces/deployments.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,6 @@ const formatDeployment = (dep: typeof schema.deployment.$inferSelect) => ({
name: dep.name,
slug: dep.name,
description: dep.description,
jobAgentId: dep.jobAgentId ?? undefined,
jobAgentConfig: dep.jobAgentConfig,
jobAgents: dep.jobAgents,
resourceSelector: parseSelector(dep.resourceSelector),
metadata: dep.metadata,
});
Expand Down Expand Up @@ -208,8 +205,6 @@ const postDeployment: AsyncTypedHandler<
id,
name: body.name,
description: body.description ?? "",
jobAgentConfig: body.jobAgentConfig ?? {},
jobAgents: body.jobAgents ?? [],
resourceSelector: body.resourceSelector ?? "false",
metadata: body.metadata ?? {},
workspaceId,
Expand All @@ -236,8 +231,6 @@ const upsertDeployment: AsyncTypedHandler<
id: deploymentId,
name: body.name,
description: body.description ?? "",
jobAgentConfig: body.jobAgentConfig ?? {},
jobAgents: body.jobAgents ?? [],
resourceSelector: body.resourceSelector ?? "false",
metadata: body.metadata ?? {},
workspaceId,
Expand All @@ -247,8 +240,6 @@ const upsertDeployment: AsyncTypedHandler<
set: {
name: body.name,
description: body.description ?? "",
jobAgentConfig: body.jobAgentConfig ?? {},
jobAgents: body.jobAgents ?? [],
resourceSelector: body.resourceSelector ?? "false",
metadata: body.metadata ?? {},
},
Expand Down
3 changes: 0 additions & 3 deletions apps/api/src/routes/v1/workspaces/resources.ts
Original file line number Diff line number Diff line change
Expand Up @@ -292,9 +292,6 @@ const getDeploymentsForResource: AsyncTypedHandler<
name: r.deployment.name,
slug: r.deployment.name,
description: r.deployment.description,
jobAgentId: r.deployment.jobAgentId ?? undefined,
jobAgentConfig: r.deployment.jobAgentConfig,
jobAgents: r.deployment.jobAgents,
resourceSelector: parseSelector(r.deployment.resourceSelector),
metadata: r.deployment.metadata,
}));
Expand Down
3 changes: 0 additions & 3 deletions apps/api/src/routes/v1/workspaces/systems.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,6 @@ const formatDeployment = (dep: typeof schema.deployment.$inferSelect) => ({
name: dep.name,
slug: dep.name,
description: dep.description,
jobAgentId: dep.jobAgentId ?? undefined,
jobAgentConfig: dep.jobAgentConfig,
jobAgents: dep.jobAgents,
resourceSelector: parseSelector(dep.resourceSelector),
metadata: dep.metadata,
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,10 @@ type Deployment = {
name: string;
resourceSelector?: string | null;
description?: string | null;
jobAgentId?: string | null;
jobAgentConfig?: Record<string, any> | null;
jobAgents: Array<{
ref: string;
deploymentId: string;
jobAgentId: string;
config: Record<string, any>;
selector: string;
}>;
systemDeployments: Array<{
systemId: string;
Expand Down
2 changes: 0 additions & 2 deletions apps/web/app/routes/ws/deployments/_components/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,6 @@ export type Deployment = {
description: string;
workspaceId: string | null;
resourceSelector: string | null;
jobAgentId: string | null;
jobAgentConfig: Record<string, unknown>;
metadata: Record<string, string>;
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ import { Skeleton } from "~/components/ui/skeleton";
import { useJobAgent } from "../_hooks/job-agents";

type DeploymentJobAgent = {
ref: string;
deploymentId: string;
jobAgentId: string;
config: Record<string, any>;
selector: string;
};

type DeploymentAgentCardProps = {
Expand Down Expand Up @@ -123,7 +123,7 @@ function Config({
export function DeploymentAgentCard({
deploymentAgent,
}: DeploymentAgentCardProps) {
const { jobAgent, isLoading } = useJobAgent(deploymentAgent.ref);
const { jobAgent, isLoading } = useJobAgent(deploymentAgent.jobAgentId);
if (isLoading) return <SkeletonCard />;
if (jobAgent == null) return null;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ export default function DeploymentJobAgentPage() {
<div className="flex flex-col gap-4">
{deployment.jobAgents.map((deploymentAgent) => (
<DeploymentAgentCard
key={deploymentAgent.ref}
key={deploymentAgent.jobAgentId}
deploymentAgent={deploymentAgent}
/>
))}
Expand Down
2 changes: 1 addition & 1 deletion apps/web/app/routes/ws/runners/JobAgentCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ function DeploymentList({ jobAgentId }: { jobAgentId: string }) {
);
return (
<div className="flex flex-wrap gap-1.5">
{deployments.map((deployment) => (
{deployments.map(({ deployment }) => (
<a
href={`/${workspace.slug}/deployments/${deployment.id}`}
key={deployment.id}
Expand Down
32 changes: 12 additions & 20 deletions apps/workspace-engine/pkg/db/computed_relationships.sql.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

23 changes: 15 additions & 8 deletions apps/workspace-engine/pkg/db/convert.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,25 @@ import (

func ToOapiDeployment(row Deployment) *oapi.Deployment {
d := &oapi.Deployment{
Id: row.ID.String(),
Name: row.Name,
JobAgentConfig: oapi.JobAgentConfig(row.JobAgentConfig),
Metadata: row.Metadata,
Id: row.ID.String(),
Name: row.Name,
Metadata: row.Metadata,
}
if row.Description != "" {
d.Description = &row.Description
}
if row.JobAgentID != uuid.Nil {
s := row.JobAgentID.String()
d.JobAgentId = &s
}
return d
}

func ToOapiDeploymentWithJobAgents(row GetDeploymentWithJobAgentsRow) *oapi.Deployment {
d := ToOapiDeployment(Deployment{
ID: row.ID,
Name: row.Name,
Description: row.Description,
ResourceSelector: row.ResourceSelector,
Metadata: row.Metadata,
WorkspaceID: row.WorkspaceID,
})
if row.JobAgents != nil {
var jobAgents []oapi.DeploymentJobAgent
if err := json.Unmarshal(row.JobAgents, &jobAgents); err == nil {
Expand Down
65 changes: 51 additions & 14 deletions apps/workspace-engine/pkg/db/convert_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,12 @@ func TestToOapiEnvironment_NilOptionalFields(t *testing.T) {

func TestToOapiDeployment(t *testing.T) {
depID := uuid.New()
agentID := uuid.New()

row := Deployment{
ID: depID,
Name: "api-server",
Description: "Main API deployment",
JobAgentID: agentID,
JobAgentConfig: map[string]any{"image": "api:latest"},
Metadata: map[string]string{"team": "platform"},
ID: depID,
Name: "api-server",
Description: "Main API deployment",
Metadata: map[string]string{"team": "platform"},
}

dep := ToOapiDeployment(row)
Expand All @@ -82,26 +79,66 @@ func TestToOapiDeployment(t *testing.T) {
assert.Equal(t, "api-server", dep.Name)
assert.NotNil(t, dep.Description)
assert.Equal(t, "Main API deployment", *dep.Description)
assert.NotNil(t, dep.JobAgentId)
assert.Equal(t, agentID.String(), *dep.JobAgentId)
assert.Equal(t, map[string]string{"team": "platform"}, dep.Metadata)
assert.Nil(t, dep.JobAgents, "base convert should not populate job agents")
}

func TestToOapiDeployment_NilOptionalFields(t *testing.T) {
depID := uuid.New()

row := Deployment{
ID: depID,
Name: "worker",
JobAgentConfig: map[string]any{},
Metadata: map[string]string{},
ID: depID,
Name: "worker",
Metadata: map[string]string{},
}

dep := ToOapiDeployment(row)

assert.Equal(t, depID.String(), dep.Id)
assert.Nil(t, dep.Description, "empty description should not be set")
assert.Nil(t, dep.JobAgentId, "nil UUID agent should not be set")
}

func TestToOapiDeploymentWithJobAgents(t *testing.T) {
depID := uuid.New()
agentID := uuid.New()

row := GetDeploymentWithJobAgentsRow{
ID: depID,
Name: "api-server",
Description: "Main API deployment",
Metadata: map[string]string{"team": "platform"},
JobAgents: []byte(`[{"ref":"` + agentID.String() + `","config":{"image":"api:latest"}}]`),
}

dep := ToOapiDeploymentWithJobAgents(row)

assert.Equal(t, depID.String(), dep.Id)
assert.Equal(t, "api-server", dep.Name)
assert.NotNil(t, dep.Description)
assert.Equal(t, "Main API deployment", *dep.Description)
assert.Equal(t, map[string]string{"team": "platform"}, dep.Metadata)
require.NotNil(t, dep.JobAgents)
require.Len(t, *dep.JobAgents, 1)
assert.Equal(t, agentID.String(), (*dep.JobAgents)[0].Ref)
assert.Equal(t, "api:latest", (*dep.JobAgents)[0].Config["image"])
}

func TestToOapiDeploymentWithJobAgents_NoAgents(t *testing.T) {
depID := uuid.New()

row := GetDeploymentWithJobAgentsRow{
ID: depID,
Name: "worker",
Metadata: map[string]string{},
JobAgents: []byte(`[]`),
}

dep := ToOapiDeploymentWithJobAgents(row)

assert.Equal(t, depID.String(), dep.Id)
assert.Nil(t, dep.Description, "empty description should not be set")
require.NotNil(t, dep.JobAgents)
assert.Empty(t, *dep.JobAgents)
}

// ---------------------------------------------------------------------------
Expand Down
Loading
Loading