From 31f65b5b86e6ed0e2a0f27b7e9b6eb2caadda0a7 Mon Sep 17 00:00:00 2001 From: Bo-Yi Wu Date: Mon, 23 Jan 2017 09:58:40 +0800 Subject: [PATCH 1/5] feat: add drone config --- .drone.yml | 78 ++++++++++++++++++++++++++++++++++++++++++++ .drone.yml.sig | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 166 insertions(+) create mode 100644 .drone.yml create mode 100644 .drone.yml.sig 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..552ee09 --- /dev/null +++ b/.drone.yml.sig @@ -0,0 +1,88 @@ +workspace: + base: /srv/app + path: src/github.com/appleboy/drone-scp + +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: + - adduser -h /home/drone-scp -s /bin/bash -D -S drone-scp + - passwd -d drone-scp + - mkdir -p /home/drone-scp/.ssh + - chmod 700 /home/drone-scp/.ssh + - cp tests/.ssh/id_rsa.pub /home/drone-scp/.ssh/authorized_keys + - chown -R drone-scp /home/drone-scp/.ssh + # install ssh and start server + - apk update && apk add openssh openrc + - rm -rf /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_dsa_key + - ./tests/entrypoint.sh /usr/sbin/sshd -D & + - 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/* ] + + docker: + image: plugins/docker + repo: ${DRONE_REPO} + tags: [ '${DRONE_TAG}' ] + when: + event: [ tag ] + branch: [ refs/tags/* ] + + docker: + image: plugins/docker + repo: ${DRONE_REPO} + tags: [ 'latest' ] + when: + event: [ push ] + branch: [ master ] + + github: + 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 From 1f1257181354c5bc3e22741862c6b47ed2d130dc Mon Sep 17 00:00:00 2001 From: Bo-Yi Wu Date: Mon, 23 Jan 2017 10:03:54 +0800 Subject: [PATCH 2/5] fix: lint error. --- plugin.go | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/plugin.go b/plugin.go index bdd9dca..1170f3c 100644 --- a/plugin.go +++ b/plugin.go @@ -1,7 +1,6 @@ package main import ( - "fmt" "net" "os" "strconv" @@ -12,6 +11,7 @@ import ( ) type ( + // Config for the plugin. Config struct { Key string User string @@ -23,14 +23,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 errors.New("Error: can't connect without a private SSH key or password") } for i, host := range p.Config.Host { @@ -46,7 +48,7 @@ func (p Plugin) Exec() error { signer, err := ssh.ParsePrivateKey([]byte(p.Config.Key)) if err != nil { - return fmt.Errorf("Error: Failed to parse private key. %s", err) + return errors.New("Error: Failed to parse private key. %s", err) } auths = append(auths, ssh.PublicKeys(signer)) @@ -63,17 +65,17 @@ 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 { - return fmt.Errorf("Error: Failed to dial to server. %s", err) + return errors.New("Error: Failed to dial to server. %s", err) } session, err := client.NewSession() if err != nil { - return fmt.Errorf("Error: Failed to start a SSH session. %s", err) + return errors.New("Error: Failed to start a SSH session. %s", err) } defer session.Close() @@ -86,7 +88,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) } } From c3155dea41854f419bfc6c5448063e6c5ab9ff0e Mon Sep 17 00:00:00 2001 From: Bo-Yi Wu Date: Mon, 23 Jan 2017 10:05:05 +0800 Subject: [PATCH 3/5] fix: add assert package --- glide.lock | 18 +++++++++++++++--- glide.yaml | 4 ++++ 2 files changed, 19 insertions(+), 3 deletions(-) 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 From ebe1d829fb5883a225d463c1db084d23ced8ea6a Mon Sep 17 00:00:00 2001 From: Bo-Yi Wu Date: Mon, 23 Jan 2017 10:07:49 +0800 Subject: [PATCH 4/5] fix: undefined variable. --- plugin.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/plugin.go b/plugin.go index 1170f3c..e4dca05 100644 --- a/plugin.go +++ b/plugin.go @@ -1,12 +1,14 @@ package main import ( + "log" "net" "os" "strconv" "strings" "time" + "fmt" "golang.org/x/crypto/ssh" ) @@ -32,7 +34,7 @@ type ( // Exec executes the plugin. func (p Plugin) Exec() error { if p.Config.Key == "" && p.Config.Password == "" { - return errors.New("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 { @@ -48,7 +50,7 @@ func (p Plugin) Exec() error { signer, err := ssh.ParsePrivateKey([]byte(p.Config.Key)) if err != nil { - return errors.New("Error: Failed to parse private key. %s", err) + return fmt.Errorf("Error: Failed to parse private key. %s", err) } auths = append(auths, ssh.PublicKeys(signer)) @@ -69,13 +71,13 @@ func (p Plugin) Exec() error { client, err := ssh.Dial("tcp", addr, config) if err != nil { - return errors.New("Error: Failed to dial to server. %s", err) + return fmt.Errorf("Error: Failed to dial to server. %s", err) } session, err := client.NewSession() if err != nil { - return errors.New("Error: Failed to start a SSH session. %s", err) + return fmt.Errorf("Error: Failed to start a SSH session. %s", err) } defer session.Close() From d698aa5ea62f60228573b35897da1bc3e0b50a11 Mon Sep 17 00:00:00 2001 From: Bo-Yi Wu Date: Mon, 23 Jan 2017 10:10:15 +0800 Subject: [PATCH 5/5] fix: drone sig --- .drone.yml.sig | 89 +------------------------------------------------- 1 file changed, 1 insertion(+), 88 deletions(-) diff --git a/.drone.yml.sig b/.drone.yml.sig index 552ee09..5fad5be 100644 --- a/.drone.yml.sig +++ b/.drone.yml.sig @@ -1,88 +1 @@ -workspace: - base: /srv/app - path: src/github.com/appleboy/drone-scp - -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: - - adduser -h /home/drone-scp -s /bin/bash -D -S drone-scp - - passwd -d drone-scp - - mkdir -p /home/drone-scp/.ssh - - chmod 700 /home/drone-scp/.ssh - - cp tests/.ssh/id_rsa.pub /home/drone-scp/.ssh/authorized_keys - - chown -R drone-scp /home/drone-scp/.ssh - # install ssh and start server - - apk update && apk add openssh openrc - - rm -rf /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_dsa_key - - ./tests/entrypoint.sh /usr/sbin/sshd -D & - - 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/* ] - - docker: - image: plugins/docker - repo: ${DRONE_REPO} - tags: [ '${DRONE_TAG}' ] - when: - event: [ tag ] - branch: [ refs/tags/* ] - - docker: - image: plugins/docker - repo: ${DRONE_REPO} - tags: [ 'latest' ] - when: - event: [ push ] - branch: [ master ] - - github: - 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 +eyJhbGciOiJIUzI1NiJ9.d29ya3NwYWNlOgogIGJhc2U6IC9zcnYvYXBwCiAgcGF0aDogc3JjL2dpdGh1Yi5jb20vYXBwbGVib3kvZHJvbmUtc3NoCgpwaXBlbGluZToKICBjbG9uZToKICAgIGltYWdlOiBwbHVnaW5zL2dpdAogICAgdGFnczogdHJ1ZQoKICAjIHJlc3RvcmUgdGhlIGNhY2hlIGZyb20gYW4gc2Z0cCBzZXJ2ZXIKICByZXN0b3JlX2NhY2hlOgogICAgaW1hZ2U6IGFwcGxlYm95L2Ryb25lLXNmdHAtY2FjaGUKICAgIHJlc3RvcmU6IHRydWUKICAgIG1vdW50OiBbIC5nbGlkZSwgdmVuZG9yIF0KICAgIGlnbm9yZV9icmFuY2g6IHRydWUKCiAgdGVzdDoKICAgIGltYWdlOiBhcHBsZWJveS9nb2xhbmctdGVzdGluZwogICAgcHVsbDogdHJ1ZQogICAgZW52aXJvbm1lbnQ6CiAgICAgIFRBR1M6IG5ldGdvCiAgICAgIEdPUEFUSDogL3Nydi9hcHAKICAgIGNvbW1hbmRzOgogICAgICAtIG1ha2UgZGVwX2luc3RhbGwKICAgICAgLSBtYWtlIHZldAogICAgICAtIG1ha2UgbGludAogICAgICAtIG1ha2UgdGVzdAogICAgICAtIG1ha2UgY292ZXJhZ2UKICAgICAgLSBtYWtlIGJ1aWxkCiAgICAgICMgYnVpbGQgYmluYXJ5IGZvciBkb2NrZXIgaW1hZ2UKICAgICAgLSBtYWtlIHN0YXRpY19idWlsZAogICAgd2hlbjoKICAgICAgZXZlbnQ6IFsgcHVzaCwgdGFnLCBwdWxsX3JlcXVlc3QgXQoKICByZWxlYXNlOgogICAgaW1hZ2U6IGFwcGxlYm95L2dvbGFuZy10ZXN0aW5nCiAgICBwdWxsOiB0cnVlCiAgICBlbnZpcm9ubWVudDoKICAgICAgVEFHUzogbmV0Z28KICAgICAgR09QQVRIOiAvc3J2L2FwcAogICAgY29tbWFuZHM6CiAgICAgIC0gbWFrZSByZWxlYXNlCiAgICB3aGVuOgogICAgICBldmVudDogWyB0YWcgXQogICAgICBicmFuY2g6IFsgcmVmcy90YWdzLyogXQoKICBwdWJsaXNoX3RhZzoKICAgIGltYWdlOiBwbHVnaW5zL2RvY2tlcgogICAgcmVwbzogJHtEUk9ORV9SRVBPfQogICAgdGFnczogWyAnJHtEUk9ORV9UQUd9JyBdCiAgICB3aGVuOgogICAgICBldmVudDogWyB0YWcgXQogICAgICBicmFuY2g6IFsgcmVmcy90YWdzLyogXQoKICBwdWJsaXNoX2xhdGVzdDoKICAgIGltYWdlOiBwbHVnaW5zL2RvY2tlcgogICAgcmVwbzogJHtEUk9ORV9SRVBPfQogICAgdGFnczogWyAnbGF0ZXN0JyBdCiAgICB3aGVuOgogICAgICBldmVudDogWyBwdXNoIF0KICAgICAgYnJhbmNoOiBbIG1hc3RlciBdCgogIHJlbGVhc2U6CiAgICBpbWFnZTogcGx1Z2lucy9naXRodWItcmVsZWFzZQogICAgZmlsZXM6CiAgICAgIC0gZGlzdC9yZWxlYXNlLyoKICAgIHdoZW46CiAgICAgIGV2ZW50OiBbIHRhZyBdCiAgICAgIGJyYW5jaDogWyByZWZzL3RhZ3MvKiBdCgogICMgcmVidWlsZCB0aGUgY2FjaGUgb24gdGhlIHNmdHAgc2VydmVyCiAgcmVidWlsZF9jYWNoZToKICAgIGltYWdlOiBhcHBsZWJveS9kcm9uZS1zZnRwLWNhY2hlCiAgICByZWJ1aWxkOiB0cnVlCiAgICBtb3VudDogWyAuZ2xpZGUsIHZlbmRvciBdCiAgICBpZ25vcmVfYnJhbmNoOiB0cnVlCiAgICB3aGVuOgogICAgICBicmFuY2g6IG1hc3Rlcgo.MvA91xJBP4JoAxLObpbaumlNtzjO_Gc3znDbTRUjAGY \ No newline at end of file