mirror of
https://github.com/go-task/task.git
synced 2025-02-07 13:41:53 +02:00
feat: make CHECKSUM and TIMESTAMP vars available in cmds commands (#1872)
This commit is contained in:
parent
dc2eceb634
commit
c1e14c461b
33
task_test.go
33
task_test.go
@ -976,6 +976,39 @@ func TestStatusVariables(t *testing.T) {
|
||||
assert.Contains(t, buff.String(), tf)
|
||||
}
|
||||
|
||||
func TestCmdsVariables(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
const dir = "testdata/cmds_vars"
|
||||
|
||||
_ = os.RemoveAll(filepathext.SmartJoin(dir, ".task"))
|
||||
|
||||
var buff bytes.Buffer
|
||||
e := task.Executor{
|
||||
Dir: dir,
|
||||
TempDir: task.TempDir{
|
||||
Remote: filepathext.SmartJoin(dir, ".task"),
|
||||
Fingerprint: filepathext.SmartJoin(dir, ".task"),
|
||||
},
|
||||
Stdout: &buff,
|
||||
Stderr: &buff,
|
||||
Silent: false,
|
||||
Verbose: true,
|
||||
}
|
||||
require.NoError(t, e.Setup())
|
||||
require.NoError(t, e.Run(context.Background(), &ast.Call{Task: "build"}))
|
||||
|
||||
assert.Contains(t, buff.String(), "3e464c4b03f4b65d740e1e130d4d108a")
|
||||
|
||||
inf, err := os.Stat(filepathext.SmartJoin(dir, "source.txt"))
|
||||
require.NoError(t, err)
|
||||
ts := fmt.Sprintf("%d", inf.ModTime().Unix())
|
||||
tf := inf.ModTime().String()
|
||||
|
||||
assert.Contains(t, buff.String(), ts)
|
||||
assert.Contains(t, buff.String(), tf)
|
||||
}
|
||||
|
||||
func TestInit(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
|
10
testdata/cmds_vars/Taskfile.yml
vendored
Normal file
10
testdata/cmds_vars/Taskfile.yml
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
version: '3'
|
||||
|
||||
tasks:
|
||||
build:
|
||||
sources:
|
||||
- ./source.txt
|
||||
cmds:
|
||||
- echo "{{.CHECKSUM}}"
|
||||
- echo "{{.TIMESTAMP.Unix}}"
|
||||
- echo "{{.TIMESTAMP}}"
|
1
testdata/cmds_vars/source.txt
vendored
Normal file
1
testdata/cmds_vars/source.txt
vendored
Normal file
@ -0,0 +1 @@
|
||||
Hello, World!
|
32
variables.go
32
variables.go
@ -127,6 +127,23 @@ func (e *Executor) compiledTask(call *ast.Call, evaluateShVars bool) (*ast.Task,
|
||||
}
|
||||
}
|
||||
|
||||
if len(origTask.Sources) > 0 {
|
||||
timestampChecker := fingerprint.NewTimestampChecker(e.TempDir.Fingerprint, e.Dry)
|
||||
checksumChecker := fingerprint.NewChecksumChecker(e.TempDir.Fingerprint, e.Dry)
|
||||
|
||||
for _, checker := range []fingerprint.SourcesCheckable{timestampChecker, checksumChecker} {
|
||||
value, err := checker.Value(&new)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
vars.Set(strings.ToUpper(checker.Kind()), ast.Var{Live: value})
|
||||
}
|
||||
|
||||
// Adding new variables, requires us to refresh the templaters
|
||||
// cache of the the values manually
|
||||
cache.ResetCache()
|
||||
}
|
||||
|
||||
if len(origTask.Cmds) > 0 {
|
||||
new.Cmds = make([]*ast.Cmd, 0, len(origTask.Cmds))
|
||||
for _, cmd := range origTask.Cmds {
|
||||
@ -228,21 +245,6 @@ func (e *Executor) compiledTask(call *ast.Call, evaluateShVars bool) (*ast.Task,
|
||||
}
|
||||
|
||||
if len(origTask.Status) > 0 {
|
||||
timestampChecker := fingerprint.NewTimestampChecker(e.TempDir.Fingerprint, e.Dry)
|
||||
checksumChecker := fingerprint.NewChecksumChecker(e.TempDir.Fingerprint, e.Dry)
|
||||
|
||||
for _, checker := range []fingerprint.SourcesCheckable{timestampChecker, checksumChecker} {
|
||||
value, err := checker.Value(&new)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
vars.Set(strings.ToUpper(checker.Kind()), ast.Var{Live: value})
|
||||
}
|
||||
|
||||
// Adding new variables, requires us to refresh the templaters
|
||||
// cache of the the values manually
|
||||
cache.ResetCache()
|
||||
|
||||
new.Status = templater.Replace(origTask.Status, cache)
|
||||
}
|
||||
|
||||
|
@ -926,7 +926,7 @@ checksum source and timestamps require either access to the artifact or for an
|
||||
out-of-band refresh of the `.checksum` fingerprint file.
|
||||
|
||||
Two special variables `{{.CHECKSUM}}` and `{{.TIMESTAMP}}` are available for
|
||||
interpolation within `status` commands, depending on the method assigned to
|
||||
interpolation within `cmds` and `status` commands, depending on the method assigned to
|
||||
fingerprint the sources. Only `source` globs are fingerprinted.
|
||||
|
||||
Note that the `{{.TIMESTAMP}}` variable is a "live" Go `time.Time` struct, and
|
||||
|
Loading…
x
Reference in New Issue
Block a user