|
@@ -68,6 +68,7 @@ export const deletionValidator = z.object({
|
|
|
export const clientAppValidator = z.object({
|
|
export const clientAppValidator = z.object({
|
|
|
name: z.string().min(1),
|
|
name: z.string().min(1),
|
|
|
services: serviceValidator.array(),
|
|
services: serviceValidator.array(),
|
|
|
|
|
+ predeploy: serviceValidator.array().optional(),
|
|
|
env: z.record(z.string(), z.string()).default({}),
|
|
env: z.record(z.string(), z.string()).default({}),
|
|
|
build: buildValidator,
|
|
build: buildValidator,
|
|
|
});
|
|
});
|
|
@@ -164,13 +165,12 @@ export function clientAppToProto(data: PorterAppFormData): PorterApp {
|
|
|
const { app, source } = data;
|
|
const { app, source } = data;
|
|
|
|
|
|
|
|
const services = app.services
|
|
const services = app.services
|
|
|
- .filter((s) => !isPredeployService(s))
|
|
|
|
|
.reduce((acc: Record<string, Service>, svc) => {
|
|
.reduce((acc: Record<string, Service>, svc) => {
|
|
|
acc[svc.name.value] = serviceProto(serializeService(svc));
|
|
acc[svc.name.value] = serviceProto(serializeService(svc));
|
|
|
return acc;
|
|
return acc;
|
|
|
}, {});
|
|
}, {});
|
|
|
|
|
|
|
|
- const predeploy = app.services.find((s) => isPredeployService(s));
|
|
|
|
|
|
|
+ const predeploy = app.predeploy?.[0]
|
|
|
|
|
|
|
|
const proto = match(source)
|
|
const proto = match(source)
|
|
|
.with(
|
|
.with(
|
|
@@ -289,19 +289,20 @@ export function clientAppFromProto(
|
|
|
|
|
|
|
|
const predeployOverrides = serializeService(overrides.predeploy);
|
|
const predeployOverrides = serializeService(overrides.predeploy);
|
|
|
const predeploy = proto.predeploy
|
|
const predeploy = proto.predeploy
|
|
|
- ? deserializeService({
|
|
|
|
|
- service: serializedServiceFromProto({
|
|
|
|
|
- name: "pre-deploy",
|
|
|
|
|
- service: proto.predeploy,
|
|
|
|
|
- isPredeploy: true,
|
|
|
|
|
- }),
|
|
|
|
|
- override: predeployOverrides,
|
|
|
|
|
- })
|
|
|
|
|
|
|
+ ? [deserializeService({
|
|
|
|
|
+ service: serializedServiceFromProto({
|
|
|
|
|
+ name: "pre-deploy",
|
|
|
|
|
+ service: proto.predeploy,
|
|
|
|
|
+ isPredeploy: true,
|
|
|
|
|
+ }),
|
|
|
|
|
+ override: predeployOverrides,
|
|
|
|
|
+ })]
|
|
|
: undefined;
|
|
: undefined;
|
|
|
|
|
|
|
|
return {
|
|
return {
|
|
|
name: proto.name,
|
|
name: proto.name,
|
|
|
- services: [...services, predeploy].filter(valueExists),
|
|
|
|
|
|
|
+ services,
|
|
|
|
|
+ predeploy,
|
|
|
env: proto.env,
|
|
env: proto.env,
|
|
|
build: clientBuildFromProto(proto.build) ?? {
|
|
build: clientBuildFromProto(proto.build) ?? {
|
|
|
method: "pack",
|
|
method: "pack",
|