camel-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From nferr...@apache.org
Subject [camel-k] branch master updated: chore: refactor pkg/build to a more idiomatic structure
Date Wed, 19 Sep 2018 09:27:29 GMT
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


The following commit(s) were added to refs/heads/master by this push:
     new 97b5a9e  chore: refactor pkg/build to a more idiomatic structure
97b5a9e is described below

commit 97b5a9e3566bb9c30743955fe93edd20c0fc7f06
Author: lburgazzoli <lburgazzoli@gmail.com>
AuthorDate: Wed Sep 19 11:02:26 2018 +0200

    chore: refactor pkg/build to a more idiomatic structure
---
 pkg/build/build_manager.go                 | 43 ++++++++++++++++------------
 pkg/build/{api/types.go => build_types.go} | 46 ++++++++++++++++++------------
 pkg/build/local/local_builder.go           | 35 ++++++++++++-----------
 pkg/build/local/local_builder_test.go      | 14 ++++-----
 pkg/stub/action/context/build.go           | 19 ++++++------
 5 files changed, 89 insertions(+), 68 deletions(-)

diff --git a/pkg/build/build_manager.go b/pkg/build/build_manager.go
index 49f04f1..325e995 100644
--- a/pkg/build/build_manager.go
+++ b/pkg/build/build_manager.go
@@ -20,32 +20,37 @@ package build
 import (
 	"context"
 	"sync"
-
-	"github.com/apache/camel-k/pkg/build/api"
-	"github.com/apache/camel-k/pkg/build/local"
 )
 
-// main facade to the image build system
+// Manager represent the main facade to the image build system
 type Manager struct {
-	builds  sync.Map
-	builder api.Builder
+	builds    sync.Map
+	ctx       context.Context
+	namespace string
+	builder   Builder
 }
 
-func NewManager(ctx context.Context, namespace string) *Manager {
+// NewManager creates an instance of the build manager using the given builder
+func NewManager(ctx context.Context, namespace string, builder Builder) *Manager {
 	return &Manager{
-		builder: local.NewLocalBuilder(ctx, namespace),
+		ctx:       ctx,
+		namespace: namespace,
+		builder:   builder,
 	}
 }
 
-func (m *Manager) Get(identifier api.BuildIdentifier) api.BuildResult {
-	if info, present := m.builds.Load(identifier); !present || info == nil {
+// Get retrieve the build result associated to the given build identifier
+func (m *Manager) Get(identifier Identifier) Result {
+	info, present := m.builds.Load(identifier)
+	if !present || info == nil {
 		return noBuildInfo()
-	} else {
-		return *info.(*api.BuildResult)
 	}
+
+	return *info.(*Result)
 }
 
-func (m *Manager) Start(source api.BuildSource) {
+// Start starts a new build
+func (m *Manager) Start(source Request) {
 	initialBuildInfo := initialBuildInfo(&source)
 	m.builds.Store(source.Identifier, &initialBuildInfo)
 
@@ -56,15 +61,15 @@ func (m *Manager) Start(source api.BuildSource) {
 	}()
 }
 
-func noBuildInfo() api.BuildResult {
-	return api.BuildResult{
-		Status: api.BuildStatusNotRequested,
+func noBuildInfo() Result {
+	return Result{
+		Status: StatusNotRequested,
 	}
 }
 
-func initialBuildInfo(source *api.BuildSource) api.BuildResult {
-	return api.BuildResult{
+func initialBuildInfo(source *Request) Result {
+	return Result{
 		Source: source,
-		Status: api.BuildStatusStarted,
+		Status: StatusStarted,
 	}
 }
diff --git a/pkg/build/api/types.go b/pkg/build/build_types.go
similarity index 60%
rename from pkg/build/api/types.go
rename to pkg/build/build_types.go
index b6c178e..da1ffed 100644
--- a/pkg/build/api/types.go
+++ b/pkg/build/build_types.go
@@ -15,44 +15,54 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
-package api
+package build
 
-// a request to build a specific code
-type BuildSource struct {
-	Identifier   BuildIdentifier
-	Code         Code
+// Request represent a request to build a specific code
+type Request struct {
+	Identifier   Identifier
+	Code         Source
 	Dependencies []string
 }
 
-type BuildIdentifier struct {
+// Identifier identifies a build
+type Identifier struct {
 	Name      string
 	Qualifier string
 }
 
-type Code struct {
+// Source represent the integration code
+type Source struct {
 	Name     string
 	Content  string
 	Language string
 }
 
-// represents the result of a build
-type BuildResult struct {
-	Source *BuildSource
-	Status BuildStatus
+// Result represents the result of a build
+type Result struct {
+	Source *Request
+	Status Status
 	Image  string
 	Error  error
 }
 
-// supertype of all builders
+// Builder is supertype of all builders
 type Builder interface {
-	Build(BuildSource) <-chan BuildResult
+	Build(Request) <-chan Result
 }
 
-type BuildStatus int
+// Status --
+type Status int
 
 const (
-	BuildStatusNotRequested BuildStatus = iota
-	BuildStatusStarted
-	BuildStatusCompleted
-	BuildStatusError
+	// StatusNotRequested --
+	StatusNotRequested Status = iota
+
+	// StatusStarted --
+	StatusStarted
+
+	// StatusCompleted --
+	StatusCompleted
+
+	// StatusError --
+	StatusError
 )
diff --git a/pkg/build/local/local_builder.go b/pkg/build/local/local_builder.go
index 127657d..0274c12 100644
--- a/pkg/build/local/local_builder.go
+++ b/pkg/build/local/local_builder.go
@@ -35,10 +35,12 @@ import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 
-	build "github.com/apache/camel-k/pkg/build/api"
+	"github.com/apache/camel-k/pkg/build"
 	"github.com/apache/camel-k/pkg/util/kubernetes"
 	"github.com/apache/camel-k/pkg/util/kubernetes/customclient"
 	"github.com/apache/camel-k/pkg/util/maven"
+
+	// import openshift utilities
 	_ "github.com/apache/camel-k/pkg/util/openshift"
 	"github.com/apache/camel-k/version"
 )
@@ -49,10 +51,11 @@ type localBuilder struct {
 }
 
 type buildOperation struct {
-	source build.BuildSource
-	output chan build.BuildResult
+	source build.Request
+	output chan build.Result
 }
 
+// NewLocalBuilder create a new builder
 func NewLocalBuilder(ctx context.Context, namespace string) build.Builder {
 	builder := localBuilder{
 		buffer:    make(chan buildOperation, 100),
@@ -62,8 +65,8 @@ func NewLocalBuilder(ctx context.Context, namespace string) build.Builder
{
 	return &builder
 }
 
-func (b *localBuilder) Build(source build.BuildSource) <-chan build.BuildResult {
-	res := make(chan build.BuildResult, 1)
+func (b *localBuilder) Build(source build.Request) <-chan build.Result {
+	res := make(chan build.Result, 1)
 	op := buildOperation{
 		source: source,
 		output: res,
@@ -90,15 +93,15 @@ func (b *localBuilder) buildCycle(ctx context.Context) {
 			}
 
 			if err != nil {
-				op.output <- build.BuildResult{
+				op.output <- build.Result{
 					Source: &op.source,
-					Status: build.BuildStatusError,
+					Status: build.StatusError,
 					Error:  err,
 				}
 			} else {
-				op.output <- build.BuildResult{
+				op.output <- build.Result{
 					Source: &op.source,
-					Status: build.BuildStatusCompleted,
+					Status: build.StatusCompleted,
 					Image:  image,
 				}
 			}
@@ -107,7 +110,7 @@ func (b *localBuilder) buildCycle(ctx context.Context) {
 	}
 }
 
-func (b *localBuilder) execute(source build.BuildSource) (string, error) {
+func (b *localBuilder) execute(source build.Request) (string, error) {
 	project, err := generateProjectDefinition(source)
 	if err != nil {
 		return "", err
@@ -127,7 +130,7 @@ func (b *localBuilder) execute(source build.BuildSource) (string, error)
{
 	return image, nil
 }
 
-func (b *localBuilder) publish(tarFile string, source build.BuildSource) (string, error)
{
+func (b *localBuilder) publish(tarFile string, source build.Request) (string, error) {
 
 	bc := buildv1.BuildConfig{
 		TypeMeta: metav1.TypeMeta{
@@ -251,7 +254,7 @@ func (b *localBuilder) publish(tarFile string, source build.BuildSource)
(string
 	return is.Status.DockerImageRepository + ":" + source.Identifier.Qualifier, nil
 }
 
-func generateProjectDefinition(source build.BuildSource) (maven.ProjectDefinition, error)
{
+func generateProjectDefinition(source build.Request) (maven.ProjectDefinition, error) {
 	project := maven.ProjectDefinition{
 		Project: maven.Project{
 			XMLName:           xml.Name{Local: "project"},
@@ -293,13 +296,13 @@ func generateProjectDefinition(source build.BuildSource) (maven.ProjectDefinitio
 
 	for _, d := range source.Dependencies {
 		if strings.HasPrefix(d, "camel:") {
-			artifactId := strings.TrimPrefix(d, "camel:")
+			artifactID := strings.TrimPrefix(d, "camel:")
 
-			if !strings.HasPrefix(artifactId, "camel-") {
-				artifactId = "camel-" + artifactId
+			if !strings.HasPrefix(artifactID, "camel-") {
+				artifactID = "camel-" + artifactID
 			}
 
-			deps.AddGAV("org.apache.camel", artifactId, "")
+			deps.AddGAV("org.apache.camel", artifactID, "")
 		} else if strings.HasPrefix(d, "mvn:") {
 			mid := strings.TrimPrefix(d, "mvn:")
 			gav := strings.Replace(mid, "/", ":", -1)
diff --git a/pkg/build/local/local_builder_test.go b/pkg/build/local/local_builder_test.go
index b88567e..790c124 100644
--- a/pkg/build/local/local_builder_test.go
+++ b/pkg/build/local/local_builder_test.go
@@ -20,17 +20,17 @@ package local
 import (
 	"testing"
 
-	"github.com/apache/camel-k/pkg/build/api"
+	"github.com/apache/camel-k/pkg/build"
 	"github.com/stretchr/testify/assert"
 )
 
 func TestProjectGeneration(t *testing.T) {
-	source := api.BuildSource{
-		Identifier: api.BuildIdentifier{
+	source := build.Request{
+		Identifier: build.Identifier{
 			Name:      "my-integration",
 			Qualifier: "",
 		},
-		Code: api.Code{
+		Code: build.Source{
 			Name:     "my-code.js",
 			Content:  `from("timer:start").to("log:end")`,
 			Language: "",
@@ -57,12 +57,12 @@ func TestProjectGeneration(t *testing.T) {
 }
 
 func TestProjectGenerationWithFailure(t *testing.T) {
-	source := api.BuildSource{
-		Identifier: api.BuildIdentifier{
+	source := build.Request{
+		Identifier: build.Identifier{
 			Name:      "my-integration",
 			Qualifier: "",
 		},
-		Code: api.Code{
+		Code: build.Source{
 			Name:     "my-code.js",
 			Content:  `from("timer:start").to("log:end")`,
 			Language: "",
diff --git a/pkg/stub/action/context/build.go b/pkg/stub/action/context/build.go
index 249cf71..e8d26e4 100644
--- a/pkg/stub/action/context/build.go
+++ b/pkg/stub/action/context/build.go
@@ -19,21 +19,24 @@ package action
 
 import (
 	"context"
+
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 
 	"github.com/operator-framework/operator-sdk/pkg/sdk"
 	"github.com/sirupsen/logrus"
 
-	"github.com/apache/camel-k/pkg/build/api"
-
 	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
 	"github.com/apache/camel-k/pkg/build"
+	"github.com/apache/camel-k/pkg/build/local"
 )
 
 // NewIntegrationContextBuildAction creates a new build handling action for the context
 func NewIntegrationContextBuildAction(ctx context.Context, namespace string) IntegrationContextAction
{
+	builder := local.NewLocalBuilder(ctx, namespace)
+	manager := build.NewManager(ctx, namespace, builder)
+
 	return &integrationContextBuildAction{
-		buildManager: build.NewManager(ctx, namespace),
+		buildManager: manager,
 	}
 }
 
@@ -50,23 +53,23 @@ func (action *integrationContextBuildAction) CanHandle(context *v1alpha1.Integra
 }
 
 func (action *integrationContextBuildAction) Handle(context *v1alpha1.IntegrationContext)
error {
-	buildIdentifier := api.BuildIdentifier{
+	buildIdentifier := build.Identifier{
 		Name:      "context-" + context.Name,
 		Qualifier: context.ResourceVersion,
 	}
 
 	buildResult := action.buildManager.Get(buildIdentifier)
-	if buildResult.Status == api.BuildStatusNotRequested {
-		action.buildManager.Start(api.BuildSource{
+	if buildResult.Status == build.StatusNotRequested {
+		action.buildManager.Start(build.Request{
 			Identifier:   buildIdentifier,
 			Dependencies: context.Spec.Dependencies,
 		})
 		logrus.Info("Build started")
-	} else if buildResult.Status == api.BuildStatusError {
+	} else if buildResult.Status == build.StatusError {
 		target := context.DeepCopy()
 		target.Status.Phase = v1alpha1.IntegrationContextPhaseError
 		return sdk.Update(target)
-	} else if buildResult.Status == api.BuildStatusCompleted {
+	} else if buildResult.Status == build.StatusCompleted {
 		target := context.DeepCopy()
 		target.Status.Image = buildResult.Image
 		target.Status.Phase = v1alpha1.IntegrationContextPhaseReady


Mime
View raw message