Sync branch magefile with main #104308

Merged
Sybren A. Stüvel merged 85 commits from abelli/flamenco:magefile into magefile 2024-05-13 16:26:32 +02:00
4 changed files with 36 additions and 0 deletions
Showing only changes of commit df334deca5 - Show all commits

View File

@ -7,6 +7,7 @@ bugs in actually-released versions.
## 3.6 - in development ## 3.6 - in development
- Add `label` to job settings, to have full control over how they are presented in Blender's job submission GUI. If a job setting does not define a label, its `key` is used to generate one (like Flamenco 3.5 and older). - Add `label` to job settings, to have full control over how they are presented in Blender's job submission GUI. If a job setting does not define a label, its `key` is used to generate one (like Flamenco 3.5 and older).
- Add `shellSplit(someString)` function to the job compiler scripts. This splits a string into an array of strings using shell/CLI semantics.
## 3.5 - released 2024-04-16 ## 3.5 - released 2024-04-16

View File

@ -10,6 +10,7 @@ import (
"time" "time"
"github.com/dop251/goja" "github.com/dop251/goja"
"github.com/google/shlex"
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
) )
@ -33,6 +34,19 @@ func jsFormatTimestampLocal(timestamp time.Time) string {
return timestamp.Local().Format("2006-01-02_150405") return timestamp.Local().Format("2006-01-02_150405")
} }
// jsShellSplit splits a string into its parts, using CLI/shell semantics.
func jsShellSplit(vm *goja.Runtime, someCLIArgs string) []string {
split, err := shlex.Split(someCLIArgs)
if err != nil {
// Generate a JS exception by panicing with a Goja Value.
exception := vm.ToValue(err)
panic(exception)
}
return split
}
type ErrInvalidRange struct { type ErrInvalidRange struct {
Range string // The frame range that was invalid. Range string // The frame range that was invalid.
Message string // The error message Message string // The error message

View File

@ -5,10 +5,28 @@ package job_compilers
import ( import (
"testing" "testing"
"github.com/dop251/goja"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func TestShellSplitHappy(t *testing.T) {
expect := []string{"--python-expr", "print(1 + 1)"}
actual := jsShellSplit(nil, "--python-expr 'print(1 + 1)'")
assert.Equal(t, expect, actual)
}
func TestShellSplitFailure(t *testing.T) {
vm := goja.New()
testFunc := func() {
jsShellSplit(vm, "--python-expr invalid_quoting(1 + 1)'")
}
// Testing that a goja.Value is used for the panic is a bit tricky, so just
// test that the function panics.
assert.Panics(t, testFunc)
}
func TestFrameChunkerHappyBlenderStyle(t *testing.T) { func TestFrameChunkerHappyBlenderStyle(t *testing.T) {
chunks, err := jsFrameChunker("1..10,20..25,40,3..8", 4) chunks, err := jsFrameChunker("1..10,20..25,40,3..8", 4)
require.NoError(t, err) require.NoError(t, err)

View File

@ -140,6 +140,9 @@ func newGojaVM(registry *require.Registry) *goja.Runtime {
mustSet("alert", jsAlert) mustSet("alert", jsAlert)
mustSet("frameChunker", jsFrameChunker) mustSet("frameChunker", jsFrameChunker)
mustSet("formatTimestampLocal", jsFormatTimestampLocal) mustSet("formatTimestampLocal", jsFormatTimestampLocal)
mustSet("shellSplit", func(cliArgs string) []string {
return jsShellSplit(vm, cliArgs)
})
// Pre-import some useful modules. // Pre-import some useful modules.
registry.Enable(vm) registry.Enable(vm)