Skip to content

Commit f76f275

Browse files
committed
Allow changing env vars in requests
1 parent 7105d2f commit f76f275

1 file changed

Lines changed: 27 additions & 5 deletions

File tree

go/cmd/redbot-update/runner.go

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ import (
1212
)
1313

1414
type RequestInput struct {
15-
RequestType string `json:"request_type"`
16-
RequestNewPythonExe string `json:"request_new_python_exe"`
17-
RequestNewStartArgs []string `json:"request_new_start_args"`
15+
RequestType string `json:"request_type"`
16+
RequestNewPythonExe string `json:"request_new_python_exe"`
17+
RequestNewStartArgs []string `json:"request_new_start_args"`
18+
RequestSetEnvVars map[string]*string `json:"request_set_env_vars"`
1819
}
1920

2021
type RequestOutput interface {
@@ -35,8 +36,9 @@ func (o *ExecRequestOutput) SetRequestType(v string) {
3536

3637
type SpawnProcessRequestInput struct {
3738
*RequestInput
38-
Command string `json:"command"`
39-
Args []string `json:"args"`
39+
Command string `json:"command"`
40+
Args []string `json:"args"`
41+
Env map[string]string `json:"env"`
4042
}
4143

4244
type SpawnProcessRequestOutput struct {
@@ -102,6 +104,18 @@ func (r *ProcessRunner) handleRequest() error {
102104
}
103105
slog.Debug("Parsed request input", "request", input)
104106

107+
for k, v := range input.RequestSetEnvVars {
108+
if v == nil {
109+
err = os.Unsetenv(k)
110+
} else {
111+
err = os.Setenv(k, *v)
112+
}
113+
if err != nil {
114+
log.Debug("Failed to set env var", "env_var_name", k, "env_var_value", v)
115+
return err
116+
}
117+
}
118+
105119
var output RequestOutput
106120
switch input.RequestType {
107121
case "exec":
@@ -144,6 +158,14 @@ func (r *ProcessRunner) handleSpawnCommandRequest(data []byte) (*SpawnProcessReq
144158
cmd.Stdin = os.Stdin
145159
cmd.Stdout = os.Stdout
146160
cmd.Stderr = os.Stderr
161+
if input.Env != nil {
162+
env := []string{}
163+
for k, v := range input.Env {
164+
env = append(env, fmt.Sprintf("%v=%v", k, v))
165+
}
166+
cmd.Env = env
167+
}
168+
147169
slog.Debug("Running command", "command", input.Command, "args", input.Args)
148170
if err := cmd.Run(); err != nil {
149171
slog.Debug("Spawned command returned an error", "err", err)

0 commit comments

Comments
 (0)