feat(ci): build docker image

This commit is contained in:
genofire 2022-06-09 20:50:34 +02:00
parent 2ffd30dd0f
commit a505ef3c3f
5 changed files with 115 additions and 0 deletions

9
.ci/check-gofmt Executable file
View File

@ -0,0 +1,9 @@
#!/bin/bash
result="$(gofmt -s -l . | grep -v '^vendor/' )"
if [ -n "$result" ]; then
echo "Go code is not formatted, run 'gofmt -s -w .'" >&2
echo "$result"
exit 1
fi

26
.ci/check-testfiles Executable file
View File

@ -0,0 +1,26 @@
#!/usr/bin/env python3
# checks if every desired package has test files
import os
import re
import sys
source_re = re.compile(".*\.go")
test_re = re.compile(".*_test\.go")
missing = False
for root, dirs, files in os.walk("."):
# ignore some paths
if root == "." or root.startswith("./vendor") or root.startswith("./.") or root.startswith("./docs"):
continue
# source files but not test files?
if len([f for f in files if source_re.match(f)]) > 0 and len([f for f in files if test_re.match(f)]) == 0:
print("no test files for {}".format(root))
missing = True
if missing:
sys.exit(1)
else:
print("every package has test files")

58
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,58 @@
image: "golang:latest"
variables:
DOCKER_IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
# Tell 'docker:dind' to enable TLS (recommended)
# and generate certificates in the specified directory.
DOCKER_TLS_CERTDIR: "/certs"
stages:
- test
- build
test-lint:
stage: test
script:
- go install github.com/client9/misspell/cmd/misspell@latest
- find . -type f -not -path "./webroot/assets" | grep -v "models/.*_testdata.*.go" | xargs misspell -error
- ./.ci/check-gofmt
- ./.ci/check-testfiles
build-linux:
stage: build
except:
- tags
- master
- main
script:
# build app with version
- go install
- mv "/go/bin/$CI_PROJECT_NAME" "$CI_PROJECT_DIR/$CI_PROJECT_NAME"
artifacts:
paths:
- config_example.toml
- "$CI_PROJECT_NAME"
build-docker:
stage: build
image: docker:latest
services:
- docker:dind
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $DOCKER_IMAGE_TAG --build-arg VERSION=$CI_COMMIT_REF_SLUG .
- docker push $DOCKER_IMAGE_TAG
build-release:
stage: build
only:
- tags
script:
# build app with version
- go install
- mv "/go/bin/$CI_PROJECT_NAME" "$CI_PROJECT_DIR/$CI_PROJECT_NAME"
artifacts:
paths:
- config_example.toml
- "$CI_PROJECT_NAME"
expire_in: never

21
Dockerfile Normal file
View File

@ -0,0 +1,21 @@
##
# Compile application
##
FROM golang:latest AS build-env
WORKDIR /app
COPY . .
# ge dependencies
RUN go mod tidy
# build binary
RUN CGO_ENABLED=0 go build -ldflags="-w -s" -o oven-exporter
##
# Build Image
##
FROM scratch
COPY --from=build-env /app/oven-exporter /oven-exporter
COPY --from=build-env /app/config_example.toml /config.toml
WORKDIR /
ENTRYPOINT ["/oven-exporter"]

1
api/client_test.go Normal file
View File

@ -0,0 +1 @@
package api