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)
+}