blob: 82f57fee8997aa75a044859371b26e33dbea35a0 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
{% $goversion := 1.14 %}
{% $gopkg := (printf "example.com/%s" .name) %}
{% with .pkg %}{% $gopkg = . %}{% end %}
cmd:
{% .name %}:
main.go: |
package main
func main() {
println("hello world")
}
version:
version.go: |
package version
var (
Version = "0.0.0+unknown"
Revision = ""
)
go.mod: |
module {% $gopkg %}
go {% $goversion %}
Dockerfile: |
#syntax=docker/dockerfile:experimental
FROM docker.io/library/golang:{% $goversion %}-alpine AS base
RUN apk add -U --no-cache \
ca-certificates
FROM base AS build
WORKDIR /src
RUN --mount=target=/src,rw \
--mount=type=cache,target=/go/pkg \
--mount=type=cache,target=/root/.cache/go-build \
make all
FROM base AS run
COPY --from=dev /src/{% .name %} /usr/local/bin/
ENTRYPOINT [ "{% .name %}" ]
FROM scratch AS final
COPY --from=build /src/{% .name %} /
Makefile: |
.POSIX:
all: validate test {% .name %}
GO ?= go
GO_PKG ?= {% $gopkg %}
GO_BUILDTAGS ?= netgo osusergo static_build
GO_LDFLAGS ?= -s -w -extldflags "-static"
VERSION ?= $(shell git describe --match 'v[0-9]*' --dirty='+dev' --always --tags)
REVISION ?= $(shell git rev-parse HEAD)
GO_VERSIONFLAGS = -X {% $gopkg %}/version.Version=$(VERSION) -X {% $gopkg %}/version.Revision=$(REVISION)
build: {% .name %}
{% .name %}:
$(GO) build \
-tags '$(GO_BUILDTAGS)' -ldflags '$(GO_LDFLAGS) $(GO_VERSIONFLAGS)' \
-o {% .name %} \
./cmd/{% .name %}
RM ?= rm -f
clean:
$(RM) {% .name %}
container-build:
DOCKER_BUILDKIT=1 \
docker build --target final -o . .
GOLANGCI_LINT ?= golangci-lint
validate:
$(GOLANGCI_LINT) run --build-tags "$(GO_BUILDTAGS)"
GOTEST_FLAGS ?=
ifneq ($(shell which gotestsum),)
GOTEST ?= gotestsum --format=testname --
else
GOTEST ?= go test
endif
test:
$(GOTEST) \
-tags '$(GO_BUILDTAGS)' \
-cover \
-covermode=atomic \
$(GOTEST_FLAGS)
.PHONY: all build clean container-build test validate
.editorconfig: |
; http://editorconfig.org/
root = true
[*]
insert_final_newline = true
charset = utf-8
trim_trailing_whitespace = true
indent_style = space
indent_size = 2
[{Makefile,go.mod,go.sum,*go}]
indent_style = tab
indent_size = 8
[*.md]
trim_trailing_whitespace = false
[Dockerfile]
indent_size = 4
README.md: |
# {% .name %}
TODO
|