Răsfoiți Sursa

Merge pull request #1498 from porter-dev/staging

Staging (pprof, onboarding modal fix, cert fix, buildpack cli env changes) -> Prod
Nicolas Frati 4 ani în urmă
părinte
comite
b44ad5f1ff

+ 75 - 0
cli/cmd/pack/logger.go

@@ -0,0 +1,75 @@
+package pack
+
+import (
+	"fmt"
+	"io"
+	"log"
+	"os"
+	"strings"
+
+	"github.com/buildpacks/pack/logging"
+)
+
+type packLogger struct {
+	out *log.Logger
+}
+
+// Replicate the exact behavior of https://github.com/buildpacks/pack/blob/main/pkg/logging/logger_simple.go
+func newPackLogger() logging.Logger {
+	return &packLogger{
+		out: log.New(os.Stderr, "", log.LstdFlags|log.Lmicroseconds),
+	}
+}
+
+const (
+	debugPrefix = "DEBUG:"
+	infoPrefix  = "INFO:"
+	warnPrefix  = "WARN:"
+	errorPrefix = "ERROR:"
+	prefixFmt   = "%-7s %s"
+)
+
+func (l *packLogger) Debug(msg string) {
+	l.out.Printf(prefixFmt, debugPrefix, msg)
+}
+
+func (l *packLogger) Debugf(format string, v ...interface{}) {
+	// We do not want to print the environment variables for now as they might
+	// contain sensitive information like client IDs and secrets
+	// Refer: https://github.com/buildpacks/pack/blob/main/internal/builder/builder.go#L349
+	if !strings.HasPrefix(format, "Provided Environment Variables") {
+		l.out.Printf(prefixFmt, debugPrefix, fmt.Sprintf(format, v...))
+	}
+}
+
+func (l *packLogger) Info(msg string) {
+	l.out.Printf(prefixFmt, infoPrefix, msg)
+}
+
+func (l *packLogger) Infof(format string, v ...interface{}) {
+	l.out.Printf(prefixFmt, infoPrefix, fmt.Sprintf(format, v...))
+}
+
+func (l *packLogger) Warn(msg string) {
+	l.out.Printf(prefixFmt, warnPrefix, msg)
+}
+
+func (l *packLogger) Warnf(format string, v ...interface{}) {
+	l.out.Printf(prefixFmt, warnPrefix, fmt.Sprintf(format, v...))
+}
+
+func (l *packLogger) Error(msg string) {
+	l.out.Printf(prefixFmt, errorPrefix, msg)
+}
+
+func (l *packLogger) Errorf(format string, v ...interface{}) {
+	l.out.Printf(prefixFmt, errorPrefix, fmt.Sprintf(format, v...))
+}
+
+func (l *packLogger) Writer() io.Writer {
+	return l.out.Writer()
+}
+
+func (l *packLogger) IsVerbose() bool {
+	return false
+}

+ 6 - 1
cli/cmd/pack/pack.go

@@ -4,6 +4,7 @@ import (
 	"context"
 	"fmt"
 	"path/filepath"
+	"strings"
 
 	"github.com/buildpacks/pack"
 	"github.com/porter-dev/porter/api/types"
@@ -17,7 +18,7 @@ func (a *Agent) Build(opts *docker.BuildOpts, buildConfig *types.BuildConfig) er
 	context := context.Background()
 
 	//initialize a pack client
-	client, err := pack.NewClient()
+	client, err := pack.NewClient(pack.WithLogger(newPackLogger()))
 
 	if err != nil {
 		return err
@@ -46,5 +47,9 @@ func (a *Agent) Build(opts *docker.BuildOpts, buildConfig *types.BuildConfig) er
 		// FIXME: use all the config vars
 	}
 
+	if strings.HasPrefix(buildOpts.Builder, "heroku") {
+		buildOpts.Buildpacks = append(buildOpts.Buildpacks, "heroku/procfile")
+	}
+
 	return client.Build(context, buildOpts)
 }

+ 9 - 2
dashboard/src/components/porter-form/field-components/ResourceList.tsx

@@ -27,8 +27,15 @@ const ResourceList: React.FC<ResourceListField> = (props) => {
   };
 
   useEffect(() => {
+    if (
+      !formState?.variables?.currentChart?.name ||
+      !formState?.variables?.namespace
+    ) {
+      return () => {};
+    }
+
     let { group, version, resource } = props.context.config;
-    let apiEndpoint = `/api/projects/${currentProject.id}/clusters/${currentCluster.id}/namespaces/${formState.variables.namespace}/releases/${formState.variables.currentChart.name}/0/form_stream?`;
+    let apiEndpoint = `/api/projects/${currentProject.id}/clusters/${currentCluster.id}/namespaces/${formState?.variables?.namespace}/releases/${formState?.variables?.currentChart?.name}/0/form_stream?`;
     apiEndpoint += `resource=${resource}&group=${group}&version=${version}`;
 
     const wsConfig = {
@@ -81,7 +88,7 @@ const ResourceList: React.FC<ResourceListField> = (props) => {
     return () => {
       closeAllWebsockets();
     };
-  }, []);
+  }, [formState?.variables?.currentChart, formState?.variables?.namespace]);
 
   return (
     <ResourceListWrapper>

+ 7 - 5
dashboard/src/main/home/modals/SkipProvisioningModal.tsx

@@ -9,7 +9,7 @@ import styled from "styled-components";
  * will open this modal to let user skip onboarding and keep using porter.
  */
 const SkipOnboardingModal = () => {
-  const { currentModalData, setCurrentModal } = useContext(Context);
+  const { currentModalData, setHasFinishedOnboarding } = useContext(Context);
 
   return (
     <>
@@ -22,10 +22,12 @@ const SkipOnboardingModal = () => {
         <ActionButton
           text="Yes, skip setup"
           color="#616FEEcc"
-          onClick={() =>
-            typeof currentModalData?.skipOnboarding === "function" &&
-            currentModalData.skipOnboarding()
-          }
+          onClick={() => {
+            if (typeof currentModalData?.skipOnboarding === "function") {
+              currentModalData.skipOnboarding();
+            }
+            setHasFinishedOnboarding(true);
+          }}
           status={""}
           clearPosition
         />

+ 1 - 1
dashboard/src/main/home/onboarding/Onboarding.tsx

@@ -135,7 +135,7 @@ const Onboarding = () => {
 
       const hasClusters = Array.isArray(clusters) && clusters.length;
 
-      if (hasClusters) {
+      if (hasClusters && !context.hasFinishedOnboarding) {
         setCurrentModal("SkipOnboardingModal", { skipOnboarding });
       }
     } catch (error) {

+ 5 - 1
dashboard/src/main/home/onboarding/state/StepHandler.ts

@@ -1,5 +1,6 @@
-import { useEffect } from "react";
+import { useContext, useEffect } from "react";
 import { useLocation } from "react-router";
+import { Context } from "shared/Context";
 import { useRouting } from "shared/routing";
 import { proxy, useSnapshot } from "valtio";
 import { StepKey, Steps } from "../types";
@@ -287,12 +288,15 @@ export const useSteps = (isParentLoading?: boolean) => {
   const snap = useSnapshot(StepHandler);
   const location = useLocation();
   const { pushFiltered } = useRouting();
+  const { setHasFinishedOnboarding } = useContext(Context);
+
   useEffect(() => {
     if (isParentLoading) {
       return;
     }
     if (snap.currentStepName === "clean_up") {
       StepHandler.actions.clearState();
+      setHasFinishedOnboarding(true);
     }
     pushFiltered(snap.currentStep.url, ["tab"]);
   }, [location.pathname, snap.currentStep?.url, isParentLoading]);