Skip to content

Commit

Permalink
Merge pull request #11982 from jim-minter/trello123-pipeline-buildcon…
Browse files Browse the repository at this point in the history
…figs-2

Merged by openshift-bot
  • Loading branch information
OpenShift Bot committed Nov 22, 2016
2 parents 75aa09c + 9c2cb79 commit bdccd7d
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 11 deletions.
23 changes: 12 additions & 11 deletions pkg/generate/app/cmd/resolve.go
Expand Up @@ -517,6 +517,18 @@ func AddMissingComponentsToRefBuilder(
case info == nil:
errs = append(errs, fmt.Errorf("source not detected for repository %q", repo))
continue

case info.Jenkinsfile && (g.Strategy == generate.StrategyUnspecified || g.Strategy == generate.StrategyPipeline):
refs := b.AddComponents([]string{"pipeline"}, func(input *app.ComponentInput) app.ComponentReference {
input.Resolver = pipelineResolver
input.Use(repo)
input.ExpectToBuild = true
repo.UsedBy(input)
repo.SetStrategy(generate.StrategyPipeline)
return input
})
result = append(result, refs...)

case info.Dockerfile != nil && (g.Strategy == generate.StrategyUnspecified || g.Strategy == generate.StrategyDocker):
node := info.Dockerfile.AST()
baseImage := dockerfileutil.LastBaseImage(node)
Expand All @@ -534,17 +546,6 @@ func AddMissingComponentsToRefBuilder(
})
result = append(result, refs...)

case info.Jenkinsfile && (g.Strategy == generate.StrategyUnspecified || g.Strategy == generate.StrategyPipeline):
refs := b.AddComponents([]string{"pipeline"}, func(input *app.ComponentInput) app.ComponentReference {
input.Resolver = pipelineResolver
input.Use(repo)
input.ExpectToBuild = true
repo.UsedBy(input)
repo.SetStrategy(generate.StrategyPipeline)
return input
})
result = append(result, refs...)

default:
// TODO: Add support for searching for more than one language if len(info.Types) > 1
if len(info.Types) == 0 {
Expand Down
73 changes: 73 additions & 0 deletions pkg/generate/app/cmd/resolve_test.go
@@ -0,0 +1,73 @@
package cmd

import (
"testing"

"github.com/openshift/origin/pkg/generate"
"github.com/openshift/origin/pkg/generate/app"
)

// TestResolveJenkinsfileAndDockerfile ensures that if a repo has a Jenkinsfile
// and a Dockerfile, we use the Jenkinsfile.
func TestResolveJenkinsfileAndDockerfile(t *testing.T) {
dockerfile, _ := app.NewDockerfile("FROM centos\n")
i := app.SourceRepositoryInfo{Dockerfile: dockerfile, Jenkinsfile: true}

repo := app.SourceRepository{}
repo.SetInfo(&i)
repositories := app.SourceRepositories{&repo}

resolvers := Resolvers{}
componentrefs, err := AddMissingComponentsToRefBuilder(&app.ReferenceBuilder{}, repositories, resolvers.DockerfileResolver(), resolvers.SourceResolver(), resolvers.PipelineResolver(), &GenerationInputs{})

checkResolveResult(t, componentrefs, err, generate.StrategyPipeline)
}

// TestResolveJenkinsfileAndSource ensures that if a repo has a Jenkinsfile and
// source, we use the Jenkinsfile.
func TestResolveJenkinsfileAndSource(t *testing.T) {
i := app.SourceRepositoryInfo{Jenkinsfile: true, Types: []app.SourceLanguageType{{Platform: "foo"}}}

repo := app.SourceRepository{}
repo.SetInfo(&i)
repositories := app.SourceRepositories{&repo}

resolvers := Resolvers{}
componentrefs, err := AddMissingComponentsToRefBuilder(&app.ReferenceBuilder{}, repositories, resolvers.DockerfileResolver(), resolvers.SourceResolver(), resolvers.PipelineResolver(), &GenerationInputs{})

checkResolveResult(t, componentrefs, err, generate.StrategyPipeline)
}

// TestResolveDockerfileAndSource ensures that if a repo has a Dockerfile and
// source, we use the Dockerfile.
func TestResolveDockerfileAndSource(t *testing.T) {
dockerfile, _ := app.NewDockerfile("FROM centos\n")
i := app.SourceRepositoryInfo{Dockerfile: dockerfile, Types: []app.SourceLanguageType{{Platform: "foo"}}}

repo := app.SourceRepository{}
repo.SetInfo(&i)
repositories := app.SourceRepositories{&repo}

resolvers := Resolvers{}
componentrefs, err := AddMissingComponentsToRefBuilder(&app.ReferenceBuilder{}, repositories, resolvers.DockerfileResolver(), resolvers.SourceResolver(), resolvers.PipelineResolver(), &GenerationInputs{})

checkResolveResult(t, componentrefs, err, generate.StrategyDocker)
}

func checkResolveResult(t *testing.T, componentrefs app.ComponentReferences, err error, strategy generate.Strategy) {
if err != nil {
t.Fatal(err)
}

if len(componentrefs) != 1 {
t.Fatal("expected len(componentrefs) == 1")
}

if componentrefs[0].Input().Uses == nil {
t.Fatal("expected non-nil componentrefs[0].Input().Uses")
}

if componentrefs[0].Input().Uses.GetStrategy() != strategy {
t.Fatalf("expected componentrefs[0].Input().Uses.GetStrategy() == %s", strategy)
}
}

0 comments on commit bdccd7d

Please sign in to comment.