This is an automated email from the ASF dual-hosted git repository.

astefanutti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git


The following commit(s) were added to refs/heads/main by this push:
     new 03477e4  fix(lint): error return value are not checked
03477e4 is described below

commit 03477e49725d7f374f755bc7466ff207f79681f8
Author: Luca Burgazzoli <lburgazz...@gmail.com>
AuthorDate: Thu Nov 25 12:13:21 2021 +0100

    fix(lint): error return value are not checked
---
 cmd/util/license-check/main.go                    |   9 +-
 pkg/builder/s2i.go                                | 154 +++---
 pkg/builder/spectrum.go                           |  11 +-
 pkg/cmd/dump.go                                   |   4 +-
 pkg/cmd/init.go                                   |   6 +-
 pkg/cmd/modeline_test.go                          | 581 ++++++++++++----------
 pkg/cmd/root_test.go                              |  14 +-
 pkg/cmd/trait_help.go                             |   9 +-
 pkg/cmd/util_containerization.go                  |   8 +-
 pkg/cmd/util_dependencies.go                      |   4 +-
 pkg/controller/integrationplatform/create.go      |   7 +-
 pkg/controller/integrationplatform/create_test.go |   5 +-
 pkg/install/cluster.go                            |  14 +-
 pkg/install/common.go                             |   8 +-
 pkg/install/operator.go                           |  21 +-
 pkg/resources/resources_support.go                |  74 +--
 pkg/resources/resources_test.go                   | 123 +++--
 pkg/trait/openapi.go                              |  10 +-
 pkg/util/camel/catalog.go                         |  92 ++--
 pkg/util/gzip/compress.go                         |   8 +-
 pkg/util/sync/file_test.go                        |   4 +-
 pkg/util/util.go                                  |  19 +
 22 files changed, 690 insertions(+), 495 deletions(-)

diff --git a/cmd/util/license-check/main.go b/cmd/util/license-check/main.go
index 417acc2..c2300e5 100644
--- a/cmd/util/license-check/main.go
+++ b/cmd/util/license-check/main.go
@@ -36,23 +36,20 @@ func main() {
 
        fileBin, err := util.ReadFile(fileName)
        if err != nil {
-               // #nosec G104
-               os.Stderr.WriteString(fmt.Sprintf("cannot read file %s: %v\n", 
fileName, err))
+               _, _ = fmt.Fprintf(os.Stderr, "cannot read file %s: %v\n", 
fileName, err)
                os.Exit(1)
        }
        file := string(fileBin)
 
        licenseBin, err := util.ReadFile(licenseName)
        if err != nil {
-               // #nosec G104
-               os.Stderr.WriteString(fmt.Sprintf("cannot read file %s: %v\n", 
licenseName, err))
+               _, _ = fmt.Fprintf(os.Stderr, "cannot read file %s: %v\n", 
licenseName, err)
                os.Exit(1)
        }
        license := string(licenseBin)
 
        if !strings.Contains(file, license) {
-               // #nosec G104
-               os.Stderr.WriteString(fmt.Sprintf("file %s does not contain 
license\n", fileName))
+               _, _ = fmt.Fprintf(os.Stderr, "file %s does not contain 
license\n", fileName)
                os.Exit(1)
        }
 }
diff --git a/pkg/builder/s2i.go b/pkg/builder/s2i.go
index 153d0a3..6254441 100644
--- a/pkg/builder/s2i.go
+++ b/pkg/builder/s2i.go
@@ -19,11 +19,12 @@ package builder
 
 import (
        "archive/tar"
+       "bufio"
        "compress/gzip"
        "context"
+       "encoding/json"
        "fmt"
        "io"
-       "io/ioutil"
        "os"
        "path"
        "path/filepath"
@@ -38,8 +39,6 @@ import (
        apierrors "k8s.io/apimachinery/pkg/api/errors"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
-       "k8s.io/apimachinery/pkg/util/json"
-
        ctrl "sigs.k8s.io/controller-runtime/pkg/client"
        ctrlutil "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
 
@@ -143,94 +142,97 @@ func (t *s2iTask) Do(ctx context.Context) v1.BuildStatus {
                return status.Failed(errors.Wrap(err, "cannot create image 
stream"))
        }
 
-       tmpDir, err := ioutil.TempDir(os.TempDir(), t.build.Name+"-s2i-")
-       if err != nil {
-               return status.Failed(err)
-       }
-       archive := path.Join(tmpDir, "archive.tar.gz")
-       defer os.RemoveAll(tmpDir)
-
-       contextDir := t.task.ContextDir
-       if contextDir == "" {
-               // Use the working directory.
-               // This is useful when the task is executed in-container,
-               // so that its WorkingDir can be used to share state and
-               // coordinate with other tasks.
-               pwd, err := os.Getwd()
-               if err != nil {
-                       return status.Failed(err)
+       err = util.WithTempDir(t.build.Name+"-s2i-", func(tmpDir string) error {
+               archive := path.Join(tmpDir, "archive.tar.gz")
+
+               contextDir := t.task.ContextDir
+               if contextDir == "" {
+                       // Use the working directory.
+                       // This is useful when the task is executed 
in-container,
+                       // so that its WorkingDir can be used to share state and
+                       // coordinate with other tasks.
+                       pwd, err := os.Getwd()
+                       if err != nil {
+                               return err
+                       }
+                       contextDir = path.Join(pwd, ContextDir)
                }
-               contextDir = path.Join(pwd, ContextDir)
-       }
 
-       archiveFile, err := os.Create(archive)
-       if err != nil {
-               return status.Failed(errors.Wrap(err, "cannot create tar 
archive"))
-       }
+               archiveFile, err := os.Create(archive)
+               if err != nil {
+                       return errors.Wrap(err, "cannot create tar archive")
+               }
 
-       err = tarDir(contextDir, archiveFile)
-       if err != nil {
-               return status.Failed(errors.Wrap(err, "cannot tar context 
directory"))
-       }
+               err = tarDir(contextDir, archiveFile)
+               if err != nil {
+                       return errors.Wrap(err, "cannot tar context directory")
+               }
 
-       resource, err := util.ReadFile(archive)
-       if err != nil {
-               return status.Failed(errors.Wrap(err, "cannot read tar file 
"+archive))
-       }
+               f, err := util.Open(archive)
+               if err != nil {
+                       return err
+               }
 
-       restClient, err := kubernetes.GetClientFor(t.c, "build.openshift.io", 
"v1")
-       if err != nil {
-               return status.Failed(err)
-       }
+               restClient, err := kubernetes.GetClientFor(t.c, 
"build.openshift.io", "v1")
+               if err != nil {
+                       return err
+               }
 
-       r := restClient.Post().
-               Namespace(t.build.Namespace).
-               Body(resource).
-               Resource("buildconfigs").
-               Name("camel-k-" + t.build.Name).
-               SubResource("instantiatebinary").
-               Do(ctx)
+               r := restClient.Post().
+                       Namespace(t.build.Namespace).
+                       Body(bufio.NewReader(f)).
+                       Resource("buildconfigs").
+                       Name("camel-k-" + t.build.Name).
+                       SubResource("instantiatebinary").
+                       Do(ctx)
 
-       if r.Error() != nil {
-               return status.Failed(errors.Wrap(r.Error(), "cannot instantiate 
binary"))
-       }
+               if r.Error() != nil {
+                       return errors.Wrap(r.Error(), "cannot instantiate 
binary")
+               }
 
-       data, err := r.Raw()
-       if err != nil {
-               return status.Failed(errors.Wrap(err, "no raw data retrieved"))
-       }
+               data, err := r.Raw()
+               if err != nil {
+                       return errors.Wrap(err, "no raw data retrieved")
+               }
 
-       s2iBuild := buildv1.Build{}
-       err = json.Unmarshal(data, &s2iBuild)
-       if err != nil {
-               return status.Failed(errors.Wrap(err, "cannot unmarshal 
instantiated binary response"))
-       }
+               s2iBuild := buildv1.Build{}
+               err = json.Unmarshal(data, &s2iBuild)
+               if err != nil {
+                       return errors.Wrap(err, "cannot unmarshal instantiated 
binary response")
+               }
 
-       err = t.waitForS2iBuildCompletion(ctx, t.c, &s2iBuild)
-       if err != nil {
-               if errors.Is(err, context.Canceled) || errors.Is(err, 
context.DeadlineExceeded) {
-                       // nolint: contextcheck
-                       if err := t.cancelBuild(context.Background(), 
&s2iBuild); err != nil {
-                               log.Errorf(err, "cannot cancel s2i Build: 
%s/%s", s2iBuild.Namespace, s2iBuild.Name)
+               err = t.waitForS2iBuildCompletion(ctx, t.c, &s2iBuild)
+               if err != nil {
+                       if errors.Is(err, context.Canceled) || errors.Is(err, 
context.DeadlineExceeded) {
+                               // nolint: contextcheck
+                               if err := t.cancelBuild(context.Background(), 
&s2iBuild); err != nil {
+                                       log.Errorf(err, "cannot cancel s2i 
Build: %s/%s", s2iBuild.Namespace, s2iBuild.Name)
+                               }
                        }
+                       return err
+               }
+               if s2iBuild.Status.Output.To != nil {
+                       status.Digest = s2iBuild.Status.Output.To.ImageDigest
+               }
+
+               err = t.c.Get(ctx, ctrl.ObjectKeyFromObject(is), is)
+               if err != nil {
+                       return err
+               }
+
+               if is.Status.DockerImageRepository == "" {
+                       return errors.New("dockerImageRepository not available 
in ImageStream")
                }
-               return status.Failed(err)
-       }
-       if s2iBuild.Status.Output.To != nil {
-               status.Digest = s2iBuild.Status.Output.To.ImageDigest
-       }
 
-       err = t.c.Get(ctx, ctrl.ObjectKeyFromObject(is), is)
+               status.Image = is.Status.DockerImageRepository + ":" + 
t.task.Tag
+
+               return f.Close()
+       })
+
        if err != nil {
                return status.Failed(err)
        }
 
-       if is.Status.DockerImageRepository == "" {
-               return status.Failed(errors.New("dockerImageRepository not 
available in ImageStream"))
-       }
-
-       status.Image = is.Status.DockerImageRepository + ":" + t.task.Tag
-
        return status
 }
 
@@ -298,10 +300,10 @@ func tarDir(src string, writers ...io.Writer) error {
        mw := io.MultiWriter(writers...)
 
        gzw := gzip.NewWriter(mw)
-       defer gzw.Close()
+       defer util.CloseQuietly(gzw)
 
        tw := tar.NewWriter(gzw)
-       defer tw.Close()
+       defer util.CloseQuietly(tw)
 
        return filepath.Walk(src, func(file string, fi os.FileInfo, err error) 
error {
                if err != nil {
diff --git a/pkg/builder/spectrum.go b/pkg/builder/spectrum.go
index a7c149e..5aedbf4 100644
--- a/pkg/builder/spectrum.go
+++ b/pkg/builder/spectrum.go
@@ -103,12 +103,10 @@ func (t *spectrumTask) Do(ctx context.Context) 
v1.BuildStatus {
                if err != nil {
                        return status.Failed(err)
                }
-               defer os.RemoveAll(registryConfigDir)
        }
 
        newStdR, newStdW, pipeErr := os.Pipe()
-       // #nosec G307
-       defer newStdW.Close()
+       defer util.CloseQuietly(newStdW)
 
        if pipeErr != nil {
                // In the unlikely case of an error, use stdout instead of 
aborting
@@ -131,12 +129,19 @@ func (t *spectrumTask) Do(ctx context.Context) 
v1.BuildStatus {
        go readSpectrumLogs(newStdR)
        digest, err := spectrum.Build(options, 
contextDir+":"+path.Join(DeploymentDir))
        if err != nil {
+               _ = os.RemoveAll(registryConfigDir)
                return status.Failed(err)
        }
 
        status.Image = t.task.Image
        status.Digest = digest
 
+       if registryConfigDir != "" {
+               if err := os.RemoveAll(registryConfigDir); err != nil {
+                       return status.Failed(err)
+               }
+       }
+
        return status
 }
 
diff --git a/pkg/cmd/dump.go b/pkg/cmd/dump.go
index c0d8f4e..9fa2242 100644
--- a/pkg/cmd/dump.go
+++ b/pkg/cmd/dump.go
@@ -188,7 +188,7 @@ func dumpLogs(ctx context.Context, c client.Client, prefix 
string, ns string, na
        if err != nil {
                return err
        }
-       defer stream.Close()
+
        scanner := bufio.NewScanner(stream)
        printed := false
        for scanner.Scan() {
@@ -198,5 +198,5 @@ func dumpLogs(ctx context.Context, c client.Client, prefix 
string, ns string, na
        if !printed {
                fmt.Fprintf(out, "%s[no logs available]\n", prefix)
        }
-       return nil
+       return stream.Close()
 }
diff --git a/pkg/cmd/init.go b/pkg/cmd/init.go
index 0a2f06c..52d32f6 100644
--- a/pkg/cmd/init.go
+++ b/pkg/cmd/init.go
@@ -92,7 +92,11 @@ func (o *initCmdOptions) writeFromTemplate(language 
v1.Language, fileName string
        params := TemplateParameters{
                Name: simpleName,
        }
-       rawData := resources.ResourceAsString(fmt.Sprintf("/templates/%s.tmpl", 
language))
+
+       rawData, err := 
resources.ResourceAsString(fmt.Sprintf("/templates/%s.tmpl", language))
+       if err != nil {
+               return err
+       }
        if rawData == "" {
                return fmt.Errorf("cannot find template for language %s", 
string(language))
        }
diff --git a/pkg/cmd/modeline_test.go b/pkg/cmd/modeline_test.go
index 966a737..3907dc3 100644
--- a/pkg/cmd/modeline_test.go
+++ b/pkg/cmd/modeline_test.go
@@ -25,442 +25,485 @@ import (
        "path"
        "testing"
 
+       "github.com/apache/camel-k/pkg/util"
+
        "github.com/stretchr/testify/assert"
 )
 
 func TestModelineRunSimple(t *testing.T) {
-       dir, err := ioutil.TempDir("", "camel-k-test-")
-       assert.NoError(t, err)
-       defer os.RemoveAll(dir)
-
-       file := `
+       err := util.WithTempDir("camel-k-test-", func(dir string) error {
+               file := `
                // camel-k: dependency=mvn:org.my:lib:1.0
        `
-       fileName := path.Join(dir, "simple.groovy")
-       err = ioutil.WriteFile(fileName, []byte(file), 0o400)
-       assert.NoError(t, err)
+               fileName := path.Join(dir, "simple.groovy")
+               err := ioutil.WriteFile(fileName, []byte(file), 0o400)
+               assert.NoError(t, err)
+
+               cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName})
+               assert.NoError(t, err)
+               assert.NotNil(t, cmd)
+               assert.Equal(t, []string{"run", fileName, 
"--dependency=mvn:org.my:lib:1.0"}, flags)
+
+               return nil
+       })
 
-       cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName})
        assert.NoError(t, err)
-       assert.NotNil(t, cmd)
-       assert.Equal(t, []string{"run", fileName, 
"--dependency=mvn:org.my:lib:1.0"}, flags)
 }
 
 func TestModelineRunHelp(t *testing.T) {
-       dir, err := ioutil.TempDir("", "camel-k-test-")
-       assert.NoError(t, err)
-       defer os.RemoveAll(dir)
-       // no file created
-       fileName := path.Join(dir, "simple.groovy")
+       err := util.WithTempDir("camel-k-test-", func(dir string) error {
+               // no file created
+               fileName := path.Join(dir, "simple.groovy")
+
+               cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName, "--help"})
+               assert.NoError(t, err)
+               assert.NotNil(t, cmd)
+               assert.Equal(t, []string{"run", fileName, "--help"}, flags)
+
+               return nil
+       })
 
-       cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName, "--help"})
        assert.NoError(t, err)
-       assert.NotNil(t, cmd)
-       assert.Equal(t, []string{"run", fileName, "--help"}, flags)
 }
 
 func TestModelineRunChain(t *testing.T) {
-       dir, err := ioutil.TempDir("", "camel-k-test-")
-       assert.NoError(t, err)
-       defer os.RemoveAll(dir)
-
-       file := `
+       err := util.WithTempDir("camel-k-test-", func(dir string) error {
+               file := `
                // camel-k: dependency=mvn:org.my:lib:2.0
        `
-       fileName := path.Join(dir, "simple.groovy")
-       err = ioutil.WriteFile(fileName, []byte(file), 0o400)
-       assert.NoError(t, err)
+               fileName := path.Join(dir, "simple.groovy")
+               err := ioutil.WriteFile(fileName, []byte(file), 0o400)
+               assert.NoError(t, err)
+
+               cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", "-d", "mvn:org.my:lib2:1.0", fileName})
+               assert.NoError(t, err)
+               assert.NotNil(t, cmd)
+               assert.Equal(t, []string{"run", "-d", "mvn:org.my:lib2:1.0", 
fileName, "--dependency=mvn:org.my:lib:2.0"}, flags)
+
+               return nil
+       })
 
-       cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", "-d", "mvn:org.my:lib2:1.0", fileName})
        assert.NoError(t, err)
-       assert.NotNil(t, cmd)
-       assert.Equal(t, []string{"run", "-d", "mvn:org.my:lib2:1.0", fileName, 
"--dependency=mvn:org.my:lib:2.0"}, flags)
 }
 
 func TestModelineRunMultipleFiles(t *testing.T) {
-       dir, err := ioutil.TempDir("", "camel-k-test-")
-       assert.NoError(t, err)
-       defer os.RemoveAll(dir)
-
-       file := `
+       err := util.WithTempDir("camel-k-test-", func(dir string) error {
+               file := `
                // camel-k: dependency=mvn:org.my:lib1:3.0
        `
-       fileName := path.Join(dir, "simple.groovy")
-       err = ioutil.WriteFile(fileName, []byte(file), 0o400)
-       assert.NoError(t, err)
+               fileName := path.Join(dir, "simple.groovy")
+               err := ioutil.WriteFile(fileName, []byte(file), 0o400)
+               assert.NoError(t, err)
 
-       file2 := `
+               file2 := `
                // camel-k: dependency=mvn:org.my:lib2:3.0
        `
-       fileName2 := path.Join(dir, "ext.groovy")
-       err = ioutil.WriteFile(fileName2, []byte(file2), 0o400)
-       assert.NoError(t, err)
+               fileName2 := path.Join(dir, "ext.groovy")
+               err = ioutil.WriteFile(fileName2, []byte(file2), 0o400)
+               assert.NoError(t, err)
+
+               cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName, fileName2})
+               assert.NoError(t, err)
+               assert.NotNil(t, cmd)
+               assert.Equal(t, []string{"run", fileName, fileName2, 
"--dependency=mvn:org.my:lib1:3.0", "--dependency=mvn:org.my:lib2:3.0"}, flags)
+
+               return nil
+       })
 
-       cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName, fileName2})
        assert.NoError(t, err)
-       assert.NotNil(t, cmd)
-       assert.Equal(t, []string{"run", fileName, fileName2, 
"--dependency=mvn:org.my:lib1:3.0", "--dependency=mvn:org.my:lib2:3.0"}, flags)
 }
 
 func TestModelineRunProperty(t *testing.T) {
-       dir, err := ioutil.TempDir("", "camel-k-test-")
-       assert.NoError(t, err)
-       defer os.RemoveAll(dir)
-
-       subDir := path.Join(dir, "sub")
-       err = os.Mkdir(subDir, 0o700)
-       assert.NoError(t, err)
+       err := util.WithTempDir("camel-k-test-", func(dir string) error {
+               subDir := path.Join(dir, "sub")
+               err := os.Mkdir(subDir, 0o700)
+               assert.NoError(t, err)
 
-       file := `
+               file := `
                // camel-k: property=my-prop=my-val
        `
-       fileName := path.Join(subDir, "simple.groovy")
-       err = ioutil.WriteFile(fileName, []byte(file), 0o400)
-       assert.NoError(t, err)
+               fileName := path.Join(subDir, "simple.groovy")
+               err = ioutil.WriteFile(fileName, []byte(file), 0o400)
+               assert.NoError(t, err)
+
+               cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName})
+               assert.NoError(t, err)
+               assert.NotNil(t, cmd)
+               assert.Equal(t, []string{"run", fileName, 
"--property=my-prop=my-val"}, flags)
+
+               return nil
+       })
 
-       cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName})
        assert.NoError(t, err)
-       assert.NotNil(t, cmd)
-       assert.Equal(t, []string{"run", fileName, "--property=my-prop=my-val"}, 
flags)
 }
 
 func TestModelineRunDuplicatedProperties(t *testing.T) {
-       dir, err := ioutil.TempDir("", "camel-k-test-")
-       assert.NoError(t, err)
-       defer os.RemoveAll(dir)
+       err := util.WithTempDir("camel-k-test-", func(dir string) error {
+               subDir := path.Join(dir, "sub")
+               err := os.Mkdir(subDir, 0o700)
+               assert.NoError(t, err)
 
-       subDir := path.Join(dir, "sub")
-       err = os.Mkdir(subDir, 0o700)
-       assert.NoError(t, err)
-
-       file := `
+               file := `
                // camel-k: property=prop1=false
                // camel-k: property=prop2=false
                // camel-k: property=foo=bar
        `
-       fileName := path.Join(subDir, "simple.groovy")
-       err = ioutil.WriteFile(fileName, []byte(file), 0o400)
-       assert.NoError(t, err)
+               fileName := path.Join(subDir, "simple.groovy")
+               err = ioutil.WriteFile(fileName, []byte(file), 0o400)
+               assert.NoError(t, err)
+
+               cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName, "-p", "prop1=true", "--property", 
"prop2=true"})
+               assert.NoError(t, err)
+               assert.NotNil(t, cmd)
+               assert.Equal(t, []string{"run", fileName, "-p", "prop1=true", 
"--property", "prop2=true", "--property=foo=bar"}, flags)
+
+               return nil
+       })
 
-       cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName, "-p", "prop1=true", "--property", 
"prop2=true"})
        assert.NoError(t, err)
-       assert.NotNil(t, cmd)
-       assert.Equal(t, []string{"run", fileName, "-p", "prop1=true", 
"--property", "prop2=true", "--property=foo=bar"}, flags)
 }
 
 func TestModelineRunDuplicatedBuildProperties(t *testing.T) {
-       dir, err := ioutil.TempDir("", "camel-k-test-")
-       assert.NoError(t, err)
-       defer os.RemoveAll(dir)
-
-       subDir := path.Join(dir, "sub")
-       err = os.Mkdir(subDir, 0o700)
-       assert.NoError(t, err)
+       err := util.WithTempDir("camel-k-test-", func(dir string) error {
+               subDir := path.Join(dir, "sub")
+               err := os.Mkdir(subDir, 0o700)
+               assert.NoError(t, err)
 
-       file := `
+               file := `
                // camel-k: build-property=prop1=false
                // camel-k: build-property=prop2=false
                // camel-k: build-property=foo=bar
        `
-       fileName := path.Join(subDir, "simple.groovy")
-       err = ioutil.WriteFile(fileName, []byte(file), 0o400)
-       assert.NoError(t, err)
-
-       cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), []string{
-               "kamel", "run", fileName,
-               "--build-property", "prop1=true", "--build-property", 
"prop2=true",
+               fileName := path.Join(subDir, "simple.groovy")
+               err = ioutil.WriteFile(fileName, []byte(file), 0o400)
+               assert.NoError(t, err)
+
+               cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{
+                       "kamel", "run", fileName,
+                       "--build-property", "prop1=true", "--build-property", 
"prop2=true",
+               })
+               assert.NoError(t, err)
+               assert.NotNil(t, cmd)
+               assert.Equal(t, []string{
+                       "run", fileName, "--build-property", "prop1=true", 
"--build-property", "prop2=true",
+                       "--build-property=foo=bar",
+               }, flags)
+
+               return nil
        })
+
        assert.NoError(t, err)
-       assert.NotNil(t, cmd)
-       assert.Equal(t, []string{
-               "run", fileName, "--build-property", "prop1=true", 
"--build-property", "prop2=true",
-               "--build-property=foo=bar",
-       }, flags)
 }
 
 func TestModelineRunPropertyFiles(t *testing.T) {
-       dir, err := ioutil.TempDir("", "camel-k-test-")
-       assert.NoError(t, err)
-       defer os.RemoveAll(dir)
-
-       subDir := path.Join(dir, "sub")
-       err = os.Mkdir(subDir, 0o700)
-       assert.NoError(t, err)
+       err := util.WithTempDir("camel-k-test-", func(dir string) error {
+               subDir := path.Join(dir, "sub")
+               err := os.Mkdir(subDir, 0o700)
+               assert.NoError(t, err)
 
-       file := `
+               file := `
                // camel-k: property=file:application.properties
        `
-       fileName := path.Join(subDir, "simple.groovy")
-       err = ioutil.WriteFile(fileName, []byte(file), 0o400)
-       assert.NoError(t, err)
+               fileName := path.Join(subDir, "simple.groovy")
+               err = ioutil.WriteFile(fileName, []byte(file), 0o400)
+               assert.NoError(t, err)
 
-       propFile := `
+               propFile := `
                a=b
        `
-       propFileName := path.Join(subDir, "application.properties")
-       err = ioutil.WriteFile(propFileName, []byte(propFile), 0o400)
-       assert.NoError(t, err)
+               propFileName := path.Join(subDir, "application.properties")
+               err = ioutil.WriteFile(propFileName, []byte(propFile), 0o400)
+               assert.NoError(t, err)
+
+               cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName})
+               assert.NoError(t, err)
+               assert.NotNil(t, cmd)
+               assert.Equal(t, []string{"run", fileName, 
fmt.Sprintf("--property=file:%s", propFileName)}, flags)
+
+               return nil
+       })
 
-       cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName})
        assert.NoError(t, err)
-       assert.NotNil(t, cmd)
-       assert.Equal(t, []string{"run", fileName, 
fmt.Sprintf("--property=file:%s", propFileName)}, flags)
 }
 
 func TestModelineRunBuildProperty(t *testing.T) {
-       dir, err := ioutil.TempDir("", "camel-k-test-")
-       assert.NoError(t, err)
-       defer os.RemoveAll(dir)
-
-       subDir := path.Join(dir, "sub")
-       err = os.Mkdir(subDir, 0o700)
-       assert.NoError(t, err)
+       err := util.WithTempDir("camel-k-test-", func(dir string) error {
+               subDir := path.Join(dir, "sub")
+               err := os.Mkdir(subDir, 0o700)
+               assert.NoError(t, err)
 
-       file := `
+               file := `
                // camel-k: build-property=my-build-prop=my-val
        `
-       fileName := path.Join(subDir, "simple.groovy")
-       err = ioutil.WriteFile(fileName, []byte(file), 0o400)
-       assert.NoError(t, err)
+               fileName := path.Join(subDir, "simple.groovy")
+               err = ioutil.WriteFile(fileName, []byte(file), 0o400)
+               assert.NoError(t, err)
+
+               cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName})
+               assert.NoError(t, err)
+               assert.NotNil(t, cmd)
+               assert.Equal(t, []string{"run", fileName, 
"--build-property=my-build-prop=my-val"}, flags)
+
+               return nil
+       })
 
-       cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName})
        assert.NoError(t, err)
-       assert.NotNil(t, cmd)
-       assert.Equal(t, []string{"run", fileName, 
"--build-property=my-build-prop=my-val"}, flags)
 }
 
 func TestModelineRunBuildPropertyFiles(t *testing.T) {
-       dir, err := ioutil.TempDir("", "camel-k-test-")
-       assert.NoError(t, err)
-       defer os.RemoveAll(dir)
+       err := util.WithTempDir("camel-k-test-", func(dir string) error {
+               subDir := path.Join(dir, "sub")
+               err := os.Mkdir(subDir, 0o700)
+               assert.NoError(t, err)
 
-       subDir := path.Join(dir, "sub")
-       err = os.Mkdir(subDir, 0o700)
-       assert.NoError(t, err)
-
-       file := `
+               file := `
                // camel-k: build-property=file:application.properties
        `
-       fileName := path.Join(subDir, "simple.groovy")
-       err = ioutil.WriteFile(fileName, []byte(file), 0o400)
-       assert.NoError(t, err)
+               fileName := path.Join(subDir, "simple.groovy")
+               err = ioutil.WriteFile(fileName, []byte(file), 0o400)
+               assert.NoError(t, err)
 
-       propFile := `
+               propFile := `
                a=b
        `
-       propFileName := path.Join(subDir, "application.properties")
-       err = ioutil.WriteFile(propFileName, []byte(propFile), 0o400)
-       assert.NoError(t, err)
+               propFileName := path.Join(subDir, "application.properties")
+               err = ioutil.WriteFile(propFileName, []byte(propFile), 0o400)
+               assert.NoError(t, err)
+
+               cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName})
+               assert.NoError(t, err)
+               assert.NotNil(t, cmd)
+               assert.Equal(t, []string{"run", fileName, 
fmt.Sprintf("--build-property=file:%s", propFileName)}, flags)
+
+               return nil
+       })
 
-       cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName})
        assert.NoError(t, err)
-       assert.NotNil(t, cmd)
-       assert.Equal(t, []string{"run", fileName, 
fmt.Sprintf("--build-property=file:%s", propFileName)}, flags)
 }
 
 func TestModelineRunDuplicateTraits(t *testing.T) {
-       dir, err := ioutil.TempDir("", "camel-k-test-")
-       assert.NoError(t, err)
-       defer os.RemoveAll(dir)
+       err := util.WithTempDir("camel-k-test-", func(dir string) error {
+               subDir := path.Join(dir, "sub")
+               err := os.Mkdir(subDir, 0o700)
+               assert.NoError(t, err)
 
-       subDir := path.Join(dir, "sub")
-       err = os.Mkdir(subDir, 0o700)
-       assert.NoError(t, err)
-
-       file := `
+               file := `
                // camel-k: trait=trait1=false
                // camel-k: trait=trait2=false
                // camel-k: trait=foo=bar
        `
-       fileName := path.Join(subDir, "simple.groovy")
-       err = ioutil.WriteFile(fileName, []byte(file), 0o400)
-       assert.NoError(t, err)
+               fileName := path.Join(subDir, "simple.groovy")
+               err = ioutil.WriteFile(fileName, []byte(file), 0o400)
+               assert.NoError(t, err)
+
+               cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName, "-t", "trait1=true", "--trait", 
"trait2=true"})
+               assert.NoError(t, err)
+               assert.NotNil(t, cmd)
+               assert.Equal(t, []string{"run", fileName, "-t", "trait1=true", 
"--trait", "trait2=true", "--trait=foo=bar"}, flags)
+
+               return nil
+       })
 
-       cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName, "-t", "trait1=true", "--trait", 
"trait2=true"})
        assert.NoError(t, err)
-       assert.NotNil(t, cmd)
-       assert.Equal(t, []string{"run", fileName, "-t", "trait1=true", 
"--trait", "trait2=true", "--trait=foo=bar"}, flags)
 }
 
 func TestModelineRunConfigConfigmap(t *testing.T) {
-       dir, err := ioutil.TempDir("", "camel-k-test-")
-       assert.NoError(t, err)
-       defer os.RemoveAll(dir)
-
-       subDir := path.Join(dir, "sub")
-       err = os.Mkdir(subDir, 0o700)
-       assert.NoError(t, err)
+       err := util.WithTempDir("camel-k-test-", func(dir string) error {
+               subDir := path.Join(dir, "sub")
+               err := os.Mkdir(subDir, 0o700)
+               assert.NoError(t, err)
 
-       file := `
+               file := `
                // camel-k: config=configmap:my-cm
        `
-       fileName := path.Join(subDir, "simple.groovy")
-       err = ioutil.WriteFile(fileName, []byte(file), 0o400)
-       assert.NoError(t, err)
+               fileName := path.Join(subDir, "simple.groovy")
+               err = ioutil.WriteFile(fileName, []byte(file), 0o400)
+               assert.NoError(t, err)
+
+               cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName})
+               assert.NoError(t, err)
+               assert.NotNil(t, cmd)
+               assert.Equal(t, []string{"run", fileName, 
"--config=configmap:my-cm"}, flags)
+
+               return nil
+       })
 
-       cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName})
        assert.NoError(t, err)
-       assert.NotNil(t, cmd)
-       assert.Equal(t, []string{"run", fileName, "--config=configmap:my-cm"}, 
flags)
 }
 
 func TestModelineRunConfigSecret(t *testing.T) {
-       dir, err := ioutil.TempDir("", "camel-k-test-")
-       assert.NoError(t, err)
-       defer os.RemoveAll(dir)
-
-       subDir := path.Join(dir, "sub")
-       err = os.Mkdir(subDir, 0o700)
-       assert.NoError(t, err)
+       err := util.WithTempDir("camel-k-test-", func(dir string) error {
+               subDir := path.Join(dir, "sub")
+               err := os.Mkdir(subDir, 0o700)
+               assert.NoError(t, err)
 
-       file := `
+               file := `
                // camel-k: config=secret:my-secret
        `
-       fileName := path.Join(subDir, "simple.groovy")
-       err = ioutil.WriteFile(fileName, []byte(file), 0o400)
-       assert.NoError(t, err)
+               fileName := path.Join(subDir, "simple.groovy")
+               err = ioutil.WriteFile(fileName, []byte(file), 0o400)
+               assert.NoError(t, err)
+
+               cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName})
+               assert.NoError(t, err)
+               assert.NotNil(t, cmd)
+               assert.Equal(t, []string{"run", fileName, 
"--config=secret:my-secret"}, flags)
+
+               return nil
+       })
 
-       cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName})
        assert.NoError(t, err)
-       assert.NotNil(t, cmd)
-       assert.Equal(t, []string{"run", fileName, "--config=secret:my-secret"}, 
flags)
 }
 
 func TestModelineRunConfigFile(t *testing.T) {
-       dir, err := ioutil.TempDir("", "camel-k-test-")
-       assert.NoError(t, err)
-       defer os.RemoveAll(dir)
-
-       subDir := path.Join(dir, "sub")
-       err = os.Mkdir(subDir, 0o700)
-       assert.NoError(t, err)
+       err := util.WithTempDir("camel-k-test-", func(dir string) error {
+               subDir := path.Join(dir, "sub")
+               err := os.Mkdir(subDir, 0o700)
+               assert.NoError(t, err)
 
-       file := `
+               file := `
                // camel-k: config=file:application.properties
        `
-       fileName := path.Join(subDir, "simple.groovy")
-       err = ioutil.WriteFile(fileName, []byte(file), 0o400)
-       assert.NoError(t, err)
+               fileName := path.Join(subDir, "simple.groovy")
+               err = ioutil.WriteFile(fileName, []byte(file), 0o400)
+               assert.NoError(t, err)
 
-       propFile := `
+               propFile := `
                a=b
        `
-       propFileName := path.Join(subDir, "application.properties")
-       err = ioutil.WriteFile(propFileName, []byte(propFile), 0o400)
-       assert.NoError(t, err)
+               propFileName := path.Join(subDir, "application.properties")
+               err = ioutil.WriteFile(propFileName, []byte(propFile), 0o400)
+               assert.NoError(t, err)
+
+               cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName})
+               assert.NoError(t, err)
+               assert.NotNil(t, cmd)
+               assert.Equal(t, []string{"run", fileName, 
fmt.Sprintf("--config=file:%s", propFileName)}, flags)
+
+               return nil
+       })
 
-       cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName})
        assert.NoError(t, err)
-       assert.NotNil(t, cmd)
-       assert.Equal(t, []string{"run", fileName, 
fmt.Sprintf("--config=file:%s", propFileName)}, flags)
 }
 
 func TestModelineRunResourceConfigmap(t *testing.T) {
-       dir, err := ioutil.TempDir("", "camel-k-test-")
-       assert.NoError(t, err)
-       defer os.RemoveAll(dir)
-
-       subDir := path.Join(dir, "sub")
-       err = os.Mkdir(subDir, 0o700)
-       assert.NoError(t, err)
+       err := util.WithTempDir("camel-k-test-", func(dir string) error {
+               subDir := path.Join(dir, "sub")
+               err := os.Mkdir(subDir, 0o700)
+               assert.NoError(t, err)
 
-       file := `
+               file := `
                // camel-k: resource=configmap:my-cm
        `
-       fileName := path.Join(subDir, "simple.groovy")
-       err = ioutil.WriteFile(fileName, []byte(file), 0o400)
-       assert.NoError(t, err)
+               fileName := path.Join(subDir, "simple.groovy")
+               err = ioutil.WriteFile(fileName, []byte(file), 0o400)
+               assert.NoError(t, err)
+
+               cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName})
+               assert.NoError(t, err)
+               assert.NotNil(t, cmd)
+               assert.Equal(t, []string{"run", fileName, 
"--resource=configmap:my-cm"}, flags)
+
+               return nil
+       })
 
-       cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName})
        assert.NoError(t, err)
-       assert.NotNil(t, cmd)
-       assert.Equal(t, []string{"run", fileName, 
"--resource=configmap:my-cm"}, flags)
 }
 
 func TestModelineRunResourceSecret(t *testing.T) {
-       dir, err := ioutil.TempDir("", "camel-k-test-")
-       assert.NoError(t, err)
-       defer os.RemoveAll(dir)
+       err := util.WithTempDir("camel-k-test-", func(dir string) error {
+               subDir := path.Join(dir, "sub")
+               err := os.Mkdir(subDir, 0o700)
+               assert.NoError(t, err)
 
-       subDir := path.Join(dir, "sub")
-       err = os.Mkdir(subDir, 0o700)
-       assert.NoError(t, err)
-
-       file := `
+               file := `
                // camel-k: resource=secret:my-secret
        `
-       fileName := path.Join(subDir, "simple.groovy")
-       err = ioutil.WriteFile(fileName, []byte(file), 0o400)
-       assert.NoError(t, err)
+               fileName := path.Join(subDir, "simple.groovy")
+               err = ioutil.WriteFile(fileName, []byte(file), 0o400)
+               assert.NoError(t, err)
+
+               cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName})
+               assert.NoError(t, err)
+               assert.NotNil(t, cmd)
+               assert.Equal(t, []string{"run", fileName, 
"--resource=secret:my-secret"}, flags)
+
+               return nil
+       })
 
-       cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName})
        assert.NoError(t, err)
-       assert.NotNil(t, cmd)
-       assert.Equal(t, []string{"run", fileName, 
"--resource=secret:my-secret"}, flags)
 }
 
 func TestModelineRunResourceFile(t *testing.T) {
-       dir, err := ioutil.TempDir("", "camel-k-test-")
-       assert.NoError(t, err)
-       defer os.RemoveAll(dir)
-
-       subDir := path.Join(dir, "sub")
-       err = os.Mkdir(subDir, 0o700)
-       assert.NoError(t, err)
+       err := util.WithTempDir("camel-k-test-", func(dir string) error {
+               subDir := path.Join(dir, "sub")
+               err := os.Mkdir(subDir, 0o700)
+               assert.NoError(t, err)
 
-       file := `
+               file := `
                // camel-k: resource=file:application.properties
        `
-       fileName := path.Join(subDir, "simple.groovy")
-       err = ioutil.WriteFile(fileName, []byte(file), 0o400)
-       assert.NoError(t, err)
+               fileName := path.Join(subDir, "simple.groovy")
+               err = ioutil.WriteFile(fileName, []byte(file), 0o400)
+               assert.NoError(t, err)
 
-       propFile := `
+               propFile := `
                a=b
        `
-       propFileName := path.Join(subDir, "application.properties")
-       err = ioutil.WriteFile(propFileName, []byte(propFile), 0o400)
-       assert.NoError(t, err)
+               propFileName := path.Join(subDir, "application.properties")
+               err = ioutil.WriteFile(propFileName, []byte(propFile), 0o400)
+               assert.NoError(t, err)
+
+               cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName})
+               assert.NoError(t, err)
+               assert.NotNil(t, cmd)
+               assert.Equal(t, []string{"run", fileName, 
fmt.Sprintf("--resource=file:%s", propFileName)}, flags)
+
+               return nil
+       })
 
-       cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "run", fileName})
        assert.NoError(t, err)
-       assert.NotNil(t, cmd)
-       assert.Equal(t, []string{"run", fileName, 
fmt.Sprintf("--resource=file:%s", propFileName)}, flags)
 }
 
 func TestModelineInspectSimple(t *testing.T) {
-       dir, err := ioutil.TempDir("", "camel-k-test-")
-       assert.NoError(t, err)
-       defer os.RemoveAll(dir)
+       err := util.WithTempDir("camel-k-test-", func(dir string) error {
 
-       file := `
+               file := `
                // camel-k: dependency=mvn:org.my:lib:1.0
        `
-       fileName := path.Join(dir, "simple.groovy")
-       err = ioutil.WriteFile(fileName, []byte(file), 0o400)
-       assert.NoError(t, err)
+               fileName := path.Join(dir, "simple.groovy")
+               err := ioutil.WriteFile(fileName, []byte(file), 0o400)
+               assert.NoError(t, err)
+
+               cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "local", "inspect", fileName})
+               assert.NoError(t, err)
+               assert.NotNil(t, cmd)
+               assert.Equal(t, []string{"local", "inspect", fileName, 
"--dependency=mvn:org.my:lib:1.0"}, flags)
+
+               return nil
+       })
 
-       cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "local", "inspect", fileName})
        assert.NoError(t, err)
-       assert.NotNil(t, cmd)
-       assert.Equal(t, []string{"local", "inspect", fileName, 
"--dependency=mvn:org.my:lib:1.0"}, flags)
 }
 
 func TestModelineInspectMultipleDeps(t *testing.T) {
-       dir, err := ioutil.TempDir("", "camel-k-test-")
-       assert.NoError(t, err)
-       defer os.RemoveAll(dir)
+       err := util.WithTempDir("camel-k-test-", func(dir string) error {
 
-       file := `
+               file := `
                // camel-k: dependency=mvn:org.my:lib:1.0
                // camel-k: dependency=camel-k:camel-dep
        `
-       fileName := path.Join(dir, "simple.groovy")
-       err = ioutil.WriteFile(fileName, []byte(file), 0o400)
-       assert.NoError(t, err)
+               fileName := path.Join(dir, "simple.groovy")
+               err := ioutil.WriteFile(fileName, []byte(file), 0o400)
+               assert.NoError(t, err)
+
+               cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "local", "inspect", fileName})
+               assert.NoError(t, err)
+               assert.NotNil(t, cmd)
+               assert.Equal(t, []string{"local", "inspect", fileName, 
"--dependency=mvn:org.my:lib:1.0", "--dependency=camel-k:camel-dep"}, flags)
+
+               return nil
+       })
 
-       cmd, flags, err := NewKamelWithModelineCommand(context.TODO(), 
[]string{"kamel", "local", "inspect", fileName})
        assert.NoError(t, err)
-       assert.NotNil(t, cmd)
-       assert.Equal(t, []string{"local", "inspect", fileName, 
"--dependency=mvn:org.my:lib:1.0", "--dependency=camel-k:camel-dep"}, flags)
 }
diff --git a/pkg/cmd/root_test.go b/pkg/cmd/root_test.go
index 19db717..2189ed5 100644
--- a/pkg/cmd/root_test.go
+++ b/pkg/cmd/root_test.go
@@ -50,7 +50,9 @@ func kamelTestPreAddCommandInit() (*RootCmdOptions, 
*cobra.Command) {
 
 func TestLoadFromEnvVar(t *testing.T) {
        // shows how to include a "," character inside an env value see VAR1 
value
-       os.Setenv("KAMEL_RUN_ENVS", 
"\"VAR1=value,\"\"othervalue\"\"\",VAR2=value2")
+       if err := os.Setenv("KAMEL_RUN_ENVS", 
"\"VAR1=value,\"\"othervalue\"\"\",VAR2=value2"); err != nil {
+               t.Fatalf("Unexpected error: %v", err)
+       }
 
        runCmdOptions, rootCmd, _ := initializeRunCmdOptions(t)
 
@@ -87,7 +89,10 @@ func TestLoadFromFile(t *testing.T) {
 }
 
 func TestPrecedenceEnvVarOverFile(t *testing.T) {
-       os.Setenv("KAMEL_RUN_ENVS", "VAR1=envVar")
+       if err := os.Setenv("KAMEL_RUN_ENVS", "VAR1=envVar"); err != nil {
+               t.Fatalf("Unexpected error: %v", err)
+       }
+
        propertiesFile := []byte(`kamel.run.envs: VAR2=file`)
        viper.SetConfigType("properties")
        readViperConfigFromBytes(t, propertiesFile)
@@ -107,7 +112,10 @@ func TestPrecedenceEnvVarOverFile(t *testing.T) {
 }
 
 func TestPrecedenceCommandLineOverEverythingElse(t *testing.T) {
-       os.Setenv("KAMEL_RUN_ENVS", "VAR1=envVar")
+       if err := os.Setenv("KAMEL_RUN_ENVS", "VAR1=envVar"); err != nil {
+               t.Fatalf("Unexpected error: %v", err)
+       }
+
        propertiesFile := []byte(`kamel.run.envs: VAR2=file`)
        viper.SetConfigType("properties")
        readViperConfigFromBytes(t, propertiesFile)
diff --git a/pkg/cmd/trait_help.go b/pkg/cmd/trait_help.go
index 7a29c72..0ef7bc9 100644
--- a/pkg/cmd/trait_help.go
+++ b/pkg/cmd/trait_help.go
@@ -101,8 +101,13 @@ func (command *traitHelpCommandOptions) run(cmd 
*cobra.Command, args []string) e
        var traitDescriptions []*traitDescription
        catalog := trait.NewCatalog(nil)
 
-       traitMetaData := &traitMetaData{}
-       err := yaml.Unmarshal(resources.Resource("/traits.yaml"), traitMetaData)
+       content, err := resources.Resource("/traits.yaml")
+       if err != nil {
+               return err
+       }
+
+       traitMetaData := traitMetaData{}
+       err = yaml.Unmarshal(content, &traitMetaData)
        if err != nil {
                return err
        }
diff --git a/pkg/cmd/util_containerization.go b/pkg/cmd/util_containerization.go
index 4868e5a..aae4f13 100644
--- a/pkg/cmd/util_containerization.go
+++ b/pkg/cmd/util_containerization.go
@@ -50,9 +50,7 @@ func createDockerBaseWorkingDirectory() error {
 
 func deleteDockerBaseWorkingDirectory() error {
        // Remove directory used for computing the dependencies.
-       defer os.RemoveAll(docker.BaseWorkingDirectory)
-
-       return nil
+       return os.RemoveAll(docker.BaseWorkingDirectory)
 }
 
 func createDockerWorkingDirectory() error {
@@ -70,9 +68,7 @@ func createDockerWorkingDirectory() error {
 
 func deleteDockerWorkingDirectory() error {
        // Remove directory used for computing the dependencies.
-       defer os.RemoveAll(docker.IntegrationWorkingDirectory)
-
-       return nil
+       return os.RemoveAll(docker.IntegrationWorkingDirectory)
 }
 
 func setDockerNetworkName(networkName string) {
diff --git a/pkg/cmd/util_dependencies.go b/pkg/cmd/util_dependencies.go
index 5f0a758..8a5e3ea 100644
--- a/pkg/cmd/util_dependencies.go
+++ b/pkg/cmd/util_dependencies.go
@@ -498,9 +498,7 @@ func createMavenWorkingDirectory() error {
 
 func deleteMavenWorkingDirectory() error {
        // Remove directory used for computing the dependencies
-       defer os.RemoveAll(util.MavenWorkingDirectory)
-
-       return nil
+       return os.RemoveAll(util.MavenWorkingDirectory)
 }
 
 func getCustomDependenciesDir(integrationDirectory string) string {
diff --git a/pkg/controller/integrationplatform/create.go 
b/pkg/controller/integrationplatform/create.go
index aabf9b4..91e725a 100644
--- a/pkg/controller/integrationplatform/create.go
+++ b/pkg/controller/integrationplatform/create.go
@@ -46,7 +46,12 @@ func (action *createAction) CanHandle(platform 
*v1.IntegrationPlatform) bool {
 }
 
 func (action *createAction) Handle(ctx context.Context, platform 
*v1.IntegrationPlatform) (*v1.IntegrationPlatform, error) {
-       for _, k := range resources.WithPrefix("/camel-catalog-") {
+       paths, err := resources.WithPrefix("/camel-catalog-")
+       if err != nil {
+               return nil, err
+       }
+
+       for _, k := range paths {
                action.L.Infof("Installing camel catalog: %s", k)
                err := install.Resources(ctx, action.client, 
platform.Namespace, true, install.IdentityResourceCustomizer, k)
                if err != nil {
diff --git a/pkg/controller/integrationplatform/create_test.go 
b/pkg/controller/integrationplatform/create_test.go
index b7f038e..18b1929 100644
--- a/pkg/controller/integrationplatform/create_test.go
+++ b/pkg/controller/integrationplatform/create_test.go
@@ -59,7 +59,10 @@ func TestCreate(t *testing.T) {
        assert.Nil(t, err)
        assert.NotEmpty(t, list.Items)
 
-       for _, k := range resources.WithPrefix("/camel-catelog-") {
+       items, err := resources.WithPrefix("/camel-catelog-")
+       assert.Nil(t, err)
+
+       for _, k := range items {
                found := false
 
                for _, c := range list.Items {
diff --git a/pkg/install/cluster.go b/pkg/install/cluster.go
index 774caad..7902986 100644
--- a/pkg/install/cluster.go
+++ b/pkg/install/cluster.go
@@ -268,7 +268,12 @@ func isCrdInstalled(c client.Client, kind string, version 
string) (bool, error)
 }
 
 func installCRD(ctx context.Context, c client.Client, kind string, version 
string, resourceName string, converter ResourceCustomizer, collection 
*kubernetes.Collection, force bool) error {
-       crd, err := kubernetes.LoadResourceFromYaml(c.GetScheme(), 
resources.ResourceAsString("/crd/bases/"+resourceName))
+       content, err := resources.ResourceAsString("/crd/bases/" + resourceName)
+       if err != nil {
+               return err
+       }
+
+       crd, err := kubernetes.LoadResourceFromYaml(c.GetScheme(), content)
        if err != nil {
                return err
        }
@@ -319,7 +324,12 @@ func isResourceInstalled(ctx context.Context, c 
client.Client, object ctrl.Objec
 }
 
 func installResource(ctx context.Context, c client.Client, collection 
*kubernetes.Collection, resource string) error {
-       obj, err := kubernetes.LoadResourceFromYaml(c.GetScheme(), 
resources.ResourceAsString(resource))
+       content, err := resources.ResourceAsString(resource)
+       if err != nil {
+               return err
+       }
+
+       obj, err := kubernetes.LoadResourceFromYaml(c.GetScheme(), content)
        if err != nil {
                return err
        }
diff --git a/pkg/install/common.go b/pkg/install/common.go
index 72315ae..e131298 100644
--- a/pkg/install/common.go
+++ b/pkg/install/common.go
@@ -81,7 +81,13 @@ func Resource(ctx context.Context, c client.Client, 
namespace string, force bool
 
 func ResourceOrCollect(ctx context.Context, c client.Client, namespace string, 
collection *kubernetes.Collection,
        force bool, customizer ResourceCustomizer, name string) error {
-       obj, err := kubernetes.LoadResourceFromYaml(c.GetScheme(), 
resources.ResourceAsString(name))
+
+       content, err := resources.ResourceAsString(name)
+       if err != nil {
+               return err
+       }
+
+       obj, err := kubernetes.LoadResourceFromYaml(c.GetScheme(), content)
        if err != nil {
                return err
        }
diff --git a/pkg/install/operator.go b/pkg/install/operator.go
index 5fcb63a..9492ab1 100644
--- a/pkg/install/operator.go
+++ b/pkg/install/operator.go
@@ -302,12 +302,18 @@ func installClusterRoleBinding(ctx context.Context, c 
client.Client, collection
        existing, err := c.RbacV1().ClusterRoleBindings().Get(ctx, name, 
metav1.GetOptions{})
        switch {
        case k8serrors.IsNotFound(err):
+
+               content, err := resources.ResourceAsString(path)
+               if err != nil {
+                       return err
+               }
+
                existing = nil
-               yaml := resources.ResourceAsString(path)
-               if yaml == "" {
+               if content == "" {
                        return errors.Errorf("resource file %v not found", path)
                }
-               obj, err := kubernetes.LoadResourceFromYaml(c.GetScheme(), yaml)
+
+               obj, err := kubernetes.LoadResourceFromYaml(c.GetScheme(), 
content)
                if err != nil {
                        return err
                }
@@ -436,10 +442,17 @@ func PlatformOrCollect(ctx context.Context, c 
client.Client, clusterType string,
        if err != nil {
                return nil, err
        }
-       platformObject, err := kubernetes.LoadResourceFromYaml(c.GetScheme(), 
resources.ResourceAsString("/samples/bases/camel_v1_integrationplatform.yaml"))
+
+       content, err := 
resources.ResourceAsString("/samples/bases/camel_v1_integrationplatform.yaml")
+       if err != nil {
+               return nil, err
+       }
+
+       platformObject, err := kubernetes.LoadResourceFromYaml(c.GetScheme(), 
content)
        if err != nil {
                return nil, err
        }
+
        pl, ok := platformObject.(*v1.IntegrationPlatform)
        if !ok {
                return nil, fmt.Errorf("type assertion failed: %v", 
platformObject)
diff --git a/pkg/resources/resources_support.go 
b/pkg/resources/resources_support.go
index d9bb2e1..46a8c36 100644
--- a/pkg/resources/resources_support.go
+++ b/pkg/resources/resources_support.go
@@ -20,23 +20,27 @@ package resources
 import (
        "bytes"
        "io/ioutil"
+       "os"
        "path/filepath"
        "strings"
        "text/template"
 
-       "github.com/apache/camel-k/pkg/util/log"
+       "github.com/apache/camel-k/pkg/util"
+
+       "github.com/pkg/errors"
 )
 
 //
 //go:generate go run ../../cmd/util/vfs-gen resources config
 //
 // ResourceAsString returns the named resource content as string.
-func ResourceAsString(name string) string {
-       return string(Resource(name))
+func ResourceAsString(name string) (string, error) {
+       data, err := Resource(name)
+       return string(data), err
 }
 
-// Resource provides an easy access to embedded assets.
-func Resource(name string) []byte {
+// Resource provides an easy way to access to embedded assets.
+func Resource(name string) ([]byte, error) {
        name = strings.Trim(name, " ")
        if !strings.HasPrefix(name, "/") {
                name = "/" + name
@@ -44,25 +48,28 @@ func Resource(name string) []byte {
 
        file, err := assets.Open(name)
        if err != nil {
-               log.Error(err, "cannot access resource file", "file", name)
-               return nil
+               return nil, errors.Wrapf(err, "cannot access resource file %s", 
name)
        }
-       defer file.Close()
 
        data, err := ioutil.ReadAll(file)
        if err != nil {
-               log.Error(err, "error while reading resource file", "file", 
name)
-               return nil
+               _ = file.Close()
+               return nil, errors.Wrapf(err, "cannot access resource file %s", 
name)
        }
-       return data
+
+       return data, file.Close()
 }
 
 // TemplateResource loads a file resource as go template and processes it 
using the given parameters.
 func TemplateResource(name string, params interface{}) (string, error) {
-       rawData := ResourceAsString(name)
+       rawData, err := ResourceAsString(name)
+       if err != nil {
+               return "", err
+       }
        if rawData == "" {
                return "", nil
        }
+
        tmpl, err := template.New(name).Parse(rawData)
        if err != nil {
                return "", err
@@ -72,6 +79,7 @@ func TemplateResource(name string, params interface{}) 
(string, error) {
        if err := tmpl.Execute(&buf, params); err != nil {
                return "", err
        }
+
        return buf.String(), nil
 }
 
@@ -85,46 +93,56 @@ func DirExists(dirName string) bool {
 
 // WithPrefix lists all file names that begins with the give path prefix
 // If pathPrefix is a path of directories then be sure to end it with a '/'.
-func WithPrefix(pathPrefix string) []string {
+func WithPrefix(pathPrefix string) ([]string, error) {
        dirPath := filepath.Dir(pathPrefix)
 
+       paths, err := Resources(dirPath)
+       if err != nil {
+               return nil, err
+       }
+
        var res []string
-       for _, path := range Resources(dirPath) {
-               if result, _ := filepath.Match(pathPrefix+"*", path); result {
-                       res = append(res, path)
+       for i := range paths {
+               if result, _ := filepath.Match(pathPrefix+"*", paths[i]); 
result {
+                       res = append(res, paths[i])
                }
        }
 
-       return res
+       return res, nil
 }
 
 // Resources lists all file names in the given path (starts with '/').
-func Resources(dirName string) []string {
+func Resources(dirName string) ([]string, error) {
        dir, err := assets.Open(dirName)
        if err != nil {
-               log.Error(err, "error while listing resource files", "dir", 
dirName)
-               return nil
+               if os.IsNotExist(err) {
+                       return nil, nil
+               }
+
+               return nil, errors.Wrapf(err, "error while listing resource 
files %s", dirName)
        }
-       defer dir.Close()
+
        info, err := dir.Stat()
        if err != nil {
-               log.Error(err, "error while doing stat on directory", "dir", 
dirName)
-               return nil
+               return nil, dir.Close()
        }
        if !info.IsDir() {
-               log.Error(err, "location is not a directory", "dir", dirName)
-               return nil
+               util.CloseQuietly(dir)
+               return nil, errors.Wrapf(err, "location %s is not a directory", 
dirName)
        }
+
        files, err := dir.Readdir(-1)
        if err != nil {
-               log.Error(err, "error while listing files on directory", "dir", 
dirName)
-               return nil
+               util.CloseQuietly(dir)
+               return nil, errors.Wrapf(err, "error while listing files on 
directory %s", dirName)
        }
+
        var res []string
        for _, f := range files {
                if !f.IsDir() {
                        res = append(res, filepath.Join(dirName, f.Name()))
                }
        }
-       return res
+
+       return res, dir.Close()
 }
diff --git a/pkg/resources/resources_test.go b/pkg/resources/resources_test.go
index 8fc7171..3f2a544 100644
--- a/pkg/resources/resources_test.go
+++ b/pkg/resources/resources_test.go
@@ -22,34 +22,94 @@ import (
        "strings"
        "testing"
 
-       "github.com/stretchr/testify/assert"
        "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
        "k8s.io/apimachinery/pkg/util/yaml"
+
+       "github.com/stretchr/testify/assert"
 )
 
+func NoErrorAndNotEmptyBytes(t *testing.T, path string, callable func(path 
string) ([]byte, error)) {
+       t.Helper()
+
+       object, err := callable(path)
+
+       assert.Nil(t, err)
+       assert.NotEmpty(t, object)
+}
+func NoErrorAndNotEmptyString(t *testing.T, path string, callable func(path 
string) (string, error)) {
+       t.Helper()
+
+       object, err := callable(path)
+
+       assert.Nil(t, err)
+       assert.NotEmpty(t, object)
+}
+
+func NoErrorAndContains(t *testing.T, path string, contains string, callable 
func(path string) ([]string, error)) {
+       t.Helper()
+
+       elements, err := callable(path)
+
+       assert.Nil(t, err)
+       assert.Contains(t, elements, contains)
+}
+func NoErrorAndNotContains(t *testing.T, path string, contains string, 
callable func(path string) ([]string, error)) {
+       t.Helper()
+
+       elements, err := callable(path)
+
+       assert.Nil(t, err)
+       assert.NotContains(t, elements, contains)
+}
+func NoErrorAndEmpty(t *testing.T, path string, callable func(path string) 
([]string, error)) {
+       t.Helper()
+
+       elements, err := callable(path)
+
+       assert.Nil(t, err)
+       assert.Empty(t, elements)
+}
+
+func ErrorBytes(t *testing.T, path string, callable func(path string) ([]byte, 
error)) {
+       t.Helper()
+
+       _, err := callable(path)
+       assert.NotNil(t, err)
+}
+func ErrorString(t *testing.T, path string, callable func(path string) 
(string, error)) {
+
+       t.Helper()
+
+       _, err := callable(path)
+       assert.NotNil(t, err)
+}
+
 func TestGetResource(t *testing.T) {
-       assert.NotEmpty(t, Resource("manager/operator-service-account.yaml"))
-       assert.NotEmpty(t, Resource("/manager/operator-service-account.yaml"))
-       assert.NotEmpty(t, 
ResourceAsString("manager/operator-service-account.yaml"))
-       assert.NotEmpty(t, 
ResourceAsString("/manager/operator-service-account.yaml"))
-       assert.Contains(t, Resources("/manager"), 
"/manager/operator-service-account.yaml")
+       NoErrorAndNotEmptyBytes(t, "manager/operator-service-account.yaml", 
Resource)
+       NoErrorAndNotEmptyBytes(t, "/manager/operator-service-account.yaml", 
Resource)
+       NoErrorAndNotEmptyString(t, "manager/operator-service-account.yaml", 
ResourceAsString)
+       NoErrorAndNotEmptyString(t, "/manager/operator-service-account.yaml", 
ResourceAsString)
+       NoErrorAndContains(t, "/manager", 
"/manager/operator-service-account.yaml", Resources)
 }
 
 func TestGetNoResource(t *testing.T) {
-       assert.Empty(t, Resource("manager/operator-service-account.json"))
-       assert.Empty(t, Resource("/manager/operator-service-account.json"))
-       assert.Empty(t, 
ResourceAsString("manager/operator-service-account.json"))
-       assert.Empty(t, 
ResourceAsString("/manager/operator-service-account.json"))
-       assert.NotContains(t, Resources("/"), 
"/manager/operator-service-account.json")
+       ErrorBytes(t, "manager/operator-service-account.json", Resource)
+       ErrorBytes(t, "/manager/operator-service-account.json", Resource)
+       ErrorString(t, "manager/operator-service-account.json", 
ResourceAsString)
+       ErrorString(t, "/manager/operator-service-account.json", 
ResourceAsString)
+       NoErrorAndNotContains(t, "/", "/manager/operator-service-account.json", 
Resources)
 }
 
 func TestResources(t *testing.T) {
-       assert.Contains(t, Resources("/manager"), 
"/manager/operator-service-account.yaml")
-       assert.Contains(t, Resources("/manager/"), 
"/manager/operator-service-account.yaml")
-       assert.NotContains(t, Resources("/manager"), "kustomize.yaml")
-       assert.Empty(t, Resources("/dirnotexist"))
+       NoErrorAndContains(t, "/manager", 
"/manager/operator-service-account.yaml", Resources)
+       NoErrorAndContains(t, "/manager/", 
"/manager/operator-service-account.yaml", Resources)
+       NoErrorAndNotContains(t, "/manager/", "kustomize.yaml", Resources)
+       NoErrorAndEmpty(t, "/dirnotexist", Resources)
+
+       items, err := Resources("/")
+       assert.Nil(t, err)
 
-       for _, res := range Resources("/") {
+       for _, res := range items {
                if strings.Contains(res, "java.tmpl") {
                        assert.Fail(t, "Resources should not return nested 
files")
                }
@@ -57,20 +117,21 @@ func TestResources(t *testing.T) {
                        assert.Fail(t, "Resources should not return nested 
dirs")
                }
        }
-       assert.Contains(t, Resources("/templates"), "/templates/java.tmpl")
+
+       NoErrorAndContains(t, "/templates", "/templates/java.tmpl", Resources)
 }
 
 func TestResourcesWithPrefix(t *testing.T) {
-       assert.Contains(t, WithPrefix("/manager/"), 
"/manager/operator-service-account.yaml")
-       assert.Contains(t, WithPrefix("/manager/op"), 
"/manager/operator-service-account.yaml")
-       assert.Contains(t, WithPrefix("/manager/operator-service-account"), 
"/manager/operator-service-account.yaml")
-
-       assert.Contains(t, WithPrefix("/traits"), "/traits.yaml")
+       NoErrorAndContains(t, "/manager/", 
"/manager/operator-service-account.yaml", WithPrefix)
+       NoErrorAndContains(t, "/manager/op", 
"/manager/operator-service-account.yaml", WithPrefix)
+       NoErrorAndContains(t, "/manager/operator-service-account", 
"/manager/operator-service-account.yaml", WithPrefix)
+       NoErrorAndContains(t, "/traits", "/traits.yaml", WithPrefix)
 
        // directory needs the slash on the end
-       assert.NotContains(t, WithPrefix("/manager"), 
"/manager/operator-service-account.yaml")
+       NoErrorAndNotContains(t, "/manager", 
"/manager/operator-service-account.yaml", WithPrefix)
+
        // need to get to at least the same directory as the required files
-       assert.NotContains(t, WithPrefix("/"), 
"/manager/operator-service-account.yaml")
+       NoErrorAndNotContains(t, "/", "/manager/operator-service-account.yaml", 
WithPrefix)
 }
 
 func TestTemplateResource(t *testing.T) {
@@ -103,11 +164,11 @@ func TestTemplateResource(t *testing.T) {
 }
 
 func TestCRDResources(t *testing.T) {
-       assert.NotEmpty(t, Resource("/crd/bases/camel.apache.org_builds.yaml"))
-       assert.NotEmpty(t, 
Resource("/crd/bases/camel.apache.org_camelcatalogs.yaml"))
-       assert.NotEmpty(t, 
Resource("/crd/bases/camel.apache.org_integrationkits.yaml"))
-       assert.NotEmpty(t, 
Resource("/crd/bases/camel.apache.org_integrationplatforms.yaml"))
-       assert.NotEmpty(t, 
Resource("/crd/bases/camel.apache.org_integrations.yaml"))
-       assert.NotEmpty(t, 
Resource("/crd/bases/camel.apache.org_kameletbindings.yaml"))
-       assert.NotEmpty(t, 
Resource("/crd/bases/camel.apache.org_kamelets.yaml"))
+       NoErrorAndNotEmptyBytes(t, "/crd/bases/camel.apache.org_builds.yaml", 
Resource)
+       NoErrorAndNotEmptyBytes(t, 
"/crd/bases/camel.apache.org_camelcatalogs.yaml", Resource)
+       NoErrorAndNotEmptyBytes(t, 
"/crd/bases/camel.apache.org_integrationkits.yaml", Resource)
+       NoErrorAndNotEmptyBytes(t, 
"/crd/bases/camel.apache.org_integrationplatforms.yaml", Resource)
+       NoErrorAndNotEmptyBytes(t, 
"/crd/bases/camel.apache.org_integrations.yaml", Resource)
+       NoErrorAndNotEmptyBytes(t, 
"/crd/bases/camel.apache.org_kameletbindings.yaml", Resource)
+       NoErrorAndNotEmptyBytes(t, "/crd/bases/camel.apache.org_kamelets.yaml", 
Resource)
 }
diff --git a/pkg/trait/openapi.go b/pkg/trait/openapi.go
index 272714d..09d7ab5 100644
--- a/pkg/trait/openapi.go
+++ b/pkg/trait/openapi.go
@@ -27,6 +27,8 @@ import (
        "strconv"
        "strings"
 
+       "go.uber.org/multierr"
+
        "github.com/pkg/errors"
 
        corev1 "k8s.io/api/core/v1"
@@ -95,14 +97,14 @@ func (t *openAPITrait) Apply(e *Environment) error {
                return err
        }
 
-       defer os.RemoveAll(tmpDir)
-
        for i, resource := range e.Integration.Spec.Resources {
                if resource.Type != v1.ResourceTypeOpenAPI {
                        continue
                }
                if resource.Name == "" {
-                       return fmt.Errorf("no name defined for the openapi 
resource: %v", resource)
+                       return multierr.Append(
+                               fmt.Errorf("no name defined for the openapi 
resource: %v", resource),
+                               os.RemoveAll(tmpDir))
                }
 
                generatedContentName := fmt.Sprintf("%s-openapi-%03d", 
e.Integration.Name, i)
@@ -137,7 +139,7 @@ func (t *openAPITrait) Apply(e *Environment) error {
                e.Integration.Status.GeneratedSources = generatedSources
        }
 
-       return nil
+       return os.RemoveAll(tmpDir)
 }
 
 func (t *openAPITrait) generateOpenAPIConfigMap(e *Environment, resource 
v1.ResourceSpec, tmpDir, generatedContentName string) error {
diff --git a/pkg/util/camel/catalog.go b/pkg/util/camel/catalog.go
index f47cf61..b645955 100644
--- a/pkg/util/camel/catalog.go
+++ b/pkg/util/camel/catalog.go
@@ -19,8 +19,6 @@ package camel
 
 import (
        "context"
-       "io/ioutil"
-       "os"
        "path"
 
        "github.com/apache/camel-k/pkg/util"
@@ -48,9 +46,20 @@ func QuarkusCatalog() (*RuntimeCatalog, error) {
 func catalogForRuntimeProvider(provider v1.RuntimeProvider) (*RuntimeCatalog, 
error) {
        catalogs := make([]v1.CamelCatalog, 0)
 
-       for _, name := range resources.WithPrefix("/camel-catalog-") {
+       names, err := resources.WithPrefix("/camel-catalog-")
+       if err != nil {
+               return nil, err
+       }
+
+       for _, name := range names {
+
+               content, err := resources.Resource(name)
+               if err != nil {
+                       return nil, err
+               }
+
                var c v1.CamelCatalog
-               if err := yaml2.Unmarshal(resources.Resource(name), &c); err != 
nil {
+               if err := yaml2.Unmarshal(content, &c); err != nil {
                        return nil, err
                }
 
@@ -96,60 +105,47 @@ func GenerateCatalogCommon(
        runtime v1.RuntimeSpec,
        providerDependencies []maven.Dependency) (*RuntimeCatalog, error) {
 
-       root := os.TempDir()
-       tmpDir, err := ioutil.TempDir(root, "camel-catalog")
-       if err != nil {
-               return nil, err
-       }
+       catalog := v1.CamelCatalog{}
 
-       defer os.RemoveAll(tmpDir)
+       err := util.WithTempDir("camel-catalog", func(tmpDir string) error {
+               project := generateMavenProject(runtime.Version, 
providerDependencies)
 
-       if err := os.MkdirAll(tmpDir, os.ModePerm); err != nil {
-               return nil, err
-       }
+               mc := maven.NewContext(tmpDir)
+               mc.LocalRepository = mvn.LocalRepository
+               mc.AddSystemProperty("catalog.path", tmpDir)
+               mc.AddSystemProperty("catalog.file", "catalog.yaml")
+               mc.AddSystemProperty("catalog.runtime", 
string(runtime.Provider))
 
-       project := generateMavenProject(runtime.Version, providerDependencies)
+               mc.SettingsContent = nil
+               if settings != "" {
+                       mc.SettingsContent = []byte(settings)
+               }
 
-       mc := maven.NewContext(tmpDir)
-       mc.LocalRepository = mvn.LocalRepository
-       mc.AddSystemProperty("catalog.path", tmpDir)
-       mc.AddSystemProperty("catalog.file", "catalog.yaml")
-       mc.AddSystemProperty("catalog.runtime", string(runtime.Provider))
+               if caCert != nil {
+                       trustStoreName := "trust.jks"
+                       trustStorePass := jvm.NewKeystorePassword()
+                       if err := jvm.GenerateKeystore(ctx, tmpDir, 
trustStoreName, trustStorePass, caCert); err != nil {
+                               return err
+                       }
+                       mc.ExtraMavenOpts = append(mc.ExtraMavenOpts,
+                               "-Djavax.net.ssl.trustStore="+trustStoreName,
+                               
"-Djavax.net.ssl.trustStorePassword="+trustStorePass,
+                       )
+               }
 
-       mc.SettingsContent = nil
-       if settings != "" {
-               mc.SettingsContent = []byte(settings)
-       }
+               if err := project.Command(mc).Do(ctx); err != nil {
+                       return err
+               }
 
-       if caCert != nil {
-               trustStoreName := "trust.jks"
-               trustStorePass := jvm.NewKeystorePassword()
-               err := jvm.GenerateKeystore(ctx, tmpDir, trustStoreName, 
trustStorePass, caCert)
+               content, err := util.ReadFile(path.Join(tmpDir, "catalog.yaml"))
                if err != nil {
-                       return nil, err
+                       return err
                }
-               mc.ExtraMavenOpts = append(mc.ExtraMavenOpts,
-                       "-Djavax.net.ssl.trustStore="+trustStoreName,
-                       "-Djavax.net.ssl.trustStorePassword="+trustStorePass,
-               )
-       }
-
-       err = project.Command(mc).Do(ctx)
-       if err != nil {
-               return nil, err
-       }
 
-       content, err := util.ReadFile(path.Join(tmpDir, "catalog.yaml"))
-       if err != nil {
-               return nil, err
-       }
-
-       catalog := v1.CamelCatalog{}
-       if err := yaml2.Unmarshal(content, &catalog); err != nil {
-               return nil, err
-       }
+               return yaml2.Unmarshal(content, &catalog)
+       })
 
-       return NewRuntimeCatalog(catalog.Spec), nil
+       return NewRuntimeCatalog(catalog.Spec), err
 }
 
 func generateMavenProject(runtimeVersion string, providerDependencies 
[]maven.Dependency) maven.Project {
diff --git a/pkg/util/gzip/compress.go b/pkg/util/gzip/compress.go
index 62201fa..5a419f2 100644
--- a/pkg/util/gzip/compress.go
+++ b/pkg/util/gzip/compress.go
@@ -23,6 +23,8 @@ import (
        "encoding/base64"
        "io"
        "io/ioutil"
+
+       "github.com/apache/camel-k/pkg/util"
 )
 
 // Compress --.
@@ -61,19 +63,19 @@ func Uncompress(buffer io.Writer, data []byte) error {
                return err
        }
 
-       defer gz.Close()
-
        data, err = ioutil.ReadAll(gz)
        if err != nil {
+               util.CloseQuietly(gz)
                return err
        }
 
        _, err = buffer.Write(data)
        if err != nil {
+               util.CloseQuietly(gz)
                return err
        }
 
-       return nil
+       return gz.Close()
 }
 
 // UncompressBase64 --.
diff --git a/pkg/util/sync/file_test.go b/pkg/util/sync/file_test.go
index 792cd60..aa5815a 100644
--- a/pkg/util/sync/file_test.go
+++ b/pkg/util/sync/file_test.go
@@ -31,7 +31,9 @@ import (
 func TestFile(t *testing.T) {
        file, err := os.CreateTemp("", "camel-k-test-*")
        assert.Nil(t, err)
-       defer os.Remove(file.Name())
+       defer func() {
+               _ = os.Remove(file.Name())
+       }()
 
        ctx, cancel := context.WithDeadline(context.Background(), 
time.Now().Add(100*time.Second))
        defer cancel()
diff --git a/pkg/util/util.go b/pkg/util/util.go
index 1478e29..2d2f73e 100644
--- a/pkg/util/util.go
+++ b/pkg/util/util.go
@@ -779,6 +779,12 @@ func Close(err error, closer io.Closer) error {
        return multierr.Append(err, closer.Close())
 }
 
+// CloseQuietly unconditionally close an io.Closer
+// It should not be used to replace the Close statement(s).
+func CloseQuietly(closer io.Closer) {
+       _ = closer.Close()
+}
+
 // WithFile a safe wrapper to process a file.
 func WithFile(name string, flag int, perm os.FileMode, consumer func(file 
*os.File) error) error {
        // #nosec G304
@@ -836,3 +842,16 @@ func WriteFileWithContent(filePath string, content []byte) 
error {
 
        return Close(err, file)
 }
+
+// WithTempDir a safe wrapper to deal with temporary directories.
+func WithTempDir(pattern string, consumer func(string) error) error {
+       tmpDir, err := ioutil.TempDir("", pattern)
+       if err != nil {
+               return err
+       }
+
+       consumerErr := consumer(tmpDir)
+       removeErr := os.RemoveAll(tmpDir)
+
+       return multierr.Append(consumerErr, removeErr)
+}

Reply via email to