feat: experimental s3 support

This commit is contained in:
2026-08-28 22:07:40 +07:00 Unverified
parent a1c3298f02
commit a1705487f2
8 changed files with 506 additions and 19 deletions
+29 -3
View File
@@ -15,6 +15,7 @@ import {
getComposePostgresClaims,
reconcilePostgresClaims,
} from "../lib/database";
import { getComposeS3Claims, reconcileS3Claims } from "../lib/storage";
import { restartDeployment, waitForDeploymentRollout } from "../lib/shared";
type UpContext = {
@@ -24,6 +25,17 @@ type UpContext = {
staleResources?: KubernetesResource[];
};
function mergeServiceEnv(
current: Record<string, Record<string, string>> | undefined,
next: Record<string, Record<string, string>>,
): Record<string, Record<string, string>> {
const merged = { ...current };
for (const [service, environment] of Object.entries(next)) {
merged[service] = { ...merged[service], ...environment };
}
return merged;
}
function getDeploymentNames(resources: KubernetesResource[]): string[] {
return resources
.filter((resource) => resource.kind === "Deployment")
@@ -74,9 +86,23 @@ export async function runUp(build: boolean) {
? false
: "No managed postgres volumes",
task: async (taskCtx, task) => {
taskCtx.serviceEnv = await reconcilePostgresClaims(
project,
taskCtx.compose!,
taskCtx.serviceEnv = mergeServiceEnv(
taskCtx.serviceEnv,
await reconcilePostgresClaims(project, taskCtx.compose!),
);
task.output = `${Object.keys(taskCtx.serviceEnv).length} service${Object.keys(taskCtx.serviceEnv).length === 1 ? "" : "s"}`;
},
},
{
title: "Reconcile S3 storage",
skip: (taskCtx) =>
getComposeS3Claims(taskCtx.compose!).length > 0
? false
: "No managed S3 volumes",
task: async (taskCtx, task) => {
taskCtx.serviceEnv = mergeServiceEnv(
taskCtx.serviceEnv,
await reconcileS3Claims(project, taskCtx.compose!),
);
task.output = `${Object.keys(taskCtx.serviceEnv).length} service${Object.keys(taskCtx.serviceEnv).length === 1 ? "" : "s"}`;
},