From d19df7e3f9e9c8a84ba17841f9add1a0cd96e7b2 Mon Sep 17 00:00:00 2001 From: Ian Fijolek Date: Tue, 2 Feb 2021 13:49:10 -0800 Subject: [PATCH] Add drone builds --- .drone.yml | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ Makefile | 5 ++-- main.go | 14 ++++++++++ 3 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 .drone.yml diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..2f7c8b0 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,82 @@ +--- +kind: pipeline +name: test + +steps: + - name: check + image: iamthefij/drone-pre-commit:personal + +--- +kind: pipeline +name: build and publish + +depends_on: + - test + +trigger: + event: + - push + - tag + refs: + - refs/heads/master + - refs/tags/v* + +steps: + - name: build all binaries + image: golang:1.15 + environment: + VERSION: ${DRONE_TAG:-${DRONE_COMMIT}} + CLIENT_ID: + from_secret: slack_client_id + CLIENT_SECRET: + from_secret: slack_client_secret + commands: + - make all + + - name: compress binaries for release + image: ubuntu + commands: + - find ./dist -type f -executable -execdir tar -czvf {}.tar.gz {} \; + when: + event: tag + + - name: upload gitea release + image: plugins/gitea-release + settings: + title: ${DRONE_TAG} + files: dist/*.tar.gz + checksum: + - md5 + - sha1 + - sha256 + - sha512 + base_url: + from_secret: gitea_base_url + api_key: + from_secret: gitea_token + when: + event: tag + +--- +kind: pipeline +name: notify + +depends_on: + - test + +trigger: + status: + - failure + +steps: + + - name: notify + image: drillster/drone-email + settings: + host: + from_secret: SMTP_HOST # pragma: whitelist secret + username: + from_secret: SMTP_USER # pragma: whitelist secret + password: + from_secret: SMTP_PASS # pragma: whitelist secret + from: drone@iamthefij.com diff --git a/Makefile b/Makefile index 46a29ae..197ffb4 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,7 @@ OUTPUT = slack-status GOFILES = *.go go.mod go.sum DIST_ARCH = darwin-amd64 linux-amd64 DIST_TARGETS = $(addprefix dist/$(OUTPUT)-,$(DIST_ARCH)) +VERSION ?= $(shell git describe --tags --dirty) .PHONY: default default: slack-status @@ -28,12 +29,12 @@ $(DIST_TARGETS): $(GOFILES) @mkdir -p ./dist GOOS=$(word 3, $(subst -, ,$(@))) GOARCH=$(word 4, $(subst -, ,$(@))) \ go build \ - -ldflags '-X "main.defaultClientID=$(CLIENT_ID)" -X "main.defaultClientSecret=$(CLIENT_SECRET)"' \ + -ldflags '-X "main.version=${VERSION}" -X "main.defaultClientID=$(CLIENT_ID)" -X "main.defaultClientSecret=$(CLIENT_SECRET)"' \ -o $@ .PHONY: clean clean: - rm ./slack-status + rm -f ./slack-status rm -fr ./dist .PHONY: install-hooks diff --git a/main.go b/main.go index 59f7be4..a2ade43 100644 --- a/main.go +++ b/main.go @@ -10,6 +10,10 @@ import ( "github.com/slack-go/slack" ) +var ( + version = "dev" +) + // statusInfo contains all args passed from the command line type statusInfo struct { // status contents @@ -20,6 +24,9 @@ type statusInfo struct { // domain and login management login, makeDefault bool domain string + + // other + showVersion bool } // getExipirationTime returns epoch time that status should expire from the duration. @@ -72,6 +79,7 @@ func readFlags() statusInfo { login := flag.Bool("login", false, "login to a Slack workspace") domain := flag.String("domain", "", "domain to set status on") makeDefault := flag.Bool("make-default", false, "set the current domain to default") + showVersion := flag.Bool("version", false, "show version and exit") // Status flags snooze := flag.Bool("snooze", false, "snooze notifications") @@ -111,6 +119,7 @@ func readFlags() statusInfo { login: *login, domain: *domain, makeDefault: *makeDefault, + showVersion: *showVersion, } } @@ -163,6 +172,11 @@ func getClient(domain string) (*slack.Client, error) { func main() { args := readFlags() + if args.showVersion { + fmt.Println("version:", version) + return + } + var client *slack.Client var err error