Build information written to Go binary at build

This commit is contained in:
Quentin McGaw
2020-12-15 07:48:27 +00:00
parent 878cf4cc45
commit b4310ad822
10 changed files with 57 additions and 45 deletions

View File

@@ -29,7 +29,7 @@ jobs:
--progress plain \
--platform=linux/amd64,linux/386,linux/arm64,linux/arm/v7 \
--build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \
--build-arg VCS_REF=`git rev-parse --short HEAD` \
--build-arg COMMIT=`git rev-parse --short HEAD` \
--build-arg VERSION=${GITHUB_REF##*/} \
-t qmcgaw/ddns-updater:${GITHUB_REF##*/} \
--push \

View File

@@ -26,7 +26,7 @@ jobs:
--progress plain \
--platform=linux/amd64,linux/386,linux/arm64,linux/arm/v7 \
--build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \
--build-arg VCS_REF=`git rev-parse --short HEAD` \
--build-arg COMMIT=`git rev-parse --short HEAD` \
--build-arg VERSION=latest \
-t qmcgaw/ddns-updater:latest \
--push \

View File

@@ -26,7 +26,7 @@ jobs:
--progress plain \
--platform=linux/amd64,linux/386,linux/arm64,linux/arm/v7 \
--build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \
--build-arg VCS_REF=`git rev-parse --short HEAD` \
--build-arg COMMIT=`git rev-parse --short HEAD` \
--build-arg VERSION=${GITHUB_REF##*/} \
-t qmcgaw/ddns-updater:${GITHUB_REF##*/} \
--push \

View File

@@ -4,6 +4,21 @@ linters-settings:
misspell:
locale: US
issues:
exclude-rules:
- path: cmd/
text: buildInfo is a global variable
linters:
- gochecknoglobals
- path: cmd/
text: commit is a global variable
linters:
- gochecknoglobals
- path: cmd/
text: buildDate is a global variable
linters:
- gochecknoglobals
linters:
disable-all: true
enable:

View File

@@ -17,23 +17,27 @@ COPY .golangci.yml .
COPY go.mod go.sum ./
RUN go mod download
COPY internal/ ./internal/
COPY cmd/updater/main.go .
COPY cmd/updater/main.go cmd/updater/main.go
RUN go test ./...
RUN go build -trimpath -ldflags="-s -w" -o app
RUN golangci-lint run --timeout=10m
ARG VERSION=unknown
ARG BUILD_DATE="an unknown date"
ARG COMMIT=unknown
RUN go build -o app -trimpath -ldflags="-s -w \
-X 'main.version=$VERSION' \
-X 'main.buildDate=$BUILD_DATE' \
-X 'main.commit=$COMMIT'" \
cmd/updater/main.go
FROM scratch
ARG BUILD_DATE
ARG VCS_REF
ARG VERSION
ENV VERSION=$VERSION \
BUILD_DATE=$BUILD_DATE \
VCS_REF=$VCS_REF
ARG VERSION=unknown
ARG BUILD_DATE="an unknown date"
ARG COMMIT=unknown
LABEL \
org.opencontainers.image.authors="quentin.mcgaw@gmail.com" \
org.opencontainers.image.created=$BUILD_DATE \
org.opencontainers.image.version=$VERSION \
org.opencontainers.image.revision=$VCS_REF \
org.opencontainers.image.created=$BUILD_DATE \
org.opencontainers.image.revision=$COMMIT \
org.opencontainers.image.url="https://github.com/qdm12/ddns-updater" \
org.opencontainers.image.documentation="https://github.com/qdm12/ddns-updater" \
org.opencontainers.image.source="https://github.com/qdm12/ddns-updater" \

View File

@@ -27,7 +27,17 @@ import (
"github.com/qdm12/golibs/network/connectivity"
)
var (
buildInfo models.BuildInformation
version = "unknown"
commit = "unknown"
buildDate = "an unknown date"
)
func main() {
buildInfo.Version = version
buildInfo.Commit = commit
buildInfo.BuildDate = buildDate
os.Exit(_main(context.Background(), time.Now))
// returns 1 on error
// returns 2 on os signal
@@ -58,6 +68,9 @@ func _main(ctx context.Context, timeNow func() time.Time) int {
}
return 0
}
fmt.Println(splash.Splash(buildInfo))
logger, err := setupLogger()
if err != nil {
fmt.Println(err)
@@ -65,11 +78,6 @@ func _main(ctx context.Context, timeNow func() time.Time) int {
}
paramsReader := params.NewReader(logger)
fmt.Println(splash.Splash(
paramsReader.GetVersion(),
paramsReader.GetVcsRef(),
paramsReader.GetBuildDate()))
notify, err := setupGotify(paramsReader, logger)
if err != nil {
logger.Error(err)

7
internal/models/build.go Normal file
View File

@@ -0,0 +1,7 @@
package models
type BuildInformation struct {
Version string `json:"version"`
Commit string `json:"commit"`
BuildDate string `json:"buildDate"`
}

View File

@@ -45,11 +45,6 @@ type Reader interface {
GetLoggerConfig() (encoding logging.Encoding, level logging.Level, err error)
GetGotifyURL() (URL *url.URL, err error)
GetGotifyToken() (token string, err error)
// Version getters
GetVersion() string
GetBuildDate() string
GetVcsRef() string
}
type reader struct {

View File

@@ -1,20 +0,0 @@
package params
import (
libparams "github.com/qdm12/golibs/params"
)
func (r *reader) GetVersion() string {
version, _ := r.envParams.GetEnv("VERSION", libparams.Default("?"), libparams.CaseSensitiveValue())
return version
}
func (r *reader) GetBuildDate() string {
buildDate, _ := r.envParams.GetEnv("BUILD_DATE", libparams.Default("?"), libparams.CaseSensitiveValue())
return buildDate
}
func (r *reader) GetVcsRef() string {
buildDate, _ := r.envParams.GetEnv("VCS_REF", libparams.Default("?"), libparams.CaseSensitiveValue())
return buildDate
}

View File

@@ -7,13 +7,16 @@ import (
"github.com/kyokomi/emoji"
"github.com/qdm12/ddns-updater/internal/constants"
"github.com/qdm12/ddns-updater/internal/models"
)
// Splash returns the welcome spash message.
func Splash(version, vcsRef, buildDate string) string {
func Splash(buildInfo models.BuildInformation) string {
lines := title()
lines = append(lines, "")
lines = append(lines, fmt.Sprintf("Running version %s built on %s (commit %s)", version, buildDate, vcsRef))
lines = append(lines, fmt.Sprintf(
"Running version %s built on %s (commit %s)",
buildInfo.Version, buildInfo.BuildDate, buildInfo.Commit))
lines = append(lines, "")
lines = append(lines, announcement()...)
lines = append(lines, "")