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 <zregv...@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"
 )

Reply via email to