GitRoot
craft your forge, build your project, grow your community freely
1// SPDX-FileCopyrightText: 2025 Romain Maneschi <romain@gitroot.dev>
2//
3// SPDX-License-Identifier: EUPL-1.2
4
5package plugin
6
7import (
8 "context"
9 "encoding/json"
10
11 "github.com/samber/oops"
12 "github.com/tetratelabs/wazero/api"
13 pluginLib "gitroot.dev/libs/golang/plugin"
14 "gitroot.dev/server/logger"
15)
16
17func callPluginForConf(ctx context.Context, module api.Module, log *logger.Logger) ([]pluginLib.PluginRun, error) {
18 defaultConf := []pluginLib.PluginRun{}
19
20 free := module.ExportedFunction("free")
21 if defaultRun := module.ExportedFunction("defaultRun"); defaultRun != nil {
22 ptrSize, err := defaultRun.Call(ctx)
23 if err != nil {
24 return nil, oops.Wrapf(err, "defaultRun call")
25 }
26 defaultRunPtr := uint32(ptrSize[0] >> 32)
27 defaultRunSize := uint32(ptrSize[0])
28 if defaultRunPtr != 0 {
29 defer func() {
30 _, err := free.Call(ctx, uint64(defaultRunPtr))
31 if err != nil {
32 log.Error("can't free defaultRun", err)
33 }
34 }()
35 }
36 res, ok := module.Memory().Read(defaultRunPtr, defaultRunSize)
37 if !ok {
38 return nil, oops.Errorf("can't read memory")
39 }
40 log.Debug("Conf receive from guest", logger.NewLoggerPair("json", string(res)))
41 if err = json.Unmarshal(res, &defaultConf); err != nil {
42 log.Error("can't read Configuration", err)
43 }
44 }
45 return defaultConf, nil
46}