From 13cfae1884440e5de37e6c4324a3ba0d35b6858c Mon Sep 17 00:00:00 2001 From: Bo-Yi Wu Date: Fri, 22 Feb 2019 10:33:19 +0800 Subject: [PATCH] refactor drone pipeline config Signed-off-by: Bo-Yi Wu --- .drone.jsonnet | 297 ++------------------------------------------- pipeline.libsonnet | 283 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 291 insertions(+), 289 deletions(-) create mode 100644 pipeline.libsonnet diff --git a/.drone.jsonnet b/.drone.jsonnet index f5ec8e1..6cf277e 100644 --- a/.drone.jsonnet +++ b/.drone.jsonnet @@ -1,298 +1,17 @@ +local pipeline = import 'pipeline.libsonnet'; local name = 'drone-telegram'; -local PipelineTesting = { - kind: 'pipeline', - name: 'testing', - platform: { - os: 'linux', - arch: 'amd64', - }, - steps: [ - { - name: 'vet', - image: 'golang:1.11', - pull: 'always', - environment: { - GO111MODULE: 'on', - }, - commands: [ - 'make vet', - ], - volumes: [ - { - name: 'gopath', - path: '/go', - }, - ], - }, - { - name: 'lint', - image: 'golang:1.11', - pull: 'always', - environment: { - GO111MODULE: 'on', - }, - commands: [ - 'make lint', - ], - volumes: [ - { - name: 'gopath', - path: '/go', - }, - ], - }, - { - name: 'misspell', - image: 'golang:1.11', - pull: 'always', - environment: { - GO111MODULE: 'on', - }, - commands: [ - 'make misspell-check', - ], - volumes: [ - { - name: 'gopath', - path: '/go', - }, - ], - }, - { - name: 'test', - image: 'golang:1.11', - pull: 'always', - environment: { - GO111MODULE: 'on', - TELEGRAM_TOKEN: { 'from_secret': 'telegram_token' }, - TELEGRAM_TO: { 'from_secret': 'telegram_to' }, - }, - commands: [ - 'make test', - 'make coverage', - ], - volumes: [ - { - name: 'gopath', - path: '/go', - }, - ], - }, - { - name: 'codecov', - image: 'robertstettner/drone-codecov', - pull: 'always', - settings: { - token: { 'from_secret': 'codecov_token' }, - }, - }, - ], - volumes: [ - { - name: 'gopath', - temp: {}, - }, - ], -}; - -local PipelineBuild(name, os='linux', arch='amd64') = { - kind: 'pipeline', - name: os + '-' + arch, - platform: { - os: os, - arch: arch, - }, - steps: [ - { - name: 'build-push', - image: 'golang:1.11', - pull: 'always', - environment: { - CGO_ENABLED: '0', - GO111MODULE: 'on', - }, - commands: [ - 'go build -v -ldflags \'-X main.build=${DRONE_BUILD_NUMBER}\' -a -o release/' + os + '/' + arch + '/' + name, - ], - when: { - event: { - exclude: [ 'tag' ], - }, - }, - }, - { - name: 'build-tag', - image: 'golang:1.11', - pull: 'always', - environment: { - CGO_ENABLED: '0', - GO111MODULE: 'on', - }, - commands: [ - 'go build -v -ldflags \'-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}\' -a -o release/' + os + '/' + arch + '/' + name, - ], - when: { - event: [ 'tag' ], - }, - }, - { - name: 'executable', - image: 'golang:1.11', - pull: 'always', - commands: [ - './release/' + os + '/' + arch + '/' + name + ' --help', - ], - }, - { - name: 'dryrun', - image: 'plugins/docker:' + os + '-' + arch, - pull: 'always', - settings: { - daemon_off: false, - dry_run: true, - tags: os + '-' + arch, - dockerfile: 'docker/Dockerfile.' + os + '.' + arch, - repo: 'appleboy/' + name, - cache_from: 'appleboy/' + name, - username: { 'from_secret': 'docker_username' }, - password: { 'from_secret': 'docker_password' }, - }, - when: { - event: [ 'pull_request' ], - }, - }, - { - name: 'publish', - image: 'plugins/docker:' + os + '-' + arch, - pull: 'always', - settings: { - daemon_off: 'false', - auto_tag: true, - auto_tag_suffix: os + '-' + arch, - dockerfile: 'docker/Dockerfile.' + os + '.' + arch, - repo: 'appleboy/' + name, - cache_from: 'appleboy/' + name, - username: { 'from_secret': 'docker_username' }, - password: { 'from_secret': 'docker_password' }, - }, - when: { - event: { - exclude: [ 'pull_request' ], - }, - }, - }, - ], - depends_on: [ - 'testing', - ], - trigger: { - ref: [ - 'refs/heads/master', - 'refs/pull/**', - 'refs/tags/**', - ], - }, -}; - -local PipelineRelease = { - kind: 'pipeline', - name: 'release-binary', - platform: { - os: 'linux', - arch: 'amd64', - }, - steps: [ - { - name: 'build-all-binary', - image: 'golang:1.11', - pull: 'always', - environment: { - GO111MODULE: 'on', - }, - commands: [ - 'make release' - ], - when: { - event: [ 'tag' ], - }, - }, - { - name: 'deploy-all-binary', - image: 'plugins/github-release', - pull: 'always', - settings: { - files: [ 'dist/release/*' ], - api_key: { 'from_secret': 'github_release_api_key' }, - }, - when: { - event: [ 'tag' ], - }, - }, - ], - depends_on: [ - 'testing', - ], - trigger: { - ref: [ - 'refs/tags/**', - ], - }, -}; - -local PipelineNotifications(os='linux', arch='amd64', depends_on=[]) = { - kind: 'pipeline', - name: 'notifications', - platform: { - os: os, - arch: arch, - }, - steps: [ - { - name: 'manifest', - image: 'plugins/manifest', - pull: 'always', - settings: { - username: { from_secret: 'docker_username' }, - password: { from_secret: 'docker_password' }, - spec: 'docker/manifest.tmpl', - ignore_missing: true, - }, - }, - { - name: 'microbadger', - image: 'plugins/webhook:1', - pull: 'always', - settings: { - url: { 'from_secret': 'microbadger_url' }, - }, - }, - ], - depends_on: depends_on, - trigger: { - ref: [ - 'refs/heads/master', - 'refs/tags/**', - ], - }, -}; - -local Signature = { - kind: 'signature', - hmac: '9a4dcc3659b6f2cb98486e40e4cb0c16d6fc19ad783d3bca13d30c476daf8213', -}; - [ - PipelineTesting, - PipelineBuild(name, 'linux', 'amd64'), - PipelineBuild(name, 'linux', 'arm64'), - PipelineBuild(name, 'linux', 'arm'), - PipelineRelease, - PipelineNotifications(depends_on=[ + pipeline.test, + pipeline.build(name, 'linux', 'amd64'), + pipeline.build(name, 'linux', 'arm64'), + pipeline.build(name, 'linux', 'arm'), + pipeline.release, + pipeline.notifications(depends_on=[ 'linux-amd64', 'linux-arm64', 'linux-arm', 'release-binary', ]), - Signature, + pipeline.signature('9a4dcc3659b6f2cb98486e40e4cb0c16d6fc19ad783d3bca13d30c476daf8213'), ] diff --git a/pipeline.libsonnet b/pipeline.libsonnet new file mode 100644 index 0000000..04859e4 --- /dev/null +++ b/pipeline.libsonnet @@ -0,0 +1,283 @@ +{ + test:: { + kind: 'pipeline', + name: 'testing', + platform: { + os: 'linux', + arch: 'amd64', + }, + steps: [ + { + name: 'vet', + image: 'golang:1.11', + pull: 'always', + environment: { + GO111MODULE: 'on', + }, + commands: [ + 'make vet', + ], + volumes: [ + { + name: 'gopath', + path: '/go', + }, + ], + }, + { + name: 'lint', + image: 'golang:1.11', + pull: 'always', + environment: { + GO111MODULE: 'on', + }, + commands: [ + 'make lint', + ], + volumes: [ + { + name: 'gopath', + path: '/go', + }, + ], + }, + { + name: 'misspell', + image: 'golang:1.11', + pull: 'always', + environment: { + GO111MODULE: 'on', + }, + commands: [ + 'make misspell-check', + ], + volumes: [ + { + name: 'gopath', + path: '/go', + }, + ], + }, + { + name: 'test', + image: 'golang:1.11', + pull: 'always', + environment: { + GO111MODULE: 'on', + TELEGRAM_TOKEN: { 'from_secret': 'telegram_token' }, + TELEGRAM_TO: { 'from_secret': 'telegram_to' }, + }, + commands: [ + 'make test', + 'make coverage', + ], + volumes: [ + { + name: 'gopath', + path: '/go', + }, + ], + }, + { + name: 'codecov', + image: 'robertstettner/drone-codecov', + pull: 'always', + settings: { + token: { 'from_secret': 'codecov_token' }, + }, + }, + ], + volumes: [ + { + name: 'gopath', + temp: {}, + }, + ], + }, + + build(name, os='linux', arch='amd64'):: { + kind: 'pipeline', + name: os + '-' + arch, + platform: { + os: os, + arch: arch, + }, + steps: [ + { + name: 'build-push', + image: 'golang:1.11', + pull: 'always', + environment: { + CGO_ENABLED: '0', + GO111MODULE: 'on', + }, + commands: [ + 'go build -v -ldflags \'-X main.build=${DRONE_BUILD_NUMBER}\' -a -o release/' + os + '/' + arch + '/' + name, + ], + when: { + event: { + exclude: [ 'tag' ], + }, + }, + }, + { + name: 'build-tag', + image: 'golang:1.11', + pull: 'always', + environment: { + CGO_ENABLED: '0', + GO111MODULE: 'on', + }, + commands: [ + 'go build -v -ldflags \'-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}\' -a -o release/' + os + '/' + arch + '/' + name, + ], + when: { + event: [ 'tag' ], + }, + }, + { + name: 'executable', + image: 'golang:1.11', + pull: 'always', + commands: [ + './release/' + os + '/' + arch + '/' + name + ' --help', + ], + }, + { + name: 'dryrun', + image: 'plugins/docker:' + os + '-' + arch, + pull: 'always', + settings: { + daemon_off: false, + dry_run: true, + tags: os + '-' + arch, + dockerfile: 'docker/Dockerfile.' + os + '.' + arch, + repo: 'appleboy/' + name, + cache_from: 'appleboy/' + name, + username: { 'from_secret': 'docker_username' }, + password: { 'from_secret': 'docker_password' }, + }, + when: { + event: [ 'pull_request' ], + }, + }, + { + name: 'publish', + image: 'plugins/docker:' + os + '-' + arch, + pull: 'always', + settings: { + daemon_off: 'false', + auto_tag: true, + auto_tag_suffix: os + '-' + arch, + dockerfile: 'docker/Dockerfile.' + os + '.' + arch, + repo: 'appleboy/' + name, + cache_from: 'appleboy/' + name, + username: { 'from_secret': 'docker_username' }, + password: { 'from_secret': 'docker_password' }, + }, + when: { + event: { + exclude: [ 'pull_request' ], + }, + }, + }, + ], + depends_on: [ + 'testing', + ], + trigger: { + ref: [ + 'refs/heads/master', + 'refs/pull/**', + 'refs/tags/**', + ], + }, + }, + + release:: { + kind: 'pipeline', + name: 'release-binary', + platform: { + os: 'linux', + arch: 'amd64', + }, + steps: [ + { + name: 'build-all-binary', + image: 'golang:1.11', + pull: 'always', + environment: { + GO111MODULE: 'on', + }, + commands: [ + 'make release' + ], + when: { + event: [ 'tag' ], + }, + }, + { + name: 'deploy-all-binary', + image: 'plugins/github-release', + pull: 'always', + settings: { + files: [ 'dist/release/*' ], + api_key: { 'from_secret': 'github_release_api_key' }, + }, + when: { + event: [ 'tag' ], + }, + }, + ], + depends_on: [ + 'testing', + ], + trigger: { + ref: [ + 'refs/tags/**', + ], + }, + }, + + notifications(os='linux', arch='amd64', depends_on=[]):: { + kind: 'pipeline', + name: 'notifications', + platform: { + os: os, + arch: arch, + }, + steps: [ + { + name: 'manifest', + image: 'plugins/manifest', + pull: 'always', + settings: { + username: { from_secret: 'docker_username' }, + password: { from_secret: 'docker_password' }, + spec: 'docker/manifest.tmpl', + ignore_missing: true, + }, + }, + { + name: 'microbadger', + image: 'plugins/webhook:1', + pull: 'always', + settings: { + url: { 'from_secret': 'microbadger_url' }, + }, + }, + ], + depends_on: depends_on, + trigger: { + ref: [ + 'refs/heads/master', + 'refs/tags/**', + ], + }, + }, + + signature(key):: { + kind: 'signature', + hmac: key, + } +}