grim/convey

Bump the version
v0.14.0-alpha4
2018-02-20, Gary Kramlich
89afa53fab1b
Bump the version
// Convey
// Copyright 2016-2018 Gary Kramlich <grim@reaperworld.com>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package bitbucket
import (
"github.com/aphistic/sweet"
. "github.com/onsi/gomega"
"bitbucket.org/rw_grim/convey/config"
"bitbucket.org/rw_grim/convey/docker"
"bitbucket.org/rw_grim/convey/plans"
"bitbucket.org/rw_grim/convey/stages"
"bitbucket.org/rw_grim/convey/tasks"
)
func (b *bitbucketSuite) TestLoaderSimple(t sweet.T) {
l := Loader{}
data := t.Sweet().LoadFile("data/simple.yml")
cfg, err := l.Load("", "", data, []string{}, true)
Expect(err).To(BeNil())
expected := &config.Config{
Tasks: map[string]tasks.Task{
"import": &docker.Import{
Files: []string{"."},
},
"default-0": &docker.Run{
Image: "python:3",
WorkDir: "/workspace",
Script: []string{
"set -ex",
"find . -type f -iname \"*.pyc\" -exec rm -f {} \\; || true",
"find . -type d -iname __pycache__ -exec rm -rf {} \\; || true",
"pip install -r dev-requirements.txt",
"flake8",
"PYTHONPATH=$(pwd) py.test --color=auto --cov=pipelines --cov-report=term-missing tests",
},
Shell: "/bin/sh",
},
},
Plans: map[string]plans.Plan{
"default": {
Stages: []stages.Stage{
{
Name: "stage-0",
Enabled: true,
Concurrent: false,
Run: "on-success",
Environment: nil,
Tasks: []string{"import", "default-0"},
},
},
},
},
}
Expect(cfg).To(Equal(expected))
}
func (b *bitbucketSuite) TestLoaderComplexGlobalImage(t sweet.T) {
l := Loader{}
data := t.Sweet().LoadFile("data/complex-global-image.yml")
cfg, err := l.Load("", "", data, []string{}, true)
Expect(err).To(BeNil())
expected := &config.Config{
Tasks: map[string]tasks.Task{
"import": &docker.Import{
Files: []string{"."},
},
"default-0": &docker.Run{
Image: "python:3",
WorkDir: "/workspace",
Script: []string{
"set -ex",
"find . -type f -iname \"*.pyc\" -exec rm -f {} \\; || true",
"find . -type d -iname __pycache__ -exec rm -rf {} \\; || true",
"pip install -r dev-requirements.txt",
"flake8",
"PYTHONPATH=$(pwd) py.test --color=auto --cov=pipelines --cov-report=term-missing tests",
},
Shell: "/bin/sh",
},
},
Plans: map[string]plans.Plan{
"default": {
Stages: []stages.Stage{
{
Name: "stage-0",
Enabled: true,
Concurrent: false,
Run: "on-success",
Environment: nil,
Tasks: []string{"import", "default-0"},
},
},
},
},
}
Expect(cfg).To(Equal(expected))
}
func (b *bitbucketSuite) TestLoaderComplexGlobalImageWithLogin(t sweet.T) {
l := Loader{}
data := t.Sweet().LoadFile("data/complex-global-image-with-login.yml")
cfg, err := l.Load("", "", data, []string{}, true)
Expect(err).To(BeNil())
expected := &config.Config{
Tasks: map[string]tasks.Task{
"import": &docker.Import{
Files: []string{"."},
},
"login": &docker.Login{
Username: "foo",
Password: "bar",
Server: "registry.docker.io",
},
"default-0": &docker.Run{
Image: "registry.docker.io/python:3",
WorkDir: "/workspace",
Script: []string{
"set -ex",
"find . -type f -iname \"*.pyc\" -exec rm -f {} \\; || true",
"find . -type d -iname __pycache__ -exec rm -rf {} \\; || true",
"pip install -r dev-requirements.txt",
"flake8",
"PYTHONPATH=$(pwd) py.test --color=auto --cov=pipelines --cov-report=term-missing tests",
},
Shell: "/bin/sh",
},
"logout": &docker.Logout{
Server: "registry.docker.io",
},
},
Plans: map[string]plans.Plan{
"default": {
Stages: []stages.Stage{
{
Name: "stage-0",
Enabled: true,
Run: "on-success",
Concurrent: false,
Environment: nil,
Tasks: []string{"import", "login", "default-0", "logout"},
},
},
},
},
}
Expect(cfg).To(Equal(expected))
}
func (b *bitbucketSuite) TestLoaderComplexStepSimpleImage(t sweet.T) {
l := Loader{}
data := t.Sweet().LoadFile("data/complex-step-simple-image.yml")
cfg, err := l.Load("", "", data, []string{}, true)
Expect(err).To(BeNil())
expected := &config.Config{
Tasks: map[string]tasks.Task{
"import": &docker.Import{
Files: []string{"."},
},
"default-0": &docker.Run{
Image: "python:3",
WorkDir: "/workspace",
Script: []string{
"set -ex",
"find . -type f -iname \"*.pyc\" -exec rm -f {} \\; || true",
"find . -type d -iname __pycache__ -exec rm -rf {} \\; || true",
"pip install -r dev-requirements.txt",
"flake8",
"PYTHONPATH=$(pwd) py.test --color=auto --cov=pipelines --cov-report=term-missing tests",
},
Shell: "/bin/sh",
},
},
Plans: map[string]plans.Plan{
"default": {
Stages: []stages.Stage{
{
Name: "stage-0",
Enabled: true,
Concurrent: false,
Run: "on-success",
Environment: nil,
Tasks: []string{"import", "default-0"},
},
},
},
},
}
Expect(cfg).To(Equal(expected))
}
func (b *bitbucketSuite) TestLoaderComplexStepImage(t sweet.T) {
l := Loader{}
data := t.Sweet().LoadFile("data/complex-step-image.yml")
cfg, err := l.Load("", "", data, []string{}, true)
Expect(err).To(BeNil())
expected := &config.Config{
Tasks: map[string]tasks.Task{
"import": &docker.Import{
Files: []string{"."},
},
"default-0": &docker.Run{
Image: "python:3",
WorkDir: "/workspace",
Script: []string{
"set -ex",
"find . -type f -iname \"*.pyc\" -exec rm -f {} \\; || true",
"find . -type d -iname __pycache__ -exec rm -rf {} \\; || true",
"pip install -r dev-requirements.txt",
"flake8",
"PYTHONPATH=$(pwd) py.test --color=auto --cov=pipelines --cov-report=term-missing tests",
},
Shell: "/bin/sh",
},
},
Plans: map[string]plans.Plan{
"default": {
Stages: []stages.Stage{
{
Name: "stage-0",
Enabled: true,
Concurrent: false,
Run: "on-success",
Environment: nil,
Tasks: []string{"import", "default-0"},
},
},
},
},
}
Expect(cfg).To(Equal(expected))
}
func (b *bitbucketSuite) TestLoaderComplexStepImageWithLogin(t sweet.T) {
l := Loader{}
data := t.Sweet().LoadFile("data/complex-step-image-with-login.yml")
cfg, err := l.Load("", "", data, []string{}, true)
Expect(err).To(BeNil())
expected := &config.Config{
Tasks: map[string]tasks.Task{
"import": &docker.Import{
Files: []string{"."},
},
"default-0-login": &docker.Login{
Username: "user",
Password: "pass",
Server: "registry.docker.io",
},
"default-0": &docker.Run{
Image: "registry.docker.io/python:3",
WorkDir: "/workspace",
Script: []string{
"set -ex",
"find . -type f -iname \"*.pyc\" -exec rm -f {} \\; || true",
"find . -type d -iname __pycache__ -exec rm -rf {} \\; || true",
"pip install -r dev-requirements.txt",
"flake8",
"PYTHONPATH=$(pwd) py.test --color=auto --cov=pipelines --cov-report=term-missing tests",
},
Shell: "/bin/sh",
},
"default-0-logout": &docker.Logout{
Server: "registry.docker.io",
},
},
Plans: map[string]plans.Plan{
"default": {
Stages: []stages.Stage{
{
Name: "stage-0",
Enabled: true,
Concurrent: false,
Run: "on-success",
Environment: nil,
Tasks: []string{"import", "default-0-login", "default-0", "default-0-logout"},
},
},
},
},
}
Expect(cfg).To(Equal(expected))
}
func (b *bitbucketSuite) TestLoaderBranchNoImage(t sweet.T) {
l := Loader{}
data := t.Sweet().LoadFile("data/branch-no-image.yml")
cfg, err := l.Load("", "", data, []string{}, true)
Expect(err).To(BeNil())
err = cfg.Valid()
Expect(err).To(Not(BeNil()))
}
func (b *bitbucketSuite) TestLoaderBranchImage(t sweet.T) {
l := Loader{}
data := t.Sweet().LoadFile("data/branch-image.yml")
cfg, err := l.Load("", "", data, []string{}, true)
Expect(err).To(BeNil())
expected := &config.Config{
Tasks: map[string]tasks.Task{
"import": &docker.Import{
Files: []string{"."},
},
"branch-develop-0": &docker.Run{
Image: "library/alpine",
WorkDir: "/workspace",
Script: []string{
"true",
},
Shell: "/bin/sh",
},
},
Plans: map[string]plans.Plan{
"branch-develop": {
Stages: []stages.Stage{
{
Name: "stage-0",
Enabled: true,
Concurrent: false,
Run: "on-success",
Environment: nil,
Tasks: []string{"import", "branch-develop-0"},
},
},
},
},
}
Expect(cfg).To(Equal(expected))
}
func (b *bitbucketSuite) TestLoaderDockerMixed(t sweet.T) {
l := Loader{}
data := t.Sweet().LoadFile("data/docker-mixed.yml")
cfg, err := l.Load("", "", data, []string{}, true)
Expect(err).To(BeNil())
expected := &config.Config{
Tasks: map[string]tasks.Task{
"import": &docker.Import{
Files: []string{"."},
},
"default-0": &docker.Run{
Image: "gliderlabs/alpine:edge",
Script: []string{"hostname"},
WorkDir: "/workspace",
Shell: "/bin/sh",
},
"default-1": &docker.Login{
Username: "$DOCKER_USERNAME",
Password: "$DOCKER_PASSWORD",
},
"default-2": &docker.Run{
Image: "gliderlabs/alpine:edge",
Script: []string{"date +%s"},
WorkDir: "/workspace",
Shell: "/bin/sh",
},
"default-3": &docker.Build{
Files: []string{"."},
Tag: "atlassian/my-app:$BITBUCKET_COMMIT",
},
"default-4": &docker.Push{
Image: "atlassian/my-app:$BITBUCKET_COMMIT",
},
"default-5": &docker.Run{
Image: "gliderlabs/alpine:edge",
Script: []string{"date +%s"},
WorkDir: "/workspace",
Shell: "/bin/sh",
},
},
Plans: map[string]plans.Plan{
"default": {
Stages: []stages.Stage{
{
Name: "stage-0",
Enabled: true,
Concurrent: false,
Run: "on-success",
Environment: nil,
Tasks: []string{
"import",
"default-0",
"default-1",
"default-2",
"default-3",
"default-4",
"default-5",
},
},
},
},
},
}
Expect(cfg).To(Equal(expected))
}
func (b *bitbucketSuite) TestLoaderDockerSimple(t sweet.T) {
l := Loader{}
data := t.Sweet().LoadFile("data/docker-simple.yml")
cfg, err := l.Load("", "", data, []string{}, true)
Expect(err).To(BeNil())
expected := &config.Config{
Tasks: map[string]tasks.Task{
"import": &docker.Import{
Files: []string{"."},
},
"default-0": &docker.Login{
Username: "$DOCKER_USERNAME",
Password: "$DOCKER_PASSWORD",
},
"default-1": &docker.Build{
Files: []string{"."},
Tag: "atlassian/my-app:$BITBUCKET_COMMIT",
},
"default-2": &docker.Push{
Image: "atlassian/my-app:$BITBUCKET_COMMIT",
},
},
Plans: map[string]plans.Plan{
"default": {
Stages: []stages.Stage{
{
Name: "stage-0",
Enabled: true,
Concurrent: false,
Run: "on-success",
Environment: nil,
Tasks: []string{
"import",
"default-0",
"default-1",
"default-2",
},
},
},
},
},
}
Expect(cfg).To(Equal(expected))
}