diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..d17c7ed --- /dev/null +++ b/.drone.yml @@ -0,0 +1,78 @@ +workspace: + base: /srv/app + path: src/github.com/appleboy/drone-ssh + +pipeline: + clone: + image: plugins/git + tags: true + + # restore the cache from an sftp server + restore_cache: + image: appleboy/drone-sftp-cache + restore: true + mount: [ .glide, vendor ] + ignore_branch: true + + test: + image: appleboy/golang-testing + pull: true + environment: + TAGS: netgo + GOPATH: /srv/app + commands: + - make dep_install + - make vet + - make lint + - make test + - make coverage + - make build + # build binary for docker image + - make static_build + when: + event: [ push, tag, pull_request ] + + release: + image: appleboy/golang-testing + pull: true + environment: + TAGS: netgo + GOPATH: /srv/app + commands: + - make release + when: + event: [ tag ] + branch: [ refs/tags/* ] + + publish_tag: + image: plugins/docker + repo: ${DRONE_REPO} + tags: [ '${DRONE_TAG}' ] + when: + event: [ tag ] + branch: [ refs/tags/* ] + + publish_latest: + image: plugins/docker + repo: ${DRONE_REPO} + tags: [ 'latest' ] + when: + event: [ push ] + branch: [ master ] + + release: + image: plugins/github-release + files: + - dist/release/* + when: + event: [ tag ] + branch: [ refs/tags/* ] + + # rebuild the cache on the sftp server + rebuild_cache: + image: appleboy/drone-sftp-cache + rebuild: true + mount: [ .glide, vendor ] + ignore_branch: true + when: + branch: master diff --git a/.drone.yml.sig b/.drone.yml.sig new file mode 100644 index 0000000..5fad5be --- /dev/null +++ b/.drone.yml.sig @@ -0,0 +1 @@ +eyJhbGciOiJIUzI1NiJ9.d29ya3NwYWNlOgogIGJhc2U6IC9zcnYvYXBwCiAgcGF0aDogc3JjL2dpdGh1Yi5jb20vYXBwbGVib3kvZHJvbmUtc3NoCgpwaXBlbGluZToKICBjbG9uZToKICAgIGltYWdlOiBwbHVnaW5zL2dpdAogICAgdGFnczogdHJ1ZQoKICAjIHJlc3RvcmUgdGhlIGNhY2hlIGZyb20gYW4gc2Z0cCBzZXJ2ZXIKICByZXN0b3JlX2NhY2hlOgogICAgaW1hZ2U6IGFwcGxlYm95L2Ryb25lLXNmdHAtY2FjaGUKICAgIHJlc3RvcmU6IHRydWUKICAgIG1vdW50OiBbIC5nbGlkZSwgdmVuZG9yIF0KICAgIGlnbm9yZV9icmFuY2g6IHRydWUKCiAgdGVzdDoKICAgIGltYWdlOiBhcHBsZWJveS9nb2xhbmctdGVzdGluZwogICAgcHVsbDogdHJ1ZQogICAgZW52aXJvbm1lbnQ6CiAgICAgIFRBR1M6IG5ldGdvCiAgICAgIEdPUEFUSDogL3Nydi9hcHAKICAgIGNvbW1hbmRzOgogICAgICAtIG1ha2UgZGVwX2luc3RhbGwKICAgICAgLSBtYWtlIHZldAogICAgICAtIG1ha2UgbGludAogICAgICAtIG1ha2UgdGVzdAogICAgICAtIG1ha2UgY292ZXJhZ2UKICAgICAgLSBtYWtlIGJ1aWxkCiAgICAgICMgYnVpbGQgYmluYXJ5IGZvciBkb2NrZXIgaW1hZ2UKICAgICAgLSBtYWtlIHN0YXRpY19idWlsZAogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCwgdGFnLCBwdWxsX3JlcXVlc3QgXQoKICByZWxlYXNlOgogICAgaW1hZ2U6IGFwcGxlYm95L2dvbGFuZy10ZXN0aW5nCiAgICBwdWxsOiB0cnVlCiAgICBlbnZpcm9ubWVudDoKICAgICAgVEFHUzogbmV0Z28KICAgICAgR09QQVRIOiAvc3J2L2FwcAogICAgY29tbWFuZHM6CiAgICAgIC0gbWFrZSByZWxlYXNlCiAgICB3aGVuOgogICAgICBldmVudDogWyB0YWcgXQogICAgICBicmFuY2g6IFsgcmVmcy90YWdzLyogXQoKICBwdWJsaXNoX3RhZzoKICAgIGltYWdlOiBwbHVnaW5zL2RvY2tlcgogICAgcmVwbzogJHtEUk9ORV9SRVBPfQogICAgdGFnczogWyAnJHtEUk9ORV9UQUd9JyBdCiAgICB3aGVuOgogICAgICBldmVudDogWyB0YWcgXQogICAgICBicmFuY2g6IFsgcmVmcy90YWdzLyogXQoKICBwdWJsaXNoX2xhdGVzdDoKICAgIGltYWdlOiBwbHVnaW5zL2RvY2tlcgogICAgcmVwbzogJHtEUk9ORV9SRVBPfQogICAgdGFnczogWyAnbGF0ZXN0JyBdCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoIF0KICAgICAgYnJhbmNoOiBbIG1hc3RlciBdCgogIHJlbGVhc2U6CiAgICBpbWFnZTogcGx1Z2lucy9naXRodWItcmVsZWFzZQogICAgZmlsZXM6CiAgICAgIC0gZGlzdC9yZWxlYXNlLyoKICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHRhZyBdCiAgICAgIGJyYW5jaDogWyByZWZzL3RhZ3MvKiBdCgogICMgcmVidWlsZCB0aGUgY2FjaGUgb24gdGhlIHNmdHAgc2VydmVyCiAgcmVidWlsZF9jYWNoZToKICAgIGltYWdlOiBhcHBsZWJveS9kcm9uZS1zZnRwLWNhY2hlCiAgICByZWJ1aWxkOiB0cnVlCiAgICBtb3VudDogWyAuZ2xpZGUsIHZlbmRvciBdCiAgICBpZ25vcmVfYnJhbmNoOiB0cnVlCiAgICB3aGVuOgogICAgICBicmFuY2g6IG1hc3Rlcgo.MvA91xJBP4JoAxLObpbaumlNtzjO_Gc3znDbTRUjAGY \ No newline at end of file diff --git a/glide.lock b/glide.lock index d7002eb..2500395 100644 --- a/glide.lock +++ b/glide.lock @@ -1,10 +1,14 @@ -hash: fa5c3a4bf7b53b8e4cbbb43fb8a33447fc7d67f8cdd7bb8a27ff66e2d0dac47a -updated: 2017-01-23T09:33:16.187136258+08:00 +hash: 0c9184ed3a3b510feedfeb4fa4a119bdfa1a88b5dcfe9977944817a512958d44 +updated: 2017-01-23T10:04:51.354467848+08:00 imports: - name: github.com/joho/godotenv version: a01a834e1654b4c9ca5b3ad05159445cc9c7ad08 subpackages: - autoload +- name: github.com/stretchr/testify + version: 69483b4bd14f5845b5a1e55bca19e954e827f1d0 + subpackages: + - assert - name: github.com/urfave/cli version: 0bdeddeeb0f650497d603c4ad7b20cfe685682f6 - name: golang.org/x/crypto @@ -14,4 +18,12 @@ imports: - ed25519 - ed25519/internal/edwards25519 - ssh -testImports: [] +testImports: +- name: github.com/davecgh/go-spew + version: 6d212800a42e8ab5c146b8ace3490ee17e5225f9 + subpackages: + - spew +- name: github.com/pmezard/go-difflib + version: d8ed2627bdf02c080bf22230dbb337003b7aba2d + subpackages: + - difflib diff --git a/glide.yaml b/glide.yaml index e18eaea..fcb2b93 100644 --- a/glide.yaml +++ b/glide.yaml @@ -9,3 +9,7 @@ import: - package: golang.org/x/crypto subpackages: - ssh +- package: github.com/stretchr/testify + version: ^1.1.4 + subpackages: + - assert diff --git a/plugin.go b/plugin.go index bdd9dca..e4dca05 100644 --- a/plugin.go +++ b/plugin.go @@ -1,17 +1,19 @@ package main import ( - "fmt" + "log" "net" "os" "strconv" "strings" "time" + "fmt" "golang.org/x/crypto/ssh" ) type ( + // Config for the plugin. Config struct { Key string User string @@ -23,14 +25,16 @@ type ( Script []string } + // Plugin structure Plugin struct { Config Config } ) +// Exec executes the plugin. func (p Plugin) Exec() error { if p.Config.Key == "" && p.Config.Password == "" { - return fmt.Errorf("Error: Can't connect without a private SSH key or password.") + return fmt.Errorf("Error: can't connect without a private SSH key or password") } for i, host := range p.Config.Host { @@ -63,7 +67,7 @@ func (p Plugin) Exec() error { Auth: auths, } - fmt.Printf("+ ssh %s@%s -p %d\n", p.Config.User, addr, p.Config.Port) + log.Printf("+ ssh %s@%s -p %d\n", p.Config.User, addr, p.Config.Port) client, err := ssh.Dial("tcp", addr, config) if err != nil { @@ -86,7 +90,7 @@ func (p Plugin) Exec() error { } if p.Config.Sleep != 0 && i != len(p.Config.Host)-1 { - fmt.Printf("+ sleep %d\n", p.Config.Sleep) + log.Printf("+ sleep %d\n", p.Config.Sleep) time.Sleep(time.Duration(p.Config.Sleep) * time.Second) } }