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

pcongiusti pushed a commit to branch release-1.8.x
in repository https://gitbox.apache.org/repos/asf/camel-k.git


The following commit(s) were added to refs/heads/release-1.8.x by this push:
     new d47fbad  fix(build): incremental build
d47fbad is described below

commit d47fbadc4f0af237ada8c5d78e70a0ae85dc3664
Author: Pasquale Congiusti <[email protected]>
AuthorDate: Fri Feb 11 13:26:38 2022 +0100

    fix(build): incremental build
    
    * Fixed the SHA1 which were not calculated properly
    * Unit and E2E test to make sure we'll be warned if the behavior is broken 
again
    
    Closes #3007
---
 e2e/common/build/incremental_build_test.go | 68 ++++++++++++++++++++++++++++++
 pkg/builder/image.go                       |  6 ---
 pkg/util/digest/digest.go                  |  6 +--
 pkg/util/digest/digest_test.go             | 17 ++++++++
 4 files changed, 87 insertions(+), 10 deletions(-)

diff --git a/e2e/common/build/incremental_build_test.go 
b/e2e/common/build/incremental_build_test.go
new file mode 100644
index 0000000..fe0d9a0
--- /dev/null
+++ b/e2e/common/build/incremental_build_test.go
@@ -0,0 +1,68 @@
+//go:build integration
+// +build integration
+
+// To enable compilation of this file in Goland, go to "Settings -> Go -> 
Vendoring & Build Tags -> Custom Tags" and add "integration"
+
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package build
+
+import (
+       "testing"
+
+       . "github.com/onsi/gomega"
+
+       corev1 "k8s.io/api/core/v1"
+
+       . "github.com/apache/camel-k/e2e/support"
+       v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+       "github.com/apache/camel-k/pkg/util/defaults"
+)
+
+func TestRunIncrementalBuild(t *testing.T) {
+       WithNewTestNamespace(t, func(ns string) {
+               Expect(Kamel("install", "-n", ns).Execute()).To(Succeed())
+
+               name := "java"
+               Expect(Kamel("run", "-n", ns, "files/Java.java",
+                       "--name", name,
+               ).Execute()).To(Succeed())
+               Eventually(IntegrationPodPhase(ns, name), 
TestTimeoutMedium).Should(Equal(corev1.PodRunning))
+               Eventually(IntegrationConditionStatus(ns, name, 
v1.IntegrationConditionReady), 
TestTimeoutShort).Should(Equal(corev1.ConditionTrue))
+               Eventually(IntegrationLogs(ns, name), 
TestTimeoutShort).Should(ContainSubstring("Magicstring!"))
+               integrationKitName := IntegrationKit(ns, name)()
+               Eventually(Kit(ns, 
integrationKitName)().Status.BaseImage).Should(Equal(defaults.BaseImage()))
+               // Another integration that should be built on top of the 
previous IntegrationKit
+               // just add a new random dependency
+               name2 := "java2"
+               Expect(Kamel("run", "-n", ns, "files/Java.java",
+                       "--name", name2,
+                       "-d", "camel-zipfile",
+               ).Execute()).To(Succeed())
+               Eventually(IntegrationPodPhase(ns, name2), 
TestTimeoutMedium).Should(Equal(corev1.PodRunning))
+               Eventually(IntegrationConditionStatus(ns, name2, 
v1.IntegrationConditionReady), 
TestTimeoutShort).Should(Equal(corev1.ConditionTrue))
+               Eventually(IntegrationLogs(ns, name2), 
TestTimeoutShort).Should(ContainSubstring("Magicstring!"))
+               integrationKitName2 := IntegrationKit(ns, name2)()
+               // the container can come in a format like
+               // 
10.108.177.66/test-d7cad110-bb1d-4e79-8a0e-ebd44f6fe5d4/camel-k-kit-c8357r4k5tp6fn1idm60@sha256:d49716f0429ad8b23a1b8d20a357d64b1aa42a67c1a2a534ebd4c54cd598a18d
+               // we should be save just to check the substring is contained
+               Eventually(Kit(ns, 
integrationKitName2)().Status.BaseImage).Should(ContainSubstring(integrationKitName))
+
+               Expect(Kamel("delete", "--all", "-n", 
ns).Execute()).To(Succeed())
+       })
+}
diff --git a/pkg/builder/image.go b/pkg/builder/image.go
index 3a200be..a005f42 100644
--- a/pkg/builder/image.go
+++ b/pkg/builder/image.go
@@ -120,12 +120,6 @@ func jvmDockerfile(ctx *builderContext) error {
 }
 
 func incrementalImageContext(ctx *builderContext) error {
-       if ctx.Build.BaseImage != "" {
-               // If the build requires a specific image, don't try to 
determine the
-               // base image using artifact so just use the standard packages
-               return standardImageContext(ctx)
-       }
-
        images, err := listPublishedImages(ctx)
        if err != nil {
                return err
diff --git a/pkg/util/digest/digest.go b/pkg/util/digest/digest.go
index 566a873..0ab8c9e 100644
--- a/pkg/util/digest/digest.go
+++ b/pkg/util/digest/digest.go
@@ -268,10 +268,8 @@ func ComputeSHA1(elem ...string) (string, error) {
                return nil
        })
 
-       var sum string
-
        if err != nil {
-               sum = base64.StdEncoding.EncodeToString(h.Sum(nil))
+               return "", err
        }
-       return sum, err
+       return base64.StdEncoding.EncodeToString(h.Sum(nil)), nil
 }
diff --git a/pkg/util/digest/digest_test.go b/pkg/util/digest/digest_test.go
index 096146f..68c1b22 100644
--- a/pkg/util/digest/digest_test.go
+++ b/pkg/util/digest/digest_test.go
@@ -18,6 +18,8 @@ limitations under the License.
 package digest
 
 import (
+       "io/ioutil"
+       "os"
        "testing"
 
        v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
@@ -44,3 +46,18 @@ func TestDigestUsesAnnotations(t *testing.T) {
        assert.NoError(t, err)
        assert.NotEqual(t, digest1, digest3)
 }
+
+func TestDigestSHA1FromTempFile(t *testing.T) {
+       var tmpFile *os.File
+       var err error
+       if tmpFile, err = ioutil.TempFile("", "camel-k-"); err != nil {
+               t.Error(err)
+       }
+
+       assert.Nil(t, tmpFile.Close())
+       assert.Nil(t, ioutil.WriteFile(tmpFile.Name(), []byte("hello test!"), 
0o400))
+
+       sha1, err := ComputeSHA1(tmpFile.Name())
+       assert.NoError(t, err)
+       assert.Equal(t, "OXPdxTeLf5rqnsqvTi0CgmWoN/0=", sha1)
+}

Reply via email to