Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
881dcb153e
24 changed files with 294 additions and 104 deletions
14
Makefile
14
Makefile
|
@ -1,14 +1,16 @@
|
|||
SHA := $(shell git rev-parse --short HEAD)
|
||||
VERSION := $(shell cat VERSION)
|
||||
ITTERATION := $(shell date +%s)
|
||||
|
||||
all: build
|
||||
|
||||
deps:
|
||||
# which npm && npm -g install uglify-js less autoprefixer
|
||||
go get github.com/GeertJohan/go.rice/rice
|
||||
go get github.com/franela/goblin
|
||||
go get -t -v ./...
|
||||
|
||||
test:
|
||||
@test -z "$(shell find . -name '*.go' | xargs gofmt -l)" || (echo "Need to run 'go fmt ./...'"; exit 1)
|
||||
go vet ./...
|
||||
go test -cover -short ./...
|
||||
|
||||
|
@ -23,8 +25,8 @@ test_postgres:
|
|||
build:
|
||||
mkdir -p packaging/output
|
||||
mkdir -p packaging/root/usr/local/bin
|
||||
go build -o packaging/root/usr/local/bin/drone -ldflags "-X main.revision $(SHA)" github.com/drone/drone/cli
|
||||
go build -o packaging/root/usr/local/bin/droned -ldflags "-X main.revision $(SHA)" github.com/drone/drone/server
|
||||
go build -o packaging/root/usr/local/bin/drone -ldflags "-X main.revision $(SHA) -X main.version $(VERSION)" github.com/drone/drone/cli
|
||||
go build -o packaging/root/usr/local/bin/droned -ldflags "-X main.revision $(SHA) -X main.version $(VERSION)" github.com/drone/drone/server
|
||||
|
||||
install:
|
||||
install -t /usr/local/bin packaging/root/usr/local/bin/drone
|
||||
|
@ -52,9 +54,10 @@ embed:
|
|||
# creates a debian package for drone to install
|
||||
# `sudo dpkg -i drone.deb`
|
||||
deb:
|
||||
fpm -s dir -t deb -n drone -v 0.3 -p packaging/output/drone.deb \
|
||||
fpm -s dir -t deb -n drone -v $(VERSION) -p packaging/output/drone.deb \
|
||||
--deb-priority optional --category admin \
|
||||
--force \
|
||||
--iteration $(ITTERATION) \
|
||||
--deb-compression bzip2 \
|
||||
--after-install packaging/scripts/postinst.deb \
|
||||
--before-remove packaging/scripts/prerm.deb \
|
||||
|
@ -68,9 +71,10 @@ deb:
|
|||
packaging/root/=/
|
||||
|
||||
rpm:
|
||||
fpm -s dir -t rpm -n drone -v 0.3 -p packaging/output/drone.rpm \
|
||||
fpm -s dir -t rpm -n drone -v $(VERSION) -p packaging/output/drone.rpm \
|
||||
--rpm-compression bzip2 --rpm-os linux \
|
||||
--force \
|
||||
--iteration $(ITTERATION) \
|
||||
--after-install packaging/scripts/postinst.rpm \
|
||||
--before-remove packaging/scripts/prerm.rpm \
|
||||
--after-remove packaging/scripts/postrm.rpm \
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[![Build Status](http://test.drone.io/api/badge/github.com/drone/drone/status.svg)](http://test.drone.io/github.com/drone/drone)
|
||||
[![GoDoc](https://godoc.org/github.com/drone/drone?status.png)](https://godoc.org/github.com/drone/drone)
|
||||
[![Build Status](http://test.drone.io/api/badge/github.com/drone/drone/status.svg?style=flat)](http://test.drone.io/github.com/drone/drone)
|
||||
[![GoDoc](https://godoc.org/github.com/drone/drone?status.svg)](https://godoc.org/github.com/drone/drone)
|
||||
[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/drone/drone?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
|
||||
## Documentation
|
||||
|
@ -116,6 +116,10 @@ secret=""
|
|||
url=""
|
||||
skip_verify=false
|
||||
|
||||
[gogs]
|
||||
url=""
|
||||
secret=""
|
||||
|
||||
[smtp]
|
||||
host=""
|
||||
port=""
|
||||
|
|
1
VERSION
Normal file
1
VERSION
Normal file
|
@ -0,0 +1 @@
|
|||
0.3.0-alpha
|
|
@ -7,7 +7,7 @@ import (
|
|||
|
||||
var (
|
||||
// commit sha for the current build.
|
||||
version string = "0.3-dev"
|
||||
version string
|
||||
revision string
|
||||
)
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ func restartCommandFunc(c *cli.Context, client *client.Client) error {
|
|||
case 2:
|
||||
branch = "master"
|
||||
sha = args[1]
|
||||
case 3,4,5:
|
||||
case 3, 4, 5:
|
||||
branch = args[1]
|
||||
sha = args[2]
|
||||
}
|
||||
|
|
|
@ -53,6 +53,9 @@ datasource="/var/lib/drone/drone.sqlite"
|
|||
# url=""
|
||||
# skip_verify=false
|
||||
|
||||
# [gogs]
|
||||
# url=""
|
||||
# secret=""
|
||||
|
||||
#####################################################################
|
||||
# SMTP configuration for Drone. This is required if you plan
|
||||
|
|
|
@ -22,20 +22,20 @@ const (
|
|||
// deisurl: deis.myurl.tdl:2222/
|
||||
|
||||
type Deis struct {
|
||||
App string `yaml:"app,omitempty"`
|
||||
Force bool `yaml:"force,omitempty"`
|
||||
Deisurl string `yaml:"deisurl,omitempty"`
|
||||
Condition *condition.Condition `yaml:"when,omitempty"`
|
||||
App string `yaml:"app,omitempty"`
|
||||
Force bool `yaml:"force,omitempty"`
|
||||
Deisurl string `yaml:"deisurl,omitempty"`
|
||||
Condition *condition.Condition `yaml:"when,omitempty"`
|
||||
}
|
||||
|
||||
func (h *Deis) Write(f *buildfile.Buildfile) {
|
||||
f.WriteCmdSilent(CmdRevParse)
|
||||
f.WriteCmdSilent(CmdGlobalUser)
|
||||
f.WriteCmdSilent(CmdGlobalEmail)
|
||||
|
||||
|
||||
// git@deis.yourdomain.com:2222/drone.git
|
||||
|
||||
f.WriteCmd(fmt.Sprintf("git remote add deis ssh://git@%s%s.git", h.Deisurl , h.App))
|
||||
|
||||
f.WriteCmd(fmt.Sprintf("git remote add deis ssh://git@%s%s.git", h.Deisurl, h.App))
|
||||
|
||||
switch h.Force {
|
||||
case true:
|
||||
|
|
|
@ -16,8 +16,8 @@ func Test_Deis(t *testing.T) {
|
|||
g.It("Should set git.config", func() {
|
||||
b := new(buildfile.Buildfile)
|
||||
h := Deis{
|
||||
App: "drone",
|
||||
Deisurl: "deis.yourdomain.com:2222",
|
||||
App: "drone",
|
||||
Deisurl: "deis.yourdomain.com:2222",
|
||||
}
|
||||
|
||||
h.Write(b)
|
||||
|
@ -30,8 +30,8 @@ func Test_Deis(t *testing.T) {
|
|||
g.It("Should add remote", func() {
|
||||
b := new(buildfile.Buildfile)
|
||||
h := Deis{
|
||||
App: "drone",
|
||||
Deisurl: "deis.yourdomain.com:2222/",
|
||||
App: "drone",
|
||||
Deisurl: "deis.yourdomain.com:2222/",
|
||||
}
|
||||
|
||||
h.Write(b)
|
||||
|
@ -54,7 +54,7 @@ func Test_Deis(t *testing.T) {
|
|||
b := new(buildfile.Buildfile)
|
||||
h := Deis{
|
||||
Force: true,
|
||||
App: "drone",
|
||||
App: "drone",
|
||||
}
|
||||
|
||||
h.Write(b)
|
||||
|
|
|
@ -5,9 +5,9 @@ import (
|
|||
"github.com/drone/drone/shared/build/buildfile"
|
||||
"github.com/drone/drone/shared/build/repo"
|
||||
|
||||
"github.com/drone/drone/plugin/deploy/deis"
|
||||
"github.com/drone/drone/plugin/deploy/git"
|
||||
"github.com/drone/drone/plugin/deploy/heroku"
|
||||
"github.com/drone/drone/plugin/deploy/deis"
|
||||
"github.com/drone/drone/plugin/deploy/modulus"
|
||||
"github.com/drone/drone/plugin/deploy/nodejitsu"
|
||||
"github.com/drone/drone/plugin/deploy/tsuru"
|
||||
|
@ -20,7 +20,7 @@ type Deploy struct {
|
|||
CloudFoundry *CloudFoundry `yaml:"cloudfoundry,omitempty"`
|
||||
Git *git.Git `yaml:"git,omitempty"`
|
||||
Heroku *heroku.Heroku `yaml:"heroku,omitempty"`
|
||||
Deis *deis.Deis `yaml:"deis,omitempty"`
|
||||
Deis *deis.Deis `yaml:"deis,omitempty"`
|
||||
Modulus *modulus.Modulus `yaml:"modulus,omitempty"`
|
||||
Nodejitsu *nodejitsu.Nodejitsu `yaml:"nodejitsu,omitempty"`
|
||||
SSH *SSH `yaml:"ssh,omitempty"`
|
||||
|
|
|
@ -17,7 +17,7 @@ const (
|
|||
|
||||
// Command to write the API token to ~/.netrc
|
||||
// use "_" since heroku git authentication ignores username
|
||||
CmdLogin = "echo 'machine git.heroku.com login _ password %s' >> ~/.netrc"
|
||||
CmdLogin = "echo 'machine git.heroku.com login _ password %s' >> ~/.netrc"
|
||||
)
|
||||
|
||||
type Heroku struct {
|
||||
|
|
|
@ -29,14 +29,14 @@ func Test_Heroku(t *testing.T) {
|
|||
g.It("Should write token", func() {
|
||||
b := new(buildfile.Buildfile)
|
||||
h := Heroku{
|
||||
App: "drone",
|
||||
App: "drone",
|
||||
Token: "mock-token",
|
||||
}
|
||||
|
||||
h.Write(b)
|
||||
out := b.String()
|
||||
g.Assert(strings.Contains(out, "\necho 'machine git.heroku.com login _ password mock-token' >> ~/.netrc\n")).Equal(true)
|
||||
})
|
||||
})
|
||||
|
||||
g.It("Should add remote", func() {
|
||||
b := new(buildfile.Buildfile)
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
package publish
|
50
plugin/publish/bintray/bintray.go
Normal file
50
plugin/publish/bintray/bintray.go
Normal file
|
@ -0,0 +1,50 @@
|
|||
package bintray
|
||||
|
||||
import (
|
||||
"github.com/drone/drone/plugin/condition"
|
||||
"github.com/drone/drone/shared/build/buildfile"
|
||||
)
|
||||
|
||||
type Bintray struct {
|
||||
Username string `yaml:"username"`
|
||||
ApiKey string `yaml:"api_key"`
|
||||
Packages []Package `yaml:"packages"`
|
||||
|
||||
Condition *condition.Condition `yaml:"when,omitempty"`
|
||||
}
|
||||
|
||||
func (b *Bintray) Write(f *buildfile.Buildfile) {
|
||||
var cmd string
|
||||
|
||||
// Validate Username, ApiKey, Packages
|
||||
if len(b.Username) == 0 || len(b.ApiKey) == 0 || len(b.Packages) == 0 {
|
||||
f.WriteCmdSilent(`echo -e "Bintray Plugin: Missing argument(s)\n\n"`)
|
||||
|
||||
if len(b.Username) == 0 {
|
||||
f.WriteCmdSilent(`echo -e "\tusername not defined in yaml config"`)
|
||||
}
|
||||
|
||||
if len(b.ApiKey) == 0 {
|
||||
f.WriteCmdSilent(`echo -e "\tapi_key not defined in yaml config"`)
|
||||
}
|
||||
|
||||
if len(b.Packages) == 0 {
|
||||
f.WriteCmdSilent(`echo -e "\tpackages not defined in yaml config"`)
|
||||
}
|
||||
|
||||
f.WriteCmdSilent("exit 1")
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
for _, pkg := range b.Packages {
|
||||
pkg.Write(b.Username, b.ApiKey, f)
|
||||
}
|
||||
|
||||
f.WriteCmd(cmd)
|
||||
|
||||
}
|
||||
|
||||
func (b *Bintray) GetCondition() *condition.Condition {
|
||||
return b.Condition
|
||||
}
|
116
plugin/publish/bintray/package.go
Normal file
116
plugin/publish/bintray/package.go
Normal file
|
@ -0,0 +1,116 @@
|
|||
package bintray
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/drone/drone/shared/build/buildfile"
|
||||
)
|
||||
|
||||
const bintray_endpoint = "https://api.bintray.com/content/%s/%s/%s/%s/%s"
|
||||
|
||||
type Package struct {
|
||||
File string `yaml:"file"`
|
||||
Type string `yaml:"type"`
|
||||
Owner string `yaml:"owner"`
|
||||
Repository string `yaml:"repository"`
|
||||
Package string `yaml:"package"`
|
||||
Version string `yaml:"version"`
|
||||
Target string `yaml:"target"`
|
||||
Distr string `yaml:"distr,omitempty"`
|
||||
Component string `yaml:"component,omitempty"`
|
||||
Arch []string `yaml:"arch,omitempty"`
|
||||
Publish bool `yaml:"publish,omitempty"`
|
||||
Override bool `yaml:"override,omitempty"`
|
||||
}
|
||||
|
||||
func (p *Package) Write(username, api_key string, f *buildfile.Buildfile) {
|
||||
if len(p.File) == 0 || len(p.Owner) == 0 || len(p.Repository) == 0 || len(p.Package) == 0 || len(p.Version) == 0 || len(p.Target) == 0 {
|
||||
f.WriteCmdSilent(`echo -e "Bintray Plugin: Missing argument(s)\n\n"`)
|
||||
|
||||
if len(p.Package) == 0 {
|
||||
f.WriteCmdSilent(fmt.Sprintf(`echo -e "\tpackage not defined in yaml config"`))
|
||||
return
|
||||
}
|
||||
|
||||
if len(p.File) == 0 {
|
||||
f.WriteCmdSilent(fmt.Sprintf(`echo -e "\tpackage %s: file not defined in yaml config"`, p.Package))
|
||||
}
|
||||
|
||||
if len(p.Owner) == 0 {
|
||||
f.WriteCmdSilent(fmt.Sprintf(`echo -e "\tpackage %s: owner not defined in yaml config"`, p.Package))
|
||||
}
|
||||
|
||||
if len(p.Repository) == 0 {
|
||||
f.WriteCmdSilent(fmt.Sprintf(`echo -e "\tpackage %s: repository not defined in yaml config"`, p.Package))
|
||||
}
|
||||
|
||||
if len(p.Version) == 0 {
|
||||
f.WriteCmdSilent(fmt.Sprintf(`echo -e "\tpackage %s: version not defined in yaml config"`, p.Package))
|
||||
}
|
||||
|
||||
if len(p.Target) == 0 {
|
||||
f.WriteCmdSilent(fmt.Sprintf(`echo -e "\tpackage %s: target not defined in yaml config"`, p.Package))
|
||||
}
|
||||
|
||||
f.WriteCmdSilent("exit 1")
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
switch p.Type {
|
||||
case "deb":
|
||||
p.debUpload(username, api_key, f)
|
||||
case "rpm":
|
||||
p.upload(username, api_key, f)
|
||||
case "maven":
|
||||
p.upload(username, api_key, f)
|
||||
default:
|
||||
p.upload(username, api_key, f)
|
||||
}
|
||||
}
|
||||
|
||||
func (p *Package) debUpload(username, api_key string, f *buildfile.Buildfile) {
|
||||
if len(p.Distr) == 0 || len(p.Component) == 0 || len(p.Arch) == 0 {
|
||||
f.WriteCmdSilent(`echo -e "Bintray Plugin: Missing argument(s)\n\n"`)
|
||||
|
||||
if len(p.Distr) == 0 {
|
||||
f.WriteCmdSilent(fmt.Sprintf(`echo -e "\tpackage %s: distr not defined in yaml config"`, p.Package))
|
||||
}
|
||||
|
||||
if len(p.Component) == 0 {
|
||||
f.WriteCmdSilent(fmt.Sprintf(`echo -e "\tpackage %s: component not defined in yaml config"`, p.Package))
|
||||
}
|
||||
|
||||
if len(p.Arch) == 0 {
|
||||
f.WriteCmdSilent(fmt.Sprintf(`echo -e "\tpackage %s: arch not defined in yaml config"`, p.Package))
|
||||
}
|
||||
|
||||
f.WriteCmdSilent("exit 1")
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
f.WriteCmdSilent(fmt.Sprintf(`echo -e "\nUpload %s to %s/%s/%s"`, p.File, p.Owner, p.Repository, p.Package))
|
||||
f.WriteCmdSilent(fmt.Sprintf("curl -s -T %s -u%s:%s %s\\;deb_distribution\\=%s\\;deb_component\\=%s\\;deb_architecture=\\%s\\;publish\\=%d\\;override\\=%d",
|
||||
p.File, username, api_key, p.getEndpoint(), p.Distr, p.Component, strings.Join(p.Arch, ","), boolToInt(p.Publish), boolToInt(p.Override)))
|
||||
|
||||
}
|
||||
|
||||
func (p *Package) upload(username, api_key string, f *buildfile.Buildfile) {
|
||||
f.WriteCmdSilent(fmt.Sprintf(`echo -e "\nUpload %s to %s/%s/%s"`, p.File, p.Owner, p.Repository, p.Package))
|
||||
f.WriteCmdSilent(fmt.Sprintf("curl -s -T %s -u%s:%s %s\\;publish\\=%d\\;override\\=%d",
|
||||
p.File, username, api_key, p.getEndpoint(), boolToInt(p.Publish), boolToInt(p.Override)))
|
||||
}
|
||||
|
||||
func (p *Package) getEndpoint() string {
|
||||
return fmt.Sprintf(bintray_endpoint, p.Owner, p.Repository, p.Package, p.Version, p.Target)
|
||||
}
|
||||
|
||||
func boolToInt(val bool) int {
|
||||
if val {
|
||||
return 1
|
||||
} else {
|
||||
return 0
|
||||
}
|
||||
}
|
|
@ -99,7 +99,10 @@ func (d *Docker) Write(f *buildfile.Buildfile) {
|
|||
|
||||
// Tag and push all tags
|
||||
for _, tag := range d.Tags {
|
||||
f.WriteCmd(fmt.Sprintf("docker tag %s:%s %s:%s", d.ImageName, buildImageTag, d.ImageName, tag))
|
||||
if tag != buildImageTag {
|
||||
f.WriteCmd(fmt.Sprintf("docker tag %s:%s %s:%s", d.ImageName, buildImageTag, d.ImageName, tag))
|
||||
}
|
||||
|
||||
f.WriteCmd(fmt.Sprintf("docker push %s:%s", d.ImageName, tag))
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ package publish
|
|||
|
||||
import (
|
||||
"github.com/drone/drone/plugin/condition"
|
||||
"github.com/drone/drone/plugin/publish/bintray"
|
||||
"github.com/drone/drone/plugin/publish/npm"
|
||||
"github.com/drone/drone/shared/build/buildfile"
|
||||
"github.com/drone/drone/shared/build/repo"
|
||||
|
@ -11,13 +12,14 @@ import (
|
|||
// for publishing build artifacts when
|
||||
// a Build has succeeded
|
||||
type Publish struct {
|
||||
S3 *S3 `yaml:"s3,omitempty"`
|
||||
Swift *Swift `yaml:"swift,omitempty"`
|
||||
PyPI *PyPI `yaml:"pypi,omitempty"`
|
||||
NPM *npm.NPM `yaml:"npm,omitempty"`
|
||||
Docker *Docker `yaml:"docker,omitempty"`
|
||||
Github *Github `yaml:"github,omitempty"`
|
||||
Dropbox *Dropbox `yaml:"dropbox,omitempty"`
|
||||
S3 *S3 `yaml:"s3,omitempty"`
|
||||
Swift *Swift `yaml:"swift,omitempty"`
|
||||
PyPI *PyPI `yaml:"pypi,omitempty"`
|
||||
NPM *npm.NPM `yaml:"npm,omitempty"`
|
||||
Docker *Docker `yaml:"docker,omitempty"`
|
||||
Github *Github `yaml:"github,omitempty"`
|
||||
Dropbox *Dropbox `yaml:"dropbox,omitempty"`
|
||||
Bintray *bintray.Bintray `yaml:"bintray,omitempty"`
|
||||
}
|
||||
|
||||
func (p *Publish) Write(f *buildfile.Buildfile, r *repo.Repo) {
|
||||
|
@ -55,6 +57,11 @@ func (p *Publish) Write(f *buildfile.Buildfile, r *repo.Repo) {
|
|||
if p.Dropbox != nil && match(p.Dropbox.GetCondition(), r) {
|
||||
p.Dropbox.Write(f)
|
||||
}
|
||||
|
||||
// Bintray
|
||||
if p.Bintray != nil && match(p.Bintray.GetCondition(), r) {
|
||||
p.Bintray.Write(f)
|
||||
}
|
||||
}
|
||||
|
||||
func match(c *condition.Condition, r *repo.Repo) bool {
|
||||
|
|
|
@ -155,6 +155,7 @@ func (r *Bitbucket) GetRepos(user *model.User) ([]*model.Repo, error) {
|
|||
// these are the urls required to clone the repository
|
||||
// TODO use the bitbucketurl.Host and bitbucketurl.Scheme instead of hardcoding
|
||||
// so that we can support Stash.
|
||||
var html = fmt.Sprintf("https://bitbucket.org/%s/%s", item.Owner, item.Name)
|
||||
var clone = fmt.Sprintf("https://bitbucket.org/%s/%s.git", item.Owner, item.Name)
|
||||
var ssh = fmt.Sprintf("git@bitbucket.org:%s/%s.git", item.Owner, item.Name)
|
||||
|
||||
|
@ -165,6 +166,7 @@ func (r *Bitbucket) GetRepos(user *model.User) ([]*model.Repo, error) {
|
|||
Owner: item.Owner,
|
||||
Name: item.Name,
|
||||
Private: item.Private,
|
||||
URL: html,
|
||||
CloneURL: clone,
|
||||
GitURL: clone,
|
||||
SSHURL: ssh,
|
||||
|
|
|
@ -1338,6 +1338,7 @@ nav {
|
|||
font-family:@mono;
|
||||
font-size:13px;
|
||||
white-space: pre-wrap;
|
||||
word-break: break-all;
|
||||
overflow: hidden;
|
||||
line-height:18px;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<div class="toast" ng-if="msg != undefined">
|
||||
<span ng-if="msg == 'already'">sync already runned</span>
|
||||
<span ng-if="msg == 'already'">sync already in progress</span>
|
||||
<span ng-if="msg == 'bad'">bad response</span>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
<section ng-repeat="group in commits | filter: { pull_request: '' } | unique: 'branch'">
|
||||
<div class="pure-g cards">
|
||||
<h2 class="pure-u-1" style="font-size:22px;margin-bottom:20px;"><i class="fa fa-code-fork"></i> {{group.branch}}</h2>
|
||||
<a class="pure-u-1 pure-u-md-1-4 pure-u-lg-1-4 pure-u-xl-1-4 card card" ng-href="/{{ repo | fullPath }}/{{ commit.branch }}/{{ commit.sha }}" ng-repeat="commit in commits | filter: { branch: group.branch } | limitTo:4" data-status="{{ commit.status }}">
|
||||
<a class="pure-u-1 pure-u-md-1-4 pure-u-lg-1-4 pure-u-xl-1-4 card card" ng-href="/{{ repo | fullPath }}/{{ commit.branch }}/{{ commit.sha }}" ng-repeat="commit in commits | filter:{ branch:group.branch }:true | limitTo:4" data-status="{{ commit.status }}">
|
||||
<div class="l-box">
|
||||
<h2>{{ commit.message }}</h2>
|
||||
<em ng-if="commit.finished_at != 0">{{ commit.author }}<br/>{{ commit.finished_at | fromNow }}</em>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<div class="toast" ng-if="msg != undefined">
|
||||
<span ng-if="msg == 'already'">sync already runned</span>
|
||||
<span ng-if="msg == 'already'">sync already in progress</span>
|
||||
<span ng-if="msg == 'bad'">bad response</span>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ const (
|
|||
var (
|
||||
// commit sha for the current build, set by
|
||||
// the compile process.
|
||||
version string = "0.3-dev"
|
||||
version string
|
||||
revision string
|
||||
)
|
||||
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
package script
|
||||
|
||||
const (
|
||||
DefaultDockerNetworkMode = "bridge"
|
||||
DefaultDockerNetworkMode = "bridge"
|
||||
)
|
||||
|
||||
// Docker stores the configuration details for
|
||||
// configuring docker container.
|
||||
type Docker struct {
|
||||
// NetworkMode (also known as `--net` option)
|
||||
// Could be set only if Docker is running in privileged mode
|
||||
NetworkMode *string `yaml:"net,omitempty"`
|
||||
// NetworkMode (also known as `--net` option)
|
||||
// Could be set only if Docker is running in privileged mode
|
||||
NetworkMode *string `yaml:"net,omitempty"`
|
||||
|
||||
// Hostname (also known as `--hostname` option)
|
||||
// Could be set only if Docker is running in privileged mode
|
||||
Hostname *string `yaml:"hostname,omitempty"`
|
||||
// Hostname (also known as `--hostname` option)
|
||||
// Could be set only if Docker is running in privileged mode
|
||||
Hostname *string `yaml:"hostname,omitempty"`
|
||||
}
|
||||
|
||||
// DockerNetworkMode returns DefaultNetworkMode
|
||||
|
@ -21,10 +21,10 @@ type Docker struct {
|
|||
// DockerNetworkMode returns Docker.NetworkMode
|
||||
// when it is not empty.
|
||||
func DockerNetworkMode(d *Docker) string {
|
||||
if d == nil || d.NetworkMode == nil {
|
||||
return DefaultDockerNetworkMode
|
||||
}
|
||||
return *d.NetworkMode
|
||||
if d == nil || d.NetworkMode == nil {
|
||||
return DefaultDockerNetworkMode
|
||||
}
|
||||
return *d.NetworkMode
|
||||
}
|
||||
|
||||
// DockerNetworkMode returns empty string
|
||||
|
@ -32,8 +32,8 @@ func DockerNetworkMode(d *Docker) string {
|
|||
// DockerNetworkMode returns Docker.NetworkMode
|
||||
// when it is not empty.
|
||||
func DockerHostname(d *Docker) string {
|
||||
if d == nil || d.Hostname == nil {
|
||||
return ""
|
||||
}
|
||||
return *d.Hostname
|
||||
if d == nil || d.Hostname == nil {
|
||||
return ""
|
||||
}
|
||||
return *d.Hostname
|
||||
}
|
||||
|
|
|
@ -1,69 +1,69 @@
|
|||
package script
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestDockerNetworkMode(t *testing.T) {
|
||||
var d *Docker
|
||||
var expected string
|
||||
var d *Docker
|
||||
var expected string
|
||||
|
||||
expected = DefaultDockerNetworkMode
|
||||
d = nil
|
||||
if actual := DockerNetworkMode(d); actual != expected {
|
||||
t.Errorf("The result is invalid. [expected: %s][actual: %s]", expected, actual)
|
||||
}
|
||||
expected = DefaultDockerNetworkMode
|
||||
d = nil
|
||||
if actual := DockerNetworkMode(d); actual != expected {
|
||||
t.Errorf("The result is invalid. [expected: %s][actual: %s]", expected, actual)
|
||||
}
|
||||
|
||||
expected = DefaultDockerNetworkMode
|
||||
d = &Docker{}
|
||||
if actual := DockerNetworkMode(d); actual != expected {
|
||||
t.Errorf("The result is invalid. [expected: %s][actual: %s]", expected, actual)
|
||||
}
|
||||
expected = DefaultDockerNetworkMode
|
||||
d = &Docker{}
|
||||
if actual := DockerNetworkMode(d); actual != expected {
|
||||
t.Errorf("The result is invalid. [expected: %s][actual: %s]", expected, actual)
|
||||
}
|
||||
|
||||
expected = DefaultDockerNetworkMode
|
||||
d = &Docker{NetworkMode: nil}
|
||||
if actual := DockerNetworkMode(d); actual != expected {
|
||||
t.Errorf("The result is invalid. [expected: %s][actual: %s]", expected, actual)
|
||||
}
|
||||
expected = DefaultDockerNetworkMode
|
||||
d = &Docker{NetworkMode: nil}
|
||||
if actual := DockerNetworkMode(d); actual != expected {
|
||||
t.Errorf("The result is invalid. [expected: %s][actual: %s]", expected, actual)
|
||||
}
|
||||
|
||||
expected = "bridge"
|
||||
d = &Docker{NetworkMode: &expected}
|
||||
if actual := DockerNetworkMode(d); actual != expected {
|
||||
t.Errorf("The result is invalid. [expected: %s][actual: %s]", expected, actual)
|
||||
}
|
||||
expected = "bridge"
|
||||
d = &Docker{NetworkMode: &expected}
|
||||
if actual := DockerNetworkMode(d); actual != expected {
|
||||
t.Errorf("The result is invalid. [expected: %s][actual: %s]", expected, actual)
|
||||
}
|
||||
|
||||
expected = "host"
|
||||
d = &Docker{NetworkMode: &expected}
|
||||
if actual := DockerNetworkMode(d); actual != expected {
|
||||
t.Errorf("The result is invalid. [expected: %s][actual: %s]", expected, actual)
|
||||
}
|
||||
expected = "host"
|
||||
d = &Docker{NetworkMode: &expected}
|
||||
if actual := DockerNetworkMode(d); actual != expected {
|
||||
t.Errorf("The result is invalid. [expected: %s][actual: %s]", expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDockerHostname(t *testing.T) {
|
||||
var d *Docker
|
||||
var expected string
|
||||
var d *Docker
|
||||
var expected string
|
||||
|
||||
expected = ""
|
||||
d = nil
|
||||
if actual := DockerHostname(d); actual != expected {
|
||||
t.Errorf("The result is invalid. [expected: %s][actual: %s]", expected, actual)
|
||||
}
|
||||
expected = ""
|
||||
d = nil
|
||||
if actual := DockerHostname(d); actual != expected {
|
||||
t.Errorf("The result is invalid. [expected: %s][actual: %s]", expected, actual)
|
||||
}
|
||||
|
||||
expected = ""
|
||||
d = &Docker{}
|
||||
if actual := DockerHostname(d); actual != expected {
|
||||
t.Errorf("The result is invalid. [expected: %s][actual: %s]", expected, actual)
|
||||
}
|
||||
expected = ""
|
||||
d = &Docker{}
|
||||
if actual := DockerHostname(d); actual != expected {
|
||||
t.Errorf("The result is invalid. [expected: %s][actual: %s]", expected, actual)
|
||||
}
|
||||
|
||||
expected = ""
|
||||
d = &Docker{Hostname: nil}
|
||||
if actual := DockerHostname(d); actual != expected {
|
||||
t.Errorf("The result is invalid. [expected: %s][actual: %s]", expected, actual)
|
||||
}
|
||||
expected = ""
|
||||
d = &Docker{Hostname: nil}
|
||||
if actual := DockerHostname(d); actual != expected {
|
||||
t.Errorf("The result is invalid. [expected: %s][actual: %s]", expected, actual)
|
||||
}
|
||||
|
||||
expected = "host"
|
||||
d = &Docker{Hostname: &expected}
|
||||
if actual := DockerHostname(d); actual != expected {
|
||||
t.Errorf("The result is invalid. [expected: %s][actual: %s]", expected, actual)
|
||||
}
|
||||
expected = "host"
|
||||
d = &Docker{Hostname: &expected}
|
||||
if actual := DockerHostname(d); actual != expected {
|
||||
t.Errorf("The result is invalid. [expected: %s][actual: %s]", expected, actual)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue