flamenco/job_compilers/scripts.go
Sybren A. Stüvel ae1ea0e2bc Initial checkin
2022-01-03 19:51:22 +01:00

56 lines
1.2 KiB
Go

package job_compilers
import (
"embed"
"fmt"
"io"
"path"
"strings"
"github.com/dop251/goja"
"github.com/rs/zerolog/log"
)
//go:embed scripts/*.js
var scriptsFS embed.FS
func (c *GojaJobCompiler) loadScripts() error {
scripts, err := scriptsFS.ReadDir("scripts")
if err != nil {
return fmt.Errorf("failed to find scripts: %w", err)
}
for _, script := range scripts {
filename := path.Join("scripts", script.Name())
file, err := scriptsFS.Open(filename)
if err != nil {
return fmt.Errorf("failed to open embedded script: %w", err)
}
script_bytes, err := io.ReadAll(file)
if err != nil {
log.Error().Err(err).Str("filename", filename).Msg("failed to read script")
continue
}
program, err := goja.Compile(filename, string(script_bytes), true)
if err != nil {
log.Error().Err(err).Str("filename", filename).Msg("failed to compile script")
continue
}
jobType := filenameToJobType(script.Name())
c.jobtypes[jobType] = program
log.Debug().Str("script", script.Name()).Str("jobType", jobType).Msg("loaded script")
}
return nil
}
func filenameToJobType(filename string) string {
extension := path.Ext(filename)
stem := filename[:len(filename)-len(extension)]
return strings.ReplaceAll(stem, "_", "-")
}