Feat v0.9.2 Starlark converter consolidation + snapshot cleanup (#75)
All checks were successful
CI/CD / detect-changes (pull_request) Successful in 4s
CI/CD / test-frontend (pull_request) Has been skipped
CI/CD / test-runners (pull_request) Has been skipped
CI/CD / e2e-smoke (pull_request) Has been skipped
CI/CD / test-go-pg (pull_request) Successful in 2m43s
CI/CD / test-sqlite (pull_request) Successful in 2m52s
CI/CD / build-and-deploy (pull_request) Successful in 2m15s

Consolidate duplicate Go↔Starlark converters into sandbox/convert.go
and snapshot parsers into models/snapshot.go. Standardize snapshot
creation on wrapped format. Net -393 lines across 21 files.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-03 14:20:05 +00:00
parent d03dfe502f
commit b8a4c516ff
24 changed files with 362 additions and 479 deletions

View File

@@ -3,7 +3,6 @@ package triggers
import (
"context"
"encoding/json"
"fmt"
"log"
"time"
@@ -72,7 +71,7 @@ func (e *Engine) fireEventTrigger(triggerID, packageID, entryPoint string, ev ev
if len(ev.Payload) > 0 {
var payloadMap map[string]any
if json.Unmarshal(ev.Payload, &payloadMap) == nil {
_ = ctxDict.SetKey(starlark.String("event_payload"), mapToStarlark(payloadMap))
_ = ctxDict.SetKey(starlark.String("event_payload"), sandbox.MapToDict(payloadMap))
} else {
_ = ctxDict.SetKey(starlark.String("event_payload"), starlark.String(string(ev.Payload)))
}
@@ -114,43 +113,6 @@ func (e *Engine) hasPermission(ctx context.Context, packageID, permission string
return false
}
// mapToStarlark converts a map[string]any to a Starlark dict.
func mapToStarlark(m map[string]any) *starlark.Dict {
d := starlark.NewDict(len(m))
for k, v := range m {
_ = d.SetKey(starlark.String(k), goToStarlark(v))
}
return d
}
// goToStarlark converts a Go value to a Starlark value.
func goToStarlark(v any) starlark.Value {
switch val := v.(type) {
case nil:
return starlark.None
case bool:
return starlark.Bool(val)
case int:
return starlark.MakeInt(val)
case int64:
return starlark.MakeInt64(val)
case float64:
return starlark.Float(val)
case string:
return starlark.String(val)
case map[string]any:
return mapToStarlark(val)
case []any:
elems := make([]starlark.Value, len(val))
for i, e := range val {
elems[i] = goToStarlark(e)
}
return starlark.NewList(elems)
default:
return starlark.String(fmt.Sprintf("%v", val))
}
}
// RunContext builds a sandbox.RunContext for a trigger invocation.
func triggerRunContext(userID, teamID string) *sandbox.RunContext {
if userID == "" {