diff --git a/.drone.yml b/.drone.yml index 9f32559..a75164a 100644 --- a/.drone.yml +++ b/.drone.yml @@ -45,14 +45,56 @@ trigger: - refs/tags/v* steps: + - name: build all binaries + image: golang:1.12 + commands: + - make all - # Might consider moving this step into the previous pipeline - - name: push image + - name: push image - arm image: plugins/docker settings: repo: iamthefij/minitor-go - dockerfile: Dockerfile.multi-stage auto_tag: true + auto_tag_suffix: linux-arm + username: + from_secret: docker_username + password: + from_secret: docker_password + build_args: + - ARCH=arm + - REPO=arm32v7 + + - name: push image - arm64 + image: plugins/docker + settings: + repo: iamthefij/minitor-go + auto_tag: true + auto_tag_suffix: linux-arm64 + username: + from_secret: docker_username + password: + from_secret: docker_password + build_args: + - ARCH=arm64 + - REPO=arm64v8 + + - name: push image - amd64 + image: plugins/docker + settings: + repo: iamthefij/minitor-go + auto_tag: true + auto_tag_suffix: linux-amd64 + username: + from_secret: docker_username + password: + from_secret: docker_password + + - name: publish manifest + image: plugins/manifest + settings: + spec: manifest.tmpl + auto_tag: true + ignore_missing: true username: from_secret: docker_username password: diff --git a/.gitignore b/.gitignore index a7dca91..2474b01 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,6 @@ config.yml # Output binary -minitor-go +minitor +minitor-linux-* +minitor-darwin-amd64 diff --git a/Dockerfile b/Dockerfile index 38c12d8..bd3eb46 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,10 +3,6 @@ FROM ${REPO}/alpine:3.10 RUN mkdir /app WORKDIR /app/ -# Copy minitor in -ARG ARCH=amd64 -COPY ./minitor-go ./minitor - # Add common checking tools RUN apk --no-cache add bash=~5.0 curl=~7.66 jq=~1.6 @@ -17,6 +13,10 @@ RUN addgroup -S minitor && adduser -S minitor -G minitor COPY ./scripts /app/scripts RUN chmod -R 755 /app/scripts +# Copy minitor in +ARG ARCH=amd64 +COPY ./minitor-linux-${ARCH} ./minitor + # Drop to non-root user USER minitor diff --git a/Makefile b/Makefile index 4348a65..e5c5791 100644 --- a/Makefile +++ b/Makefile @@ -1,23 +1,28 @@ -.PHONY: all DOCKER_TAG ?= minitor-go-${USER} +GIT_TAG_NAME := $(shell git tag -l --contains HEAD) +GIT_SHA := $(shell git rev-parse HEAD) +VERSION := $(if $(GIT_TAG_NAME),$(GIT_TAG_NAME),$(GIT_SHA)) + +.PHONY: all +all: minitor-linux-amd64 minitor-linux-arm minitor-linux-arm64 .PHONY: default default: test .PHONY: build -build: - go build +build: minitor -minitor-go: - go build +minitor: + @echo Version: $(VERSION) + go build -ldflags '-X "main.version=${VERSION}"' -o minitor .PHONY: run -run: minitor-go build - ./minitor-go -debug +run: minitor build + ./minitor -debug .PHONY: run-metrics -run-metrics: minitor-go build - ./minitor-go -debug -metrics +run-metrics: minitor build + ./minitor -debug -metrics .PHONY: test test: @@ -41,13 +46,56 @@ check: .PHONY: clean clean: - rm -f ./minitor-go + rm -f ./minitor + rm -f ./minitor-linux-* + rm -f ./minitor-darwin-amd64 rm -f ./coverage.out .PHONY: docker-build docker-build: - docker build -f ./Dockerfile.multi-stage -t $(DOCKER_TAG) . + docker build -f ./Dockerfile.multi-stage -t $(DOCKER_TAG)-linux-amd64 . .PHONY: docker-run docker-run: docker-build docker run --rm -v $(shell pwd)/config.yml:/root/config.yml $(DOCKER_TAG) + +## Multi-arch targets + +# Arch specific go build targets +minitor-darwin-amd64: + GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 \ + go build -ldflags '-X "main.version=${VERSION}"' -a -installsuffix nocgo \ + -o minitor-darwin-amd64 + +minitor-linux-amd64: + GOOS=linux GOARCH=amd64 CGO_ENABLED=0 \ + go build -ldflags '-X "main.version=${VERSION}"' -a -installsuffix nocgo \ + -o minitor-linux-amd64 + +minitor-linux-arm: + GOOS=linux GOARCH=arm CGO_ENABLED=0 \ + go build -ldflags '-X "main.version=${VERSION}"' -a -installsuffix nocgo \ + -o minitor-linux-arm + +minitor-linux-arm64: + GOOS=linux GOARCH=arm64 CGO_ENABLED=0 \ + go build -ldflags '-X "main.version=${VERSION}"' -a -installsuffix nocgo \ + -o minitor-linux-arm64 + +# Arch specific docker build targets +.PHONY: docker-build-arm +docker-build-arm: minitor-linux-arm + docker build --build-arg REPO=arm32v7 --build-arg ARCH=arm . -t ${DOCKER_TAG}-linux-arm + +.PHONY: docker-build-arm +docker-build-arm64: minitor-linux-arm64 + docker build --build-arg REPO=arm64v8 --build-arg ARCH=arm64 . -t ${DOCKER_TAG}-linux-arm64 + +# Cross run on host architechture +.PHONY: docker-run-arm +docker-run-arm: docker-build-arm + docker run --rm -v /var/run/docker.sock:/var/run/docker.sock --name $(DOCKER_TAG)-run ${DOCKER_TAG}-linux-arm + +.PHONY: docker-run-arm64 +docker-run-arm64: docker-build-arm64 + docker run --rm -v /var/run/docker.sock:/var/run/docker.sock --name $(DOCKER_TAG)-run ${DOCKER_TAG}-linux-arm64 diff --git a/manifest.tmpl b/manifest.tmpl new file mode 100644 index 0000000..d1e7379 --- /dev/null +++ b/manifest.tmpl @@ -0,0 +1,25 @@ +image: iamthefij/minitor-go:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}} +{{#if build.tags}} +tags: +{{#each build.tags}} + - {{this}} +{{/each}} +{{/if}} +manifests: + - + image: iamthefij/minitor-go:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}linux-amd64 + platform: + architecture: amd64 + os: linux + - + image: iamthefij/minitor-go:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}linux-arm64 + platform: + architecture: arm64 + os: linux + variant: v8 + - + image: iamthefij/minitor-go:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}linux-arm + platform: + architecture: arm + os: linux + variant: v7