mirror of
https://github.com/linuxkit/linuxkit.git
synced 2026-04-06 08:02:38 +00:00
include source repo, revision and go package version as build-args
Signed-off-by: Avi Deitcher <avi@deitcher.net>
This commit is contained in:
@@ -309,12 +309,23 @@ func (p Pkg) Build(bos ...BuildOpt) error {
|
||||
if p.git != nil && p.gitRepo != "" {
|
||||
imageBuildOpts.Labels["org.opencontainers.image.source"] = p.gitRepo
|
||||
}
|
||||
if p.git != nil && !p.dirty {
|
||||
commit, err := p.git.commitHash("HEAD")
|
||||
var (
|
||||
gitCommit string
|
||||
goPkgVersion string
|
||||
)
|
||||
if p.git != nil {
|
||||
if !p.dirty {
|
||||
gitCommit, err = p.git.commitHash("HEAD")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
imageBuildOpts.Labels["org.opencontainers.image.revision"] = gitCommit
|
||||
}
|
||||
// get the go version or pseudo-version
|
||||
goPkgVersion, err = p.git.goPkgVersion()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
imageBuildOpts.Labels["org.opencontainers.image.revision"] = commit
|
||||
}
|
||||
|
||||
imageBuildOpts.NetworkMode = "default"
|
||||
@@ -342,6 +353,16 @@ func (p Pkg) Build(bos ...BuildOpt) error {
|
||||
imageBuildOpts.BuildArgs[parts[0]] = &parts[1]
|
||||
}
|
||||
}
|
||||
// add in information about the build process that might be useful
|
||||
if _, ok := imageBuildOpts.BuildArgs["SOURCE"]; !ok && p.gitRepo != "" {
|
||||
imageBuildOpts.BuildArgs["SOURCE"] = &p.gitRepo
|
||||
}
|
||||
if _, ok := imageBuildOpts.BuildArgs["REVISION"]; !ok && gitCommit != "" {
|
||||
imageBuildOpts.BuildArgs["REVISION"] = &gitCommit
|
||||
}
|
||||
if _, ok := imageBuildOpts.BuildArgs["GOPKGVERSION"]; !ok && goPkgVersion != "" {
|
||||
imageBuildOpts.BuildArgs["GOPKGVERSION"] = &goPkgVersion
|
||||
}
|
||||
|
||||
// build for each arch and save in the linuxkit cache
|
||||
for _, platform := range platformsToBuild {
|
||||
|
||||
@@ -211,3 +211,36 @@ func (g git) isDirty(pkg, commit string) (bool, error) {
|
||||
return false, err
|
||||
}
|
||||
}
|
||||
|
||||
// goPkgVersion return a version that is compliant with go package versioning.
|
||||
// This would either be:
|
||||
//
|
||||
// - The tag name if the most recent commit is tagged
|
||||
// - The structure <version>-<count>-<commmit> if the most recent commit is not tagged
|
||||
//
|
||||
// See https://go.dev/ref/mod for more information
|
||||
func (g git) goPkgVersion() (string, error) {
|
||||
lastSemver, _ := g.commandStdout(nil, "--no-pager", "describe", "--match='v[0-9].[0-9].[0-9]*'", "--abbrev=0", "--tags")
|
||||
if lastSemver == "" {
|
||||
lastSemver = "v0.0.0"
|
||||
}
|
||||
commitList := "HEAD"
|
||||
if lastSemver != "v0.0.0" {
|
||||
commitList = fmt.Sprintf("%s..HEAD", lastSemver)
|
||||
}
|
||||
count, err := g.commandStdout(nil, "rev-list", commitList, "--count")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
version := ""
|
||||
if count == "0" {
|
||||
version = lastSemver
|
||||
} else {
|
||||
dateCommit, err := g.commandStdout(nil, "--no-pager", "show", "--quiet", "--abbrev=12", "--date=format-local:%Y%m%d%H%M%S", "--format=%cd-%h")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
version = fmt.Sprintf("%s-%s", lastSemver, dateCommit)
|
||||
}
|
||||
return version, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user