You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2018/12/05 15:57:37 UTC

[camel-k] 01/02: chore: add all sorts of linters and pre-commit ...

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

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

commit 385a8639b1a4aecce26491728e851e85b9ab395b
Author: Zoran Regvart <zr...@apache.org>
AuthorDate: Wed Dec 5 12:51:38 2018 +0100

    chore: add all sorts of linters and pre-commit ...
    
    ...hook
    
    This adds a myriad of linters from golangci/golangci-lint[1] and a
    pre-commit hook to execute them on `git commit`. Some lint checks needed
    to be disabled to keep the PR not to big to merge.
    
    To install pre-commit look at the Installation instructions[2] of
    pre-commit project.
    
    To install golangci-lint follow the Local Installation instructions[3].
    
    [1] https://github.com/golangci/golangci-lint
    [2] https://pre-commit.com/#install
    [3] https://github.com/golangci/golangci-lint#local-installation
---
 .golangci.yml                             |  9 +++++++
 .pre-commit-config.yaml                   |  6 +++++
 build/Makefile                            |  3 ++-
 docs/developers.adoc                      |  8 ++++++
 pkg/apis/camel/v1alpha1/types.go          |  2 ++
 pkg/builder/builder.go                    |  4 +--
 pkg/builder/builder_steps.go              | 13 +++++-----
 pkg/builder/kaniko/publisher.go           |  8 +++++-
 pkg/builder/s2i/publisher.go              | 18 ++++++++++---
 pkg/builder/springboot/generator.go       |  9 ++++---
 pkg/client/cmd/completion_bash.go         |  6 ++++-
 pkg/client/cmd/completion_zsh.go          |  6 ++++-
 pkg/client/cmd/context_create.go          | 13 +++++-----
 pkg/client/cmd/context_delete.go          | 12 ++++-----
 pkg/client/cmd/context_get.go             |  8 +++---
 pkg/client/cmd/delete.go                  |  9 ++++---
 pkg/client/cmd/install.go                 | 12 ++++++---
 pkg/client/cmd/root.go                    | 21 ++++++++++++----
 pkg/client/cmd/run.go                     | 18 +++++++------
 pkg/install/operator.go                   |  5 ++--
 pkg/metadata/metadata_uri_test.go         |  3 ++-
 pkg/metadata/uris.go                      | 24 +++++++++---------
 pkg/platform/platform.go                  |  1 +
 pkg/stub/action/context/build.go          | 10 +++++---
 pkg/stub/action/context/initialize.go     |  6 ++++-
 pkg/stub/action/context/monitor.go        |  5 +++-
 pkg/stub/action/integration/build.go      | 16 +++++++++---
 pkg/stub/action/integration/initialize.go |  6 ++++-
 pkg/stub/action/integration/monitor.go    |  6 ++++-
 pkg/stub/action/integration/util.go       |  3 ++-
 pkg/stub/action/platform/initialize.go    | 10 +++++---
 pkg/stub/handler.go                       |  1 +
 pkg/trait/builder_test.go                 |  2 ++
 pkg/trait/catalog.go                      | 17 ++++++++++---
 pkg/trait/debug.go                        |  2 +-
 pkg/trait/debug_test.go                   |  2 +-
 pkg/trait/deployment.go                   |  2 +-
 pkg/trait/ingress.go                      |  4 +--
 pkg/trait/knative.go                      | 11 +++++---
 pkg/trait/route.go                        |  4 +--
 pkg/trait/service.go                      |  9 +++----
 pkg/trait/trait.go                        |  2 ++
 pkg/trait/trait_test.go                   | 31 +++++++++++++----------
 pkg/trait/types.go                        |  4 ---
 pkg/trait/util.go                         |  2 +-
 pkg/util/camel/catalog_test.go            |  3 ++-
 pkg/util/digest/digest.go                 | 42 ++++++++++++++++++++++---------
 pkg/util/knative/uri_test.go              |  3 ++-
 pkg/util/kubernetes/config.go             |  3 ++-
 pkg/util/kubernetes/sanitize.go           |  6 +----
 pkg/util/log/annotation_scraper.go        | 18 +++++++++----
 pkg/util/log/pod_scraper.go               |  8 ++++--
 pkg/util/maven/maven.go                   | 11 +++-----
 pkg/util/maven/maven_test.go              |  3 ++-
 pkg/util/minishift/minishift.go           |  5 ++--
 pkg/util/sync/file_test.go                |  4 ++-
 pkg/util/tar/appender.go                  | 18 ++++++++-----
 pkg/util/util.go                          |  2 +-
 version/version.go                        |  2 +-
 59 files changed, 329 insertions(+), 172 deletions(-)

diff --git a/.golangci.yml b/.golangci.yml
new file mode 100644
index 0000000..d4ece64
--- /dev/null
+++ b/.golangci.yml
@@ -0,0 +1,9 @@
+linters-settings:
+  lll:
+    line-length: 150
+linters:
+  enable-all: true
+  disable:
+    - dupl
+    - gochecknoinits
+    - gochecknoglobals
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 0000000..b191041
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,6 @@
+- repo: git://github.com/dnephin/pre-commit-golang
+  sha: HEAD
+  exclude:
+    - vendor/.*
+  hooks:
+    - id: golangci-lint
diff --git a/build/Makefile b/build/Makefile
index bfd12c1..e25da7c 100644
--- a/build/Makefile
+++ b/build/Makefile
@@ -72,6 +72,7 @@ test-integration: check-integration
 check-integration:
 	go test ./... -tags=integration
 
-
+lint:
+	golangci-lint run
 
 .PHONY: build build-operator build-kamel build-embed-resources build-runtime dep codegen images images-build images-push test check test-integration check-integration clean release prepare-release cross-compile new-version git-tag increment-snapshot install-minishift
diff --git a/docs/developers.adoc b/docs/developers.adoc
index 80c29cd..b3a6a6c 100644
--- a/docs/developers.adoc
+++ b/docs/developers.adoc
@@ -18,6 +18,14 @@ In order to build the project, you need to comply with the following requirement
 * **Operator SDK v0.0.7+**: used to build the operator and the Docker images. Instructions in the https://github.com/operator-framework/operator-sdk[Operator SDK website] (binary downloads available in the release page).
 * **GNU Make**: used to define composite build actions. This should be already installed or available as package if you have a good OS (https://www.gnu.org/software/make/).
 
+[[checks]]
+== Running checks
+Checks rely on `golangci-lint` being installed, to install it look at the https://github.com/golangci/golangci-lint#local-installation[Local Installation] instructions.
+
+You can run checks via `make lint` or you can install a GIT pre-commit hook and have the checks run via https://pre-commit.com[pre-commit]; then make sure to install the pre-commit hooks after installing pre-commit by running
+
+ $ pre-commit install
+
 [[checking-out]]
 == Checking Out the Sources
 
diff --git a/pkg/apis/camel/v1alpha1/types.go b/pkg/apis/camel/v1alpha1/types.go
index 5626fef..b549e1d 100644
--- a/pkg/apis/camel/v1alpha1/types.go
+++ b/pkg/apis/camel/v1alpha1/types.go
@@ -87,6 +87,8 @@ const (
 	LanguageXML Language = "xml"
 	// LanguageKotlin --
 	LanguageKotlin Language = "kts"
+	// KamelPlatform --
+	KamelPlatform = "platform"
 )
 
 // A IntegrationTraitSpec contains the configuration of a trait
diff --git a/pkg/builder/builder.go b/pkg/builder/builder.go
index 163df7f..db82150 100644
--- a/pkg/builder/builder.go
+++ b/pkg/builder/builder.go
@@ -195,9 +195,7 @@ func (b *defaultBuilder) submit(request Request) {
 	}
 
 	r.Artifacts = make([]v1alpha1.Artifact, 0, len(c.Artifacts))
-	for _, artifact := range c.Artifacts {
-		r.Artifacts = append(r.Artifacts, artifact)
-	}
+	r.Artifacts = append(r.Artifacts, c.Artifacts...)
 
 	// update the cache
 	b.request.Store(request.Meta.Name, r)
diff --git a/pkg/builder/builder_steps.go b/pkg/builder/builder_steps.go
index 09530c0..cac7e75 100644
--- a/pkg/builder/builder_steps.go
+++ b/pkg/builder/builder_steps.go
@@ -98,7 +98,8 @@ func GenerateProject(ctx *Context) error {
 	deps.AddGAV("org.apache.camel.k", "camel-k-runtime-jvm", version.Version)
 
 	for _, d := range ctx.Request.Dependencies {
-		if strings.HasPrefix(d, "camel:") {
+		switch {
+		case strings.HasPrefix(d, "camel:"):
 			artifactID := strings.TrimPrefix(d, "camel:")
 
 			if !strings.HasPrefix(artifactID, "camel-") {
@@ -106,16 +107,16 @@ func GenerateProject(ctx *Context) error {
 			}
 
 			deps.AddGAV("org.apache.camel", artifactID, "")
-		} else if strings.HasPrefix(d, "mvn:") {
+		case strings.HasPrefix(d, "mvn:"):
 			mid := strings.TrimPrefix(d, "mvn:")
 			gav := strings.Replace(mid, "/", ":", -1)
 
 			deps.AddEncodedGAV(gav)
-		} else if strings.HasPrefix(d, "runtime:") {
+		case strings.HasPrefix(d, "runtime:"):
 			artifactID := strings.Replace(d, "runtime:", "camel-k-runtime-", 1)
 
 			deps.AddGAV("org.apache.camel.k", artifactID, version.Version)
-		} else {
+		default:
 			return fmt.Errorf("unknown dependency type: %s", d)
 		}
 	}
@@ -269,7 +270,7 @@ func ListPublishedImages(namespace string) ([]PublishedImage, error) {
 		if ctx.Status.Phase != v1alpha1.IntegrationContextPhaseReady || ctx.Labels == nil {
 			continue
 		}
-		if ctxType, present := ctx.Labels["camel.apache.org/context.type"]; !present || ctxType != "platform" {
+		if ctxType, present := ctx.Labels["camel.apache.org/context.type"]; !present || ctxType != v1alpha1.KamelPlatform {
 			continue
 		}
 
@@ -292,7 +293,7 @@ func FindBestImage(images []PublishedImage, entries []v1alpha1.Artifact) (*Publi
 	}
 
 	var bestImage PublishedImage
-	bestImageCommonLibs := make(map[string]bool, 0)
+	bestImageCommonLibs := make(map[string]bool)
 	bestImageSurplusLibs := 0
 	for _, image := range images {
 		common := make(map[string]bool)
diff --git a/pkg/builder/kaniko/publisher.go b/pkg/builder/kaniko/publisher.go
index 88ef68a..d9533d0 100644
--- a/pkg/builder/kaniko/publisher.go
+++ b/pkg/builder/kaniko/publisher.go
@@ -29,6 +29,7 @@ import (
 	"github.com/operator-framework/operator-sdk/pkg/sdk"
 	"github.com/pkg/errors"
 	"k8s.io/api/core/v1"
+	apierrors "k8s.io/apimachinery/pkg/api/errors"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 )
 
@@ -45,6 +46,7 @@ func Publisher(ctx *builder.Context) error {
 		return err
 	}
 
+	// #nosec G202
 	dockerFileContent := []byte(`
 		FROM ` + ctx.Image + `
 		ADD . /deployments
@@ -137,7 +139,11 @@ func Publisher(ctx *builder.Context) error {
 		},
 	}
 
-	sdk.Delete(&pod)
+	err = sdk.Delete(&pod)
+	if err != nil && !apierrors.IsNotFound(err) {
+		return errors.Wrap(err, "cannot delete kaniko builder pod")
+	}
+
 	err = sdk.Create(&pod)
 	if err != nil {
 		return errors.Wrap(err, "cannot create kaniko builder pod")
diff --git a/pkg/builder/s2i/publisher.go b/pkg/builder/s2i/publisher.go
index 68cd60f..437c870 100644
--- a/pkg/builder/s2i/publisher.go
+++ b/pkg/builder/s2i/publisher.go
@@ -32,6 +32,7 @@ import (
 
 	buildv1 "github.com/openshift/api/build/v1"
 	imagev1 "github.com/openshift/api/image/v1"
+	apierrors "k8s.io/apimachinery/pkg/api/errors"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 
 	"github.com/pkg/errors"
@@ -71,8 +72,12 @@ func Publisher(ctx *builder.Context) error {
 		},
 	}
 
-	sdk.Delete(&bc)
-	err := sdk.Create(&bc)
+	err := sdk.Delete(&bc)
+	if err != nil && !apierrors.IsNotFound(err) {
+		return errors.Wrap(err, "cannot delete build config")
+	}
+
+	err = sdk.Create(&bc)
 	if err != nil {
 		return errors.Wrap(err, "cannot create build config")
 	}
@@ -93,7 +98,11 @@ func Publisher(ctx *builder.Context) error {
 		},
 	}
 
-	sdk.Delete(&is)
+	err = sdk.Delete(&is)
+	if err != nil && !apierrors.IsNotFound(err) {
+		return errors.Wrap(err, "cannot delete image stream")
+	}
+
 	err = sdk.Create(&is)
 	if err != nil {
 		return errors.Wrap(err, "cannot create image stream")
@@ -149,6 +158,9 @@ func Publisher(ctx *builder.Context) error {
 		}
 		return false, nil
 	}, 5*time.Minute)
+	if err != nil {
+		return err
+	}
 
 	err = sdk.Get(&is)
 	if err != nil {
diff --git a/pkg/builder/springboot/generator.go b/pkg/builder/springboot/generator.go
index 5d74c61..af59b7a 100644
--- a/pkg/builder/springboot/generator.go
+++ b/pkg/builder/springboot/generator.go
@@ -95,7 +95,8 @@ func GenerateProject(ctx *builder.Context) error {
 	//
 
 	for _, d := range ctx.Request.Dependencies {
-		if strings.HasPrefix(d, "camel:") {
+		switch {
+		case strings.HasPrefix(d, "camel:"):
 			if d == "camel:core" {
 				continue
 			}
@@ -135,12 +136,12 @@ func GenerateProject(ctx *builder.Context) error {
 					},
 				},
 			})
-		} else if strings.HasPrefix(d, "mvn:") {
+		case strings.HasPrefix(d, "mvn:"):
 			mid := strings.TrimPrefix(d, "mvn:")
 			gav := strings.Replace(mid, "/", ":", -1)
 
 			deps.AddEncodedGAV(gav)
-		} else if strings.HasPrefix(d, "runtime:") {
+		case strings.HasPrefix(d, "runtime:"):
 			if d == "runtime:jvm" {
 				// common
 				continue
@@ -153,7 +154,7 @@ func GenerateProject(ctx *builder.Context) error {
 			artifactID := strings.Replace(d, "runtime:", "camel-k-runtime-", 1)
 
 			deps.AddGAV("org.apache.camel.k", artifactID, version.Version)
-		} else {
+		default:
 			return fmt.Errorf("unknown dependency type: %s", d)
 		}
 	}
diff --git a/pkg/client/cmd/completion_bash.go b/pkg/client/cmd/completion_bash.go
index ab390fe..ad3ccbf 100644
--- a/pkg/client/cmd/completion_bash.go
+++ b/pkg/client/cmd/completion_bash.go
@@ -18,6 +18,7 @@ limitations under the License.
 package cmd
 
 import (
+	"fmt"
 	"os"
 	"strings"
 
@@ -171,7 +172,10 @@ func newCmdCompletionBash(root *cobra.Command) *cobra.Command {
 		Short: "Generates bash completion scripts",
 		Long:  bashCompletionCmdLongDescription,
 		Run: func(cmd *cobra.Command, args []string) {
-			root.GenBashCompletion(os.Stdout)
+			err := root.GenBashCompletion(os.Stdout)
+			if err != nil {
+				fmt.Print(err.Error())
+			}
 		},
 	}
 }
diff --git a/pkg/client/cmd/completion_zsh.go b/pkg/client/cmd/completion_zsh.go
index 5217b8e..e9e81b2 100644
--- a/pkg/client/cmd/completion_zsh.go
+++ b/pkg/client/cmd/completion_zsh.go
@@ -18,6 +18,7 @@ limitations under the License.
 package cmd
 
 import (
+	"fmt"
 	"os"
 
 	"github.com/spf13/cobra"
@@ -49,7 +50,10 @@ func newCmdCompletionZsh(root *cobra.Command) *cobra.Command {
 		Short: "Generates zsh completion scripts",
 		Long:  zshCompletionCmdLongDescription,
 		Run: func(cmd *cobra.Command, args []string) {
-			root.GenZshCompletion(os.Stdout)
+			err := root.GenZshCompletion(os.Stdout)
+			if err != nil {
+				fmt.Print(err.Error())
+			}
 		},
 	}
 }
diff --git a/pkg/client/cmd/context_create.go b/pkg/client/cmd/context_create.go
index 2b2b2d2..497f4d6 100644
--- a/pkg/client/cmd/context_create.go
+++ b/pkg/client/cmd/context_create.go
@@ -86,7 +86,7 @@ func (command *contextCreateCommand) run(cmd *cobra.Command, args []string) erro
 		// the integration context already exists, let's check that it is
 		// not a platform one which is supposed to be "read only"
 
-		if ctx.Labels["camel.apache.org/context.type"] == "platform" {
+		if ctx.Labels["camel.apache.org/context.type"] == v1alpha1.KamelPlatform {
 			fmt.Printf("integration context \"%s\" is not editable\n", ctx.Name)
 			return nil
 		}
@@ -103,11 +103,12 @@ func (command *contextCreateCommand) run(cmd *cobra.Command, args []string) erro
 	}
 
 	for _, item := range command.dependencies {
-		if strings.HasPrefix(item, "mvn:") {
+		switch {
+		case strings.HasPrefix(item, "mvn:"):
 			ctx.Spec.Dependencies = append(ctx.Spec.Dependencies, item)
-		} else if strings.HasPrefix(item, "file:") {
+		case strings.HasPrefix(item, "file:"):
 			ctx.Spec.Dependencies = append(ctx.Spec.Dependencies, item)
-		} else if strings.HasPrefix(item, "camel-") {
+		case strings.HasPrefix(item, "camel-"):
 			ctx.Spec.Dependencies = append(ctx.Spec.Dependencies, "camel:"+strings.TrimPrefix(item, "camel-"))
 		}
 	}
@@ -145,7 +146,7 @@ func (command *contextCreateCommand) run(cmd *cobra.Command, args []string) erro
 		clone := ctx.DeepCopy()
 		err = sdk.Get(clone)
 		if err != nil {
-			fmt.Printf(err.Error())
+			fmt.Print(err.Error())
 			return nil
 		}
 		ctx.ResourceVersion = clone.ResourceVersion
@@ -153,7 +154,7 @@ func (command *contextCreateCommand) run(cmd *cobra.Command, args []string) erro
 	}
 
 	if err != nil {
-		fmt.Printf(err.Error())
+		fmt.Print(err.Error())
 		return nil
 	}
 
diff --git a/pkg/client/cmd/context_delete.go b/pkg/client/cmd/context_delete.go
index ff98837..d22b61e 100644
--- a/pkg/client/cmd/context_delete.go
+++ b/pkg/client/cmd/context_delete.go
@@ -38,10 +38,10 @@ func newContextDeleteCmd(rootCmdOptions *RootCmdOptions) *cobra.Command {
 		Short: "Delete an Integration Context",
 		Long:  `Delete an Integration Context.`,
 		RunE: func(cmd *cobra.Command, args []string) error {
-			if err := impl.validate(cmd, args); err != nil {
+			if err := impl.validate(args); err != nil {
 				return err
 			}
-			if err := impl.run(cmd, args); err != nil {
+			if err := impl.run(args); err != nil {
 				fmt.Println(err.Error())
 			}
 
@@ -59,7 +59,7 @@ type contextDeleteCommand struct {
 	all bool
 }
 
-func (command *contextDeleteCommand) validate(cmd *cobra.Command, args []string) error {
+func (command *contextDeleteCommand) validate(args []string) error {
 	if command.all && len(args) > 0 {
 		return errors.New("invalid combination: both all flag and named contexts are set")
 	}
@@ -70,7 +70,7 @@ func (command *contextDeleteCommand) validate(cmd *cobra.Command, args []string)
 	return nil
 }
 
-func (command *contextDeleteCommand) run(cmd *cobra.Command, args []string) error {
+func (command *contextDeleteCommand) run(args []string) error {
 	names := args
 
 	if command.all {
@@ -82,7 +82,7 @@ func (command *contextDeleteCommand) run(cmd *cobra.Command, args []string) erro
 		names = make([]string, 0, len(ctxList.Items))
 		for _, item := range ctxList.Items {
 			// only include non platform contexts
-			if item.Labels["camel.apache.org/context.type"] != "platform" {
+			if item.Labels["camel.apache.org/context.type"] != v1alpha1.KamelPlatform {
 				names = append(names, item.Name)
 			}
 		}
@@ -114,7 +114,7 @@ func (command *contextDeleteCommand) delete(name string) error {
 
 	// check that it is not a platform one which is supposed to be "read only"
 	// thus not managed by the end user
-	if ctx.Labels["camel.apache.org/context.type"] == "platform" {
+	if ctx.Labels["camel.apache.org/context.type"] == v1alpha1.KamelPlatform {
 		// skip platform contexts while deleting all contexts
 		if command.all {
 			return nil
diff --git a/pkg/client/cmd/context_get.go b/pkg/client/cmd/context_get.go
index f79bf86..af60a93 100644
--- a/pkg/client/cmd/context_get.go
+++ b/pkg/client/cmd/context_get.go
@@ -40,7 +40,7 @@ func newContextGetCmd(rootCmdOptions *RootCmdOptions) *cobra.Command {
 			if err := impl.validate(cmd, args); err != nil {
 				return err
 			}
-			if err := impl.run(cmd, args); err != nil {
+			if err := impl.run(); err != nil {
 				fmt.Println(err.Error())
 			}
 
@@ -49,7 +49,7 @@ func newContextGetCmd(rootCmdOptions *RootCmdOptions) *cobra.Command {
 	}
 
 	cmd.Flags().BoolVar(&impl.user, "user", true, "Includes user contexts")
-	cmd.Flags().BoolVar(&impl.platform, "platform", true, "Includes platform contexts")
+	cmd.Flags().BoolVar(&impl.platform, v1alpha1.KamelPlatform, true, "Includes platform contexts")
 
 	return &cmd
 }
@@ -65,7 +65,7 @@ func (command *contextGetCommand) validate(cmd *cobra.Command, args []string) er
 
 }
 
-func (command *contextGetCommand) run(cmd *cobra.Command, args []string) error {
+func (command *contextGetCommand) run() error {
 	ctxList := v1alpha1.NewIntegrationContextList()
 	if err := sdk.List(command.Namespace, &ctxList); err != nil {
 		return err
@@ -76,7 +76,7 @@ func (command *contextGetCommand) run(cmd *cobra.Command, args []string) error {
 	for _, ctx := range ctxList.Items {
 		t := ctx.Labels["camel.apache.org/context.type"]
 		u := command.user && t == "user"
-		p := command.platform && t == "platform"
+		p := command.platform && t == v1alpha1.KamelPlatform
 
 		if u || p {
 			fmt.Fprintf(w, "%s\t%s\t%s\n", ctx.Name, t, string(ctx.Status.Phase))
diff --git a/pkg/client/cmd/delete.go b/pkg/client/cmd/delete.go
index 5d74114..5c3f470 100644
--- a/pkg/client/cmd/delete.go
+++ b/pkg/client/cmd/delete.go
@@ -38,10 +38,10 @@ func newCmdDelete(rootCmdOptions *RootCmdOptions) *cobra.Command {
 		Use:   "delete [integration1] [integration2] ...",
 		Short: "Delete integrations deployed on Kubernetes",
 		RunE: func(cmd *cobra.Command, args []string) error {
-			if err := impl.validate(cmd, args); err != nil {
+			if err := impl.validate(args); err != nil {
 				return err
 			}
-			if err := impl.run(cmd, args); err != nil {
+			if err := impl.run(args); err != nil {
 				fmt.Println(err.Error())
 			}
 
@@ -59,7 +59,7 @@ type deleteCmdOptions struct {
 	deleteAll bool
 }
 
-func (command *deleteCmdOptions) validate(cmd *cobra.Command, args []string) error {
+func (command *deleteCmdOptions) validate(args []string) error {
 	if command.deleteAll && len(args) > 0 {
 		return errors.New("invalid combination: both all flag and named integrations are set")
 	}
@@ -70,7 +70,7 @@ func (command *deleteCmdOptions) validate(cmd *cobra.Command, args []string) err
 	return nil
 }
 
-func (command *deleteCmdOptions) run(cmd *cobra.Command, args []string) error {
+func (command *deleteCmdOptions) run(args []string) error {
 
 	if len(args) != 0 && !command.deleteAll {
 		for _, arg := range args {
@@ -100,6 +100,7 @@ func (command *deleteCmdOptions) run(cmd *cobra.Command, args []string) error {
 			return err
 		}
 		for _, integration := range integrationList.Items {
+			integration := integration // pin
 			err := sdk.Delete(&integration)
 			if err != nil {
 				return err
diff --git a/pkg/client/cmd/install.go b/pkg/client/cmd/install.go
index 5437c6e..98b25c1 100644
--- a/pkg/client/cmd/install.go
+++ b/pkg/client/cmd/install.go
@@ -28,7 +28,7 @@ import (
 	k8serrors "k8s.io/apimachinery/pkg/api/errors"
 )
 
-func newCmdInstall(rootCmdOptions *RootCmdOptions) *cobra.Command {
+func newCmdInstall(rootCmdOptions *RootCmdOptions) (*cobra.Command, error) {
 	options := installCmdOptions{
 		RootCmdOptions: rootCmdOptions,
 	}
@@ -44,9 +44,12 @@ func newCmdInstall(rootCmdOptions *RootCmdOptions) *cobra.Command {
 	cmd.Flags().StringVar(&options.registry, "registry", "", "A Docker registry that can be used to publish images")
 	cmd.Flags().StringVar(&options.organization, "organization", "", "A organization on the Docker registry that can be used to publish images")
 	cmd.Flags().StringVar(&options.pushSecret, "push-secret", "", "A secret used to push images to the Docker registry")
-	cmd.ParseFlags(os.Args)
+	err := cmd.ParseFlags(os.Args)
+	if err != nil {
+		return nil, err
+	}
 
-	return &cmd
+	return &cmd, nil
 }
 
 type installCmdOptions struct {
@@ -62,7 +65,8 @@ func (o *installCmdOptions) install(cmd *cobra.Command, args []string) error {
 	err := install.SetupClusterwideResources()
 	if err != nil && k8serrors.IsForbidden(err) {
 		fmt.Println("Current user is not authorized to create cluster-wide objects like custom resource definitions or cluster roles: ", err)
-		return errors.New("please login as cluster-admin and execute \"kamel install --cluster-setup\" to install cluster-wide resources (one-time operation)")
+		return errors.New("please login as cluster-admin and execute \"kamel install --cluster-setup\" to install cluster-wide " +
+			"resources (one-time operation)")
 	}
 
 	if o.clusterSetupOnly {
diff --git a/pkg/client/cmd/root.go b/pkg/client/cmd/root.go
index 58cc58a..5672b60 100644
--- a/pkg/client/cmd/root.go
+++ b/pkg/client/cmd/root.go
@@ -19,10 +19,11 @@ package cmd
 
 import (
 	"context"
-	"github.com/operator-framework/operator-sdk/pkg/k8sclient"
 	"os"
 	"time"
 
+	"github.com/operator-framework/operator-sdk/pkg/k8sclient"
+
 	"github.com/apache/camel-k/pkg/util/kubernetes"
 	"github.com/pkg/errors"
 	"github.com/spf13/cobra"
@@ -57,21 +58,27 @@ func NewKamelCommand(ctx context.Context) (*cobra.Command, error) {
 	cmd.PersistentFlags().StringVarP(&options.Namespace, "namespace", "n", "", "Namespace to use for all operations")
 
 	// Parse the flags before setting the defaults
-	cmd.ParseFlags(os.Args)
+	err := cmd.ParseFlags(os.Args)
+	if err != nil {
+		return nil, err
+	}
 
 	if options.Namespace == "" {
 		current, err := kubernetes.GetClientCurrentNamespace(options.KubeConfig)
 		if err != nil {
 			return nil, errors.Wrap(err, "cannot get current namespace")
 		}
-		cmd.Flag("namespace").Value.Set(current)
+		err = cmd.Flag("namespace").Value.Set(current)
+		if err != nil {
+			return nil, err
+		}
 	}
 
 	// Let's use a fast refresh period when running with the CLI
 	k8sclient.ResetCacheEvery(2 * time.Second)
 
 	// Initialize the Kubernetes client to allow using the operator-sdk
-	err := kubernetes.InitKubeClient(options.KubeConfig)
+	err = kubernetes.InitKubeClient(options.KubeConfig)
 	if err != nil {
 		return nil, err
 	}
@@ -81,7 +88,11 @@ func NewKamelCommand(ctx context.Context) (*cobra.Command, error) {
 	cmd.AddCommand(newCmdRun(&options))
 	cmd.AddCommand(newCmdGet(&options))
 	cmd.AddCommand(newCmdDelete(&options))
-	cmd.AddCommand(newCmdInstall(&options))
+	install, err := newCmdInstall(&options)
+	if err != nil {
+		return nil, err
+	}
+	cmd.AddCommand(install)
 	cmd.AddCommand(newCmdLog(&options))
 	cmd.AddCommand(newCmdContext(&options))
 
diff --git a/pkg/client/cmd/run.go b/pkg/client/cmd/run.go
index eb5789b..5d54ec6 100644
--- a/pkg/client/cmd/run.go
+++ b/pkg/client/cmd/run.go
@@ -53,7 +53,7 @@ import (
 )
 
 var (
-	traitConfigRegexp = regexp.MustCompile("^([a-z-]+)((?:\\.[a-z-]+)+)=(.*)$")
+	traitConfigRegexp = regexp.MustCompile(`^([a-z-]+)((?:\.[a-z-]+)+)=(.*)$`)
 )
 
 func newCmdRun(rootCmdOptions *RootCmdOptions) *cobra.Command {
@@ -83,7 +83,8 @@ func newCmdRun(rootCmdOptions *RootCmdOptions) *cobra.Command {
 	cmd.Flags().BoolVar(&options.Dev, "dev", false, "Enable Dev mode (equivalent to \"-w --logs --sync\")")
 	cmd.Flags().StringVar(&options.Profile, "profile", "", "Trait profile used for deployment")
 	cmd.Flags().StringSliceVarP(&options.Traits, "trait", "t", nil, "Configure a trait. E.g. \"-t service.enabled=false\"")
-	cmd.Flags().StringSliceVar(&options.LoggingLevels, "logging-level", nil, "Configure the logging level. E.g. \"--logging-level org.apache.camel=DEBUG\"")
+	cmd.Flags().StringSliceVar(&options.LoggingLevels, "logging-level", nil, "Configure the logging level. "+
+		"E.g. \"--logging-level org.apache.camel=DEBUG\"")
 	cmd.Flags().StringVarP(&options.OutputFormat, "output", "o", "", "Output format. One of: json|yaml")
 
 	// completion support
@@ -152,7 +153,7 @@ func (o *runCmdOptions) run(cmd *cobra.Command, args []string) error {
 		}
 	}
 
-	integration, err := o.createIntegration(cmd, args)
+	integration, err := o.createIntegration(args)
 	if err != nil {
 		return err
 	}
@@ -246,7 +247,7 @@ func (o *runCmdOptions) syncIntegration(sources []string) error {
 	return nil
 }
 
-func (o *runCmdOptions) createIntegration(cmd *cobra.Command, args []string) (*v1alpha1.Integration, error) {
+func (o *runCmdOptions) createIntegration(args []string) (*v1alpha1.Integration, error) {
 	return o.updateIntegrationCode(args)
 }
 
@@ -294,11 +295,12 @@ func (o *runCmdOptions) updateIntegrationCode(sources []string) (*v1alpha1.Integ
 	}
 
 	for _, item := range o.Dependencies {
-		if strings.HasPrefix(item, "mvn:") {
+		switch {
+		case strings.HasPrefix(item, "mvn:"):
 			integration.Spec.Dependencies = append(integration.Spec.Dependencies, item)
-		} else if strings.HasPrefix(item, "file:") {
+		case strings.HasPrefix(item, "file:"):
 			integration.Spec.Dependencies = append(integration.Spec.Dependencies, item)
-		} else if strings.HasPrefix(item, "camel-") {
+		case strings.HasPrefix(item, "camel-"):
 			integration.Spec.Dependencies = append(integration.Spec.Dependencies, "camel:"+strings.TrimPrefix(item, "camel-"))
 		}
 	}
@@ -431,7 +433,7 @@ func (*runCmdOptions) loadCode(fileName string) (string, error) {
 	defer resp.Body.Close()
 	bodyBytes, err := ioutil.ReadAll(resp.Body)
 	bodyString := string(bodyBytes)
-	return string(bodyString), err
+	return bodyString, err
 }
 
 func (*runCmdOptions) configureTrait(integration *v1alpha1.Integration, config string) error {
diff --git a/pkg/install/operator.go b/pkg/install/operator.go
index 5c4fb0a..3af6a0e 100644
--- a/pkg/install/operator.go
+++ b/pkg/install/operator.go
@@ -19,6 +19,9 @@ package install
 
 import (
 	"errors"
+	"strconv"
+	"time"
+
 	"github.com/apache/camel-k/deploy"
 	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
 	"github.com/apache/camel-k/pkg/util/knative"
@@ -26,8 +29,6 @@ import (
 	"github.com/apache/camel-k/pkg/util/minishift"
 	"github.com/apache/camel-k/pkg/util/openshift"
 	"github.com/operator-framework/operator-sdk/pkg/sdk"
-	"strconv"
-	"time"
 )
 
 // Operator --
diff --git a/pkg/metadata/metadata_uri_test.go b/pkg/metadata/metadata_uri_test.go
index 84da92a..1214ef6 100644
--- a/pkg/metadata/metadata_uri_test.go
+++ b/pkg/metadata/metadata_uri_test.go
@@ -18,9 +18,10 @@ limitations under the License.
 package metadata
 
 import (
+	"testing"
+
 	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
 	"github.com/stretchr/testify/assert"
-	"testing"
 )
 
 func TestJava1(t *testing.T) {
diff --git a/pkg/metadata/uris.go b/pkg/metadata/uris.go
index 2caddc2..0c08f9a 100644
--- a/pkg/metadata/uris.go
+++ b/pkg/metadata/uris.go
@@ -24,17 +24,17 @@ import (
 )
 
 var (
-	singleQuotedFrom = regexp.MustCompile("from\\s*\\(\\s*'([a-z0-9-]+:[^']+)'\\s*\\)")
-	doubleQuotedFrom = regexp.MustCompile("from\\s*\\(\\s*\"([a-z0-9-]+:[^\"]+)\"\\s*\\)")
-	singleQuotedTo   = regexp.MustCompile("\\.to\\s*\\(\\s*'([a-z0-9-]+:[^']+)'\\s*\\)")
-	singleQuotedToD  = regexp.MustCompile("\\.toD\\s*\\(\\s*'([a-z0-9-]+:[^']+)'\\s*\\)")
-	singleQuotedToF  = regexp.MustCompile("\\.toF\\s*\\(\\s*'([a-z0-9-]+:[^']+)'[^)]*\\)")
-	doubleQuotedTo   = regexp.MustCompile("\\.to\\s*\\(\\s*\"([a-z0-9-]+:[^\"]+)\"\\s*\\)")
-	doubleQuotedToD  = regexp.MustCompile("\\.toD\\s*\\(\\s*\"([a-z0-9-]+:[^\"]+)\"\\s*\\)")
-	doubleQuotedToF  = regexp.MustCompile("\\.toF\\s*\\(\\s*\"([a-z0-9-]+:[^\"]+)\"[^)]*\\)")
-	xmlTagFrom       = regexp.MustCompile("<\\s*from\\s+[^>]*uri\\s*=\\s*\"([a-z0-9-]+:[^\"]+)\"[^>]*>")
-	xmlTagTo         = regexp.MustCompile("<\\s*to\\s+[^>]*uri\\s*=\\s*\"([a-z0-9-]+:[^\"]+)\"[^>]*>")
-	xmlTagToD        = regexp.MustCompile("<\\s*toD\\s+[^>]*uri\\s*=\\s*\"([a-z0-9-]+:[^\"]+)\"[^>]*>")
+	singleQuotedFrom = regexp.MustCompile(`from\s*\(\s*'([a-z0-9-]+:[^']+)'\s*\)`)
+	doubleQuotedFrom = regexp.MustCompile(`from\s*\(\s*"([a-z0-9-]+:[^"]+)"\s*\)`)
+	singleQuotedTo   = regexp.MustCompile(`\.to\s*\(\s*'([a-z0-9-]+:[^']+)'\s*\)`)
+	singleQuotedToD  = regexp.MustCompile(`\.toD\s*\(\s*'([a-z0-9-]+:[^']+)'\s*\)`)
+	singleQuotedToF  = regexp.MustCompile(`\.toF\s*\(\s*'([a-z0-9-]+:[^']+)'[^)]*\)`)
+	doubleQuotedTo   = regexp.MustCompile(`\.to\s*\(\s*"([a-z0-9-]+:[^"]+)"\s*\)`)
+	doubleQuotedToD  = regexp.MustCompile(`\.toD\s*\(\s*"([a-z0-9-]+:[^"]+)"\s*\)`)
+	doubleQuotedToF  = regexp.MustCompile(`\.toF\s*\(\s*"([a-z0-9-]+:[^"]+)"[^)]*\)`)
+	xmlTagFrom       = regexp.MustCompile(`<\s*from\s+[^>]*uri\s*=\s*"([a-z0-9-]+:[^"]+)"[^>]*>`)
+	xmlTagTo         = regexp.MustCompile(`<\s*to\s+[^>]*uri\s*=\s*"([a-z0-9-]+:[^"]+)"[^>]*>`)
+	xmlTagToD        = regexp.MustCompile(`<\s*toD\s+[^>]*uri\s*=\s*"([a-z0-9-]+:[^"]+)"[^>]*>`)
 )
 
 // discoverFromURIs returns all uris used in a from clause
@@ -87,7 +87,7 @@ func findAllDistinctStringSubmatch(data string, regexps ...*regexp.Regexp) []str
 	for _, reg := range regexps {
 		hits := reg.FindAllStringSubmatch(data, -1)
 		for _, hit := range hits {
-			if hit != nil && len(hit) > 1 {
+			if len(hit) > 1 {
 				for _, match := range hit[1:] {
 					if _, ok := alreadyFound[match]; !ok {
 						alreadyFound[match] = true
diff --git a/pkg/platform/platform.go b/pkg/platform/platform.go
index d208c20..cf82ed7 100644
--- a/pkg/platform/platform.go
+++ b/pkg/platform/platform.go
@@ -49,6 +49,7 @@ func GetCurrentPlatform(namespace string) (*v1alpha1.IntegrationPlatform, error)
 	}
 
 	for _, platform := range lst.Items {
+		platform := platform // pin
 		if IsActive(&platform) {
 			return &platform, nil
 		}
diff --git a/pkg/stub/action/context/build.go b/pkg/stub/action/context/build.go
index 8f7a9bf..9625545 100644
--- a/pkg/stub/action/context/build.go
+++ b/pkg/stub/action/context/build.go
@@ -70,11 +70,12 @@ func (action *buildAction) Handle(context *v1alpha1.IntegrationContext) error {
 	}
 
 	res := b.Submit(r)
-	if res.Status == builder.StatusSubmitted {
+	switch res.Status {
+	case builder.StatusSubmitted:
 		logrus.Info("Build submitted")
-	} else if res.Status == builder.StatusStarted {
+	case builder.StatusStarted:
 		logrus.Info("Build started")
-	} else if res.Status == builder.StatusError {
+	case builder.StatusError:
 		target := context.DeepCopy()
 		target.Status.Phase = v1alpha1.IntegrationContextPhaseError
 
@@ -84,7 +85,7 @@ func (action *buildAction) Handle(context *v1alpha1.IntegrationContext) error {
 		b.Purge(r)
 
 		return sdk.Update(target)
-	} else if res.Status == builder.StatusCompleted {
+	case builder.StatusCompleted:
 		target := context.DeepCopy()
 		target.Status.Image = res.Image
 		target.Status.Phase = v1alpha1.IntegrationContextPhaseReady
@@ -123,6 +124,7 @@ func (action *buildAction) informIntegrations(context *v1alpha1.IntegrationConte
 		return err
 	}
 	for _, integration := range list.Items {
+		integration := integration // pin
 		if integration.Spec.Context != context.Name {
 			continue
 		}
diff --git a/pkg/stub/action/context/initialize.go b/pkg/stub/action/context/initialize.go
index f9e8d04..17c4941 100644
--- a/pkg/stub/action/context/initialize.go
+++ b/pkg/stub/action/context/initialize.go
@@ -58,7 +58,11 @@ func (action *initializeAction) Handle(context *v1alpha1.IntegrationContext) err
 	// update the status
 	logrus.Info("Context ", target.Name, " transitioning to state ", v1alpha1.IntegrationContextPhaseBuilding)
 	target.Status.Phase = v1alpha1.IntegrationContextPhaseBuilding
-	target.Status.Digest = digest.ComputeForIntegrationContext(context)
+	dgst, err := digest.ComputeForIntegrationContext(context)
+	if err != nil {
+		return err
+	}
+	target.Status.Digest = dgst
 
 	return sdk.Update(target)
 }
diff --git a/pkg/stub/action/context/monitor.go b/pkg/stub/action/context/monitor.go
index f090ffb..41e8c45 100644
--- a/pkg/stub/action/context/monitor.go
+++ b/pkg/stub/action/context/monitor.go
@@ -41,7 +41,10 @@ func (action *monitorAction) CanHandle(context *v1alpha1.IntegrationContext) boo
 }
 
 func (action *monitorAction) Handle(context *v1alpha1.IntegrationContext) error {
-	hash := digest.ComputeForIntegrationContext(context)
+	hash, err := digest.ComputeForIntegrationContext(context)
+	if err != nil {
+		return err
+	}
 	if hash != context.Status.Digest {
 		logrus.Info("IntegrationContext ", context.Name, " needs a rebuild")
 
diff --git a/pkg/stub/action/integration/build.go b/pkg/stub/action/integration/build.go
index e4660c8..85eb881 100644
--- a/pkg/stub/action/integration/build.go
+++ b/pkg/stub/action/integration/build.go
@@ -58,7 +58,7 @@ func (action *buildAction) Handle(integration *v1alpha1.Integration) error {
 	}
 
 	if ctx != nil {
-		if ctx.Labels["camel.apache.org/context.type"] == "platform" {
+		if ctx.Labels["camel.apache.org/context.type"] == v1alpha1.KamelPlatform {
 			// This is a platform context and as it is auto generated it may get
 			// out of sync if the integration that has generated it, has been
 			// amended to add/remove dependencies
@@ -80,7 +80,11 @@ func (action *buildAction) Handle(integration *v1alpha1.Integration) error {
 			target.Spec.Context = ctx.Name
 			logrus.Info("Integration ", target.Name, " transitioning to state ", v1alpha1.IntegrationPhaseDeploying)
 			target.Status.Phase = v1alpha1.IntegrationPhaseDeploying
-			target.Status.Digest = digest.ComputeForIntegration(target)
+			dgst, err := digest.ComputeForIntegration(target)
+			if err != nil {
+				return err
+			}
+			target.Status.Digest = dgst
 			return sdk.Update(target)
 		}
 
@@ -89,7 +93,11 @@ func (action *buildAction) Handle(integration *v1alpha1.Integration) error {
 			target.Status.Image = ctx.Status.Image
 			target.Spec.Context = ctx.Name
 			target.Status.Phase = v1alpha1.IntegrationPhaseError
-			target.Status.Digest = digest.ComputeForIntegration(target)
+			dgst, err := digest.ComputeForIntegration(target)
+			if err != nil {
+				return err
+			}
+			target.Status.Digest = dgst
 			return sdk.Update(target)
 		}
 
@@ -109,7 +117,7 @@ func (action *buildAction) Handle(integration *v1alpha1.Integration) error {
 	// Add some information for post-processing, this may need to be refactored
 	// to a proper data structure
 	platformCtx.Labels = map[string]string{
-		"camel.apache.org/context.type":               "platform",
+		"camel.apache.org/context.type":               v1alpha1.KamelPlatform,
 		"camel.apache.org/context.created.by.kind":    v1alpha1.IntegrationKind,
 		"camel.apache.org/context.created.by.name":    integration.Name,
 		"camel.apache.org/context.created.by.version": integration.ResourceVersion,
diff --git a/pkg/stub/action/integration/initialize.go b/pkg/stub/action/integration/initialize.go
index b495b11..8a21301 100644
--- a/pkg/stub/action/integration/initialize.go
+++ b/pkg/stub/action/integration/initialize.go
@@ -75,6 +75,10 @@ func (action *initializeAction) Handle(integration *v1alpha1.Integration) error
 	// update the status
 	logrus.Info("Integration ", target.Name, " transitioning to state ", v1alpha1.IntegrationPhaseBuilding)
 	target.Status.Phase = v1alpha1.IntegrationPhaseBuilding
-	target.Status.Digest = digest.ComputeForIntegration(integration)
+	dgst, err := digest.ComputeForIntegration(integration)
+	if err != nil {
+		return err
+	}
+	target.Status.Digest = dgst
 	return sdk.Update(target)
 }
diff --git a/pkg/stub/action/integration/monitor.go b/pkg/stub/action/integration/monitor.go
index ebdb420..756695b 100644
--- a/pkg/stub/action/integration/monitor.go
+++ b/pkg/stub/action/integration/monitor.go
@@ -43,7 +43,11 @@ func (action *monitorAction) CanHandle(integration *v1alpha1.Integration) bool {
 
 func (action *monitorAction) Handle(integration *v1alpha1.Integration) error {
 
-	hash := digest.ComputeForIntegration(integration)
+	hash, err := digest.ComputeForIntegration(integration)
+	if err != nil {
+		return err
+	}
+
 	if hash != integration.Status.Digest {
 		logrus.Info("Integration ", integration.Name, " needs a rebuild")
 
diff --git a/pkg/stub/action/integration/util.go b/pkg/stub/action/integration/util.go
index 27bfb29..b48e6f1 100644
--- a/pkg/stub/action/integration/util.go
+++ b/pkg/stub/action/integration/util.go
@@ -44,7 +44,8 @@ func LookupContextForIntegration(integration *v1alpha1.Integration) (*v1alpha1.I
 	}
 
 	for _, ctx := range ctxList.Items {
-		if ctx.Labels["camel.apache.org/context.type"] == "platform" {
+		ctx := ctx // pin
+		if ctx.Labels["camel.apache.org/context.type"] == v1alpha1.KamelPlatform {
 			ideps := len(integration.Spec.Dependencies)
 			cdeps := len(ctx.Spec.Dependencies)
 
diff --git a/pkg/stub/action/platform/initialize.go b/pkg/stub/action/platform/initialize.go
index f4eacde..06e6b79 100644
--- a/pkg/stub/action/platform/initialize.go
+++ b/pkg/stub/action/platform/initialize.go
@@ -19,6 +19,7 @@ package platform
 
 import (
 	"errors"
+
 	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
 	platformutils "github.com/apache/camel-k/pkg/platform"
 	"github.com/apache/camel-k/pkg/util/openshift"
@@ -63,11 +64,13 @@ func (action *initializeAction) Handle(platform *v1alpha1.IntegrationPlatform) e
 	// update missing fields in the resource
 	if target.Spec.Cluster == "" {
 		// determine the kind of cluster the platform in installed into
-		if isOpenshift, err := openshift.IsOpenShift(); err != nil {
+		isOpenshift, err := openshift.IsOpenShift()
+		switch {
+		case err != nil:
 			return err
-		} else if isOpenshift {
+		case isOpenshift:
 			target.Spec.Cluster = v1alpha1.IntegrationPlatformClusterOpenShift
-		} else {
+		default:
 			target.Spec.Cluster = v1alpha1.IntegrationPlatformClusterKubernetes
 		}
 	}
@@ -100,6 +103,7 @@ func (action *initializeAction) isDuplicate(thisPlatform *v1alpha1.IntegrationPl
 		return false, err
 	}
 	for _, platform := range platforms.Items {
+		platform := platform // pin
 		if platform.Name != thisPlatform.Name && platformutils.IsActive(&platform) {
 			return true, nil
 		}
diff --git a/pkg/stub/handler.go b/pkg/stub/handler.go
index 18ae691..a2f98ca 100644
--- a/pkg/stub/handler.go
+++ b/pkg/stub/handler.go
@@ -19,6 +19,7 @@ package stub
 
 import (
 	ctx "context"
+
 	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
 	"github.com/apache/camel-k/pkg/stub/action/platform"
 
diff --git a/pkg/trait/builder_test.go b/pkg/trait/builder_test.go
index 03b2b04..cf6c064 100644
--- a/pkg/trait/builder_test.go
+++ b/pkg/trait/builder_test.go
@@ -36,6 +36,7 @@ func TestBuilderTraitNotAppliedBecauseOfNilContext(t *testing.T) {
 	}
 
 	for _, e := range environments {
+		e := e // pin
 		e.Context = nil
 
 		t.Run(string(e.Platform.Spec.Cluster), func(t *testing.T) {
@@ -56,6 +57,7 @@ func TestBuilderTraitNotAppliedBecauseOfNilPhase(t *testing.T) {
 	}
 
 	for _, e := range environments {
+		e := e // pin
 		e.Context.Status.Phase = ""
 
 		t.Run(string(e.Platform.Spec.Cluster), func(t *testing.T) {
diff --git a/pkg/trait/catalog.go b/pkg/trait/catalog.go
index d381aeb..62c2f9f 100644
--- a/pkg/trait/catalog.go
+++ b/pkg/trait/catalog.go
@@ -113,7 +113,9 @@ func (c *Catalog) traitsFor(environment *Environment) []Trait {
 }
 
 func (c *Catalog) apply(environment *Environment) error {
-	c.configure(environment)
+	if err := c.configure(environment); err != nil {
+		return err
+	}
 	traits := c.traitsFor(environment)
 
 	for _, trait := range traits {
@@ -147,12 +149,14 @@ func (c *Catalog) GetTrait(id string) Trait {
 	return nil
 }
 
-func (c *Catalog) configure(env *Environment) {
+func (c *Catalog) configure(env *Environment) error {
 	if env.Context != nil && env.Context.Spec.Traits != nil {
 		for id, traitSpec := range env.Context.Spec.Traits {
 			catTrait := c.GetTrait(id)
 			if catTrait != nil {
-				traitSpec.Decode(catTrait)
+				if err := traitSpec.Decode(catTrait); err != nil {
+					return err
+				}
 			}
 		}
 	}
@@ -160,16 +164,21 @@ func (c *Catalog) configure(env *Environment) {
 		for id, traitSpec := range env.Integration.Spec.Traits {
 			catTrait := c.GetTrait(id)
 			if catTrait != nil {
-				traitSpec.Decode(catTrait)
+				if err := traitSpec.Decode(catTrait); err != nil {
+					return err
+				}
 			}
 		}
 	}
+
+	return nil
 }
 
 // ComputeTraitsProperties returns all key/value configuration properties that can be used to configure traits
 func (c *Catalog) ComputeTraitsProperties() []string {
 	results := make([]string, 0)
 	for _, trait := range c.allTraits() {
+		trait := trait // pin
 		c.processFields(structs.Fields(trait), func(name string) {
 			results = append(results, string(trait.ID())+"."+name)
 		})
diff --git a/pkg/trait/debug.go b/pkg/trait/debug.go
index 984a10e..f74896f 100644
--- a/pkg/trait/debug.go
+++ b/pkg/trait/debug.go
@@ -37,7 +37,7 @@ func (r *debugTrait) appliesTo(e *Environment) bool {
 
 func (r *debugTrait) apply(e *Environment) error {
 	// this is all that's needed as long as the base image is `fabric8/s2i-java` look into builder/builder.go
-	e.EnvVars["JAVA_DEBUG"] = "true"
+	e.EnvVars["JAVA_DEBUG"] = True
 
 	return nil
 }
diff --git a/pkg/trait/debug_test.go b/pkg/trait/debug_test.go
index 17ebb6d..3989009 100644
--- a/pkg/trait/debug_test.go
+++ b/pkg/trait/debug_test.go
@@ -45,5 +45,5 @@ func TestApplicability(t *testing.T) {
 
 func TestApply(t *testing.T) {
 	assert.Nil(t, trait.apply(env))
-	assert.Equal(t, "true", env.EnvVars["JAVA_DEBUG"])
+	assert.Equal(t, True, env.EnvVars["JAVA_DEBUG"])
 }
diff --git a/pkg/trait/deployment.go b/pkg/trait/deployment.go
index 8411e3a..7304aa2 100644
--- a/pkg/trait/deployment.go
+++ b/pkg/trait/deployment.go
@@ -144,7 +144,7 @@ func getDeploymentFor(e *Environment) *appsv1.Deployment {
 	environment["CAMEL_K_DIGEST"] = e.Integration.Status.Digest
 
 	// optimizations
-	environment["AB_JOLOKIA_OFF"] = "true"
+	environment["AB_JOLOKIA_OFF"] = True
 
 	// add env vars from traits
 	for k, v := range e.EnvVars {
diff --git a/pkg/trait/ingress.go b/pkg/trait/ingress.go
index b40d74f..1688e23 100644
--- a/pkg/trait/ingress.go
+++ b/pkg/trait/ingress.go
@@ -62,7 +62,7 @@ func (i *ingressTrait) apply(e *Environment) error {
 		return errors.New("cannot apply ingress trait: no target service")
 	}
 
-	e.Resources.Add(i.getIngressFor(e, service))
+	e.Resources.Add(i.getIngressFor(service))
 	return nil
 }
 
@@ -77,7 +77,7 @@ func (*ingressTrait) getTargetService(e *Environment) (service *corev1.Service)
 	return
 }
 
-func (i *ingressTrait) getIngressFor(env *Environment, service *corev1.Service) *v1beta1.Ingress {
+func (i *ingressTrait) getIngressFor(service *corev1.Service) *v1beta1.Ingress {
 	ingress := v1beta1.Ingress{
 		TypeMeta: metav1.TypeMeta{
 			Kind:       "Ingress",
diff --git a/pkg/trait/knative.go b/pkg/trait/knative.go
index b2cd958..0e211f1 100644
--- a/pkg/trait/knative.go
+++ b/pkg/trait/knative.go
@@ -20,9 +20,10 @@ package trait
 import (
 	"encoding/json"
 	"fmt"
+	"strings"
+
 	"github.com/operator-framework/operator-sdk/pkg/sdk"
 	"github.com/pkg/errors"
-	"strings"
 
 	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
 
@@ -109,7 +110,7 @@ func (t *knativeTrait) getServiceFor(e *Environment) (*serving.Service, error) {
 	environment["CAMEL_K_DIGEST"] = e.Integration.Status.Digest
 
 	// optimizations
-	environment["AB_JOLOKIA_OFF"] = "true"
+	environment["AB_JOLOKIA_OFF"] = True
 
 	// Knative integration
 	conf, err := t.getConfigurationSerialized(e)
@@ -190,6 +191,10 @@ func (*knativeTrait) getSubscriptionFor(e *Environment, channel string) *eventin
 
 func (t *knativeTrait) getConfigurationSerialized(e *Environment) (string, error) {
 	env, err := t.getConfiguration(e)
+	if err != nil {
+		return "", errors.Wrap(err, "unable fetch environment configuration")
+	}
+
 	res, err := json.Marshal(env)
 	if err != nil {
 		return "", errors.Wrap(err, "unable to serialize Knative configuration")
@@ -308,7 +313,7 @@ func (*knativeTrait) retrieveChannel(namespace string, name string) (*eventing.C
 		},
 	}
 	if err := sdk.Get(&channel); err != nil {
-		return nil, errors.Wrap(err, "could not retrieve channel " + name + " in namespace " + namespace)
+		return nil, errors.Wrap(err, "could not retrieve channel "+name+" in namespace "+namespace)
 	}
 	return &channel, nil
 }
diff --git a/pkg/trait/route.go b/pkg/trait/route.go
index b2ef625..e65b0cb 100644
--- a/pkg/trait/route.go
+++ b/pkg/trait/route.go
@@ -61,7 +61,7 @@ func (r *routeTrait) apply(e *Environment) error {
 		return errors.New("cannot apply route trait: no target service")
 	}
 
-	e.Resources.Add(r.getRouteFor(e, service))
+	e.Resources.Add(r.getRouteFor(service))
 	return nil
 }
 
@@ -76,7 +76,7 @@ func (*routeTrait) getTargetService(e *Environment) (service *corev1.Service) {
 	return
 }
 
-func (r *routeTrait) getRouteFor(env *Environment, service *corev1.Service) *routev1.Route {
+func (r *routeTrait) getRouteFor(service *corev1.Service) *routev1.Route {
 	route := routev1.Route{
 		TypeMeta: metav1.TypeMeta{
 			Kind:       "Route",
diff --git a/pkg/trait/service.go b/pkg/trait/service.go
index 1c9b19b..a7c927a 100644
--- a/pkg/trait/service.go
+++ b/pkg/trait/service.go
@@ -63,15 +63,12 @@ func (s *serviceTrait) autoconfigure(e *Environment) error {
 }
 
 func (s *serviceTrait) apply(e *Environment) (err error) {
-	var svc *corev1.Service
-	if svc, err = s.getServiceFor(e); err != nil {
-		return err
-	}
+	svc := s.getServiceFor(e)
 	e.Resources.Add(svc)
 	return nil
 }
 
-func (s *serviceTrait) getServiceFor(e *Environment) (*corev1.Service, error) {
+func (s *serviceTrait) getServiceFor(e *Environment) *corev1.Service {
 	svc := corev1.Service{
 		TypeMeta: metav1.TypeMeta{
 			Kind:       "Service",
@@ -99,7 +96,7 @@ func (s *serviceTrait) getServiceFor(e *Environment) (*corev1.Service, error) {
 		},
 	}
 
-	return &svc, nil
+	return &svc
 }
 
 func (*serviceTrait) requiresService(environment *Environment) bool {
diff --git a/pkg/trait/trait.go b/pkg/trait/trait.go
index 042b4d5..592796d 100644
--- a/pkg/trait/trait.go
+++ b/pkg/trait/trait.go
@@ -24,6 +24,8 @@ import (
 	"github.com/pkg/errors"
 )
 
+const True = "true"
+
 // Apply --
 func Apply(integration *v1alpha1.Integration, ctx *v1alpha1.IntegrationContext) (*Environment, error) {
 	environment, err := newEnvironment(integration, ctx)
diff --git a/pkg/trait/trait_test.go b/pkg/trait/trait_test.go
index 5211395..3e78fad 100644
--- a/pkg/trait/trait_test.go
+++ b/pkg/trait/trait_test.go
@@ -29,6 +29,11 @@ import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 )
 
+const (
+	TestDeployment = "test"
+	TestProperties = "test-properties"
+)
+
 func TestOpenShiftTraits(t *testing.T) {
 	env := createTestEnv(v1alpha1.IntegrationPlatformClusterOpenShift, "camel:core")
 	res := processTestEnv(t, env)
@@ -38,10 +43,10 @@ func TestOpenShiftTraits(t *testing.T) {
 	assert.NotContains(t, env.ExecutedTraits, ID("route"))
 	assert.Contains(t, env.ExecutedTraits, ID("owner"))
 	assert.NotNil(t, res.GetConfigMap(func(cm *corev1.ConfigMap) bool {
-		return cm.Name == "test-properties"
+		return cm.Name == TestProperties
 	}))
 	assert.NotNil(t, res.GetDeployment(func(deployment *appsv1.Deployment) bool {
-		return deployment.Name == "test"
+		return deployment.Name == TestDeployment
 	}))
 }
 
@@ -53,16 +58,16 @@ func TestOpenShiftTraitsWithWeb(t *testing.T) {
 	assert.Contains(t, env.ExecutedTraits, ID("route"))
 	assert.Contains(t, env.ExecutedTraits, ID("owner"))
 	assert.NotNil(t, res.GetConfigMap(func(cm *corev1.ConfigMap) bool {
-		return cm.Name == "test-properties"
+		return cm.Name == TestProperties
 	}))
 	assert.NotNil(t, res.GetDeployment(func(deployment *appsv1.Deployment) bool {
-		return deployment.Name == "test"
+		return deployment.Name == TestDeployment
 	}))
 	assert.NotNil(t, res.GetService(func(svc *corev1.Service) bool {
-		return svc.Name == "test"
+		return svc.Name == TestDeployment
 	}))
 	assert.NotNil(t, res.GetRoute(func(svc *routev1.Route) bool {
-		return svc.Name == "test"
+		return svc.Name == TestDeployment
 	}))
 }
 
@@ -78,7 +83,7 @@ func TestOpenShiftTraitsWithWebAndConfig(t *testing.T) {
 	assert.Contains(t, env.ExecutedTraits, ID("service"))
 	assert.Contains(t, env.ExecutedTraits, ID("route"))
 	assert.NotNil(t, res.GetService(func(svc *corev1.Service) bool {
-		return svc.Name == "test" && svc.Spec.Ports[0].TargetPort.IntVal == int32(7071)
+		return svc.Name == TestDeployment && svc.Spec.Ports[0].TargetPort.IntVal == int32(7071)
 	}))
 }
 
@@ -107,10 +112,10 @@ func TestKubernetesTraits(t *testing.T) {
 	assert.NotContains(t, env.ExecutedTraits, ID("route"))
 	assert.Contains(t, env.ExecutedTraits, ID("owner"))
 	assert.NotNil(t, res.GetConfigMap(func(cm *corev1.ConfigMap) bool {
-		return cm.Name == "test-properties"
+		return cm.Name == TestProperties
 	}))
 	assert.NotNil(t, res.GetDeployment(func(deployment *appsv1.Deployment) bool {
-		return deployment.Name == "test"
+		return deployment.Name == TestDeployment
 	}))
 }
 
@@ -122,13 +127,13 @@ func TestKubernetesTraitsWithWeb(t *testing.T) {
 	assert.NotContains(t, env.ExecutedTraits, ID("route"))
 	assert.Contains(t, env.ExecutedTraits, ID("owner"))
 	assert.NotNil(t, res.GetConfigMap(func(cm *corev1.ConfigMap) bool {
-		return cm.Name == "test-properties"
+		return cm.Name == TestProperties
 	}))
 	assert.NotNil(t, res.GetDeployment(func(deployment *appsv1.Deployment) bool {
-		return deployment.Name == "test"
+		return deployment.Name == TestDeployment
 	}))
 	assert.NotNil(t, res.GetService(func(svc *corev1.Service) bool {
-		return svc.Name == "test"
+		return svc.Name == TestDeployment
 	}))
 }
 
@@ -163,7 +168,7 @@ func createTestEnv(cluster v1alpha1.IntegrationPlatformCluster, dependencies ...
 	return &Environment{
 		Integration: &v1alpha1.Integration{
 			ObjectMeta: metav1.ObjectMeta{
-				Name:      "test",
+				Name:      TestDeployment,
 				Namespace: "ns",
 			},
 			Spec: v1alpha1.IntegrationSpec{
diff --git a/pkg/trait/types.go b/pkg/trait/types.go
index 8e9e223..eaaba02 100644
--- a/pkg/trait/types.go
+++ b/pkg/trait/types.go
@@ -87,10 +87,6 @@ func (trait *BaseTrait) autoconfigure(environment *Environment) error {
 	return nil
 }
 
-func (trait *BaseTrait) apply(environment *Environment) error {
-	return nil
-}
-
 /* Environment */
 
 // A Environment provides the context where the trait is executed
diff --git a/pkg/trait/util.go b/pkg/trait/util.go
index bbbbb32..afb8f23 100644
--- a/pkg/trait/util.go
+++ b/pkg/trait/util.go
@@ -91,7 +91,7 @@ func CombineConfigurationAsMap(configurationType string, context *v1alpha1.Integ
 
 // CombineConfigurationAsSlice --
 func CombineConfigurationAsSlice(configurationType string, context *v1alpha1.IntegrationContext, integration *v1alpha1.Integration) []string {
-	result := make(map[string]bool, 0)
+	result := make(map[string]bool)
 	if context != nil {
 		// Add context properties first so integrations can
 		// override it
diff --git a/pkg/util/camel/catalog_test.go b/pkg/util/camel/catalog_test.go
index 88f0447..d7fb0d5 100644
--- a/pkg/util/camel/catalog_test.go
+++ b/pkg/util/camel/catalog_test.go
@@ -18,8 +18,9 @@ limitations under the License.
 package camel
 
 import (
-	"github.com/stretchr/testify/assert"
 	"testing"
+
+	"github.com/stretchr/testify/assert"
 )
 
 func TestCatalog(t *testing.T) {
diff --git a/pkg/util/digest/digest.go b/pkg/util/digest/digest.go
index 2be054f..5803a97 100644
--- a/pkg/util/digest/digest.go
+++ b/pkg/util/digest/digest.go
@@ -29,49 +29,67 @@ import (
 
 // ComputeForIntegration a digest of the fields that are relevant for the deployment
 // Produces a digest that can be used as docker image tag
-func ComputeForIntegration(integration *v1alpha1.Integration) string {
+func ComputeForIntegration(integration *v1alpha1.Integration) (string, error) {
 	hash := sha256.New()
 	// Operator version is relevant
-	hash.Write([]byte(version.Version))
+	if _, err := hash.Write([]byte(version.Version)); err != nil {
+		return "", err
+	}
 	// Integration Context is relevant
-	hash.Write([]byte(integration.Spec.Context))
+	if _, err := hash.Write([]byte(integration.Spec.Context)); err != nil {
+		return "", err
+	}
 
 	// Integration code
 	for _, s := range integration.Spec.Sources {
 		if s.Content != "" {
-			hash.Write([]byte(s.Content))
+			if _, err := hash.Write([]byte(s.Content)); err != nil {
+				return "", err
+			}
 		}
 	}
 
 	// Integration dependencies
 	for _, item := range integration.Spec.Dependencies {
-		hash.Write([]byte(item))
+		if _, err := hash.Write([]byte(item)); err != nil {
+			return "", err
+		}
 	}
 	// Integration configuration
 	for _, item := range integration.Spec.Configuration {
-		hash.Write([]byte(item.String()))
+		if _, err := hash.Write([]byte(item.String())); err != nil {
+			return "", err
+		}
 	}
 
 	// Add a letter at the beginning and use URL safe encoding
-	return "v" + base64.RawURLEncoding.EncodeToString(hash.Sum(nil))
+	digest := "v" + base64.RawURLEncoding.EncodeToString(hash.Sum(nil))
+	return digest, nil
 }
 
 // ComputeForIntegrationContext a digest of the fields that are relevant for the deployment
 // Produces a digest that can be used as docker image tag
-func ComputeForIntegrationContext(context *v1alpha1.IntegrationContext) string {
+func ComputeForIntegrationContext(context *v1alpha1.IntegrationContext) (string, error) {
 	hash := sha256.New()
 	// Operator version is relevant
-	hash.Write([]byte(version.Version))
+	if _, err := hash.Write([]byte(version.Version)); err != nil {
+		return "", err
+	}
 
 	for _, item := range context.Spec.Dependencies {
-		hash.Write([]byte(item))
+		if _, err := hash.Write([]byte(item)); err != nil {
+			return "", err
+		}
 	}
 	for _, item := range context.Spec.Configuration {
-		hash.Write([]byte(item.String()))
+		if _, err := hash.Write([]byte(item.String())); err != nil {
+			return "", err
+		}
 	}
 
 	// Add a letter at the beginning and use URL safe encoding
-	return "v" + base64.RawURLEncoding.EncodeToString(hash.Sum(nil))
+	digest := "v" + base64.RawURLEncoding.EncodeToString(hash.Sum(nil))
+	return digest, nil
 }
 
 // Random --
diff --git a/pkg/util/knative/uri_test.go b/pkg/util/knative/uri_test.go
index 8bc35b5..c43fe39 100644
--- a/pkg/util/knative/uri_test.go
+++ b/pkg/util/knative/uri_test.go
@@ -18,8 +18,9 @@ limitations under the License.
 package knative
 
 import (
-	"github.com/stretchr/testify/assert"
 	"testing"
+
+	"github.com/stretchr/testify/assert"
 )
 
 func TestChannelUri(t *testing.T) {
diff --git a/pkg/util/kubernetes/config.go b/pkg/util/kubernetes/config.go
index 26ed4f2..634e9b8 100644
--- a/pkg/util/kubernetes/config.go
+++ b/pkg/util/kubernetes/config.go
@@ -18,10 +18,11 @@ limitations under the License.
 package kubernetes
 
 import (
-	"github.com/operator-framework/operator-sdk/pkg/util/k8sutil"
 	"os"
 	"os/user"
 	"path/filepath"
+
+	"github.com/operator-framework/operator-sdk/pkg/util/k8sutil"
 )
 
 // InitKubeClient initialize the k8s client
diff --git a/pkg/util/kubernetes/sanitize.go b/pkg/util/kubernetes/sanitize.go
index 95dee40..e3351a3 100644
--- a/pkg/util/kubernetes/sanitize.go
+++ b/pkg/util/kubernetes/sanitize.go
@@ -26,11 +26,7 @@ import (
 	"github.com/stoewer/go-strcase"
 )
 
-var disallowedChars *regexp.Regexp
-
-func init() {
-	disallowedChars = regexp.MustCompile("[^a-z0-9-]")
-}
+var disallowedChars = regexp.MustCompile(`[^a-z0-9-]`)
 
 // SanitizeName sanitizes the given name to be compatible with k8s
 func SanitizeName(name string) string {
diff --git a/pkg/util/log/annotation_scraper.go b/pkg/util/log/annotation_scraper.go
index d3b4331..5aad25d 100644
--- a/pkg/util/log/annotation_scraper.go
+++ b/pkg/util/log/annotation_scraper.go
@@ -62,7 +62,7 @@ func (s *SelectorScraper) Start(ctx context.Context) *bufio.Reader {
 }
 
 func (s *SelectorScraper) periodicSynchronize(ctx context.Context, out *bufio.Writer, clientCloser func() error) {
-	err := s.synchronize(ctx, out, clientCloser)
+	err := s.synchronize(ctx, out)
 	if err != nil {
 		logrus.Warn("Could not synchronize log by label " + s.labelSelector)
 	}
@@ -76,13 +76,15 @@ func (s *SelectorScraper) periodicSynchronize(ctx context.Context, out *bufio.Wr
 
 			return true
 		})
-		clientCloser()
+		if err := clientCloser(); err != nil {
+			logrus.Warn("Unable to close the client", err)
+		}
 	case <-time.After(2 * time.Second):
 		go s.periodicSynchronize(ctx, out, clientCloser)
 	}
 }
 
-func (s *SelectorScraper) synchronize(ctx context.Context, out *bufio.Writer, clientCloser func() error) error {
+func (s *SelectorScraper) synchronize(ctx context.Context, out *bufio.Writer) error {
 	list, err := s.listPods()
 	if err != nil {
 		return err
@@ -128,7 +130,10 @@ func (s *SelectorScraper) addPodScraper(ctx context.Context, name string, out *b
 	go func() {
 		defer podCancel()
 
-		out.WriteString(prefix + "Monitoring pod " + name)
+		if _, err := out.WriteString(prefix + "Monitoring pod " + name); err != nil {
+			logrus.Error("Cannot write to output: ", err)
+			return
+		}
 		for {
 			str, err := podReader.ReadString('\n')
 			if err == io.EOF {
@@ -137,7 +142,10 @@ func (s *SelectorScraper) addPodScraper(ctx context.Context, name string, out *b
 				logrus.Error("Cannot read from pod stream: ", err)
 				return
 			}
-			out.WriteString(prefix + str)
+			if _, err := out.WriteString(prefix + str); err != nil {
+				logrus.Error("Cannot write to output: ", err)
+				return
+			}
 			out.Flush()
 			if podCtx.Err() != nil {
 				return
diff --git a/pkg/util/log/pod_scraper.go b/pkg/util/log/pod_scraper.go
index 85e9d33..ba4567b 100644
--- a/pkg/util/log/pod_scraper.go
+++ b/pkg/util/log/pod_scraper.go
@@ -101,7 +101,9 @@ func (s *PodScraper) handleAndRestart(ctx context.Context, err error, wait time.
 
 	if ctx.Err() != nil {
 		logrus.Info("Pod ", s.name, " will no longer be monitored")
-		clientCloser()
+		if err := clientCloser(); err != nil {
+			logrus.Warn("Unable to close the client", err)
+		}
 		return
 	}
 
@@ -110,7 +112,9 @@ func (s *PodScraper) handleAndRestart(ctx context.Context, err error, wait time.
 	case <-time.After(wait):
 		break
 	case <-ctx.Done():
-		clientCloser()
+		if err := clientCloser(); err != nil {
+			logrus.Warn("Unable to close the client", err)
+		}
 		return
 	}
 
diff --git a/pkg/util/maven/maven.go b/pkg/util/maven/maven.go
index 019723b..594d63c 100644
--- a/pkg/util/maven/maven.go
+++ b/pkg/util/maven/maven.go
@@ -31,10 +31,6 @@ import (
 	"github.com/sirupsen/logrus"
 )
 
-const (
-	buildDirPrefix = "maven-"
-)
-
 // BuildResult --
 type BuildResult struct {
 	Classpath []v1alpha1.Artifact
@@ -111,12 +107,13 @@ func ParseGAV(gav string) (Dependency, error) {
 	dep.Type = "jar"
 
 	cnt := strings.Count(gav, ":")
-	if cnt == 2 {
+	switch cnt {
+	case 2:
 		dep.Version = res[4]
-	} else if cnt == 3 {
+	case 3:
 		dep.Type = res[4]
 		dep.Version = res[6]
-	} else {
+	default:
 		dep.Type = res[4]
 		dep.Classifier = res[6]
 		dep.Version = res[8]
diff --git a/pkg/util/maven/maven_test.go b/pkg/util/maven/maven_test.go
index 59e43cb..b5d8243 100644
--- a/pkg/util/maven/maven_test.go
+++ b/pkg/util/maven/maven_test.go
@@ -25,7 +25,8 @@ import (
 )
 
 const expectedPom = `<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ` +
+	`xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.apache.camel.k.integration</groupId>
   <artifactId>camel-k-integration</artifactId>
diff --git a/pkg/util/minishift/minishift.go b/pkg/util/minishift/minishift.go
index 9e5465c..b9f6bbc 100644
--- a/pkg/util/minishift/minishift.go
+++ b/pkg/util/minishift/minishift.go
@@ -19,10 +19,11 @@ limitations under the License.
 package minishift
 
 import (
+	"strconv"
+
 	"github.com/operator-framework/operator-sdk/pkg/sdk"
-	"k8s.io/api/core/v1"
+	v1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"strconv"
 )
 
 const (
diff --git a/pkg/util/sync/file_test.go b/pkg/util/sync/file_test.go
index efd0bd8..1b665c8 100644
--- a/pkg/util/sync/file_test.go
+++ b/pkg/util/sync/file_test.go
@@ -45,7 +45,9 @@ func TestFile(t *testing.T) {
 	time.Sleep(100 * time.Millisecond)
 	expectedNumChanges := 3
 	for i := 0; i < expectedNumChanges; i++ {
-		ioutil.WriteFile(fileName, []byte("data-"+strconv.Itoa(i)), 0777)
+		if err := ioutil.WriteFile(fileName, []byte("data-"+strconv.Itoa(i)), 0777); err != nil {
+			t.Error(err)
+		}
 		time.Sleep(350 * time.Millisecond)
 	}
 
diff --git a/pkg/util/tar/appender.go b/pkg/util/tar/appender.go
index f4fbecb..78df669 100644
--- a/pkg/util/tar/appender.go
+++ b/pkg/util/tar/appender.go
@@ -71,12 +71,14 @@ func (t *Appender) AddFile(filePath string, tarDir string) (string, error) {
 		fileName = path.Join(tarDir, fileName)
 	}
 
-	t.writer.WriteHeader(&atar.Header{
+	if err := t.writer.WriteHeader(&atar.Header{
 		Name:    fileName,
 		Size:    info.Size(),
 		Mode:    int64(info.Mode()),
 		ModTime: info.ModTime(),
-	})
+	}); err != nil {
+		return "", err
+	}
 
 	file, err := os.Open(filePath)
 	if err != nil {
@@ -103,12 +105,14 @@ func (t *Appender) AddFileWithName(fileName string, filePath string, tarDir stri
 		fileName = path.Join(tarDir, fileName)
 	}
 
-	t.writer.WriteHeader(&atar.Header{
+	if err := t.writer.WriteHeader(&atar.Header{
 		Name:    fileName,
 		Size:    info.Size(),
 		Mode:    int64(info.Mode()),
 		ModTime: info.ModTime(),
-	})
+	}); err != nil {
+		return "", err
+	}
 
 	file, err := os.Open(filePath)
 	if err != nil {
@@ -126,11 +130,13 @@ func (t *Appender) AddFileWithName(fileName string, filePath string, tarDir stri
 
 // AppendData appends the given content to a file inside the tar, creating it if it does not exist
 func (t *Appender) AppendData(data []byte, tarPath string) error {
-	t.writer.WriteHeader(&atar.Header{
+	if err := t.writer.WriteHeader(&atar.Header{
 		Name: tarPath,
 		Size: int64(len(data)),
 		Mode: 0644,
-	})
+	}); err != nil {
+		return err
+	}
 
 	_, err := t.writer.Write(data)
 	if err != nil {
diff --git a/pkg/util/util.go b/pkg/util/util.go
index fba0619..805039c 100644
--- a/pkg/util/util.go
+++ b/pkg/util/util.go
@@ -94,7 +94,7 @@ func WriteFileWithContent(buildDir string, relativePath string, content string)
 
 	_, err = file.WriteString(content)
 	if err != nil {
-		errors.Wrap(err, "could not write to file "+relativePath)
+		return errors.Wrap(err, "could not write to file "+relativePath)
 	}
 	return nil
 }
diff --git a/version/version.go b/version/version.go
index b46ddf0..938471e 100644
--- a/version/version.go
+++ b/version/version.go
@@ -19,6 +19,6 @@ limitations under the License.
 package version
 
 var (
-	// Global Camel K Version
+	// Version is the global Camel K Version
 	Version = "0.0.6-SNAPSHOT"
 )