Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rafactor(*): minor changes #37

Merged
merged 1 commit into from
Sep 3, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
8 changes: 8 additions & 0 deletions .bettercodehub.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
exclude:
- /vendor/.*
- /docs/.*
- /website/.*
component_depth: 1
languages:
- go
- script
2 changes: 2 additions & 0 deletions .codebeatignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
docs/**
website/**
14 changes: 7 additions & 7 deletions .conform.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -70,19 +70,19 @@ pipeline:
stages:
test:
artifacts:
- coverage.txt
- source: /go/src/github.com/autonomy/conform/coverage.txt
destination: coverage.txt
tasks:
- build
- test
build:
tasks:
- build
- binary
- image

tasks:
build:
binary:
template: |
FROM autonomy/golang:1.8.3 as build
FROM autonomy/golang:1.8.3 as binary
WORKDIR $GOPATH/src/github.com/{{ .Repository }}
COPY ./ ./
{{ if and .Git.IsClean .Git.IsTag }}
Expand All @@ -96,13 +96,13 @@ tasks:
template: |
FROM autonomy/golang:1.8.3 as test
WORKDIR $GOPATH/src/github.com/{{ .Repository }}
COPY --from=build $GOPATH/src/github.com/{{ .Repository }} .
COPY ./ ./
RUN test.sh
image:
template: |
FROM alpine:3.6 as image
MAINTAINER Andrew Rynhard <[email protected]>
RUN apk --update add bash \
&& rm -rf /var/cache/apk/*
COPY --from=build /conform /bin
COPY --from=binary /conform /bin
ENTRYPOINT ["conform"]
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
coverage.txt
vendor
2 changes: 0 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ install:
- sudo apt-get update
- sudo apt-get -y install docker-ce
- go get github.com/autonomy/conform
- go get github.com/golang/dep/cmd/dep
- dep ensure

script:
- conform enforce
Expand Down
4 changes: 0 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,9 @@
<p align="center">
<a href="https://gitter.im/autonomy/conform"><img alt="Gitter" src="https://img.shields.io/gitter/room/autonomy/conform.svg?style=flat-square"></a>
<a href="https://godoc.org/github.com/autonomy/conform"><img alt="GoDoc" src="http://img.shields.io/badge/godoc-reference-blue.svg?style=flat-square"></a>
</p>
<p align="center">
<a href="https://travis-ci.org/autonomy/conform"><img alt="Travis" src="https://img.shields.io/travis/autonomy/conform.svg?style=flat-square"></a>
<a href="https://codecov.io/gh/autonomy/conform"><img alt="Codecov" src="https://img.shields.io/codecov/c/github/autonomy/conform.svg?style=flat-square"></a>
<a href="https://goreportcard.com/report/github.com/autonomy/conform"><img alt="Go Report Card" src="https://goreportcard.com/badge/github.com/autonomy/conform?style=flat-square"></a>
</p>
<p align="center">
<a href="https://github.com/autonomy/conform/releases/latest"><img alt="Release" src="https://img.shields.io/github/release/autonomy/conform.svg?style=flat-square"></a>
<a href="https://github.com/autonomy/conform/releases/latest"><img alt="GitHub (pre-)release" src="https://img.shields.io/github/release/autonomy/conform/all.svg?style=flat-square"></a>
</p>
Expand Down
31 changes: 2 additions & 29 deletions cmd/enforce.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,10 @@
package cmd

import (
"context"
"fmt"

"github.com/Masterminds/semver"
"github.com/autonomy/conform/pkg/enforcer"
"github.com/docker/docker/client"
"github.com/autonomy/conform/pkg/utilities"
"github.com/spf13/cobra"
)

Expand All @@ -34,7 +32,7 @@ var enforceCmd = &cobra.Command{

return err
}
if err := checkDockerVersion(); err != nil {
if err := utilities.CheckDockerVersion(); err != nil {
return err
}
e, err := enforcer.New()
Expand All @@ -51,29 +49,4 @@ var enforceCmd = &cobra.Command{

func init() {
RootCmd.AddCommand(enforceCmd)
RootCmd.Flags().BoolVar(&debug, "debug", false, "Debug rendering")
}

func checkDockerVersion() error {
cli, err := client.NewEnvClient()
if err != nil {
return err
}
serverVersion, err := cli.ServerVersion(context.Background())
if err != nil {
return err
}
minVersion, err := semver.NewVersion(minDockerVersion)
if err != nil {
return err
}
serverSemVer := semver.MustParse(serverVersion.Version)
i := serverSemVer.Compare(minVersion)
if i < 0 {
err = fmt.Errorf("At least Docker version %s is required", minDockerVersion)

return err
}

return nil
}
5 changes: 1 addition & 4 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,6 @@ import (

var cfgFile string

const (
minDockerVersion = "17.05.0-ce"
)

var (
debug bool
)
Expand All @@ -52,6 +48,7 @@ func init() {
cobra.OnInitialize(initConfig)

RootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.conform.yaml)")
RootCmd.Flags().BoolVar(&debug, "debug", false, "Debug rendering")
}

// initConfig reads in config file and ENV variables if set.
Expand Down
5 changes: 3 additions & 2 deletions cmd/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import (
"html/template"
"runtime"

"github.com/autonomy/conform/pkg/constants"
"github.com/spf13/cobra"
)

Expand All @@ -32,7 +33,7 @@ var (
Built string
)

const versionTemplate = `Devise:
const versionTemplate = constants.AppName + `:
Tag: {{ .Tag }}
SHA: {{ .SHA }}
Built: {{ .Built }}
Expand Down Expand Up @@ -96,5 +97,5 @@ func PrintLongVersion() {

// PrintShortVersion prints the tag and sha.
func PrintShortVersion() {
fmt.Println(fmt.Sprintf("Devise %s-%s", Tag, SHA))
fmt.Println(fmt.Sprintf("%s %s-%s", constants.AppName, Tag, SHA))
}
8 changes: 8 additions & 0 deletions pkg/constants/constants.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package constants

const (
// AppName is the application name.
AppName = "Conform"
// MinDockerVersion is the minimum required Docker version.
MinDockerVersion = "17.05.0-ce"
)
10 changes: 5 additions & 5 deletions pkg/pipeline/pipeline.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ import (
"fmt"
"os"
"os/exec"
"path"
"strings"

"github.com/autonomy/conform/pkg/metadata"
"github.com/autonomy/conform/pkg/renderer"
"github.com/autonomy/conform/pkg/stage"
"github.com/autonomy/conform/pkg/task"
)
Expand Down Expand Up @@ -43,10 +43,10 @@ func (p *Pipeline) Build(metadata *metadata.Metadata, stages map[string]*stage.S
}

// extract extracts an artifact from a docker image.
func (p *Pipeline) extract(metadata *metadata.Metadata, artifact string) (err error) {
func (p *Pipeline) extract(metadata *metadata.Metadata, artifact *stage.Artifact) (err error) {
argsSlice := [][]string{
{"create", "--name=" + metadata.Git.SHA, metadata.Docker.Image},
{"cp", metadata.Git.SHA + ":" + artifact, path.Base(artifact)},
{"cp", metadata.Git.SHA + ":" + artifact.Source, artifact.Destination},
{"rm", metadata.Git.SHA},
}
for _, args := range argsSlice {
Expand All @@ -70,11 +70,11 @@ func (p *Pipeline) render(metadata *metadata.Metadata, requestedTasks []string,
if _, ok := tasks[task]; !ok {
return "", fmt.Errorf("Task %q is not defined in conform.yaml", task)
}
err := tasks[task].Render(metadata)
rendered, err := renderer.RenderTemplate(tasks[task].Template, metadata)
if err != nil {
return "", err
}
s += tasks[task].Rendered
s += rendered
}

return s, nil
Expand Down
11 changes: 11 additions & 0 deletions pkg/renderer/renderer.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,14 @@ func (r *Renderer) Render(m *metadata.Metadata, s string) (string, error) {

return wr.String(), nil
}

// RenderTemplate renders a template with the provided metadata.
func RenderTemplate(contents string, metadata *metadata.Metadata) (string, error) {
renderer := Renderer{}
rendered, err := renderer.Render(metadata, contents)
if err != nil {
return "", err
}

return rendered, nil
}
15 changes: 2 additions & 13 deletions pkg/script/script.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,11 @@ type Script struct {

// Execute executes the pipeline script.
func (s *Script) Execute(metadata *metadata.Metadata) error {
err := s.Render(metadata)
r, err := renderer.RenderTemplate(s.Template, metadata)
if err != nil {
return err
}
s.Rendered = r
command := exec.Command("bash", "-c", s.Rendered)
command.Stdout = os.Stdout
command.Stderr = os.Stderr
Expand All @@ -35,15 +36,3 @@ func (s *Script) Execute(metadata *metadata.Metadata) error {

return nil
}

// Render renders the script.
func (s *Script) Render(metadata *metadata.Metadata) error {
renderer := renderer.Renderer{}
rendered, err := renderer.Render(metadata, s.Template)
if err != nil {
return err
}
s.Rendered = rendered

return nil
}
10 changes: 8 additions & 2 deletions pkg/stage/stage.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@ package stage

// Stage defines a stage within a pipeline.
type Stage struct {
Artifacts []string `yaml:"artifacts"`
Tasks []string `yaml:"tasks"`
Artifacts []*Artifact `yaml:"artifacts"`
Tasks []string `yaml:"tasks"`
}

// Artifact is a struct that represents an artifact.
type Artifact struct {
Source string `yaml:"source"`
Destination string `yaml:"destination"`
}
17 changes: 0 additions & 17 deletions pkg/task/task.go
Original file line number Diff line number Diff line change
@@ -1,24 +1,7 @@
package task

import (
"github.com/autonomy/conform/pkg/metadata"
"github.com/autonomy/conform/pkg/renderer"
)

// Task defines a stage that can be used within a pipeline.
type Task struct {
Template string `yaml:"template"`
Rendered string
}

// Render renders the stage.
func (s *Task) Render(metadata *metadata.Metadata) error {
renderer := renderer.Renderer{}
rendered, err := renderer.Render(metadata, s.Template)
if err != nil {
return err
}
s.Rendered = rendered

return nil
}
35 changes: 34 additions & 1 deletion pkg/utilities/utilities.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
package utilities

import "fmt"
import (
"context"
"fmt"

"github.com/Masterminds/semver"
"github.com/autonomy/conform/pkg/constants"
"github.com/docker/docker/client"
)

// ImageName formats the image name based on the status of a git repository.
func ImageName(repository, sha string, isClean bool) (image string, err error) {
Expand Down Expand Up @@ -28,3 +35,29 @@ func formatImageNameSHA(repository, sha string) string {
// func formatImageNameLatest(repository string) string {
// return fmt.Sprintf("%s:latest", repository)
// }

// CheckDockerVersion checks the Docker server version and returns an error if
// it is an incompatible version.
func CheckDockerVersion() error {
cli, err := client.NewEnvClient()
if err != nil {
return err
}
serverVersion, err := cli.ServerVersion(context.Background())
if err != nil {
return err
}
minVersion, err := semver.NewVersion(constants.MinDockerVersion)
if err != nil {
return err
}
serverSemVer := semver.MustParse(serverVersion.Version)
i := serverSemVer.Compare(minVersion)
if i < 0 {
err = fmt.Errorf("At least Docker version %s is required", constants.MinDockerVersion)

return err
}

return nil
}
25 changes: 25 additions & 0 deletions vendor/github.com/Masterminds/semver/.travis.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading