Bläddra i källkod

use tag and image repo uri for apps

Mohammed Nafees 3 år sedan
förälder
incheckning
e742e15606
3 ändrade filer med 70 tillägg och 9 borttagningar
  1. 67 8
      cli/cmd/preview/v2/default_driver.go
  2. 1 1
      go.mod
  3. 2 0
      go.sum

+ 67 - 8
cli/cmd/preview/v2/default_driver.go

@@ -6,6 +6,8 @@ import (
 	"os"
 	"strings"
 
+	"github.com/cli/cli/git"
+	"github.com/fatih/color"
 	"github.com/mitchellh/mapstructure"
 	api "github.com/porter-dev/porter/api/client"
 	apiTypes "github.com/porter-dev/porter/api/types"
@@ -41,7 +43,7 @@ func (d *DefaultDriver) PostApply(resource *types.YAMLNode[*types.Resource]) err
 	return nil
 }
 
-func (d *DefaultDriver) OnError(resource *types.YAMLNode[*types.Resource], err error) {
+func (d *DefaultDriver) OnError(resource *types.YAMLNode[*types.Resource], errs []error) {
 
 }
 
@@ -156,17 +158,22 @@ func (d *DefaultDriver) applyJob(
 		})
 	}
 
+	tag := getImageTag()
+
 	sharedOpts := &deploy.SharedOpts{
 		ProjectID:       config.GetCLIConfig().Project,
 		ClusterID:       config.GetCLIConfig().Cluster,
 		Namespace:       d.Namespace,
 		LocalPath:       buildConfig.Context.GetValue(),
 		LocalDockerfile: buildConfig.Dockerfile.GetValue(),
-		// OverrideTag
-		Method:        deploy.DeployBuildType(buildConfig.Method.GetValue()),
-		AdditionalEnv: flattenedBuildEnv,
-		EnvGroups:     flattenedBuildEnvGroup,
-		// UseCache
+		OverrideTag:     tag,
+		Method:          deploy.DeployBuildType(buildConfig.Method.GetValue()),
+		AdditionalEnv:   flattenedBuildEnv,
+		EnvGroups:       flattenedBuildEnvGroup,
+	}
+
+	if buildConfig.Method.GetValue() == "pack" && buildConfig.UseCache != nil {
+		sharedOpts.UseCache = buildConfig.UseCache.GetValue()
 	}
 
 	if exists {
@@ -248,14 +255,36 @@ func (d *DefaultDriver) applyJob(
 			}
 		}
 
+		var registryURL string
+
+		if buildConfig.ImageRepoURI != nil {
+			registryURL = buildConfig.ImageRepoURI.GetValue()
+		}
+
+		if registryURL == "" {
+			regList, err := d.APIClient.ListRegistries(context.Background(), config.GetCLIConfig().Project)
+
+			if err != nil {
+				return fmt.Errorf("error fetching list of registries while trying to choose registry to deploy new"+
+					" image for app '%s': %w", resource.GetValue().Name.GetValue(), err)
+			}
+
+			if len(*regList) == 0 {
+				return fmt.Errorf("no registries linked with project, needed to deploy new image for app '%s'",
+					resource.GetValue().Name.GetValue())
+			} else {
+				registryURL = (*regList)[0].URL
+			}
+		}
+
 		createAgent := &deploy.CreateAgent{
 			Client: d.APIClient,
 			CreateOpts: &deploy.CreateOpts{
 				SharedOpts:  sharedOpts,
 				Kind:        resource.GetValue().Type.GetValue(),
 				ReleaseName: resource.GetValue().Name.GetValue(),
-				// RegistryURL: registryURL, // FIXME: best way to get this ??
-				RepoSuffix: repoSuffix,
+				RegistryURL: registryURL,
+				RepoSuffix:  repoSuffix,
 			},
 		}
 
@@ -314,3 +343,33 @@ func (d *DefaultDriver) applyJob(
 
 	return nil
 }
+
+// fetching the image tag works in 3 steps
+//   - read PORTER_TAG env var
+//   - read the git SHA from the current directory
+//   - default to 'latest' tag
+func getImageTag() string {
+	tag := os.Getenv("PORTER_TAG")
+
+	if tag == "" {
+		commit, err := git.LastCommit()
+
+		if err == nil {
+			tag = commit.Sha[:7]
+
+			color.New(color.FgBlue).Printf("[porter.yaml v2] PORTER_TAG not defined, falling back to image tag '%s'"+
+				" from git SHA\n", tag)
+		}
+	} else {
+		color.New(color.FgBlue).Printf("[porter.yaml v2] Using image tag '%s' from PORTER_TAG environment variable\n", tag)
+	}
+
+	if tag == "" {
+		color.New(color.FgBlue).Println("[porter.yaml v2] PORTER_TAG not defined, not a git repository, falling back" +
+			" to image tag 'latest'")
+
+		tag = "latest"
+	}
+
+	return tag
+}

+ 1 - 1
go.mod

@@ -118,7 +118,7 @@ require (
 	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
 	github.com/open-policy-agent/opa v0.44.0 // indirect
 	github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 // indirect
-	github.com/porter-dev/switchboard/v2 v2.0.0-20221028173223-eb997250587e // indirect
+	github.com/porter-dev/switchboard/v2 v2.0.0-20221031143408-859328434249 // indirect
 	github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
 	github.com/santhosh-tekuri/jsonschema v1.2.4 // indirect
 	github.com/santhosh-tekuri/jsonschema/v5 v5.0.2 // indirect

+ 2 - 0
go.sum

@@ -1739,6 +1739,8 @@ github.com/porter-dev/switchboard/v2 v2.0.0-20221028153033-aaeedd2d3fd6 h1:lHCsf
 github.com/porter-dev/switchboard/v2 v2.0.0-20221028153033-aaeedd2d3fd6/go.mod h1:I/oKy2BmfIVtirJXM28W76Yqih0lR8EiaZ4lE5E5lY0=
 github.com/porter-dev/switchboard/v2 v2.0.0-20221028173223-eb997250587e h1:LAaLwk/lMhTxJ55Xc5Pw/dMDyRTPhliWAI8K6SvgBWI=
 github.com/porter-dev/switchboard/v2 v2.0.0-20221028173223-eb997250587e/go.mod h1:I/oKy2BmfIVtirJXM28W76Yqih0lR8EiaZ4lE5E5lY0=
+github.com/porter-dev/switchboard/v2 v2.0.0-20221031143408-859328434249 h1:om6giTswo2FCsL9FuMVxvMp+Kum/kWYIIM1gvbinZbg=
+github.com/porter-dev/switchboard/v2 v2.0.0-20221031143408-859328434249/go.mod h1:I/oKy2BmfIVtirJXM28W76Yqih0lR8EiaZ4lE5E5lY0=
 github.com/porter-dev/switchboard/v2 v2.0.0 h1:mg4c6mMHFNFBgprcac7ZcPxTPJeqZtfmH1O6pPt1h3U=
 github.com/porter-dev/switchboard/v2 v2.0.0/go.mod h1:I/oKy2BmfIVtirJXM28W76Yqih0lR8EiaZ4lE5E5lY0=
 github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=