You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by GitBox <gi...@apache.org> on 2018/09/20 04:59:28 UTC

[GitHub] lburgazzoli closed pull request #104: maven: remove build step, set updatePolicy

lburgazzoli closed pull request #104: maven: remove build step, set updatePolicy
URL: https://github.com/apache/camel-k/pull/104
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/Gopkg.lock b/Gopkg.lock
index 2efc6d9..4c8e50f 100644
--- a/Gopkg.lock
+++ b/Gopkg.lock
@@ -742,7 +742,6 @@
     "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured",
     "k8s.io/apimachinery/pkg/runtime",
     "k8s.io/apimachinery/pkg/runtime/schema",
-    "k8s.io/apimachinery/pkg/runtime/serializer",
     "k8s.io/apimachinery/pkg/runtime/serializer/json",
     "k8s.io/apimachinery/pkg/runtime/serializer/versioning",
     "k8s.io/apimachinery/pkg/util/yaml",
diff --git a/pkg/build/build_types.go b/pkg/build/build_types.go
index da1ffed..a552aa1 100644
--- a/pkg/build/build_types.go
+++ b/pkg/build/build_types.go
@@ -39,10 +39,11 @@ type Source struct {
 
 // Result represents the result of a build
 type Result struct {
-	Source *Request
-	Status Status
-	Image  string
-	Error  error
+	Source               *Request
+	Status               Status
+	Image                string
+	Error                error
+	ResolvedDependencies []string
 }
 
 // Builder is supertype of all builders
diff --git a/pkg/build/local/local_builder.go b/pkg/build/local/local_builder.go
index c341274..65e035f 100644
--- a/pkg/build/local/local_builder.go
+++ b/pkg/build/local/local_builder.go
@@ -111,11 +111,11 @@ func (b *localBuilder) buildCycle(ctx context.Context) {
 }
 
 func (b *localBuilder) execute(source build.Request) (string, error) {
-	integration, err := generateIntegration(source)
+	project, err := generateProject(source)
 	if err != nil {
 		return "", err
 	}
-	tarFileName, err := maven.Build(integration)
+	tarFileName, err := maven.Build(project)
 	if err != nil {
 		return "", err
 	}
@@ -131,7 +131,6 @@ func (b *localBuilder) execute(source build.Request) (string, error) {
 }
 
 func (b *localBuilder) publish(tarFile string, source build.Request) (string, error) {
-
 	bc := buildv1.BuildConfig{
 		TypeMeta: metav1.TypeMeta{
 			APIVersion: buildv1.SchemeGroupVersion.String(),
@@ -254,44 +253,40 @@ func (b *localBuilder) publish(tarFile string, source build.Request) (string, er
 	return is.Status.DockerImageRepository + ":" + source.Identifier.Qualifier, nil
 }
 
-func generateIntegration(source build.Request) (maven.Integration, error) {
-	integration := maven.Integration{
-		Project: maven.Project{
-			XMLName:           xml.Name{Local: "project"},
-			XMLNs:             "http://maven.apache.org/POM/4.0.0",
-			XMLNsXsi:          "http://www.w3.org/2001/XMLSchema-instance",
-			XsiSchemaLocation: "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd",
-			ModelVersion:      "4.0.0",
-			GroupID:           "org.apache.camel.k.integration",
-			ArtifactID:        "camel-k-integration",
-			Version:           version.Version,
-			DependencyManagement: maven.DependencyManagement{
-				Dependencies: maven.Dependencies{
-					Dependencies: []maven.Dependency{
-						{
-							//TODO: camel version should be retrieved from an external source or provided as static version
-							GroupID:    "org.apache.camel",
-							ArtifactID: "camel-bom",
-							Version:    "2.22.1",
-							Type:       "pom",
-							Scope:      "import",
-						},
+func generateProject(source build.Request) (maven.Project, error) {
+	project := maven.Project{
+		XMLName:           xml.Name{Local: "project"},
+		XMLNs:             "http://maven.apache.org/POM/4.0.0",
+		XMLNsXsi:          "http://www.w3.org/2001/XMLSchema-instance",
+		XsiSchemaLocation: "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd",
+		ModelVersion:      "4.0.0",
+		GroupID:           "org.apache.camel.k.integration",
+		ArtifactID:        "camel-k-integration",
+		Version:           version.Version,
+		DependencyManagement: maven.DependencyManagement{
+			Dependencies: maven.Dependencies{
+				Dependencies: []maven.Dependency{
+					{
+						//TODO: camel version should be retrieved from an external source or provided as static version
+						GroupID:    "org.apache.camel",
+						ArtifactID: "camel-bom",
+						Version:    "2.22.1",
+						Type:       "pom",
+						Scope:      "import",
 					},
 				},
 			},
-			Dependencies: maven.Dependencies{
-				Dependencies: make([]maven.Dependency, 0),
-			},
 		},
-		Resources: make(map[string]string),
-		Env:       make(map[string]string),
+		Dependencies: maven.Dependencies{
+			Dependencies: make([]maven.Dependency, 0),
+		},
 	}
 
 	//
 	// set-up dependencies
 	//
 
-	deps := &integration.Project.Dependencies
+	deps := &project.Dependencies
 	deps.AddGAV("org.apache.camel.k", "camel-k-runtime-jvm", version.Version)
 
 	for _, d := range source.Dependencies {
@@ -309,9 +304,9 @@ func generateIntegration(source build.Request) (maven.Integration, error) {
 
 			deps.AddEncodedGAV(gav)
 		} else {
-			return maven.Integration{}, fmt.Errorf("unknown dependency type: %s", d)
+			return maven.Project{}, fmt.Errorf("unknown dependency type: %s", d)
 		}
 	}
 
-	return integration, nil
+	return project, nil
 }
diff --git a/pkg/build/local/local_builder_test.go b/pkg/build/local/local_builder_test.go
index c5fd33d..e6ec79b 100644
--- a/pkg/build/local/local_builder_test.go
+++ b/pkg/build/local/local_builder_test.go
@@ -43,17 +43,17 @@ func TestProjectGeneration(t *testing.T) {
 		},
 	}
 
-	prj, err := generateIntegration(source)
+	prj, err := generateProject(source)
 	assert.Nil(t, err)
 	assert.NotNil(t, prj)
-	assert.Equal(t, len(prj.Project.Dependencies.Dependencies), 5)
-	assert.Equal(t, prj.Project.Dependencies.Dependencies[0].ArtifactID, "camel-k-runtime-jvm")
-	assert.Equal(t, prj.Project.Dependencies.Dependencies[1].ArtifactID, "camel-mail")
-	assert.Equal(t, prj.Project.Dependencies.Dependencies[2].ArtifactID, "camel-netty4")
-	assert.Equal(t, prj.Project.Dependencies.Dependencies[3].ArtifactID, "camel-servicenow")
-	assert.Equal(t, prj.Project.Dependencies.Dependencies[3].Version, "2.21.1")
-	assert.Equal(t, prj.Project.Dependencies.Dependencies[4].ArtifactID, "camel-salesforce")
-	assert.Equal(t, prj.Project.Dependencies.Dependencies[4].Version, "")
+	assert.Equal(t, len(prj.Dependencies.Dependencies), 5)
+	assert.Equal(t, prj.Dependencies.Dependencies[0].ArtifactID, "camel-k-runtime-jvm")
+	assert.Equal(t, prj.Dependencies.Dependencies[1].ArtifactID, "camel-mail")
+	assert.Equal(t, prj.Dependencies.Dependencies[2].ArtifactID, "camel-netty4")
+	assert.Equal(t, prj.Dependencies.Dependencies[3].ArtifactID, "camel-servicenow")
+	assert.Equal(t, prj.Dependencies.Dependencies[3].Version, "2.21.1")
+	assert.Equal(t, prj.Dependencies.Dependencies[4].ArtifactID, "camel-salesforce")
+	assert.Equal(t, prj.Dependencies.Dependencies[4].Version, "")
 }
 
 func TestProjectGenerationWithFailure(t *testing.T) {
@@ -75,6 +75,6 @@ func TestProjectGenerationWithFailure(t *testing.T) {
 		},
 	}
 
-	_, err := generateIntegration(source)
+	_, err := generateProject(source)
 	assert.NotNil(t, err)
 }
diff --git a/pkg/util/maven/maven.go b/pkg/util/maven/maven.go
index c54ebd2..1a919d2 100644
--- a/pkg/util/maven/maven.go
+++ b/pkg/util/maven/maven.go
@@ -39,14 +39,14 @@ const (
 )
 
 // Build takes a project description and returns a binary tar with the built artifacts
-func Build(integration Integration) (string, error) {
+func Build(project Project) (string, error) {
 	buildDir, err := ioutil.TempDir("", buildDirPrefix)
 	if err != nil {
 		return "", errors.Wrap(err, "could not create temporary dir for maven source files")
 	}
 	defer os.RemoveAll(buildDir)
 
-	err = createMavenStructure(buildDir, integration)
+	err = createMavenStructure(buildDir, project)
 	if err != nil {
 		return "", errors.Wrap(err, "could not write maven source files")
 	}
@@ -54,7 +54,7 @@ func Build(integration Integration) (string, error) {
 	if err != nil {
 		return "", err
 	}
-	tarfile, err := createTar(buildDir, integration)
+	tarfile, err := createTar(buildDir, project)
 	if err != nil {
 		return "", err
 	}
@@ -62,23 +62,16 @@ func Build(integration Integration) (string, error) {
 }
 
 func runMavenBuild(buildDir string) error {
-	mavenBuild := exec.Command("mvn", mavenExtraOptions(), "clean", "install", "-DskipTests")
-	mavenBuild.Dir = buildDir
-	mavenBuild.Stdout = os.Stdout
-	mavenBuild.Stderr = os.Stderr
-	logrus.Info("Starting maven build: mvn " + mavenExtraOptions() + " clean install -DskipTests")
-	err := mavenBuild.Run()
-	if err != nil {
-		return errors.Wrap(err, "failure while executing maven build")
-	}
+	copyDepsCmd := exec.Command("mvn", mavenExtraOptions(), "clean", "dependency:copy-dependencies")
+	copyDepsCmd.Dir = buildDir
+	copyDepsCmd.Stdout = os.Stdout
+	copyDepsCmd.Stderr = os.Stderr
 
-	mavenDep := exec.Command("mvn", mavenExtraOptions(), "dependency:copy-dependencies")
-	mavenDep.Dir = buildDir
-	logrus.Info("Copying maven dependencies: mvn " + mavenExtraOptions() + " dependency:copy-dependencies")
-	err = mavenDep.Run()
-	if err != nil {
+	logrus.Infof("Copying maven dependencies: mvn %v", copyDepsCmd.Args)
+	if err := copyDepsCmd.Run(); err != nil {
 		return errors.Wrap(err, "failure while extracting maven dependencies")
 	}
+
 	logrus.Info("Maven build completed successfully")
 	return nil
 }
@@ -90,13 +83,13 @@ func mavenExtraOptions() string {
 	return "-Dcamel.noop=true"
 }
 
-func createTar(buildDir string, integration Integration) (string, error) {
+func createTar(buildDir string, project Project) (string, error) {
 	artifactDir, err := ioutil.TempDir("", artifactDirPrefix)
 	if err != nil {
 		return "", errors.Wrap(err, "could not create temporary dir for maven artifacts")
 	}
 
-	tarFileName := path.Join(artifactDir, integration.Project.ArtifactID+".tar")
+	tarFileName := path.Join(artifactDir, project.ArtifactID+".tar")
 	tarFile, err := os.Create(tarFileName)
 	if err != nil {
 		return "", errors.Wrap(err, "cannot create tar file "+tarFileName)
@@ -104,22 +97,6 @@ func createTar(buildDir string, integration Integration) (string, error) {
 	defer tarFile.Close()
 
 	writer := tar.NewWriter(tarFile)
-	err = appendToTar(path.Join(buildDir, "target", integration.Project.ArtifactID+"-"+integration.Project.Version+".jar"), "", writer)
-	if err != nil {
-		return "", err
-	}
-
-	// Environment variables
-	if integration.Env != nil {
-		err = writeFile(buildDir, "run-env.sh", envFileContent(integration.Env))
-		if err != nil {
-			return "", err
-		}
-		err = appendToTar(path.Join(buildDir, "run-env.sh"), "", writer)
-		if err != nil {
-			return "", err
-		}
-	}
 
 	dependenciesDir := path.Join(buildDir, "target", "dependency")
 	dependencies, err := ioutil.ReadDir(dependenciesDir)
@@ -169,40 +146,20 @@ func appendToTar(filePath string, tarPath string, writer *tar.Writer) error {
 	return nil
 }
 
-func createMavenStructure(buildDir string, project Integration) error {
-	pom, err := GeneratePomFileContent(project.Project)
+func createMavenStructure(buildDir string, project Project) error {
+	pom, err := GeneratePomFileContent(project)
 	if err != nil {
 		return err
 	}
+
 	err = writeFile(buildDir, "pom.xml", pom)
 	if err != nil {
 		return err
 	}
-	err = writeFiles(path.Join(buildDir, "src", "main", "java"), project.JavaSources)
-	if err != nil {
-		return err
-	}
-	err = writeFiles(path.Join(buildDir, "src", "main", "resources"), project.Resources)
-	if err != nil {
-		return err
-	}
 
 	return nil
 }
 
-func writeFiles(buildDir string, files map[string]string) error {
-	if files == nil {
-		return nil
-	}
-	for fileName, fileContent := range files {
-		err := writeFile(buildDir, fileName, fileContent)
-		if err != nil {
-			return err
-		}
-	}
-	return nil
-}
-
 func writeFile(buildDir string, relativePath string, content string) error {
 	filePath := path.Join(buildDir, relativePath)
 	fileDir := path.Dir(filePath)
diff --git a/pkg/util/maven/maven_test.go b/pkg/util/maven/maven_test.go
index 05cff20..d21109c 100644
--- a/pkg/util/maven/maven_test.go
+++ b/pkg/util/maven/maven_test.go
@@ -48,6 +48,36 @@ const expectedPom = `<?xml version="1.0" encoding="UTF-8"?>
       <version>1.0.0</version>
     </dependency>
   </dependencies>
+  <repositories>
+    <repository>
+      <id>central</id>
+      <name></name>
+      <url>https://repo.maven.apache.org/maven2</url>
+      <snapshots>
+        <enabled>false</enabled>
+        <updatePolicy>never</updatePolicy>
+      </snapshots>
+      <releases>
+        <enabled>true</enabled>
+        <updatePolicy>never</updatePolicy>
+      </releases>
+    </repository>
+  </repositories>
+  <pluginRepositories>
+    <pluginRepository>
+      <id>central</id>
+      <name></name>
+      <url>https://repo.maven.apache.org/maven2</url>
+      <snapshots>
+        <enabled>false</enabled>
+        <updatePolicy>never</updatePolicy>
+      </snapshots>
+      <releases>
+        <enabled>true</enabled>
+        <updatePolicy>never</updatePolicy>
+      </releases>
+    </pluginRepository>
+  </pluginRepositories>
 </project>`
 
 func TestPomGeneration(t *testing.T) {
@@ -82,6 +112,38 @@ func TestPomGeneration(t *testing.T) {
 				},
 			},
 		},
+		Repositories: Repositories{
+			Repositories: []Repository{
+				{
+					ID:  "central",
+					URL: "https://repo.maven.apache.org/maven2",
+					Snapshots: Snapshots{
+						Enabled:      false,
+						UpdatePolicy: "never",
+					},
+					Releases: Releases{
+						Enabled:      true,
+						UpdatePolicy: "never",
+					},
+				},
+			},
+		},
+		PluginRepositories: PluginRepositories{
+			Repositories: []Repository{
+				{
+					ID:  "central",
+					URL: "https://repo.maven.apache.org/maven2",
+					Snapshots: Snapshots{
+						Enabled:      false,
+						UpdatePolicy: "never",
+					},
+					Releases: Releases{
+						Enabled:      true,
+						UpdatePolicy: "never",
+					},
+				},
+			},
+		},
 	}
 
 	pom, err := GeneratePomFileContent(project)
diff --git a/pkg/util/maven/types.go b/pkg/util/maven/types.go
index db4b897..0a6e2b8 100644
--- a/pkg/util/maven/types.go
+++ b/pkg/util/maven/types.go
@@ -21,14 +21,6 @@ import (
 	"encoding/xml"
 )
 
-// Integration --
-type Integration struct {
-	Project     Project
-	JavaSources map[string]string
-	Resources   map[string]string
-	Env         map[string]string // TODO: should we deprecate it ? env are set on deployment
-}
-
 // Project represent a maven project
 type Project struct {
 	XMLName              xml.Name
@@ -41,6 +33,8 @@ type Project struct {
 	Version              string               `xml:"version"`
 	DependencyManagement DependencyManagement `xml:"dependencyManagement"`
 	Dependencies         Dependencies         `xml:"dependencies"`
+	Repositories         Repositories         `xml:"repositories"`
+	PluginRepositories   PluginRepositories   `xml:"pluginRepositories"`
 }
 
 // DependencyManagement represent maven's dependency management block
@@ -91,3 +85,34 @@ func NewDependency(groupID string, artifactID string, version string) Dependency
 		Classifier: "",
 	}
 }
+
+// Repositories --
+type Repositories struct {
+	Repositories []Repository `xml:"repository"`
+}
+
+// PluginRepositories --
+type PluginRepositories struct {
+	Repositories []Repository `xml:"pluginRepository"`
+}
+
+// Repository --
+type Repository struct {
+	ID        string    `xml:"id"`
+	Name      string    `xml:"name"`
+	URL       string    `xml:"url"`
+	Snapshots Snapshots `xml:"snapshots"`
+	Releases  Releases  `xml:"releases"`
+}
+
+// Snapshots --
+type Snapshots struct {
+	Enabled      bool   `xml:"enabled"`
+	UpdatePolicy string `xml:"updatePolicy"`
+}
+
+// Releases --
+type Releases struct {
+	Enabled      bool   `xml:"enabled"`
+	UpdatePolicy string `xml:"updatePolicy"`
+}


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services