Selaa lähdekoodia

Add auto rollback enabled flag to FE (#4229)

Feroze Mohideen 2 vuotta sitten
vanhempi
sitoutus
1e5ffc0a57

+ 7 - 7
dashboard/package-lock.json

@@ -95,7 +95,7 @@
         "@babel/preset-typescript": "^7.15.0",
         "@ianvs/prettier-plugin-sort-imports": "^4.1.1",
         "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3",
-        "@porter-dev/api-contracts": "^0.2.97",
+        "@porter-dev/api-contracts": "^0.2.98",
         "@testing-library/jest-dom": "^4.2.4",
         "@testing-library/react": "^9.3.2",
         "@testing-library/user-event": "^7.1.2",
@@ -2754,9 +2754,9 @@
       }
     },
     "node_modules/@porter-dev/api-contracts": {
-      "version": "0.2.97",
-      "resolved": "https://registry.npmjs.org/@porter-dev/api-contracts/-/api-contracts-0.2.97.tgz",
-      "integrity": "sha512-LceOZWw1zjWH3E/i9GO6cRfc9KSP68ofR0YTxmIruAg3V2xCjvtW762r9NrXzJE4TkJryodCE+e7ZE2J0LVJPg==",
+      "version": "0.2.98",
+      "resolved": "https://registry.npmjs.org/@porter-dev/api-contracts/-/api-contracts-0.2.98.tgz",
+      "integrity": "sha512-i+8L7Ji/kuwcCTDM3TXh0kpsspLGSygTW1qhP7sK/yq5K8O86K8alucl44I5pVkJB+1pooXCCWS3AeOJNYpfIw==",
       "dev": true,
       "dependencies": {
         "@bufbuild/protobuf": "^1.1.0"
@@ -20056,9 +20056,9 @@
       "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A=="
     },
     "@porter-dev/api-contracts": {
-      "version": "0.2.97",
-      "resolved": "https://registry.npmjs.org/@porter-dev/api-contracts/-/api-contracts-0.2.97.tgz",
-      "integrity": "sha512-LceOZWw1zjWH3E/i9GO6cRfc9KSP68ofR0YTxmIruAg3V2xCjvtW762r9NrXzJE4TkJryodCE+e7ZE2J0LVJPg==",
+      "version": "0.2.98",
+      "resolved": "https://registry.npmjs.org/@porter-dev/api-contracts/-/api-contracts-0.2.98.tgz",
+      "integrity": "sha512-i+8L7Ji/kuwcCTDM3TXh0kpsspLGSygTW1qhP7sK/yq5K8O86K8alucl44I5pVkJB+1pooXCCWS3AeOJNYpfIw==",
       "dev": true,
       "requires": {
         "@bufbuild/protobuf": "^1.1.0"

+ 1 - 1
dashboard/package.json

@@ -102,7 +102,7 @@
     "@babel/preset-typescript": "^7.15.0",
     "@ianvs/prettier-plugin-sort-imports": "^4.1.1",
     "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3",
-    "@porter-dev/api-contracts": "^0.2.97",
+    "@porter-dev/api-contracts": "^0.2.98",
     "@testing-library/jest-dom": "^4.2.4",
     "@testing-library/react": "^9.3.2",
     "@testing-library/user-event": "^7.1.2",

+ 21 - 0
dashboard/src/lib/porter-apps/index.ts

@@ -1,4 +1,5 @@
 import {
+  AutoRollback,
   Build,
   EFS,
   HelmOverrides,
@@ -99,6 +100,12 @@ export const clientAppValidator = z.object({
   build: buildValidator,
   helmOverrides: z.string().optional(),
   requiredApps: z.object({ name: z.string() }).array().default([]),
+  autoRollback: z
+    .object({
+      enabled: z.boolean(),
+      readOnly: z.boolean().optional(),
+    })
+    .default({ enabled: false, readOnly: false }),
 });
 export type ClientPorterApp = z.infer<typeof clientAppValidator>;
 
@@ -321,6 +328,9 @@ export function clientAppToProto(data: PorterAppFormData): PorterApp {
           requiredApps: app.requiredApps.map((app) => ({
             name: app.name,
           })),
+          autoRollback: new AutoRollback({
+            enabled: app.autoRollback.enabled,
+          }),
         })
     )
     .with(
@@ -347,6 +357,9 @@ export function clientAppToProto(data: PorterAppFormData): PorterApp {
           requiredApps: app.requiredApps.map((app) => ({
             name: app.name,
           })),
+          autoRollback: new AutoRollback({
+            enabled: app.autoRollback.enabled,
+          }),
         })
     )
     .exhaustive();
@@ -497,6 +510,10 @@ export function clientAppFromProto({
       requiredApps: proto.requiredApps.map((app) => ({
         name: app.name,
       })),
+      autoRollback: {
+        enabled: proto.autoRollback?.enabled ?? true, // enabled by default if not found in proto
+        readOnly: false, // TODO: detect autorollback from porter.yaml
+      },
     };
   }
 
@@ -539,6 +556,10 @@ export function clientAppFromProto({
     requiredApps: proto.requiredApps.map((app) => ({
       name: app.name,
     })),
+    autoRollback: {
+      enabled: proto.autoRollback?.enabled ?? true, // enabled by default if not found in proto
+      readOnly: false, // TODO: detect autorollback from porter.yaml
+    },
   };
 }
 

+ 3 - 1
dashboard/src/main/home/app-dashboard/app-view/AppDataContainer.tsx

@@ -239,7 +239,9 @@ const AppDataContainer: React.FC<AppDataContainerProps> = ({ tabParam }) => {
         await api.updateApp(
           "<token>",
           {
-            b64_app_proto: btoa(validatedAppProto.toJsonString()),
+            b64_app_proto: btoa(
+              validatedAppProto.toJsonString({ emitDefaultValues: true })
+            ),
             deployment_target_id: deploymentTarget.id,
             variables,
             secrets,

+ 6 - 2
dashboard/src/main/home/app-dashboard/create-app/CreateApp.tsx

@@ -9,6 +9,7 @@ import { withRouter, type RouteComponentProps } from "react-router";
 import styled from "styled-components";
 import { z } from "zod";
 
+import CreateDeploymentTargetModal from "components/CreateDeploymentTargetModal";
 import Back from "components/porter/Back";
 import Button from "components/porter/Button";
 import Container from "components/porter/Container";
@@ -45,7 +46,6 @@ import { Context } from "shared/Context";
 import { valueExists } from "shared/util";
 import web from "assets/web.png";
 
-import CreateDeploymentTargetModal from "components/CreateDeploymentTargetModal";
 import ImageSettings from "../image-settings/ImageSettings";
 import GithubActionModal from "../new-app-flow/GithubActionModal";
 import SourceSelector from "../new-app-flow/SourceSelector";
@@ -345,7 +345,11 @@ const CreateApp: React.FC<CreateAppProps> = ({ history }) => {
             "<token>",
             {
               deployment_target_id: deploymentTargetID,
-              b64_app_proto: btoa(app.toJsonString()),
+              b64_app_proto: btoa(
+                app.toJsonString({
+                  emitDefaultValues: true,
+                })
+              ),
               secrets,
               variables,
               is_env_override: true,

+ 1 - 1
go.mod

@@ -83,7 +83,7 @@ require (
 	github.com/matryer/is v1.4.0
 	github.com/nats-io/nats.go v1.24.0
 	github.com/open-policy-agent/opa v0.44.0
-	github.com/porter-dev/api-contracts v0.2.97
+	github.com/porter-dev/api-contracts v0.2.98
 	github.com/riandyrn/otelchi v0.5.1
 	github.com/santhosh-tekuri/jsonschema/v5 v5.0.1
 	github.com/stefanmcshane/helm v0.0.0-20221213002717-88a4a2c6e77d

+ 2 - 0
go.sum

@@ -1525,6 +1525,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
 github.com/polyfloyd/go-errorlint v0.0.0-20210722154253-910bb7978349/go.mod h1:wi9BfjxjF/bwiZ701TzmfKu6UKC357IOAtNr0Td0Lvw=
 github.com/porter-dev/api-contracts v0.2.97 h1:JXxg/b0R8hL2IurJAnSakRRSHx4zT9ZQDCqe1gvR0Uc=
 github.com/porter-dev/api-contracts v0.2.97/go.mod h1:fX6JmP5QuzxDLvqP3evFOTXjI4dHxsG0+VKNTjImZU8=
+github.com/porter-dev/api-contracts v0.2.98 h1:bfOmR9SfspEDkO72TF+YewGKvIpW9ZhcC6Nzpt1I9EI=
+github.com/porter-dev/api-contracts v0.2.98/go.mod h1:fX6JmP5QuzxDLvqP3evFOTXjI4dHxsG0+VKNTjImZU8=
 github.com/porter-dev/switchboard v0.0.3 h1:dBuYkiVLa5Ce7059d6qTe9a1C2XEORFEanhbtV92R+M=
 github.com/porter-dev/switchboard v0.0.3/go.mod h1:xSPzqSFMQ6OSbp42fhCi4AbGbQbsm6nRvOkrblFeXU4=
 github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=