Set source envs in action executions

This commit is contained in:
Tim Van Baak 2025-01-31 08:00:07 -08:00
parent a238d1f239
commit ced1de05e8
4 changed files with 25 additions and 5 deletions

View File

@ -86,6 +86,11 @@ func actionExecute(
log.Fatalf("error: failed to load state for %s: %v", source, err)
}
envs, err := core.GetEnvs(db, source)
if err != nil {
log.Fatalf("error: failed to get envs for %s: %v", source, err)
}
item, err := core.GetItem(db, source, itemId)
if err != nil {
log.Fatalf("error: failed to get item: %v", err)
@ -104,7 +109,7 @@ func actionExecute(
log.Fatalf("error: failed to get action: %v", err)
}
newItem, newState, err := core.ExecuteItemAction(item, argv, nil, state, time.Minute)
newItem, newState, err := core.ExecuteItemAction(item, argv, envs, state, time.Minute)
if err != nil {
log.Fatalf("error executing %s: %v", action, err)
}

View File

@ -48,12 +48,17 @@ func sourceFetch(source string, format string, dryRun bool) {
log.Fatalf("error: failed to load state for %s: %v", source, err)
}
envs, err := core.GetEnvs(db, source)
if err != nil {
log.Fatalf("error: failed to get envs for %s: %v", source, err)
}
argv, err := core.GetArgvForAction(db, source, "fetch")
if err != nil {
log.Fatalf("error: failed to get fetch action: %v", err)
}
items, newState, err := core.Execute(source, argv, nil, state, "", time.Minute)
items, newState, err := core.Execute(source, argv, envs, state, "", time.Minute)
if err != nil {
log.Fatalf("error: failed to execute fetch: %v", err)
}

View File

@ -290,14 +290,19 @@ func UpdateWithFetchedItems(db *DB, source string, state []byte, items []Item) (
return 0, 0, err
}
envs, err := GetEnvs(db, source)
if err != nil {
return 0, 0, fmt.Errorf("failed to get envs for %s: %v", source, err)
}
// If the source has an on-create trigger, run it for each new item
// On-create errors are ignored to avoid failing the fetch
onCreateArgv, err := GetArgvForAction(db, source, "on_create")
if err == nil {
if err == nil && len(onCreateArgv) > 0 {
var updatedNewItems []Item
for _, item := range newItems {
var updatedItem Item
updatedItem, state, err = ExecuteItemAction(item, onCreateArgv, nil, state, time.Minute)
updatedItem, state, err = ExecuteItemAction(item, onCreateArgv, envs, state, time.Minute)
if err != nil {
log.Printf("error: on_create failed for %s/%s: %v", item.Source, item.Id, err)
}

View File

@ -49,6 +49,11 @@ func (env *Env) doAction(writer http.ResponseWriter, req *http.Request) {
log.Fatalf("error: failed to load state for %s: %v", source, err)
}
envs, err := core.GetEnvs(env.db, source)
if err != nil {
log.Fatalf("error: failed to get envs for %s: %v", source, err)
}
item, err := core.GetItem(env.db, source, id)
if err != nil {
http.Error(writer, err.Error(), 500)
@ -66,7 +71,7 @@ func (env *Env) doAction(writer http.ResponseWriter, req *http.Request) {
return
}
newItem, newState, err := core.ExecuteItemAction(item, argv, nil, state, time.Minute)
newItem, newState, err := core.ExecuteItemAction(item, argv, envs, state, time.Minute)
if err != nil {
http.Error(writer, err.Error(), 500)
return