From 8fdb79a806f220097c5b04bda08d0ca407e56674 Mon Sep 17 00:00:00 2001 From: Luca Lanziani Date: Fri, 14 Jul 2023 10:33:58 +0200 Subject: [PATCH] Use config file instead of passing all parameteres in the pipelines This reduces the number of parameters passed in the pipelines --- assets/github/onbranch.tmpl | 6 ----- assets/github/onmain.tmpl | 3 --- src/cli/cli.go | 19 +++++--------- src/cli/flags.go | 25 ++++++++++++------ src/cli/init.go | 15 +++-------- src/cli/init_test.go | 17 +++---------- src/services/docker/docker.go | 46 +++++++++++++++++++++------------- src/utils/defaults/defaults.go | 2 +- 8 files changed, 60 insertions(+), 73 deletions(-) diff --git a/assets/github/onbranch.tmpl b/assets/github/onbranch.tmpl index cf5a714..dbc78c4 100644 --- a/assets/github/onbranch.tmpl +++ b/assets/github/onbranch.tmpl @@ -20,9 +20,6 @@ jobs: with: args: onbranch --clean env: - KKA_APP_NAME: {{ .AppName }} - KKA_PROJECT_DIRECTORY: {{ .ProjectDirectory }} - KKA_REPO_NAME: {{ .Repository }} KKA_REGISTRY_USER: {{ `${{ github.actor }}` }} KKA_REGISTRY_PASSWORD: {{ `${{ secrets.GITHUB_TOKEN }}` }} KKA_CLUSTER_ENDPOINT: {{ `${{ secrets.CLUSTER_ENDPOINT }}` }} @@ -35,9 +32,6 @@ jobs: with: args: onbranch env: - KKA_APP_NAME: {{ .AppName }} - KKA_PROJECT_DIRECTORY: {{ .ProjectDirectory }} - KKA_REPO_NAME: {{ .Repository }} KKA_REGISTRY_USER: {{ `${{ github.actor }}` }} KKA_REGISTRY_PASSWORD: {{ `${{ secrets.GITHUB_TOKEN }}` }} KKA_CLUSTER_ENDPOINT: {{ `${{ secrets.CLUSTER_ENDPOINT }}` }} diff --git a/assets/github/onmain.tmpl b/assets/github/onmain.tmpl index 286b753..441f12d 100644 --- a/assets/github/onmain.tmpl +++ b/assets/github/onmain.tmpl @@ -17,9 +17,6 @@ jobs: with: args: onmain env: - KKA_APP_NAME: {{ .AppName }} - KKA_PROJECT_DIRECTORY: {{ .ProjectDirectory }} - KKA_REPO_NAME: {{ .Repository }} KKA_REGISTRY_USER: {{ `${{ github.actor }}` }} KKA_REGISTRY_PASSWORD: {{ `${{ secrets.GITHUB_TOKEN }}` }} KKA_CLUSTER_ENDPOINT: {{ `${{ secrets.CLUSTER_ENDPOINT }}` }} diff --git a/src/cli/cli.go b/src/cli/cli.go index 75d7f6b..f310235 100644 --- a/src/cli/cli.go +++ b/src/cli/cli.go @@ -4,7 +4,6 @@ import ( "embed" "io" "os" - "path" "path/filepath" "sort" @@ -74,7 +73,12 @@ func (c *CLI) init(cCtx *cli.Context) error { Tag: version, } - dockerService, err := docker.New(project, dockerImage, cCtx.String(dockerFileNameFlag)) + dockerFileName := cCtx.String(dockerFileNameFlag) + if dockerFileName == "" { + dockerFileName = defaults.GeneratedDockerFile + } + + dockerService, err := docker.New(project, dockerImage, dockerFileName) if err != nil { logger.PrintError("Error creating docker service", err) } @@ -115,17 +119,6 @@ func (c CLI) Run(args []string) error { return err } - projectDirectory := ctx.String(projectDirectoryFlag) - absProjectDirectory, err := filepath.Abs(projectDirectory) - - if err != nil { - return err - } - - if ctx.String(appNameFlag) == "" { - ctx.Set(appNameFlag, path.Base(absProjectDirectory)) - } - if err := c.checkRequiredFlags(ctx, []string{}); err != nil { return err } diff --git a/src/cli/flags.go b/src/cli/flags.go index 6e7d2c1..0d63a38 100644 --- a/src/cli/flags.go +++ b/src/cli/flags.go @@ -7,6 +7,7 @@ import ( "os" "strings" + "github.com/nearform/k8s-kurated-addons-cli/src/services/git" "github.com/nearform/k8s-kurated-addons-cli/src/utils/defaults" "github.com/urfave/cli/v2" "gopkg.in/yaml.v2" @@ -46,7 +47,14 @@ const ( var requiredFlags []string var flags map[FlagsType]([]cli.Flag) +// This function is executed when the module is loaded func init() { + registry := "" + org, err := git.GetGithubOrg() + if err == nil { + registry = fmt.Sprintf("ghcr.io/%s", org) + } + defaultFlags := map[FlagsType]([]cli.Flag){ Build: []cli.Flag{ &cli.StringFlag{ @@ -111,9 +119,10 @@ func init() { }, App: []cli.Flag{ &cli.StringFlag{ - Name: appNameFlag, - Usage: "The name of the app", - EnvVars: []string{"KKA_APP_NAME"}, + Name: appNameFlag, + Usage: "The name of the app", + Required: true, + EnvVars: []string{"KKA_APP_NAME"}, }, &cli.StringFlag{ Name: appVersionFlag, @@ -128,15 +137,15 @@ func init() { EnvVars: []string{"KKA_PROJECT_DIRECTORY"}, }, &cli.StringFlag{ - Name: repoNameFlag, - Usage: "The base address of the container repository", - Value: defaults.RepoName, - EnvVars: []string{"KKA_REPO_NAME"}, + Name: repoNameFlag, + Usage: "The base address of the container repository", + Value: registry, + Required: registry == "", + EnvVars: []string{"KKA_REPO_NAME"}, }, &cli.StringFlag{ Name: dockerFileNameFlag, Usage: "The name of the Dockerfile", - Value: defaults.DockerfileName, EnvVars: []string{"KKA_DOCKERFILE_NAME"}, }, &cli.StringFlag{ diff --git a/src/cli/init.go b/src/cli/init.go index b51fefb..141f89b 100644 --- a/src/cli/init.go +++ b/src/cli/init.go @@ -8,10 +8,8 @@ import ( "github.com/charmbracelet/log" "k8s.io/utils/strings/slices" - "github.com/nearform/k8s-kurated-addons-cli/src/services/git" "github.com/nearform/k8s-kurated-addons-cli/src/services/k8s" "github.com/nearform/k8s-kurated-addons-cli/src/services/project" - "github.com/nearform/k8s-kurated-addons-cli/src/utils/defaults" "github.com/urfave/cli/v2" ) @@ -20,14 +18,6 @@ func (c CLI) InitGithubCMD(cCtx *cli.Context) error { logger.SetLevel(log.DebugLevel) registry := cCtx.String(repoNameFlag) - if registry == defaults.RepoName { - org, err := git.GetGithubOrg() - if err != nil { - return fmt.Errorf("cannot get github organization %v", err) - } - registry = fmt.Sprintf("ghcr.io/%s", org) - } - options := project.InitOptions{ PipelineType: cCtx.Command.Name, DestinationFolder: cCtx.String(destinationFolderFlag), @@ -52,6 +42,7 @@ func (c CLI) InitGithubCMD(cCtx *cli.Context) error { func (c CLI) InitConfigCMD(ctx *cli.Context) error { excludedFlags := []string{ "help", + appVersionFlag, namespaceFlag, configFileFlag, projectDirectoryFlag, @@ -74,13 +65,13 @@ func (c CLI) InitConfigCMD(ctx *cli.Context) error { value := ctx.String(stringFlag.Name) if value == "" { - stringFlag.GetValue() + value = stringFlag.Value } if value == "" { fmt.Fprintf(c.Writer, "%s: null\n", stringFlag.Name) } else { - fmt.Fprintf(c.Writer, "%s: %s\n", stringFlag.Name, ctx.String(stringFlag.Name)) + fmt.Fprintf(c.Writer, "%s: %s\n", stringFlag.Name, value) } } diff --git a/src/cli/init_test.go b/src/cli/init_test.go index 4dc5f19..79baa78 100644 --- a/src/cli/init_test.go +++ b/src/cli/init_test.go @@ -8,23 +8,18 @@ import ( "testing" "github.com/charmbracelet/log" - "github.com/nearform/k8s-kurated-addons-cli/src/utils/defaults" ) func compareConfig(t *testing.T, appName string, writer io.Writer) { configTemplate := fmt.Sprintf(`app-name: %s -app-version: %s cluster-endpoint: null -default-branch: null -dockerfile-name: %s +default-branch: main +dockerfile-name: null registry-user: null -repo-name: %s +repo-name: ghcr.io/nearform runtime-version: null `, appName, - defaults.AppVersion, - defaults.DockerfileName, - defaults.RepoName, ) result := fmt.Sprint(writer.(*bytes.Buffer)) @@ -35,7 +30,6 @@ runtime-version: null } func TestInitConfig(t *testing.T) { - cli := CLI{ Writer: new(bytes.Buffer), Logger: log.NewWithOptions(os.Stderr, log.Options{ @@ -45,11 +39,8 @@ func TestInitConfig(t *testing.T) { }), } - if err := cli.Run([]string{"kka", "init", "config"}); err != nil { - t.Error(err) - } + os.Setenv("KKA_REPO_NAME", "ghcr.io/nearform") - compareConfig(t, "cli", cli.Writer) // Config file is read correctly // Generate temporary file and add app-name parameter diff --git a/src/services/docker/docker.go b/src/services/docker/docker.go index 9cc49b9..353d5f3 100644 --- a/src/services/docker/docker.go +++ b/src/services/docker/docker.go @@ -16,6 +16,7 @@ import ( "github.com/nearform/k8s-kurated-addons-cli/src/services/project" + "github.com/nearform/k8s-kurated-addons-cli/src/utils/defaults" "github.com/nearform/k8s-kurated-addons-cli/src/utils/logger" ) @@ -52,6 +53,29 @@ func getClient() (*client.Client, error) { return cli, nil } +func (ds DockerService) generateDockerfile(tarWriter *tar.Writer) error { + // Add another file to the build context from an array of bytes + fileBytes, err := ds.project.Dockerfile() + if err != nil { + return fmt.Errorf("Loading dockerfile %v", err) + } + hdr := &tar.Header{ + Name: defaults.GeneratedDockerFile, + Mode: 0600, + Size: int64(len(fileBytes)), + ModTime: time.Now(), + } + + if err := tarWriter.WriteHeader(hdr); err != nil { + return fmt.Errorf("Writing Dockerfile header %v", err) + } + if _, err := tarWriter.Write(fileBytes); err != nil { + return fmt.Errorf("Writing Dockerfile content %v", err) + } + + return nil +} + func (ds DockerService) buildContext() (*bytes.Reader, error) { // Get the context for the docker build existingBuildContext, err := archive.TarWithOptions(ds.dockerImage.Directory, &archive.TarOptions{}) @@ -81,23 +105,11 @@ func (ds DockerService) buildContext() (*bytes.Reader, error) { } } - // Add another file to the build context from an array of bytes - fileBytes, err := ds.project.Dockerfile() - if err != nil { - return nil, fmt.Errorf("Loading dockerfile %v", err) - } - hdr := &tar.Header{ - Name: "Dockerfile.kka", - Mode: 0600, - Size: int64(len(fileBytes)), - ModTime: time.Now(), - } - - if err := tarWriter.WriteHeader(hdr); err != nil { - return nil, fmt.Errorf("Writing Dockerfile header %v", err) - } - if _, err := tarWriter.Write(fileBytes); err != nil { - return nil, fmt.Errorf("Writing Dockerfile content %v", err) + // if dockerfile-name is not specified generate a dockerfile + if ds.DockerFileName == defaults.GeneratedDockerFile { + if err = ds.generateDockerfile(tarWriter); err != nil { + return nil, err + } } // Close the tar archive diff --git a/src/utils/defaults/defaults.go b/src/utils/defaults/defaults.go index 8e6c14f..494adbd 100644 --- a/src/utils/defaults/defaults.go +++ b/src/utils/defaults/defaults.go @@ -3,11 +3,11 @@ package defaults const ( ProjectDirectory string = "." RepoName string = "ghcr.io/nearform" - DockerfileName string = "Dockerfile.kka" GithubActionFolder string = ".github/workflows" GithubDefaultBranch string = "main" ConfigFile string = ".kka" AppVersion string = "latest" + GeneratedDockerFile string = "Dockerfile.kka" ) // renovate: datasource=docker depName=node