mirror of
https://github.com/go-task/task.git
synced 2025-08-10 22:42:19 +02:00
feat: better versioning (#2131)
This commit is contained in:
@@ -67,6 +67,10 @@ func release() error {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := setVersionFile("internal/version/version.txt", version); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := setJSONVersion("package.json", version); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -144,6 +148,10 @@ func changelog(version *semver.Version) error {
|
||||
return os.WriteFile(changelogTarget, []byte(changelog), 0o644)
|
||||
}
|
||||
|
||||
func setVersionFile(fileName string, version *semver.Version) error {
|
||||
return os.WriteFile(fileName, []byte(version.String()+"\n"), 0o644)
|
||||
}
|
||||
|
||||
func setJSONVersion(fileName string, version *semver.Version) error {
|
||||
// Read the JSON file
|
||||
b, err := os.ReadFile(fileName)
|
||||
|
@@ -17,7 +17,7 @@ import (
|
||||
"github.com/go-task/task/v3/internal/filepathext"
|
||||
"github.com/go-task/task/v3/internal/flags"
|
||||
"github.com/go-task/task/v3/internal/logger"
|
||||
ver "github.com/go-task/task/v3/internal/version"
|
||||
"github.com/go-task/task/v3/internal/version"
|
||||
"github.com/go-task/task/v3/taskfile"
|
||||
"github.com/go-task/task/v3/taskfile/ast"
|
||||
)
|
||||
@@ -57,7 +57,7 @@ func run() error {
|
||||
}
|
||||
|
||||
if flags.Version {
|
||||
fmt.Printf("Task version: %s\n", ver.GetVersionWithSum())
|
||||
fmt.Println(version.GetVersionWithBuildInfo())
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@@ -10,7 +10,6 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/sebdah/goldie/v2"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/go-task/task/v3"
|
||||
@@ -343,41 +342,31 @@ func TestSpecialVars(t *testing.T) {
|
||||
|
||||
const dir = "testdata/special_vars"
|
||||
const subdir = "testdata/special_vars/subdir"
|
||||
toAbs := func(rel string) string {
|
||||
abs, err := filepath.Abs(rel)
|
||||
assert.NoError(t, err)
|
||||
return abs
|
||||
}
|
||||
|
||||
tests := []struct {
|
||||
target string
|
||||
expected string
|
||||
}{
|
||||
tests := []string{
|
||||
// Root
|
||||
{target: "print-task", expected: "print-task"},
|
||||
{target: "print-root-dir", expected: toAbs(dir)},
|
||||
{target: "print-taskfile", expected: toAbs(dir) + "/Taskfile.yml"},
|
||||
{target: "print-taskfile-dir", expected: toAbs(dir)},
|
||||
{target: "print-task-version", expected: "unknown"},
|
||||
{target: "print-task-dir", expected: toAbs(dir) + "/foo"},
|
||||
"print-task",
|
||||
"print-root-dir",
|
||||
"print-taskfile",
|
||||
"print-taskfile-dir",
|
||||
"print-task-dir",
|
||||
// Included
|
||||
{target: "included:print-task", expected: "included:print-task"},
|
||||
{target: "included:print-root-dir", expected: toAbs(dir)},
|
||||
{target: "included:print-taskfile", expected: toAbs(dir) + "/included/Taskfile.yml"},
|
||||
{target: "included:print-taskfile-dir", expected: toAbs(dir) + "/included"},
|
||||
{target: "included:print-task-version", expected: "unknown"},
|
||||
"included:print-task",
|
||||
"included:print-root-dir",
|
||||
"included:print-taskfile",
|
||||
"included:print-taskfile-dir",
|
||||
}
|
||||
|
||||
for _, dir := range []string{dir, subdir} {
|
||||
for _, test := range tests {
|
||||
NewExecutorTest(t,
|
||||
WithName(fmt.Sprintf("%s-%s", dir, test.target)),
|
||||
WithName(fmt.Sprintf("%s-%s", dir, test)),
|
||||
WithExecutorOptions(
|
||||
task.WithDir(dir),
|
||||
task.WithSilent(true),
|
||||
task.WithVersionCheck(true),
|
||||
),
|
||||
WithTask(test.target),
|
||||
WithTask(test),
|
||||
WithPostProcessFn(PPRemoveAbsolutePaths),
|
||||
)
|
||||
}
|
||||
|
@@ -1,33 +1,67 @@
|
||||
package version
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
_ "embed"
|
||||
"runtime/debug"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var (
|
||||
version = ""
|
||||
sum = ""
|
||||
//go:embed version.txt
|
||||
version string
|
||||
commit string
|
||||
dirty bool
|
||||
)
|
||||
|
||||
func init() {
|
||||
info, ok := debug.ReadBuildInfo()
|
||||
if !ok || info.Main.Version == "(devel)" || info.Main.Version == "" {
|
||||
version = "unknown"
|
||||
} else {
|
||||
if version == "" {
|
||||
version = info.Main.Version
|
||||
}
|
||||
if sum == "" {
|
||||
sum = info.Main.Sum
|
||||
}
|
||||
version = strings.TrimSpace(version)
|
||||
// Attempt to get build info from the Go runtime. We only use this if not
|
||||
// built from a tagged version.
|
||||
if info, ok := debug.ReadBuildInfo(); ok && info.Main.Version == "(devel)" {
|
||||
commit = getCommit(info)
|
||||
dirty = getDirty(info)
|
||||
}
|
||||
}
|
||||
|
||||
func getDirty(info *debug.BuildInfo) bool {
|
||||
for _, setting := range info.Settings {
|
||||
if setting.Key == "vcs.modified" {
|
||||
return setting.Value == "true"
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func getCommit(info *debug.BuildInfo) string {
|
||||
for _, setting := range info.Settings {
|
||||
if setting.Key == "vcs.revision" {
|
||||
return setting.Value[:7]
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// GetVersion returns the version of Task. By default, this is retrieved from
|
||||
// the embedded version.txt file which is kept up-to-date by our release script.
|
||||
// However, it can also be overridden at build time using:
|
||||
// -ldflags="-X 'github.com/go-task/task/v3/internal/version.version=vX.X.X'".
|
||||
func GetVersion() string {
|
||||
return version
|
||||
}
|
||||
|
||||
func GetVersionWithSum() string {
|
||||
return fmt.Sprintf("%s (%s)", version, sum)
|
||||
// GetVersionWithBuildInfo is the same as [GetVersion], but it also includes
|
||||
// the commit hash and dirty status if available. This will only work when built
|
||||
// within inside of a Git checkout.
|
||||
func GetVersionWithBuildInfo() string {
|
||||
var buildInfo string
|
||||
if commit != "" {
|
||||
buildInfo += commit
|
||||
}
|
||||
if dirty {
|
||||
buildInfo += "-dirty"
|
||||
}
|
||||
if buildInfo != "" {
|
||||
return version + "-" + buildInfo
|
||||
}
|
||||
return version
|
||||
}
|
||||
|
1
internal/version/version.txt
Normal file
1
internal/version/version.txt
Normal file
@@ -0,0 +1 @@
|
||||
3.42.1
|
@@ -1 +0,0 @@
|
||||
unknown
|
@@ -1 +0,0 @@
|
||||
unknown
|
@@ -1 +0,0 @@
|
||||
unknown
|
@@ -1 +0,0 @@
|
||||
unknown
|
Reference in New Issue
Block a user