Merge pull request #735 from PierreKircher/master
deploy plugin for "DEIS PAAS"
This commit is contained in:
commit
8f6a031c6a
3 changed files with 129 additions and 0 deletions
56
plugin/deploy/deis/deis.go
Normal file
56
plugin/deploy/deis/deis.go
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
package deis
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/drone/drone/plugin/condition"
|
||||||
|
"github.com/drone/drone/shared/build/buildfile"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Gommand to the current commit hash
|
||||||
|
CmdRevParse = "COMMIT=$(git rev-parse HEAD)"
|
||||||
|
|
||||||
|
// Command to set the git user and email based on the
|
||||||
|
// individual that made the commit.
|
||||||
|
CmdGlobalEmail = "git config --global user.email $(git --no-pager log -1 --pretty=format:'%ae')"
|
||||||
|
CmdGlobalUser = "git config --global user.name $(git --no-pager log -1 --pretty=format:'%an')"
|
||||||
|
)
|
||||||
|
|
||||||
|
// deploy:
|
||||||
|
// deis:
|
||||||
|
// app: safe-island-6261
|
||||||
|
// 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"`
|
||||||
|
}
|
||||||
|
|
||||||
|
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))
|
||||||
|
|
||||||
|
switch h.Force {
|
||||||
|
case true:
|
||||||
|
// this is useful when the there are artifacts generated
|
||||||
|
// by the build script, such as less files converted to css,
|
||||||
|
// that need to be deployed to Deis.
|
||||||
|
f.WriteCmd(fmt.Sprintf("git add -A"))
|
||||||
|
f.WriteCmd(fmt.Sprintf("git commit -m 'adding build artifacts'"))
|
||||||
|
f.WriteCmd(fmt.Sprintf("git push deis HEAD:master --force"))
|
||||||
|
case false:
|
||||||
|
// otherwise we just do a standard git push
|
||||||
|
f.WriteCmd(fmt.Sprintf("git push deis $COMMIT:master"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *Deis) GetCondition() *condition.Condition {
|
||||||
|
return h.Condition
|
||||||
|
}
|
68
plugin/deploy/deis/deis_test.go
Normal file
68
plugin/deploy/deis/deis_test.go
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
package deis
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/drone/drone/shared/build/buildfile"
|
||||||
|
"github.com/franela/goblin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Test_Deis(t *testing.T) {
|
||||||
|
|
||||||
|
g := goblin.Goblin(t)
|
||||||
|
g.Describe("Deis Deploy", func() {
|
||||||
|
|
||||||
|
g.It("Should set git.config", func() {
|
||||||
|
b := new(buildfile.Buildfile)
|
||||||
|
h := Deis{
|
||||||
|
App: "drone",
|
||||||
|
Deisurl: "deis.yourdomain.com:2222",
|
||||||
|
}
|
||||||
|
|
||||||
|
h.Write(b)
|
||||||
|
out := b.String()
|
||||||
|
g.Assert(strings.Contains(out, CmdRevParse)).Equal(true)
|
||||||
|
g.Assert(strings.Contains(out, CmdGlobalUser)).Equal(true)
|
||||||
|
g.Assert(strings.Contains(out, CmdGlobalEmail)).Equal(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
g.It("Should add remote", func() {
|
||||||
|
b := new(buildfile.Buildfile)
|
||||||
|
h := Deis{
|
||||||
|
App: "drone",
|
||||||
|
Deisurl: "deis.yourdomain.com:2222/",
|
||||||
|
}
|
||||||
|
|
||||||
|
h.Write(b)
|
||||||
|
out := b.String()
|
||||||
|
g.Assert(strings.Contains(out, "\ngit remote add deis ssh://git@deis.yourdomain.com:2222/drone.git\n")).Equal(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
g.It("Should push to remote", func() {
|
||||||
|
b := new(buildfile.Buildfile)
|
||||||
|
d := Deis{
|
||||||
|
App: "drone",
|
||||||
|
}
|
||||||
|
|
||||||
|
d.Write(b)
|
||||||
|
out := b.String()
|
||||||
|
g.Assert(strings.Contains(out, "\ngit push deis $COMMIT:master\n")).Equal(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
g.It("Should force push to remote", func() {
|
||||||
|
b := new(buildfile.Buildfile)
|
||||||
|
h := Deis{
|
||||||
|
Force: true,
|
||||||
|
App: "drone",
|
||||||
|
}
|
||||||
|
|
||||||
|
h.Write(b)
|
||||||
|
out := b.String()
|
||||||
|
g.Assert(strings.Contains(out, "\ngit add -A\n")).Equal(true)
|
||||||
|
g.Assert(strings.Contains(out, "\ngit commit -m 'adding build artifacts'\n")).Equal(true)
|
||||||
|
g.Assert(strings.Contains(out, "\ngit push deis HEAD:master --force\n")).Equal(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
|
@ -7,6 +7,7 @@ import (
|
||||||
|
|
||||||
"github.com/drone/drone/plugin/deploy/git"
|
"github.com/drone/drone/plugin/deploy/git"
|
||||||
"github.com/drone/drone/plugin/deploy/heroku"
|
"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/modulus"
|
||||||
"github.com/drone/drone/plugin/deploy/nodejitsu"
|
"github.com/drone/drone/plugin/deploy/nodejitsu"
|
||||||
"github.com/drone/drone/plugin/deploy/tsuru"
|
"github.com/drone/drone/plugin/deploy/tsuru"
|
||||||
|
@ -19,6 +20,7 @@ type Deploy struct {
|
||||||
CloudFoundry *CloudFoundry `yaml:"cloudfoundry,omitempty"`
|
CloudFoundry *CloudFoundry `yaml:"cloudfoundry,omitempty"`
|
||||||
Git *git.Git `yaml:"git,omitempty"`
|
Git *git.Git `yaml:"git,omitempty"`
|
||||||
Heroku *heroku.Heroku `yaml:"heroku,omitempty"`
|
Heroku *heroku.Heroku `yaml:"heroku,omitempty"`
|
||||||
|
Deis *deis.Deis `yaml:"deis,omitempty"`
|
||||||
Modulus *modulus.Modulus `yaml:"modulus,omitempty"`
|
Modulus *modulus.Modulus `yaml:"modulus,omitempty"`
|
||||||
Nodejitsu *nodejitsu.Nodejitsu `yaml:"nodejitsu,omitempty"`
|
Nodejitsu *nodejitsu.Nodejitsu `yaml:"nodejitsu,omitempty"`
|
||||||
SSH *SSH `yaml:"ssh,omitempty"`
|
SSH *SSH `yaml:"ssh,omitempty"`
|
||||||
|
@ -37,6 +39,9 @@ func (d *Deploy) Write(f *buildfile.Buildfile, r *repo.Repo) {
|
||||||
if d.Heroku != nil && match(d.Heroku.GetCondition(), r) {
|
if d.Heroku != nil && match(d.Heroku.GetCondition(), r) {
|
||||||
d.Heroku.Write(f)
|
d.Heroku.Write(f)
|
||||||
}
|
}
|
||||||
|
if d.Deis != nil && match(d.Deis.GetCondition(), r) {
|
||||||
|
d.Deis.Write(f)
|
||||||
|
}
|
||||||
if d.Modulus != nil && match(d.Modulus.GetCondition(), r) {
|
if d.Modulus != nil && match(d.Modulus.GetCondition(), r) {
|
||||||
d.Modulus.Write(f)
|
d.Modulus.Write(f)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue