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/11/26 08:34:08 UTC
[GitHub] nicolaferraro closed pull request #238: initial support for custom
maven repositories
nicolaferraro closed pull request #238: initial support for custom maven repositories
URL: https://github.com/apache/camel-k/pull/238
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/pkg/apis/camel/v1alpha1/types.go b/pkg/apis/camel/v1alpha1/types.go
index 691b528..acb2270 100644
--- a/pkg/apis/camel/v1alpha1/types.go
+++ b/pkg/apis/camel/v1alpha1/types.go
@@ -56,6 +56,7 @@ type IntegrationSpec struct {
Profile TraitProfile `json:"profile,omitempty"`
Traits map[string]IntegrationTraitSpec `json:"traits,omitempty"`
Configuration []ConfigurationSpec `json:"configuration,omitempty"`
+ Repositories []string `json:"repositories,omitempty"`
}
// AddSource --
@@ -162,6 +163,7 @@ type IntegrationContextSpec struct {
Profile TraitProfile `json:"profile,omitempty"`
Traits map[string]IntegrationTraitSpec `json:"traits,omitempty"`
Configuration []ConfigurationSpec `json:"configuration,omitempty"`
+ Repositories []string `json:"repositories,omitempty"`
}
// IntegrationContextStatus --
diff --git a/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go
index 4aa466b..9ae3d88 100644
--- a/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go
+++ b/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go
@@ -154,11 +154,23 @@ func (in *IntegrationContextSpec) DeepCopyInto(out *IntegrationContextSpec) {
*out = make([]string, len(*in))
copy(*out, *in)
}
+ if in.Traits != nil {
+ in, out := &in.Traits, &out.Traits
+ *out = make(map[string]IntegrationTraitSpec, len(*in))
+ for key, val := range *in {
+ (*out)[key] = *val.DeepCopy()
+ }
+ }
if in.Configuration != nil {
in, out := &in.Configuration, &out.Configuration
*out = make([]ConfigurationSpec, len(*in))
copy(*out, *in)
}
+ if in.Repositories != nil {
+ in, out := &in.Repositories, &out.Repositories
+ *out = make([]string, len(*in))
+ copy(*out, *in)
+ }
return
}
@@ -337,45 +349,50 @@ func (in *IntegrationPlatformStatus) DeepCopy() *IntegrationPlatformStatus {
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (is *IntegrationSpec) DeepCopyInto(out *IntegrationSpec) {
- *out = *is
- if is.Replicas != nil {
- in, out := &is.Replicas, &out.Replicas
+func (in *IntegrationSpec) DeepCopyInto(out *IntegrationSpec) {
+ *out = *in
+ if in.Replicas != nil {
+ in, out := &in.Replicas, &out.Replicas
*out = new(int32)
**out = **in
}
- if is.Sources != nil {
- in, out := &is.Sources, &out.Sources
+ if in.Sources != nil {
+ in, out := &in.Sources, &out.Sources
*out = make([]SourceSpec, len(*in))
copy(*out, *in)
}
- if is.Dependencies != nil {
- in, out := &is.Dependencies, &out.Dependencies
+ if in.Dependencies != nil {
+ in, out := &in.Dependencies, &out.Dependencies
*out = make([]string, len(*in))
copy(*out, *in)
}
- if is.Traits != nil {
- in, out := &is.Traits, &out.Traits
+ if in.Traits != nil {
+ in, out := &in.Traits, &out.Traits
*out = make(map[string]IntegrationTraitSpec, len(*in))
for key, val := range *in {
(*out)[key] = *val.DeepCopy()
}
}
- if is.Configuration != nil {
- in, out := &is.Configuration, &out.Configuration
+ if in.Configuration != nil {
+ in, out := &in.Configuration, &out.Configuration
*out = make([]ConfigurationSpec, len(*in))
copy(*out, *in)
}
+ if in.Repositories != nil {
+ in, out := &in.Repositories, &out.Repositories
+ *out = make([]string, len(*in))
+ copy(*out, *in)
+ }
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IntegrationSpec.
-func (is *IntegrationSpec) DeepCopy() *IntegrationSpec {
- if is == nil {
+func (in *IntegrationSpec) DeepCopy() *IntegrationSpec {
+ if in == nil {
return nil
}
out := new(IntegrationSpec)
- is.DeepCopyInto(out)
+ in.DeepCopyInto(out)
return out
}
diff --git a/pkg/builder/builder_steps.go b/pkg/builder/builder_steps.go
index b339d1d..b29e81e 100644
--- a/pkg/builder/builder_steps.go
+++ b/pkg/builder/builder_steps.go
@@ -72,6 +72,23 @@ func GenerateProject(ctx *Context) error {
},
}
+ //
+ // Repositories
+ //
+
+ ctx.Project.Repositories = maven.Repositories{
+ Repositories: make([]maven.Repository, 0, len(ctx.Request.Repositories)),
+ }
+
+ for i, r := range ctx.Request.Repositories {
+ repo := maven.NewRepository(r)
+ if repo.ID == "" {
+ repo.ID = fmt.Sprintf("repo-%03d", i)
+ }
+
+ ctx.Project.Repositories.Repositories = append(ctx.Project.Repositories.Repositories, repo)
+ }
+
//
// set-up dependencies
//
diff --git a/pkg/builder/builder_types.go b/pkg/builder/builder_types.go
index 000425f..e23dfc0 100644
--- a/pkg/builder/builder_types.go
+++ b/pkg/builder/builder_types.go
@@ -95,6 +95,7 @@ type Request struct {
Platform v1alpha1.IntegrationPlatformSpec
Code v1alpha1.SourceSpec
Dependencies []string
+ Repositories []string
Steps []Step
BuildDir string
}
diff --git a/pkg/client/cmd/context_create.go b/pkg/client/cmd/context_create.go
index 739fc8d..2b2b2d2 100644
--- a/pkg/client/cmd/context_create.go
+++ b/pkg/client/cmd/context_create.go
@@ -53,6 +53,7 @@ func newContextCreateCmd(rootCmdOptions *RootCmdOptions) *cobra.Command {
cmd.Flags().StringSliceVarP(&impl.properties, "property", "p", nil, "Add a camel property")
cmd.Flags().StringSliceVar(&impl.configmaps, "configmap", nil, "Add a ConfigMap")
cmd.Flags().StringSliceVar(&impl.secrets, "secret", nil, "Add a Secret")
+ cmd.Flags().StringSliceVar(&impl.Repositories, "repository", nil, "Add a maven repository")
// completion support
configureKnownCompletions(&cmd)
@@ -68,6 +69,7 @@ type contextCreateCommand struct {
properties []string
configmaps []string
secrets []string
+ Repositories []string
}
func (command *contextCreateCommand) validateArgs(cmd *cobra.Command, args []string) error {
@@ -97,6 +99,7 @@ func (command *contextCreateCommand) run(cmd *cobra.Command, args []string) erro
ctx.Spec = v1alpha1.IntegrationContextSpec{
Dependencies: make([]string, 0, len(command.dependencies)),
Configuration: make([]v1alpha1.ConfigurationSpec, 0),
+ Repositories: command.Repositories,
}
for _, item := range command.dependencies {
diff --git a/pkg/client/cmd/run.go b/pkg/client/cmd/run.go
index 490adfe..3a1f05c 100644
--- a/pkg/client/cmd/run.go
+++ b/pkg/client/cmd/run.go
@@ -77,6 +77,7 @@ func newCmdRun(rootCmdOptions *RootCmdOptions) *cobra.Command {
cmd.Flags().StringSliceVarP(&options.Properties, "property", "p", nil, "Add a camel property")
cmd.Flags().StringSliceVar(&options.ConfigMaps, "configmap", nil, "Add a ConfigMap")
cmd.Flags().StringSliceVar(&options.Secrets, "secret", nil, "Add a Secret")
+ cmd.Flags().StringSliceVar(&options.Repositories, "repository", nil, "Add a maven repository")
cmd.Flags().BoolVar(&options.Logs, "logs", false, "Print integration logs")
cmd.Flags().BoolVar(&options.Sync, "sync", false, "Synchronize the local source file with the cluster, republishing at each change")
cmd.Flags().BoolVar(&options.Dev, "dev", false, "Enable Dev mode (equivalent to \"-w --logs --sync\")")
@@ -100,6 +101,7 @@ type runCmdOptions struct {
Properties []string
ConfigMaps []string
Secrets []string
+ Repositories []string
Wait bool
Logs bool
Sync bool
@@ -277,6 +279,7 @@ func (o *runCmdOptions) updateIntegrationCode(sources []string) (*v1alpha1.Integ
Dependencies: make([]string, 0, len(o.Dependencies)),
Context: o.IntegrationContext,
Configuration: make([]v1alpha1.ConfigurationSpec, 0),
+ Repositories: o.Repositories,
Profile: v1alpha1.TraitProfileByName(o.Profile),
},
}
diff --git a/pkg/stub/action/context/build.go b/pkg/stub/action/context/build.go
index 2b85770..4734bbc 100644
--- a/pkg/stub/action/context/build.go
+++ b/pkg/stub/action/context/build.go
@@ -64,6 +64,7 @@ func (action *buildAction) Handle(context *v1alpha1.IntegrationContext) error {
r := builder.Request{
Meta: context.ObjectMeta,
Dependencies: context.Spec.Dependencies,
+ Repositories: context.Spec.Repositories,
Steps: env.Steps,
Platform: env.Platform.Spec,
}
diff --git a/pkg/stub/action/integration/build.go b/pkg/stub/action/integration/build.go
index e107642..02387ce 100644
--- a/pkg/stub/action/integration/build.go
+++ b/pkg/stub/action/integration/build.go
@@ -19,6 +19,7 @@ package integration
import (
"fmt"
+
"github.com/sirupsen/logrus"
"github.com/apache/camel-k/pkg/util"
@@ -117,6 +118,7 @@ func (action *buildAction) Handle(integration *v1alpha1.Integration) error {
// Set the context to have the same dependencies as the integrations
platformCtx.Spec = v1alpha1.IntegrationContextSpec{
Dependencies: integration.Spec.Dependencies,
+ Repositories: integration.Spec.Repositories,
}
if err := sdk.Create(&platformCtx); err != nil {
diff --git a/pkg/util/maven/maven_project.go b/pkg/util/maven/maven_project.go
index 2a04968..5c7ec5d 100644
--- a/pkg/util/maven/maven_project.go
+++ b/pkg/util/maven/maven_project.go
@@ -19,6 +19,7 @@ package maven
import (
"encoding/xml"
+ "strings"
)
// Project represent a maven project
@@ -106,22 +107,58 @@ type PluginRepositories struct {
// Repository --
type Repository struct {
ID string `xml:"id"`
- Name string `xml:"name"`
+ Name string `xml:"name,omitempty"`
URL string `xml:"url"`
- Snapshots Snapshots `xml:"snapshots"`
- Releases Releases `xml:"releases"`
+ Snapshots Snapshots `xml:"snapshots,omitempty"`
+ Releases Releases `xml:"releases,omitempty"`
+}
+
+//
+// NewRepository parse the given repo url ang generated the related struct.
+//
+// The repository can be customized by appending @instruction to the repository
+// uri, as example:
+//
+// http://my-nexus:8081/repository/publicc@id=my-repo@snapshots
+//
+// Will enable snapshots and sets the repo it to my-repo
+//
+func NewRepository(repo string) Repository {
+ r := Repository{
+ URL: repo,
+ Releases: Releases{
+ Enabled: true,
+ },
+ Snapshots: Snapshots{
+ Enabled: false,
+ },
+ }
+
+ if idx := strings.Index(repo, "@"); idx != -1 {
+ r.URL = repo[:idx]
+
+ for _, attribute := range strings.Split(repo[idx+1:], "@") {
+ if attribute == "snapshots" {
+ r.Snapshots.Enabled = true
+ } else if strings.HasPrefix(attribute, "id=") {
+ r.ID = attribute[3:]
+ }
+ }
+ }
+
+ return r
}
// Snapshots --
type Snapshots struct {
Enabled bool `xml:"enabled"`
- UpdatePolicy string `xml:"updatePolicy"`
+ UpdatePolicy string `xml:"updatePolicy,omitempty"`
}
// Releases --
type Releases struct {
Enabled bool `xml:"enabled"`
- UpdatePolicy string `xml:"updatePolicy"`
+ UpdatePolicy string `xml:"updatePolicy,omitempty"`
}
// Build --
diff --git a/pkg/util/maven/maven_test.go b/pkg/util/maven/maven_test.go
index e7f5685..59e43cb 100644
--- a/pkg/util/maven/maven_test.go
+++ b/pkg/util/maven/maven_test.go
@@ -51,11 +51,9 @@ const expectedPom = `<?xml version="1.0" encoding="UTF-8"?>
<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>
@@ -66,11 +64,9 @@ const expectedPom = `<?xml version="1.0" encoding="UTF-8"?>
<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>
@@ -118,8 +114,7 @@ func TestPomGeneration(t *testing.T) {
ID: "central",
URL: "https://repo.maven.apache.org/maven2",
Snapshots: Snapshots{
- Enabled: false,
- UpdatePolicy: "never",
+ Enabled: false,
},
Releases: Releases{
Enabled: true,
@@ -134,8 +129,7 @@ func TestPomGeneration(t *testing.T) {
ID: "central",
URL: "https://repo.maven.apache.org/maven2",
Snapshots: Snapshots{
- Enabled: false,
- UpdatePolicy: "never",
+ Enabled: false,
},
Releases: Releases{
Enabled: true,
@@ -151,7 +145,7 @@ func TestPomGeneration(t *testing.T) {
assert.Nil(t, err)
assert.NotNil(t, pom)
- assert.Equal(t, pom, expectedPom)
+ assert.Equal(t, expectedPom, pom)
}
func TestParseSimpleGAV(t *testing.T) {
@@ -186,3 +180,35 @@ func TestParseGAVWithClassifierAndType(t *testing.T) {
assert.Equal(t, dep.Type, "war")
assert.Equal(t, dep.Classifier, "test")
}
+
+func TestNewRepository(t *testing.T) {
+ r := NewRepository("http://nexus/public")
+ 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)
+}
+
+func TestNewRepositoryWithSnapshots(t *testing.T) {
+ r := NewRepository("http://nexus/public@snapshots")
+ assert.Equal(t, "", r.ID)
+ assert.Equal(t, "http://nexus/public", r.URL)
+ assert.True(t, r.Releases.Enabled)
+ assert.True(t, r.Snapshots.Enabled)
+}
+
+func TestNewRepositoryWithSnapshotsAndID(t *testing.T) {
+ r := NewRepository("http://nexus/public@snapshots@id=test")
+ assert.Equal(t, "test", r.ID)
+ assert.Equal(t, "http://nexus/public", r.URL)
+ assert.True(t, r.Releases.Enabled)
+ assert.True(t, r.Snapshots.Enabled)
+}
+
+func TestNewRepositoryWithID(t *testing.T) {
+ r := NewRepository("http://nexus/public@id=test")
+ assert.Equal(t, "test", r.ID)
+ assert.Equal(t, "http://nexus/public", r.URL)
+ assert.True(t, r.Releases.Enabled)
+ assert.False(t, r.Snapshots.Enabled)
+}
----------------------------------------------------------------
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