diff --git a/.drone.star b/.drone.star index 4d01a46..6f609f3 100644 --- a/.drone.star +++ b/.drone.star @@ -5,6 +5,7 @@ def main(ctx): linux('amd64'), linux('arm64'), linux('arm'), + binaries([]), ] after = notification() @@ -82,42 +83,23 @@ def linux(arch): }, 'steps': [ { - 'name': 'build-push', + 'name': 'build', 'image': 'golang:1.12', 'environment': { - 'CGO_ENABLED': '0' + 'CGO_ENABLED': '0', + 'BUILD_VERSION': '${DRONE_TAG##v}' }, 'commands': [ - 'go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/%s/github-releases-notifier' % arch + '[ -z "${BUILD_VERSION}" ] && BUILD_VERSION=${DRONE_COMMIT_SHA:0:8}', + 'go build -v -ldflags "-X main.Version=$BUILD_VERSION" -a -tags netgo -o release/%s/github-releases-notifier' % arch ], - 'when': { - 'event': { - 'exclude': [ - 'tag' - ] - } - } - }, - { - 'name': 'build-tag', - 'image': 'golang:1.12', - 'environment': { - 'CGO_ENABLED': '0' - }, - 'commands': [ - 'go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/%s/github-releases-notifier' % arch - ], - 'when': { - 'event': [ - 'tag' - ] - } }, { 'name': 'executable', 'image': 'golang:1.12', 'commands': [ - './release/%s/github-releases-notifier --help' % arch + './release/%s/github-releases-notifier --help' % arch, + './release/%s/github-releases-notifier --version' % arch ] }, { @@ -175,6 +157,54 @@ def linux(arch): } } +def binaries(arch): + return { + 'kind': 'pipeline', + 'type': 'docker', + 'name': 'build-binaries', + 'steps': [ + { + 'name': 'build', + 'image': 'techknowlogick/xgo:latest', + 'environment': { + 'BUILD_VERSION': '${DRONE_TAG##v}' + }, + 'commands': [ + '[ -z "${BUILD_VERSION}" ] && BUILD_VERSION=${DRONE_COMMIT_SHA:0:8}', + 'mkdir -p release/', + "xgo -ldflags \"-X main.Version=$BUILD_VERSION\" -tags netgo -targets 'linux/amd64,linux/arm-6,linux/arm64' -out github-releases-notifier-$BUILD_VERSION .", + 'cp /build/* release/', + 'ls -lah release/' + ] + }, + { + 'name': 'publish', + 'image': 'plugins/github-release', + 'settings': { + 'overwrite': True, + 'api_key': { + 'from_secret': 'github_token' + }, + 'title': '${DRONE_TAG}', + 'note': 'CHANGELOG.md', + }, + 'when': { + 'ref': [ + 'refs/tags/**' + ] + } + } + ], + 'depends_on': [], + 'trigger': { + 'ref': [ + 'refs/heads/master', + 'refs/tags/**', + 'refs/pull/**' + ] + } + } + def notification(): return [{ 'kind': 'pipeline', diff --git a/.drone.yml b/.drone.yml index 820b666..34c5782 100644 --- a/.drone.yml +++ b/.drone.yml @@ -44,31 +44,20 @@ platform: arch: amd64 steps: -- name: build-push +- name: build image: golang:1.12 commands: - - go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/amd64/github-releases-notifier + - "[ -z \"${BUILD_VERSION}\" ] && BUILD_VERSION=${DRONE_COMMIT_SHA:0:8}" + - go build -v -ldflags "-X main.Version=$BUILD_VERSION" -a -tags netgo -o release/amd64/github-releases-notifier environment: + BUILD_VERSION: ${DRONE_TAG##v} CGO_ENABLED: 0 - when: - event: - exclude: - - tag - -- name: build-tag - image: golang:1.12 - commands: - - go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/amd64/github-releases-notifier - environment: - CGO_ENABLED: 0 - when: - event: - - tag - name: executable image: golang:1.12 commands: - ./release/amd64/github-releases-notifier --help + - ./release/amd64/github-releases-notifier --version - name: dryrun image: plugins/docker @@ -120,31 +109,20 @@ platform: arch: arm64 steps: -- name: build-push +- name: build image: golang:1.12 commands: - - go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/arm64/github-releases-notifier + - "[ -z \"${BUILD_VERSION}\" ] && BUILD_VERSION=${DRONE_COMMIT_SHA:0:8}" + - go build -v -ldflags "-X main.Version=$BUILD_VERSION" -a -tags netgo -o release/arm64/github-releases-notifier environment: + BUILD_VERSION: ${DRONE_TAG##v} CGO_ENABLED: 0 - when: - event: - exclude: - - tag - -- name: build-tag - image: golang:1.12 - commands: - - go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/arm64/github-releases-notifier - environment: - CGO_ENABLED: 0 - when: - event: - - tag - name: executable image: golang:1.12 commands: - ./release/arm64/github-releases-notifier --help + - ./release/arm64/github-releases-notifier --version - name: dryrun image: plugins/docker @@ -196,31 +174,20 @@ platform: arch: arm steps: -- name: build-push +- name: build image: golang:1.12 commands: - - go build -v -ldflags "-X main.version=${DRONE_COMMIT_SHA:0:8}" -a -tags netgo -o release/arm/github-releases-notifier + - "[ -z \"${BUILD_VERSION}\" ] && BUILD_VERSION=${DRONE_COMMIT_SHA:0:8}" + - go build -v -ldflags "-X main.Version=$BUILD_VERSION" -a -tags netgo -o release/arm/github-releases-notifier environment: + BUILD_VERSION: ${DRONE_TAG##v} CGO_ENABLED: 0 - when: - event: - exclude: - - tag - -- name: build-tag - image: golang:1.12 - commands: - - go build -v -ldflags "-X main.version=${DRONE_TAG##v}" -a -tags netgo -o release/arm/github-releases-notifier - environment: - CGO_ENABLED: 0 - when: - event: - - tag - name: executable image: golang:1.12 commands: - ./release/arm/github-releases-notifier --help + - ./release/arm/github-releases-notifier --version - name: dryrun image: plugins/docker @@ -262,6 +229,48 @@ trigger: depends_on: - testing +--- +kind: pipeline +type: docker +name: build-binaries + +platform: + os: linux + arch: amd64 + +steps: +- name: build + image: techknowlogick/xgo:latest + commands: + - "[ -z \"${BUILD_VERSION}\" ] && BUILD_VERSION=${DRONE_COMMIT_SHA:0:8}" + - mkdir -p release/ + - xgo -ldflags "-X main.Version=$BUILD_VERSION" -tags netgo -targets 'linux/amd64,linux/arm-6,linux/arm64' -out github-releases-notifier-$BUILD_VERSION . + - cp /build/* release/ + - ls -lah release/ + environment: + BUILD_VERSION: ${DRONE_TAG##v} + +- name: publish + image: plugins/github-release + settings: + api_key: + from_secret: github_token + note: CHANGELOG.md + overwrite: true + title: ${DRONE_TAG} + when: + ref: + - refs/tags/** + +trigger: + ref: + - refs/heads/master + - refs/tags/** + - refs/pull/** + +depends_on: +- testing + --- kind: pipeline type: docker @@ -332,9 +341,10 @@ depends_on: - build-container-amd64 - build-container-arm64 - build-container-arm +- build-binaries --- kind: signature -hmac: 48723ecce577b6addd70c457f07360a1986bbb43b56034619bf9843efc797a4a +hmac: 4c60720bd47e885df1e36d84a68edb5e4fb4f9030113a52dda16b37a7da11f85 ... diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..e69de29 diff --git a/main.go b/main.go index 83b41c1..7dd2224 100644 --- a/main.go +++ b/main.go @@ -14,6 +14,9 @@ import ( "golang.org/x/oauth2" ) +// Version of current build +var Version = "devel" + // Config of env and args type Config struct { GithubToken string `arg:"env:GITHUB_TOKEN,required"` @@ -29,6 +32,11 @@ func (c Config) Token() *oauth2.Token { return &oauth2.Token{AccessToken: c.GithubToken} } +// Version prints version string +func (Config) Version() string { + return "github-releases-notifier " + Version +} + func main() { _ = godotenv.Load()