This is an automated email from the ASF dual-hosted git repository. nferraro pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit fc751759a8cb1bb0acf21dc0c1c9fda6826ec22a Author: lburgazzoli <lburgazz...@gmail.com> AuthorDate: Wed Sep 19 18:02:20 2018 +0200 maven: remove build step, set updatePolicy --- Gopkg.lock | 1 - pkg/build/build_types.go | 9 +++-- pkg/build/local/local_builder.go | 61 ++++++++++++++--------------- pkg/build/local/local_builder_test.go | 20 +++++----- pkg/util/maven/maven.go | 73 +++++++---------------------------- pkg/util/maven/maven_test.go | 62 +++++++++++++++++++++++++++++ pkg/util/maven/types.go | 41 ++++++++++++++++---- 7 files changed, 153 insertions(+), 114 deletions(-) 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"` +}