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 2019/06/26 12:08:26 UTC

[camel-k] branch master updated: fix: Validate maven artifacts

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


The following commit(s) were added to refs/heads/master by this push:
     new 1de2681  fix: Validate maven artifacts
1de2681 is described below

commit 1de2681fc8eada9ec0285954152fdeecda50ae29
Author: James Netherton <ja...@gmail.com>
AuthorDate: Mon Jun 24 09:47:12 2019 +0100

    fix: Validate maven artifacts
    
    fixes #742
---
 pkg/cmd/install.go                    | 99 ++++++++++++++++++++---------------
 pkg/util/maven/maven_project.go       |  9 +++-
 pkg/util/maven/maven_project_test.go  | 18 +++++++
 pkg/util/maven/maven_settings_test.go | 10 ++--
 pkg/util/maven/maven_types.go         |  5 +-
 5 files changed, 91 insertions(+), 50 deletions(-)

diff --git a/pkg/cmd/install.go b/pkg/cmd/install.go
index f7e21a3..885fb0a 100644
--- a/pkg/cmd/install.go
+++ b/pkg/cmd/install.go
@@ -212,58 +212,62 @@ func (o *installCmdOptions) install(_ *cobra.Command, _ []string) error {
 			platform.Spec.Build.Timeout.Duration = d
 		}
 
-		if len(o.mavenRepositories) > 0 {
-			o.mavenSettings = fmt.Sprintf("configmap:%s-maven-settings/settings.xml", platform.Name)
+		o.mavenSettings = fmt.Sprintf("configmap:%s-maven-settings/settings.xml", platform.Name)
 
-			settings := maven.NewSettings()
-			repositories := make([]maven.Repository, 0, len(o.mavenRepositories))
+		settings := maven.NewSettings()
+		repositories := make([]maven.Repository, 0, len(o.mavenRepositories))
 
-			for i, r := range o.mavenRepositories {
-				repository := maven.NewRepository(r)
-				if repository.ID == "" {
-					repository.ID = fmt.Sprintf("repository-%03d", i)
-				}
-
-				repositories = append(repositories, repository)
+		for i, r := range o.mavenRepositories {
+			repository := maven.NewRepository(r)
+			if repository.ID == "" {
+				repository.ID = fmt.Sprintf("repository-%03d", i)
 			}
 
-			settings.Profiles = []maven.Profile{
-				{
-					ID: "maven-settings",
-					Activation: maven.Activation{
-						ActiveByDefault: true,
-					},
-					Repositories:       repositories,
-					PluginRepositories: repositories,
-				},
-			}
+			repositories = append(repositories, repository)
+		}
 
-			data, err := util.EncodeXML(settings)
-			if err != nil {
-				return err
-			}
+		// Enables strict checksums for Maven central if not already configured
+		if !containsMvnCentral(repositories) {
+			repository := maven.NewRepository("https://repo.maven.apache.org/maven2@id=central")
+			repositories = append([]maven.Repository{repository}, repositories...)
+		}
 
-			cm := corev1.ConfigMap{
-				TypeMeta: metav1.TypeMeta{
-					Kind:       "ConfigMap",
-					APIVersion: "v1",
-				},
-				ObjectMeta: metav1.ObjectMeta{
-					Name:      platform.Name + "-maven-settings",
-					Namespace: namespace,
-					Labels: map[string]string{
-						"app": "camel-k",
-					},
+		settings.Profiles = []maven.Profile{
+			{
+				ID: "maven-settings",
+				Activation: maven.Activation{
+					ActiveByDefault: true,
 				},
-				Data: map[string]string{
-					"settings.xml": string(data),
+				Repositories:       repositories,
+				PluginRepositories: repositories,
+			},
+		}
+
+		data, err := util.EncodeXML(settings)
+		if err != nil {
+			return err
+		}
+
+		cm := corev1.ConfigMap{
+			TypeMeta: metav1.TypeMeta{
+				Kind:       "ConfigMap",
+				APIVersion: "v1",
+			},
+			ObjectMeta: metav1.ObjectMeta{
+				Name:      platform.Name + "-maven-settings",
+				Namespace: namespace,
+				Labels: map[string]string{
+					"app": "camel-k",
 				},
-			}
+			},
+			Data: map[string]string{
+				"settings.xml": string(data),
+			},
+		}
 
-			err = install.RuntimeObjectOrCollect(o.Context, c, namespace, collection, &cm)
-			if err != nil {
-				return err
-			}
+		err = install.RuntimeObjectOrCollect(o.Context, c, namespace, collection, &cm)
+		if err != nil {
+			return err
 		}
 
 		if o.mavenSettings != "" {
@@ -434,3 +438,12 @@ func decodeMavenSettings(mavenSettings string) (v1alpha1.ValueSource, error) {
 
 	return v1alpha1.ValueSource{}, fmt.Errorf("illegal maven setting definition, syntax: configmap|secret:resource-name[/settings path]")
 }
+
+func containsMvnCentral(repositories []maven.Repository) bool {
+	for _, r := range repositories {
+		if r.ID == "central" {
+			return true
+		}
+	}
+	return false
+}
diff --git a/pkg/util/maven/maven_project.go b/pkg/util/maven/maven_project.go
index 541414f..db4ea04 100644
--- a/pkg/util/maven/maven_project.go
+++ b/pkg/util/maven/maven_project.go
@@ -166,10 +166,12 @@ func NewRepository(repo string) Repository {
 	r := Repository{
 		URL: repo,
 		Releases: RepositoryPolicy{
-			Enabled: true,
+			Enabled:        true,
+			ChecksumPolicy: "fail",
 		},
 		Snapshots: RepositoryPolicy{
-			Enabled: false,
+			Enabled:        false,
+			ChecksumPolicy: "fail",
 		},
 	}
 
@@ -184,6 +186,9 @@ func NewRepository(repo string) Repository {
 				r.Releases.Enabled = false
 			case strings.HasPrefix(attribute, "id="):
 				r.ID = attribute[3:]
+			case strings.HasPrefix(attribute, "checksumpolicy="):
+				r.Snapshots.ChecksumPolicy = attribute[15:]
+				r.Releases.ChecksumPolicy = attribute[15:]
 			}
 		}
 	}
diff --git a/pkg/util/maven/maven_project_test.go b/pkg/util/maven/maven_project_test.go
index 6c8e980..d717d7f 100644
--- a/pkg/util/maven/maven_project_test.go
+++ b/pkg/util/maven/maven_project_test.go
@@ -187,6 +187,8 @@ func TestNewRepository(t *testing.T) {
 	assert.Equal(t, "http://nexus/public", r.URL)
 	assert.True(t, r.Releases.Enabled)
 	assert.False(t, r.Snapshots.Enabled)
+	assert.Equal(t, "fail", r.Releases.ChecksumPolicy)
+	assert.Equal(t, "fail", r.Snapshots.ChecksumPolicy)
 }
 
 func TestNewRepositoryWithSnapshots(t *testing.T) {
@@ -195,6 +197,8 @@ func TestNewRepositoryWithSnapshots(t *testing.T) {
 	assert.Equal(t, "http://nexus/public", r.URL)
 	assert.True(t, r.Releases.Enabled)
 	assert.True(t, r.Snapshots.Enabled)
+	assert.Equal(t, "fail", r.Releases.ChecksumPolicy)
+	assert.Equal(t, "fail", r.Snapshots.ChecksumPolicy)
 }
 
 func TestNewRepositoryWithSnapshotsAndID(t *testing.T) {
@@ -203,6 +207,8 @@ func TestNewRepositoryWithSnapshotsAndID(t *testing.T) {
 	assert.Equal(t, "http://nexus/public", r.URL)
 	assert.True(t, r.Releases.Enabled)
 	assert.True(t, r.Snapshots.Enabled)
+	assert.Equal(t, "fail", r.Releases.ChecksumPolicy)
+	assert.Equal(t, "fail", r.Snapshots.ChecksumPolicy)
 }
 
 func TestNewRepositoryWithID(t *testing.T) {
@@ -211,4 +217,16 @@ func TestNewRepositoryWithID(t *testing.T) {
 	assert.Equal(t, "http://nexus/public", r.URL)
 	assert.True(t, r.Releases.Enabled)
 	assert.False(t, r.Snapshots.Enabled)
+	assert.Equal(t, "fail", r.Releases.ChecksumPolicy)
+	assert.Equal(t, "fail", r.Snapshots.ChecksumPolicy)
+}
+
+func TestNewRepositoryWithChecksumPolicy(t *testing.T) {
+	r := NewRepository("http://nexus/public@checksumpolicy=warn")
+	assert.Equal(t, "", r.ID)
+	assert.Equal(t, "http://nexus/public", r.URL)
+	assert.True(t, r.Releases.Enabled)
+	assert.False(t, r.Snapshots.Enabled)
+	assert.Equal(t, "warn", r.Releases.ChecksumPolicy)
+	assert.Equal(t, "warn", r.Snapshots.ChecksumPolicy)
 }
diff --git a/pkg/util/maven/maven_settings_test.go b/pkg/util/maven/maven_settings_test.go
index ef1df7f..75d2a20 100644
--- a/pkg/util/maven/maven_settings_test.go
+++ b/pkg/util/maven/maven_settings_test.go
@@ -40,10 +40,12 @@ const expectedSettings = `<?xml version="1.0" encoding="UTF-8"?>
           <url>https://repo.maven.apache.org/maven2</url>
           <snapshots>
             <enabled>false</enabled>
+            <checksumPolicy>warn</checksumPolicy>
           </snapshots>
           <releases>
             <enabled>true</enabled>
             <updatePolicy>never</updatePolicy>
+            <checksumPolicy>fail</checksumPolicy>
           </releases>
         </repository>
       </repositories>
@@ -66,11 +68,13 @@ func TestSettingsGeneration(t *testing.T) {
 					ID:  "central",
 					URL: "https://repo.maven.apache.org/maven2",
 					Snapshots: RepositoryPolicy{
-						Enabled: false,
+						Enabled:        false,
+						ChecksumPolicy: "warn",
 					},
 					Releases: RepositoryPolicy{
-						Enabled:      true,
-						UpdatePolicy: "never",
+						Enabled:        true,
+						UpdatePolicy:   "never",
+						ChecksumPolicy: "fail",
 					},
 				},
 			},
diff --git a/pkg/util/maven/maven_types.go b/pkg/util/maven/maven_types.go
index 26e5b3c..6adbd06 100644
--- a/pkg/util/maven/maven_types.go
+++ b/pkg/util/maven/maven_types.go
@@ -35,8 +35,9 @@ type Repository struct {
 
 // RepositoryPolicy --
 type RepositoryPolicy struct {
-	Enabled      bool   `xml:"enabled"`
-	UpdatePolicy string `xml:"updatePolicy,omitempty"`
+	Enabled        bool   `xml:"enabled"`
+	UpdatePolicy   string `xml:"updatePolicy,omitempty"`
+	ChecksumPolicy string `xml:"checksumPolicy,omitempty"`
 }
 
 // Build --