You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by as...@apache.org on 2021/11/26 06:51:52 UTC
[camel-k] branch main updated: fix(lint): error return value are not checked
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 <lb...@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)
+}