From dea63d4374a488a6f5f3c1f69e78104c1368ac5f Mon Sep 17 00:00:00 2001 From: Wayne Starr Date: Thu, 23 May 2024 18:56:02 -0600 Subject: [PATCH 1/3] chore: update to de-zarfed Maru --- go.mod | 4 +++- go.sum | 16 ++++++++++------ src/cmd/vendored.go | 26 ++++++++++++++++++-------- 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index 4807647f..f56718da 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,8 @@ toolchain go1.22.3 require ( github.com/AlecAivazis/survey/v2 v2.3.7 github.com/alecthomas/jsonschema v0.0.0-20220216202328-9eeeec9d044b - github.com/defenseunicorns/maru-runner v0.1.1 + github.com/defenseunicorns/maru-runner v0.2.0 + github.com/defenseunicorns/pkg/exec v0.0.1 github.com/defenseunicorns/pkg/helpers v1.1.2 github.com/defenseunicorns/pkg/oci v0.0.2 github.com/defenseunicorns/zarf v0.33.0 @@ -169,6 +170,7 @@ require ( github.com/cyphar/filepath-securejoin v0.2.4 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/daviddengcn/go-colortext v1.0.0 // indirect + github.com/defenseunicorns/pkg/helpers/v2 v2.0.1 // indirect github.com/deitch/magic v0.0.0-20230404182410-1ff89d7342da // indirect github.com/derailed/k9s v0.31.7 // indirect github.com/derailed/popeye v0.11.2 // indirect diff --git a/go.sum b/go.sum index 0a7130df..d8c89932 100644 --- a/go.sum +++ b/go.sum @@ -599,10 +599,14 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/daviddengcn/go-colortext v1.0.0 h1:ANqDyC0ys6qCSvuEK7l3g5RaehL/Xck9EX8ATG8oKsE= github.com/daviddengcn/go-colortext v1.0.0/go.mod h1:zDqEI5NVUop5QPpVJUxE9UO10hRnmkD5G4Pmri9+m4c= -github.com/defenseunicorns/maru-runner v0.1.1 h1:1q77tBdyhfCLWRbkXZm36ZpFlK9Jxf2/KYTxVRrRAQ4= -github.com/defenseunicorns/maru-runner v0.1.1/go.mod h1:B0mrTjz/ylNuyZ4tTl1sTHS/hNfFS01kh6QsO09pFqk= +github.com/defenseunicorns/maru-runner v0.2.0 h1:y49cPZSydBVlTwcH+JaSuBtW0BxL19sBsioyea31j9M= +github.com/defenseunicorns/maru-runner v0.2.0/go.mod h1:MOVxUUSTNINepwiqkq8jrqVSASK47Pk2+ziZKPR8Uxw= +github.com/defenseunicorns/pkg/exec v0.0.1 h1:mZtkZvwvOgInZOi+hvEjT0JAtjOgbeIo4RkpqMzU85g= +github.com/defenseunicorns/pkg/exec v0.0.1/go.mod h1:F/OPhrZuoXM6e2RgeDUlaSYFFW8I3rsErJnytLSkLFo= github.com/defenseunicorns/pkg/helpers v1.1.2 h1:2t8ntF2Lijc8GqigAe6ZpYfC2BZd5Kk6rAUqrKNASt4= github.com/defenseunicorns/pkg/helpers v1.1.2/go.mod h1:F4S5VZLDrlNWQKklzv4v9tFWjjZNhxJ1gT79j4XiLwk= +github.com/defenseunicorns/pkg/helpers/v2 v2.0.1 h1:j08rz9vhyD9Bs+yKiyQMY2tSSejXRMxTqEObZ5M1Wbk= +github.com/defenseunicorns/pkg/helpers/v2 v2.0.1/go.mod h1:u1PAqOICZyiGIVA2v28g55bQH1GiAt0Bc4U9/rnWQvQ= github.com/defenseunicorns/pkg/oci v0.0.2 h1:Lewwtl/D1Z55npRCkK1DS4Sd7pdrwyUs4+1RGpYajSQ= github.com/defenseunicorns/pkg/oci v0.0.2/go.mod h1:fMevWu1lBUmk7Q0dHWjR5RVHE2jTV7X0mlroxdkIqDE= github.com/defenseunicorns/zarf v0.33.0 h1:6Lrb8ZExt3afATyoGDENSw3pD/0BauH5VfVhxNHfWKY= @@ -813,8 +817,8 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.16.0 h1:x+plE831WK4vaKHO/jpgUGsvLKIqRRkz6M78GuJAfGE= -github.com/go-playground/validator/v10 v10.16.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= +github.com/go-playground/validator/v10 v10.18.0 h1:BvolUXjp4zuvkZ5YN5t7ebzbhlUtPsPm2S9NAZ5nl9U= +github.com/go-playground/validator/v10 v10.18.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= github.com/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7eI= github.com/go-quicktest/qt v1.101.0/go.mod h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZsDC26tQJow= github.com/go-restruct/restruct v1.2.0-alpha h1:2Lp474S/9660+SJjpVxoKuWX09JsXHSrdV7Nv3/gkvc= @@ -1496,8 +1500,8 @@ github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.11.1-0.20231026093722-fa6a31e0812c h1:fPpdjePK1atuOg28PXfNSqgwf9I/qD1Hlo39JFwKBXk= -github.com/rogpeppe/go-internal v1.11.1-0.20231026093722-fa6a31e0812c/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A= github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= diff --git a/src/cmd/vendored.go b/src/cmd/vendored.go index ff020055..e7fc9582 100644 --- a/src/cmd/vendored.go +++ b/src/cmd/vendored.go @@ -4,11 +4,13 @@ package cmd import ( + "fmt" "os" "runtime/debug" runnerCLI "github.com/defenseunicorns/maru-runner/src/cmd" runnerConfig "github.com/defenseunicorns/maru-runner/src/config" + "github.com/defenseunicorns/pkg/exec" "github.com/defenseunicorns/uds-cli/src/config" "github.com/defenseunicorns/uds-cli/src/config/lang" @@ -22,15 +24,23 @@ var runnerCmd = &cobra.Command{ Aliases: []string{"r"}, Short: lang.CmdRunShort, Run: func(_ *cobra.Command, _ []string) { - os.Args = os.Args[1:] // grab 'run' and onward from the CLI args - runnerConfig.CmdPrefix = "uds" // use vendored Zarf inside the runner - runnerConfig.EnvPrefix = "uds" - // The maru runner init gets called before the uds-cli init, which looks for RUN_ARCHITECTURE because the EnvPrefix - // that we set above is not called yet. So in order to set the architecture if passing in UDS_ARCHITECTURE we must set it here. - archValue := os.Getenv("UDS_ARCHITECTURE") - if archValue != "" { - runnerConfig.CLIArch = archValue + os.Args = os.Args[1:] // grab 'run' and onward from the CLI args + + runnerConfig.CmdPrefix = "uds" + runnerConfig.VendorPrefix = "UDS" + + // Maru by default uses the MARU_ env var prefix - to add any UDS_ env vars we have to add them here + archValue := config.GetArch(v.GetString(V_ARCHITECTURE)) + runnerConfig.AddExtraEnv("UDS", "true") + runnerConfig.AddExtraEnv("UDS_ARCH", archValue) + + executablePath, err := exec.GetFinalExecutablePath() + if err == nil { + exec.RegisterCmdMutation("uds", executablePath) + exec.RegisterCmdMutation("zarf", fmt.Sprintf("%s zarf", executablePath)) + exec.RegisterCmdMutation("kubectl", fmt.Sprintf("%s zarf tools kubectl", executablePath)) } + runnerCLI.RootCmd().SetArgs(os.Args) runnerCLI.Execute() }, From 7dc3c6510caefcd26de4903e80e608aa329b079d Mon Sep 17 00:00:00 2001 From: Wayne Starr Date: Thu, 23 May 2024 19:24:04 -0600 Subject: [PATCH 2/3] make error handling better --- src/cmd/vendored.go | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/cmd/vendored.go b/src/cmd/vendored.go index e7fc9582..56788ccb 100644 --- a/src/cmd/vendored.go +++ b/src/cmd/vendored.go @@ -23,7 +23,7 @@ var runnerCmd = &cobra.Command{ Use: "run", Aliases: []string{"r"}, Short: lang.CmdRunShort, - Run: func(_ *cobra.Command, _ []string) { + RunE: func(_ *cobra.Command, _ []string) error { os.Args = os.Args[1:] // grab 'run' and onward from the CLI args runnerConfig.CmdPrefix = "uds" @@ -35,14 +35,24 @@ var runnerCmd = &cobra.Command{ runnerConfig.AddExtraEnv("UDS_ARCH", archValue) executablePath, err := exec.GetFinalExecutablePath() - if err == nil { - exec.RegisterCmdMutation("uds", executablePath) - exec.RegisterCmdMutation("zarf", fmt.Sprintf("%s zarf", executablePath)) - exec.RegisterCmdMutation("kubectl", fmt.Sprintf("%s zarf tools kubectl", executablePath)) + if err != nil { + return err + } + + if err = exec.RegisterCmdMutation("uds", executablePath); err != nil { + return err + } + if err = exec.RegisterCmdMutation("zarf", fmt.Sprintf("%s zarf", executablePath)); err != nil { + return err + } + if err = exec.RegisterCmdMutation("kubectl", fmt.Sprintf("%s zarf tools kubectl", executablePath)); err != nil { + return err } runnerCLI.RootCmd().SetArgs(os.Args) runnerCLI.Execute() + + return nil }, DisableFlagParsing: true, ValidArgsFunction: func(cmd *cobra.Command, tasks []string, task string) ([]string, cobra.ShellCompDirective) { From b1200002afb9eb497fd2f2a5358e0986c7a1c014 Mon Sep 17 00:00:00 2001 From: Wayne Starr Date: Thu, 23 May 2024 20:01:04 -0600 Subject: [PATCH 3/3] fix tests --- src/test/e2e/runner_test.go | 137 +--------------------------- src/test/tasks/tasks-to-import.yaml | 16 ---- src/test/tasks/tasks.yaml | 29 ------ 3 files changed, 4 insertions(+), 178 deletions(-) delete mode 100644 src/test/tasks/tasks-to-import.yaml diff --git a/src/test/e2e/runner_test.go b/src/test/e2e/runner_test.go index 76110ef4..8134467d 100644 --- a/src/test/e2e/runner_test.go +++ b/src/test/e2e/runner_test.go @@ -15,135 +15,6 @@ import ( func TestTaskRunner(t *testing.T) { t.Log("E2E: Task Runner") - t.Run("run copy", func(t *testing.T) { - t.Parallel() - - baseFilePath := "base" - copiedFilePath := "copy" - - e2e.CleanFiles(baseFilePath, copiedFilePath) - t.Cleanup(func() { - e2e.CleanFiles(baseFilePath, copiedFilePath) - }) - - err := os.WriteFile(baseFilePath, []byte{}, 0600) - require.NoError(t, err) - - stdOut, stdErr, err := e2e.UDS("run", "copy", "--file", "src/test/tasks/tasks.yaml") - require.NoError(t, err, stdOut, stdErr) - - require.FileExists(t, copiedFilePath) - }) - - t.Run("run copy-exec", func(t *testing.T) { - t.Parallel() - - baseFilePath := "exectest" - copiedFilePath := "exec" - - e2e.CleanFiles(baseFilePath, copiedFilePath) - t.Cleanup(func() { - e2e.CleanFiles(baseFilePath, copiedFilePath) - }) - - err := os.WriteFile(baseFilePath, []byte{}, 0600) - require.NoError(t, err) - - stdOut, stdErr, err := e2e.UDS("run", "copy-exec", "--file", "src/test/tasks/tasks.yaml") - require.NoError(t, err, stdOut, stdErr) - - require.FileExists(t, copiedFilePath) - execFileInfo, err := os.Stat(copiedFilePath) - require.NoError(t, err) - require.True(t, execFileInfo.Mode()&0111 != 0) - }) - - t.Run("run copy-verify", func(t *testing.T) { - t.Parallel() - - baseFilePath := "data" - copiedFilePath := "verify" - - e2e.CleanFiles(baseFilePath, copiedFilePath) - t.Cleanup(func() { - e2e.CleanFiles(baseFilePath, copiedFilePath) - }) - - err := os.WriteFile(baseFilePath, []byte("test"), 0600) - require.NoError(t, err) - - stdOut, stdErr, err := e2e.UDS("run", "copy-verify", "--file", "src/test/tasks/tasks.yaml") - require.NoError(t, err, stdOut, stdErr) - - require.FileExists(t, copiedFilePath) - }) - - t.Run("run copy-symlink", func(t *testing.T) { - t.Parallel() - - baseFilePath := "symtest" - copiedFilePath := "symcopy" - symlinkName := "testlink" - - e2e.CleanFiles(baseFilePath, copiedFilePath, symlinkName) - t.Cleanup(func() { - e2e.CleanFiles(baseFilePath, copiedFilePath, symlinkName) - }) - - err := os.WriteFile(baseFilePath, []byte{}, 0600) - require.NoError(t, err) - - stdOut, stdErr, err := e2e.UDS("run", "copy-symlink", "--file", "src/test/tasks/tasks.yaml") - require.NoError(t, err, stdOut, stdErr) - - require.FileExists(t, symlinkName) - }) - - t.Run("run local-import-with-curl", func(t *testing.T) { - t.Parallel() - - downloadedFile := "checksums.txt" - - e2e.CleanFiles(downloadedFile) - t.Cleanup(func() { - e2e.CleanFiles(downloadedFile) - }) - // get current git revision - gitRev, err := e2e.GetGitRevision() - if err != nil { - return - } - setVar := fmt.Sprintf("GIT_REVISION=%s", gitRev) - stdOut, stdErr, err := e2e.UDS("run", "local-import-with-curl", "--set", setVar, "--file", "src/test/tasks/tasks.yaml") - require.NoError(t, err, stdOut, stdErr) - - require.FileExists(t, downloadedFile) - }) - - t.Run("run template-file", func(t *testing.T) { - t.Parallel() - - baseFilePath := "raw" - copiedFilePath := "templated" - - e2e.CleanFiles(baseFilePath, copiedFilePath) - t.Cleanup(func() { - e2e.CleanFiles(baseFilePath, copiedFilePath) - }) - - err := os.WriteFile(baseFilePath, []byte("${REPLACE_ME}"), 0600) - require.NoError(t, err) - - stdOut, stdErr, err := e2e.UDS("run", "template-file", "--file", "src/test/tasks/tasks.yaml") - require.NoError(t, err, stdOut, stdErr) - - require.FileExists(t, copiedFilePath) - - templatedContentsBytes, err := os.ReadFile(copiedFilePath) - require.NoError(t, err) - require.Equal(t, "replaced\n", string(templatedContentsBytes)) - }) - t.Run("run action", func(t *testing.T) { t.Parallel() @@ -302,10 +173,10 @@ func TestTaskRunner(t *testing.T) { stdOut, stdErr, err := e2e.UDS("run", "--list", setVar, "--file", "src/test/tasks/tasks.yaml") require.NoError(t, err, stdOut, stdErr) - require.Contains(t, stdErr, "copy") - require.Contains(t, stdErr, "This is a copy task") - require.Contains(t, stdErr, "copy-exec") - require.Contains(t, stdErr, "copy-verify") + require.Contains(t, stdErr, "echo-env-var") + require.Contains(t, stdErr, "Test that env vars take precedence") + require.Contains(t, stdErr, "remote-import") + require.Contains(t, stdErr, "action") }) t.Run("test bad call to zarf tools wait-for", func(t *testing.T) { diff --git a/src/test/tasks/tasks-to-import.yaml b/src/test/tasks/tasks-to-import.yaml deleted file mode 100644 index c6789334..00000000 --- a/src/test/tasks/tasks-to-import.yaml +++ /dev/null @@ -1,16 +0,0 @@ -includes: - - common: "./more-tasks-to-import.yaml" - -variables: - - name: CHECKSUMS - default: checksums.txt - -tasks: - - name: fetch-checksums - actions: - - task: common:set-var - - task: curl - - name: curl - files: - - source: https://github.com/${PRETTY_OK_COMPANY}/zarf/releases/download/v0.31.1/${CHECKSUMS} - target: ${CHECKSUMS} diff --git a/src/test/tasks/tasks.yaml b/src/test/tasks/tasks.yaml index 1e32e1dc..aff94f8b 100644 --- a/src/test/tasks/tasks.yaml +++ b/src/test/tasks/tasks.yaml @@ -1,5 +1,4 @@ includes: - - local: ./tasks-to-import.yaml - foo: ./more-tasks/foo.yaml - infinite: ./loop-task.yaml - remote: https://raw.githubusercontent.com/defenseunicorns/uds-cli/${GIT_REVISION}/src/test/tasks/remote-import-tasks.yaml @@ -26,37 +25,9 @@ tasks: description: Test that env vars take precedence over var defaults actions: - cmd: echo "${TO_BE_OVERWRITTEN}" - - name: copy - description: "This is a copy task" - files: - - source: base - target: copy - - name: copy-exec - files: - - source: exectest - target: exec - executable: true - - name: copy-verify - files: - - source: data - target: verify - shasum: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08 - - name: copy-symlink - files: - - source: symtest - target: symcopy - symlinks: - - "testlink" - name: remote-import actions: - task: remote:echo-var - - name: local-import-with-curl - actions: - - task: local:fetch-checksums - - name: template-file - files: - - source: raw - target: templated - name: action actions: - cmd: echo "specific test string"