diff --git a/.drone.jsonnet b/.drone.jsonnet index 7e9e9e7..b88a5b5 100644 --- a/.drone.jsonnet +++ b/.drone.jsonnet @@ -1,169 +1,14 @@ -local PipelineTesting = { - kind: "pipeline", - name: "testing", - platform: { - os: "linux", - arch: "amd64", - }, - steps: [ - { - name: "vet", - image: "golang:1.11", - pull: "always", - environment: { - GO111MODULE: "on", - }, - commands: [ - "go vet ./...", - ], - }, - { - name: "test", - image: "golang:1.11", - pull: "always", - environment: { - GO111MODULE: "on", - }, - commands: [ - "go test -cover ./...", - ], - }, - ], - trigger: { - branch: [ "master" ], - }, -}; - -local PipelineBuild(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 + "/drone-manifest", - ], - when: { - event: [ "push", "pull_request" ], - }, - }, - { - 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 + "/drone-manifest", - ], - when: { - event: [ "tag" ], - }, - }, - { - name: "executable", - image: "golang:1.11", - pull: "always", - commands: [ - "./release/" + os + "/" + arch + "/drone-manifest --help", - ], - }, - { - name: "dryrun", - image: "plugins/docker:" + os + "-" + arch, - pull: "always", - settings: { - dry_run: true, - tags: os + "-" + arch, - dockerfile: "docker/Dockerfile." + os + "." + arch, - repo: "plugins/manifest", - username: { "from_secret": "docker_username" }, - password: { "from_secret": "docker_password" }, - }, - when: { - event: [ "pull_request" ], - }, - }, - { - name: "publish", - image: "plugins/docker:" + os + "-" + arch, - pull: "always", - settings: { - auto_tag: true, - auto_tag_suffix: os + "-" + arch, - dockerfile: "docker/Dockerfile." + os + "." + arch, - repo: "plugins/manifest", - username: { "from_secret": "docker_username" }, - password: { "from_secret": "docker_password" }, - }, - when: { - event: [ "push", "tag" ], - }, - }, - ], - depends_on: [ - "testing", - ], - trigger: { - branch: [ "master" ], - }, -}; - -local PipelineNotifications = { - kind: "pipeline", - name: "notifications", - platform: { - os: "linux", - arch: "amd64", - }, - steps: [ - { - name: "manifest", - image: "plugins/manifest:1", - 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: [ - "linux-amd64", - "linux-arm64", - "linux-arm", - ], - trigger: { - branch: [ "master" ], - event: [ "push", "tag" ], - }, -}; +local pipeline = import 'pipeline.libsonnet'; +local name = 'drone-manifest'; [ - PipelineTesting, - PipelineBuild("linux", "amd64"), - PipelineBuild("linux", "arm64"), - PipelineBuild("linux", "arm"), - PipelineNotifications, + pipeline.test('linux', 'amd64'), + pipeline.build(name, 'linux', 'amd64'), + pipeline.build(name, 'linux', 'arm64'), + pipeline.build(name, 'linux', 'arm'), + pipeline.notifications(depends_on=[ + 'linux-amd64', + 'linux-arm64', + 'linux-arm', + ]), ] diff --git a/.drone.windows.jsonnet b/.drone.windows.jsonnet new file mode 100644 index 0000000..6977ace --- /dev/null +++ b/.drone.windows.jsonnet @@ -0,0 +1,9 @@ +local pipeline = import 'pipeline.libsonnet'; +local name = 'drone-manifest'; + +[ + pipeline.test('windows', 'amd64', '1803'), + pipeline.build(name, 'windows', 'amd64', '1803'), + pipeline.build(name, 'windows', 'amd64', '1809'), + pipeline.notifications('windows', 'amd64', '1809', ['windows-1803', 'windows-1809']), +] diff --git a/.drone.windows.yml b/.drone.windows.yml index 0695fd9..e65f94f 100644 --- a/.drone.windows.yml +++ b/.drone.windows.yml @@ -1,30 +1,73 @@ --- kind: pipeline -name: windows-amd64 +name: testing platform: os: windows arch: amd64 + version: 1803 + +steps: +- name: vet + pull: always + image: golang:1.11-windowsservercore-1803 + commands: + - go vet ./... + environment: + GO111MODULE: on + volumes: + - name: gopath + path: C:\\gopath + +- name: test + pull: always + image: golang:1.11-windowsservercore-1803 + commands: + - go test -cover ./... + environment: + GO111MODULE: on + volumes: + - name: gopath + path: C:\\gopath + +volumes: +- name: gopath + temp: {} + +trigger: + ref: + - refs/heads/master + - "refs/tags/**" + - "refs/pull/**" + +--- +kind: pipeline +name: windows-1803 + +platform: + os: windows + arch: amd64 + version: 1803 steps: - name: build-push pull: always - image: golang:1.11 + image: golang:1.11-windowsservercore-1803 commands: - - "go build -v -ldflags \"-X main.build=${DRONE_BUILD_NUMBER}\" -a -o release/windows/amd64/drone-manifest" + - "go build -v -ldflags \"-X main.version=${DRONE_COMMIT_SHA:0:8}\" -a -tags netgo -o release/windows/amd64/drone-manifest.exe" environment: CGO_ENABLED: 0 GO111MODULE: on when: event: - - push - - pull_request + exclude: + - tag - name: build-tag pull: always - image: golang:1.11 + image: golang:1.11-windowsservercore-1803 commands: - - "go build -v -ldflags \"-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}\" -a -o release/windows/amd64/drone-manifest" + - "go build -v -ldflags \"-X main.version=${DRONE_TAG##v}\" -a -tags netgo -o release/windows/amd64/drone-manifest.exe" environment: CGO_ENABLED: 0 GO111MODULE: on @@ -34,43 +77,196 @@ steps: - name: executable pull: always - image: golang:1.11 + image: golang:1.11-windowsservercore-1803 commands: - - ./release/windows/amd64/drone-manifest --help + - ./release/windows/amd64/drone-manifest.exe --help - name: dryrun pull: always - image: plugins/docker:windows-amd64 + image: plugins/docker:windows-1803 settings: - dockerfile: docker/Dockerfile.windows.amd64 + daemon_off: true + dockerfile: docker/Dockerfile.windows.1803 dry_run: true password: from_secret: docker_password repo: plugins/manifest - tags: windows-amd64 + tags: windows-1803 username: from_secret: docker_username + volumes: + - name: docker_pipe + path: \\\\.\\pipe\\docker_engine when: event: - pull_request - name: publish pull: always - image: plugins/docker:windows-amd64 + image: plugins/docker:windows-1803 settings: auto_tag: true - auto_tag_suffix: windows-amd64 - dockerfile: docker/Dockerfile.windows.amd64 + auto_tag_suffix: windows-1803 + daemon_off: true + dockerfile: docker/Dockerfile.windows.1803 password: from_secret: docker_password repo: plugins/manifest username: from_secret: docker_username + volumes: + - name: docker_pipe + path: \\\\.\\pipe\\docker_engine when: event: - - push - - tag + exclude: + - pull_request + +volumes: +- name: docker_pipe + host: + path: \\\\.\\pipe\\docker_engine trigger: - branch: - - master + ref: + - refs/heads/master + - "refs/tags/**" + - "refs/pull/**" + +depends_on: +- testing + +--- +kind: pipeline +name: windows-1809 + +platform: + os: windows + arch: amd64 + version: 1809 + +steps: +- name: build-push + pull: always + image: golang:1.11-windowsservercore-1809 + commands: + - "go build -v -ldflags \"-X main.version=${DRONE_COMMIT_SHA:0:8}\" -a -tags netgo -o release/windows/amd64/drone-manifest.exe" + environment: + CGO_ENABLED: 0 + GO111MODULE: on + when: + event: + exclude: + - tag + +- name: build-tag + pull: always + image: golang:1.11-windowsservercore-1809 + commands: + - "go build -v -ldflags \"-X main.version=${DRONE_TAG##v}\" -a -tags netgo -o release/windows/amd64/drone-manifest.exe" + environment: + CGO_ENABLED: 0 + GO111MODULE: on + when: + event: + - tag + +- name: executable + pull: always + image: golang:1.11-windowsservercore-1809 + commands: + - ./release/windows/amd64/drone-manifest.exe --help + +- name: dryrun + pull: always + image: plugins/docker:windows-1809 + settings: + daemon_off: true + dockerfile: docker/Dockerfile.windows.1809 + dry_run: true + password: + from_secret: docker_password + repo: plugins/manifest + tags: windows-1809 + username: + from_secret: docker_username + volumes: + - name: docker_pipe + path: \\\\.\\pipe\\docker_engine + when: + event: + - pull_request + +- name: publish + pull: always + image: plugins/docker:windows-1809 + settings: + auto_tag: true + auto_tag_suffix: windows-1809 + daemon_off: true + dockerfile: docker/Dockerfile.windows.1809 + password: + from_secret: docker_password + repo: plugins/manifest + username: + from_secret: docker_username + volumes: + - name: docker_pipe + path: \\\\.\\pipe\\docker_engine + when: + event: + exclude: + - pull_request + +volumes: +- name: docker_pipe + host: + path: \\\\.\\pipe\\docker_engine + +trigger: + ref: + - refs/heads/master + - "refs/tags/**" + - "refs/pull/**" + +depends_on: +- testing + +--- +kind: pipeline +name: notifications + +platform: + os: windows + arch: amd64 + version: 1809 + +steps: +- name: manifest + pull: always + image: plugins/manifest + settings: + ignore_missing: true + password: + from_secret: docker_password + spec: docker/manifest.tmpl + username: + from_secret: docker_username + +- name: microbadger + pull: always + image: plugins/webhook + settings: + url: + from_secret: microbadger_url + +trigger: + ref: + - refs/heads/master + - "refs/tags/**" + +depends_on: +- windows-1803 +- windows-1809 + +... diff --git a/.drone.yml b/.drone.yml index 630a358..d42a946 100644 --- a/.drone.yml +++ b/.drone.yml @@ -14,6 +14,9 @@ steps: - go vet ./... environment: GO111MODULE: on + volumes: + - name: gopath + path: /go - name: test pull: always @@ -22,10 +25,19 @@ steps: - go test -cover ./... environment: GO111MODULE: on + volumes: + - name: gopath + path: /go + +volumes: +- name: gopath + temp: {} trigger: - branch: - - master + ref: + - refs/heads/master + - "refs/tags/**" + - "refs/pull/**" --- kind: pipeline @@ -40,20 +52,20 @@ steps: pull: always image: golang:1.11 commands: - - "go build -v -ldflags \"-X main.build=${DRONE_BUILD_NUMBER}\" -a -o release/linux/amd64/drone-manifest" + - "go build -v -ldflags \"-X main.version=${DRONE_COMMIT_SHA:0:8}\" -a -tags netgo -o release/linux/amd64/drone-manifest" environment: CGO_ENABLED: 0 GO111MODULE: on when: event: - - push - - pull_request + exclude: + - tag - name: build-tag pull: always image: golang:1.11 commands: - - "go build -v -ldflags \"-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}\" -a -o release/linux/amd64/drone-manifest" + - "go build -v -ldflags \"-X main.version=${DRONE_TAG##v}\" -a -tags netgo -o release/linux/amd64/drone-manifest" environment: CGO_ENABLED: 0 GO111MODULE: on @@ -71,6 +83,7 @@ steps: pull: always image: plugins/docker:linux-amd64 settings: + daemon_off: false dockerfile: docker/Dockerfile.linux.amd64 dry_run: true password: @@ -89,6 +102,7 @@ steps: settings: auto_tag: true auto_tag_suffix: linux-amd64 + daemon_off: false dockerfile: docker/Dockerfile.linux.amd64 password: from_secret: docker_password @@ -97,12 +111,14 @@ steps: from_secret: docker_username when: event: - - push - - tag + exclude: + - pull_request trigger: - branch: - - master + ref: + - refs/heads/master + - "refs/tags/**" + - "refs/pull/**" depends_on: - testing @@ -120,20 +136,20 @@ steps: pull: always image: golang:1.11 commands: - - "go build -v -ldflags \"-X main.build=${DRONE_BUILD_NUMBER}\" -a -o release/linux/arm64/drone-manifest" + - "go build -v -ldflags \"-X main.version=${DRONE_COMMIT_SHA:0:8}\" -a -tags netgo -o release/linux/arm64/drone-manifest" environment: CGO_ENABLED: 0 GO111MODULE: on when: event: - - push - - pull_request + exclude: + - tag - name: build-tag pull: always image: golang:1.11 commands: - - "go build -v -ldflags \"-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}\" -a -o release/linux/arm64/drone-manifest" + - "go build -v -ldflags \"-X main.version=${DRONE_TAG##v}\" -a -tags netgo -o release/linux/arm64/drone-manifest" environment: CGO_ENABLED: 0 GO111MODULE: on @@ -151,6 +167,7 @@ steps: pull: always image: plugins/docker:linux-arm64 settings: + daemon_off: false dockerfile: docker/Dockerfile.linux.arm64 dry_run: true password: @@ -169,6 +186,7 @@ steps: settings: auto_tag: true auto_tag_suffix: linux-arm64 + daemon_off: false dockerfile: docker/Dockerfile.linux.arm64 password: from_secret: docker_password @@ -177,12 +195,14 @@ steps: from_secret: docker_username when: event: - - push - - tag + exclude: + - pull_request trigger: - branch: - - master + ref: + - refs/heads/master + - "refs/tags/**" + - "refs/pull/**" depends_on: - testing @@ -200,20 +220,20 @@ steps: pull: always image: golang:1.11 commands: - - "go build -v -ldflags \"-X main.build=${DRONE_BUILD_NUMBER}\" -a -o release/linux/arm/drone-manifest" + - "go build -v -ldflags \"-X main.version=${DRONE_COMMIT_SHA:0:8}\" -a -tags netgo -o release/linux/arm/drone-manifest" environment: CGO_ENABLED: 0 GO111MODULE: on when: event: - - push - - pull_request + exclude: + - tag - name: build-tag pull: always image: golang:1.11 commands: - - "go build -v -ldflags \"-X main.version=${DRONE_TAG##v} -X main.build=${DRONE_BUILD_NUMBER}\" -a -o release/linux/arm/drone-manifest" + - "go build -v -ldflags \"-X main.version=${DRONE_TAG##v}\" -a -tags netgo -o release/linux/arm/drone-manifest" environment: CGO_ENABLED: 0 GO111MODULE: on @@ -231,6 +251,7 @@ steps: pull: always image: plugins/docker:linux-arm settings: + daemon_off: false dockerfile: docker/Dockerfile.linux.arm dry_run: true password: @@ -249,6 +270,7 @@ steps: settings: auto_tag: true auto_tag_suffix: linux-arm + daemon_off: false dockerfile: docker/Dockerfile.linux.arm password: from_secret: docker_password @@ -257,12 +279,14 @@ steps: from_secret: docker_username when: event: - - push - - tag + exclude: + - pull_request trigger: - branch: - - master + ref: + - refs/heads/master + - "refs/tags/**" + - "refs/pull/**" depends_on: - testing @@ -278,7 +302,7 @@ platform: steps: - name: manifest pull: always - image: plugins/manifest:1 + image: plugins/manifest settings: ignore_missing: true password: @@ -289,17 +313,15 @@ steps: - name: microbadger pull: always - image: plugins/webhook:1 + image: plugins/webhook settings: url: from_secret: microbadger_url trigger: - branch: - - master - event: - - push - - tag + ref: + - refs/heads/master + - "refs/tags/**" depends_on: - linux-amd64 diff --git a/README.md b/README.md index 5045a94..54bc568 100644 --- a/README.md +++ b/README.md @@ -12,24 +12,31 @@ Drone plugin to push Docker manifest to a registry for multi-architecture mappin ## Build -Build the binary with the following commands: +Build the binary with the following command: -``` -go build +```console +export GOOS=linux +export GOARCH=amd64 +export CGO_ENABLED=0 +export GO111MODULE=on + +go build -v -a -tags netgo -o release/linux/amd64/drone-manifest ``` ## Docker -Build the Docker image with the following commands: +Build the Docker image with the following command: -``` -GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -a -tags netgo -o release/linux/amd64/drone-manifest -docker build --rm -t plugins/manifest . +```console +docker build \ + --label org.label-schema.build-date=$(date -u +"%Y-%m-%dT%H:%M:%SZ") \ + --label org.label-schema.vcs-ref=$(git rev-parse --short HEAD) \ + --file docker/Dockerfile.linux.amd64 --tag plugins/manifest . ``` -### Usage +## Usage -``` +```console docker run --rm \ -e PLUGIN_PLATFORMS=linux/amd64,linux/arm,linux/arm64 \ -e PLUGIN_TEMPLATE=organization/project-ARCH:1.0.0 \ diff --git a/docker/manifest.tmpl b/docker/manifest.tmpl index d2f2afa..4e17f68 100644 --- a/docker/manifest.tmpl +++ b/docker/manifest.tmpl @@ -1,4 +1,4 @@ -image: plugins/manifest:{{#if build.tag}}{{trimPrefix build.tag "v"}}{{else}}latest{{/if}} +image: plugins/manifest:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}} {{#if build.tags}} tags: {{#each build.tags}} @@ -7,30 +7,30 @@ tags: {{/if}} manifests: - - image: plugins/manifest:{{#if build.tag}}{{trimPrefix build.tag "v"}}-{{/if}}linux-amd64 + image: plugins/manifest:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}linux-amd64 platform: architecture: amd64 os: linux - - image: plugins/manifest:{{#if build.tag}}{{trimPrefix build.tag "v"}}-{{/if}}linux-arm64 + image: plugins/manifest:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}linux-arm64 platform: architecture: arm64 os: linux variant: v8 - - image: plugins/manifest:{{#if build.tag}}{{trimPrefix build.tag "v"}}-{{/if}}linux-arm + image: plugins/manifest:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}linux-arm platform: architecture: arm os: linux variant: v7 - - image: plugins/manifest:{{#if build.tag}}{{trimPrefix build.tag "v"}}-{{/if}}windows-1803 + image: plugins/manifest:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}windows-1803 platform: architecture: amd64 os: windows version: 1803 - - image: plugins/manifest:{{#if build.tag}}{{trimPrefix build.tag "v"}}-{{/if}}windows-1809 + image: plugins/manifest:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}windows-1809 platform: architecture: amd64 os: windows diff --git a/go.mod b/go.mod index 58e4079..479779b 100644 --- a/go.mod +++ b/go.mod @@ -2,9 +2,8 @@ module github.com/drone-plugins/drone-manifest require ( bou.ke/monkey v1.0.1 // indirect - github.com/aymerick/raymond v2.0.2+incompatible // indirect github.com/coreos/go-semver v0.2.0 - github.com/drone/drone-template-lib v0.0.0-20180401170447-5748d3149f48 + github.com/drone/drone-template-lib v1.0.0 github.com/pkg/errors v0.8.1 github.com/stretchr/testify v1.3.0 // indirect github.com/tkuchiki/faketime v0.1.1 // indirect diff --git a/go.sum b/go.sum index 0e17aa3..b79c778 100644 --- a/go.sum +++ b/go.sum @@ -1,26 +1,35 @@ -bou.ke/monkey v1.0.1 h1:zEMLInw9xvNakzUUPjfS4Ds6jYPqCFx3m7bRmG5NH2U= bou.ke/monkey v1.0.1/go.mod h1:FgHuK96Rv2Nlf+0u1OOVDpCMdsWyOFmeeketDHE7LIg= +github.com/Masterminds/goutils v1.1.0 h1:zukEsf/1JZwCMgHiK3GZftabmxiCw4apj3a28RPBiVg= +github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.4.2 h1:WBLTQ37jOCzSLtXNdoo8bNM8876KhNqOKvrlGITgsTc= +github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/sprig v2.18.0+incompatible h1:QoGhlbC6pter1jxKnjMFxT8EqsLuDE6FEcNbWEpw+lI= +github.com/Masterminds/sprig v2.18.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/aymerick/raymond v2.0.2+incompatible h1:VEp3GpgdAnv9B2GFyTvqgcKvY+mfKMjPOA3SbKLtnU0= github.com/aymerick/raymond v2.0.2+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= +github.com/bouk/monkey v1.0.0/go.mod h1:PG/63f4XEUlVyW1ttIeOJmJhhe1+t9EC/je3eTjvFhE= github.com/coreos/go-semver v0.2.0 h1:3Jm3tLmsgAYcjC+4Up7hJrFBPr+n7rAqYeSw/SZazuY= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/drone/drone-template-lib v0.0.0-20180401170447-5748d3149f48 h1:hP2l5isqaiJVvOUM8X/1WDNeeJKlVmM8I1B9aDNT/xw= -github.com/drone/drone-template-lib v0.0.0-20180401170447-5748d3149f48/go.mod h1:u34woe41m58Whrf21iH6z/xLOIRM3650LhWAyUc7Oik= -github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw= +github.com/drone/drone-template-lib v1.0.0 h1:PNBBfUhifRnrPCoWBlTitk3jipXdv8u8WLbIf7h7j00= +github.com/drone/drone-template-lib v1.0.0/go.mod h1:Hqy1tgqPH5mtbFOZmow19l4jOkZvp+WZ00cB4W3MJhg= +github.com/google/uuid v1.1.0 h1:Jf4mxPC/ziBnoPIdpQdPJ9OeiomAUHLvxmPRSPH9m4s= +github.com/google/uuid v1.1.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/huandu/xstrings v1.2.0 h1:yPeWdRnmynF7p+lLYz0H2tthW9lqhMJrQV/U7yy4wX0= +github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= +github.com/imdario/mergo v0.3.7 h1:Y+UAYTZ7gDEuOfhxKWy+dvb5dRQ6rJjFSdX2HZY1/gI= +github.com/imdario/mergo v0.3.7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/tkuchiki/faketime v0.1.1 h1:UZjBlktFAi23wo+jWuHuNoHUpLnB0j/5B62bl5nCPls= +github.com/tkuchiki/faketime v0.0.0-20170607100027-a4500a4f4643/go.mod h1:RXY/TXAwGGL36IKDjrHFMcjpUrEiyWSEtLhFPw3UWF0= github.com/tkuchiki/faketime v0.1.1/go.mod h1:RXY/TXAwGGL36IKDjrHFMcjpUrEiyWSEtLhFPw3UWF0= github.com/urfave/cli v0.0.0-20180821064027-934abfb2f102 h1:Er7kUEUX12vAWCp23Uv6Nrza7kEzEm/Z77amjMT7/Lo= github.com/urfave/cli v0.0.0-20180821064027-934abfb2f102/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67 h1:ng3VDlRp5/DHpSWl02R4rM9I+8M2rhmsuLwAMmkLQWE= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/main.go b/main.go index 5a22be4..0fb430a 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,6 @@ package main import ( - "fmt" "log" "os" @@ -10,16 +9,15 @@ import ( ) var ( - version = "0.0.0" - build = "0" + version = "unknown" ) func main() { app := cli.NewApp() app.Name = "manifest plugin" app.Usage = "manifest plugin" - app.Version = fmt.Sprintf("%s+%s", version, build) app.Action = run + app.Version = version app.Flags = []cli.Flag{ cli.StringFlag{ Name: "username", diff --git a/pipeline.libsonnet b/pipeline.libsonnet new file mode 100644 index 0000000..aab20bd --- /dev/null +++ b/pipeline.libsonnet @@ -0,0 +1,204 @@ +local windows_pipe = '\\\\\\\\.\\\\pipe\\\\docker_engine'; +local windows_pipe_volume = 'docker_pipe'; +local test_pipeline_name = 'testing'; + +local windows(os) = os == 'windows'; + +local golang_image(os, version) = + 'golang:' + '1.11' + if windows(os) then '-windowsservercore-' + version else ''; + +{ + test(os='linux', arch='amd64', version=''):: + local is_windows = windows(os); + local golang = golang_image(os, version); + local volumes = if is_windows then [{name: 'gopath', path: 'C:\\\\gopath'}] else [{name: 'gopath', path: '/go',}]; + { + kind: 'pipeline', + name: test_pipeline_name, + platform: { + os: os, + arch: arch, + version: if std.length(version) > 0 then version, + }, + steps: [ + { + name: 'vet', + image: golang, + pull: 'always', + environment: { + GO111MODULE: 'on', + }, + commands: [ + 'go vet ./...', + ], + volumes: volumes, + }, + { + name: 'test', + image: golang, + pull: 'always', + environment: { + GO111MODULE: 'on', + }, + commands: [ + 'go test -cover ./...', + ], + volumes: volumes, + }, + ], + trigger: { + ref: [ + 'refs/heads/master', + 'refs/tags/**', + 'refs/pull/**', + ], + }, + volumes: [{name: 'gopath', temp: {}}] + }, + + build(name, os='linux', arch='amd64', version=''):: + local is_windows = windows(os); + local tag = if is_windows then os + '-' + version else os + '-' + arch; + local file_suffix = std.strReplace(tag, '-', '.'); + local volumes = if is_windows then [{ name: windows_pipe_volume, path: windows_pipe }] else []; + local golang = golang_image(os, version); + local plugin_repo = 'plugins/' + std.splitLimit(name, '-', 1)[1]; + local extension = if is_windows then '.exe' else ''; + { + kind: 'pipeline', + name: tag, + platform: { + os: os, + arch: arch, + version: if std.length(version) > 0 then version, + }, + steps: [ + { + name: 'build-push', + image: golang, + pull: 'always', + environment: { + CGO_ENABLED: '0', + GO111MODULE: 'on', + }, + commands: [ + 'go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/' + os + '/' + arch + '/' + name + extension, + ], + when: { + event: { + exclude: ['tag'], + }, + }, + }, + { + name: 'build-tag', + image: golang, + pull: 'always', + environment: { + CGO_ENABLED: '0', + GO111MODULE: 'on', + }, + commands: [ + 'go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/' + os + '/' + arch + '/' + name + extension, + ], + when: { + event: ['tag'], + }, + }, + { + name: 'executable', + image: golang, + pull: 'always', + commands: [ + './release/' + os + '/' + arch + '/' + name + extension + ' --help', + ], + }, + { + name: 'dryrun', + image: 'plugins/docker:' + tag, + pull: 'always', + settings: { + dry_run: true, + tags: tag, + dockerfile: 'docker/Dockerfile.' + file_suffix, + daemon_off: if is_windows then 'true' else 'false', + repo: plugin_repo, + username: { from_secret: 'docker_username' }, + password: { from_secret: 'docker_password' }, + }, + volumes: if std.length(volumes) > 0 then volumes, + when: { + event: ['pull_request'], + }, + }, + { + name: 'publish', + image: 'plugins/docker:' + tag, + pull: 'always', + settings: { + auto_tag: true, + auto_tag_suffix: tag, + daemon_off: if is_windows then 'true' else 'false', + dockerfile: 'docker/Dockerfile.' + file_suffix, + repo: plugin_repo, + username: { from_secret: 'docker_username' }, + password: { from_secret: 'docker_password' }, + }, + volumes: if std.length(volumes) > 0 then volumes, + when: { + event: { + exclude: ['pull_request'], + }, + }, + }, + ], + trigger: { + ref: [ + 'refs/heads/master', + 'refs/tags/**', + 'refs/pull/**', + ], + }, + depends_on: [test_pipeline_name], + volumes: if is_windows then [{ name: windows_pipe_volume, host: { path: windows_pipe } }], + }, + + notifications(os='linux', arch='amd64', version='', depends_on=[]):: + { + kind: 'pipeline', + name: 'notifications', + platform: { + os: os, + arch: arch, + version: if std.length(version) > 0 then version, + }, + 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', + pull: 'always', + settings: { + url: { from_secret: 'microbadger_url' }, + }, + }, + ], + trigger: { + ref: [ + 'refs/heads/master', + 'refs/tags/**', + ], + }, + depends_on: depends_on, + }, +} diff --git a/renovate.json b/renovate.json deleted file mode 100644 index 9980624..0000000 --- a/renovate.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": [ - "config:base" - ], - "docker": { - "fileMatch": [ - "/docker/Dockerfile" - ] - }, - "labels": [ - "renovate" - ] -}