check / check (pull_request) Successful in 3m54s
A plain `docker build .` stamped `dev`: `.dockerignore` left out `.git` and the Dockerfile defaulted VERSION to `dev`. `.dockerignore` is now the canonical one plus this repo's entries, sending `.git` without `.git/config`. Given no build arguments, the builder stamps `git describe --tags --always` and the commit and date from git, and fails if `.git` is present but yields no version. The empty CHECK_EPOCH refusal is gone so the plain build succeeds; the scripts still pass an epoch. `script/version` now prints `git describe --tags --always --dirty`, so make, the scripts and a plain build agree. Model: opus-5-5
89 lines
3.0 KiB
Go
89 lines
3.0 KiB
Go
// Package globals holds application-wide metadata (name, version,
|
|
// commit) that is populated at build time via linker flags.
|
|
package globals
|
|
|
|
import (
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
// Appname is the application name, populated from main().
|
|
var Appname = "vaultik" //nolint:gochecknoglobals // set via -ldflags at build time
|
|
|
|
// DevVersion is the version a binary reports when it was built without
|
|
// git metadata: script/version emits it outside a git checkout, and an
|
|
// unstamped `go build` keeps it. goreleaser's snapshot template stamps
|
|
// it followed by "-" and the commit it was built from. It is
|
|
// deliberately not a number.
|
|
const DevVersion = "dev"
|
|
|
|
// Version is the application version, populated from main().
|
|
var Version = DevVersion //nolint:gochecknoglobals // set via -ldflags at build time
|
|
|
|
// Commit is the git commit hash, populated from main().
|
|
var Commit = "unknown" //nolint:gochecknoglobals // set via -ldflags at build time
|
|
|
|
// CommitDate is the ISO-8601 date of the commit, populated from main().
|
|
var CommitDate = "unknown" //nolint:gochecknoglobals // set via -ldflags at build time
|
|
|
|
// Author identifies the upstream author of vaultik.
|
|
const Author = "Jeffrey Paul <sneak@sneak.berlin>"
|
|
|
|
// Homepage is the canonical URL for vaultik.
|
|
const Homepage = "https://sneak.berlin/go/vaultik"
|
|
|
|
// ReleasesURL is where tagged release artifacts are published.
|
|
const ReleasesURL = "https://git.eeqj.de/sneak/vaultik/releases"
|
|
|
|
// License is the SPDX identifier for the project license.
|
|
const License = "MIT"
|
|
|
|
// Globals contains application-wide configuration and metadata.
|
|
type Globals struct {
|
|
Appname string
|
|
Version string
|
|
Commit string
|
|
CommitDate string
|
|
StartTime time.Time
|
|
}
|
|
|
|
// New creates and returns a new Globals instance initialized with the
|
|
// package-level variables.
|
|
func New() (*Globals, error) {
|
|
return &Globals{
|
|
Appname: Appname,
|
|
Version: Version,
|
|
Commit: Commit,
|
|
CommitDate: CommitDate,
|
|
}, nil
|
|
}
|
|
|
|
// IsDevVersion reports whether v names a development build rather than
|
|
// a release. Both "dev" and goreleaser's snapshot "dev-<sha>" count. A
|
|
// make or docker build of an untagged commit reports `git describe`
|
|
// output instead (the short commit, or tag-N-gHASH), which this does
|
|
// not recognise.
|
|
//
|
|
// The empty string counts too. Nothing that knows its version reports
|
|
// no version, so an empty Version means the stamping failed, and the
|
|
// safe reading of "we could not establish that this is a release" is
|
|
// that it is not one. The Makefile refuses to build at all in that
|
|
// case; this is the second line of defence, for a binary linked by
|
|
// something other than the Makefile.
|
|
func IsDevVersion(v string) bool {
|
|
return v == "" || v == DevVersion || strings.HasPrefix(v, DevVersion+"-")
|
|
}
|
|
|
|
// shortCommitLen is the number of commit-hash characters ShortCommit keeps.
|
|
const shortCommitLen = 12
|
|
|
|
// ShortCommit returns the first 12 chars of the commit hash, or the
|
|
// whole string if it's shorter (e.g. "unknown").
|
|
func (g *Globals) ShortCommit() string {
|
|
if len(g.Commit) > shortCommitLen {
|
|
return g.Commit[:shortCommitLen]
|
|
}
|
|
|
|
return g.Commit
|
|
}
|