From 0b960631e6fbfa6ede650085fc0127dd4f21ca34 Mon Sep 17 00:00:00 2001 From: Rob Best Date: Thu, 23 Dec 2021 12:29:24 +0000 Subject: [PATCH] CI improvements --- .github/workflows/build.yaml | 44 ------------------------ .github/workflows/release.yaml | 9 +++++ .github/workflows/test-and-snapshot.yaml | 39 +++++++++++++++++++++ .goreleaser.yaml | 18 ++++++++-- Dockerfile | 20 +++++------ Dockerfile.local | 21 +++++++++++ Makefile | 18 +++++----- 7 files changed, 100 insertions(+), 69 deletions(-) delete mode 100644 .github/workflows/build.yaml create mode 100644 .github/workflows/test-and-snapshot.yaml create mode 100644 Dockerfile.local diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml deleted file mode 100644 index bd3b07c..0000000 --- a/.github/workflows/build.yaml +++ /dev/null @@ -1,44 +0,0 @@ -name: build -on: [push, pull_request] -jobs: - docker: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 - - name: Login to Docker Hub - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Extract metadata (tags, labels) for Docker - id: meta - uses: docker/metadata-action@v3 - with: - images: ribbybibby/ssl-exporter - - name: Build and push Docker image - uses: docker/build-push-action@v2 - with: - context: . - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - snapshot: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - name: Set up Go - uses: actions/setup-go@v1 - with: - go-version: 1.17.x - - name: Build release snapshot - run: make snapshot - - name: Archive release snapshot - uses: actions/upload-artifact@v2 - with: - name: release-snapshot - path: | - bin/*.tar.gz - bin/*.txt - bin/*.yaml diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 41335d7..d16d6c6 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -10,12 +10,21 @@ jobs: steps: - name: Checkout uses: actions/checkout@v2 + - name: Unshallow run: git fetch --prune --unshallow + - name: Set up Go uses: actions/setup-go@v1 with: go-version: 1.17.x + + - name: Login to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Release with GoReleaser run: make release env: diff --git a/.github/workflows/test-and-snapshot.yaml b/.github/workflows/test-and-snapshot.yaml new file mode 100644 index 0000000..ea4eed3 --- /dev/null +++ b/.github/workflows/test-and-snapshot.yaml @@ -0,0 +1,39 @@ +name: test-and-snapshot + +on: [push, pull_request] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Set up Go + uses: actions/setup-go@v1 + with: + go-version: 1.17.x + + - name: Test + run: make test + + snapshot: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + + - name: Set up Go + uses: actions/setup-go@v1 + with: + go-version: 1.17.x + + - name: Build release snapshot + run: make snapshot + + - name: Archive release snapshot + uses: actions/upload-artifact@v2 + with: + name: release-snapshot + path: | + bin/*.tar.gz + bin/*.txt + bin/*.yaml diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 9c3768d..94287b1 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -13,12 +13,24 @@ builds: flags: - -v ldflags: | - -X github.com/prometheus/common/version.Version={{.Env.APP_VERSION}} - -X github.com/prometheus/common/version.Revision={{.Env.APP_REVISION}} + -X github.com/prometheus/common/version.Version={{.Version}} + -X github.com/prometheus/common/version.Revision={{.Commit}} -X github.com/prometheus/common/version.Branch={{.Env.APP_BRANCH}} -X github.com/prometheus/common/version.BuildUser={{.Env.APP_USER}}@{{.Env.APP_HOST}} - -X github.com/prometheus/common/version.BuildDate={{.Env.APP_BUILD_DATE}} + -X github.com/prometheus/common/version.BuildDate={{.Date}} release: github: owner: ribbybibby name: ssl_exporter +dockers: +- image_templates: + - '{{.Env.APP_DOCKER_IMAGE_NAME}}:{{.Version}}' + - '{{.Env.APP_DOCKER_IMAGE_NAME}}:latest' + dockerfile: Dockerfile + build_flag_templates: + - "--pull" + - "--label=org.opencontainers.image.created={{.Date}}" + - "--label=org.opencontainers.image.name={{.ProjectName}}" + - "--label=org.opencontainers.image.revision={{.Commit}}" + - "--label=org.opencontainers.image.version={{.Version}}" + - "--label=org.opencontainers.image.source={{.GitURL}}" diff --git a/Dockerfile b/Dockerfile index c64ad1f..ec7e37d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,20 +1,16 @@ -FROM golang:1.17-buster AS build - -ADD . /tmp/ssl_exporter - -RUN cd /tmp/ssl_exporter && \ - echo "ssl:*:100:ssl" > group && \ - echo "ssl:*:100:100::/:/ssl_exporter" > passwd && \ - make +FROM alpine:3.15 as build +RUN apk --update add ca-certificates +RUN echo "ssl:*:100:ssl" > /tmp/group && \ + echo "ssl:*:100:100::/:/ssl_exporter" > /tmp/passwd FROM scratch -COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ -COPY --from=build /tmp/ssl_exporter/group \ - /tmp/ssl_exporter/passwd \ +COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt +COPY --from=build /tmp/group \ + /tmp/passwd \ /etc/ -COPY --from=build /tmp/ssl_exporter/ssl_exporter / +COPY ssl_exporter / USER ssl:ssl EXPOSE 9219/tcp diff --git a/Dockerfile.local b/Dockerfile.local new file mode 100644 index 0000000..9e06d74 --- /dev/null +++ b/Dockerfile.local @@ -0,0 +1,21 @@ +FROM golang:1.15-buster AS build + +ADD . /tmp/ssl_exporter + +RUN cd /tmp/ssl_exporter && \ + echo "ssl:*:100:ssl" > group && \ + echo "ssl:*:100:100::/:/ssl_exporter" > passwd && \ + make + + +FROM scratch + +COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ +COPY --from=build /tmp/ssl_exporter/group \ + /tmp/ssl_exporter/passwd \ + /etc/ +COPY --from=build /tmp/ssl_exporter/ssl_exporter / + +USER ssl:ssl +EXPOSE 9219/tcp +ENTRYPOINT ["/ssl_exporter"] diff --git a/Makefile b/Makefile index bb7d301..d5501a2 100644 --- a/Makefile +++ b/Makefile @@ -8,12 +8,10 @@ DOCKER_IMAGE_TAG ?= $(subst /,-,$(shell git rev-parse --abbrev-ref HEAD)) # Race detector is only supported on amd64. RACE := $(shell test $$(go env GOARCH) != "amd64" || (echo "-race")) -export APP_HOST ?= $(shell hostname) -export APP_BRANCH ?= $(shell git describe --all --contains --dirty HEAD) -export APP_VERSION := $(shell cat VERSION) -export APP_REVISION := $(shell git rev-parse HEAD) -export APP_USER := $(shell id -u --name) -export APP_BUILD_DATE := $(shell date '+%Y%m%d-%H:%M:%S') +export APP_HOST ?= $(shell hostname) +export APP_BRANCH ?= $(shell git describe --all --contains --dirty HEAD) +export APP_USER := $(shell id -u --name) +export APP_DOCKER_IMAGE_NAME := ribbybibby/$(DOCKER_IMAGE_NAME) all: clean format vet build test @@ -36,17 +34,17 @@ vet: build: @echo ">> building binary" @CGO_ENABLED=0 go build -v \ - -ldflags "-X github.com/prometheus/common/version.Version=$(APP_VERSION) \ - -X github.com/prometheus/common/version.Revision=$(APP_REVISION) \ + -ldflags "-X github.com/prometheus/common/version.Version=dev \ + -X github.com/prometheus/common/version.Revision=$(shell git rev-parse HEAD) \ -X github.com/prometheus/common/version.Branch=$(APP_BRANCH) \ -X github.com/prometheus/common/version.BuildUser=$(APP_USER)@$(APP_HOST) \ - -X github.com/prometheus/common/version.BuildDate=$(APP_BUILD_DATE)\ + -X github.com/prometheus/common/version.BuildDate=$(shell date '+%Y%m%d-%H:%M:%S') \ " \ -o $(BIN_NAME) . docker: @echo ">> building docker image" - @docker build -t "$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" . + @docker build -t "$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" -f Dockerfile.local . $(GOPATH)/bin/goreleaser: @go install github.com/goreleaser/goreleaser@v1.2.2