feat(ci): build docker image
This commit is contained in:
parent
2ffd30dd0f
commit
0a90e6a344
|
@ -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
|
||||||
|
|
|
@ -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")
|
||||||
|
|
|
@ -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
|
|
@ -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 ["/server"]
|
|
@ -0,0 +1 @@
|
||||||
|
package api
|
Loading…
Reference in New Issue