Skip to content

Commit 2198b8c

Browse files
Update CI scripts
1 parent 449cbe1 commit 2198b8c

File tree

9 files changed

+54
-42
lines changed

9 files changed

+54
-42
lines changed

Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,9 @@ build:
44
test:
55
go test -v ./...
66

7+
validate:
8+
go vet ./...
9+
golangci-lint run
10+
711
ci: build
812
./bin/gptscript ./scripts/ci.gpt

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ go 1.21.5
55
require (
66
github.com/acorn-io/cmd v0.0.0-20240203032901-e9e631185ddb
77
github.com/adrg/xdg v0.4.0
8+
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
89
github.com/hexops/autogold/v2 v2.1.0
910
github.com/sashabaranov/go-openai v1.18.3
1011
github.com/sirupsen/logrus v1.9.3

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ github.com/google/go-containerregistry v0.16.1 h1:rUEt426sR6nyrL3gt+18ibRcvYpKYd
3131
github.com/google/go-containerregistry v0.16.1/go.mod h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ=
3232
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec=
3333
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
34+
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
35+
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
3436
github.com/hexops/autogold v0.8.1/go.mod h1:97HLDXyG23akzAoRYJh/2OBs3kd80eHyKPvZw0S5ZBY=
3537
github.com/hexops/autogold v1.3.1 h1:YgxF9OHWbEIUjhDbpnLhgVsjUDsiHDTyDfy2lrfdlzo=
3638
github.com/hexops/autogold v1.3.1/go.mod h1:sQO+mQUCVfxOKPht+ipDSkJ2SCJ7BNJVHZexsXqWMx4=

pkg/builtin/builtin.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,21 @@ var Tools = map[string]types.Tool{
8585
return string(data), nil
8686
},
8787
},
88+
"sys.abort": {
89+
Description: "Aborts execution",
90+
Arguments: types.ObjectSchema(
91+
"message", "The description of the error or unexpected result that caused abort to be called",
92+
),
93+
BuiltinFunc: func(ctx context.Context, env []string, input string) (string, error) {
94+
var params struct {
95+
Message string `json:"message,omitempty"`
96+
}
97+
if err := json.Unmarshal([]byte(input), &params); err != nil {
98+
return "", err
99+
}
100+
return "", fmt.Errorf("ABORT: %s", params.Message)
101+
},
102+
},
88103
"sys.http.post": {
89104
Description: "Write contents to a http or https URL using the POST method",
90105
Arguments: types.ObjectSchema(

pkg/cli/gptscript.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,10 +136,10 @@ func (r *GPTScript) Run(cmd *cobra.Command, args []string) error {
136136
} else {
137137
if !r.Quiet {
138138
if toolInput != "" {
139-
_, _ = fmt.Fprintln(os.Stderr, "\nINPUT:\n")
139+
_, _ = fmt.Fprint(os.Stderr, "\nINPUT:\n\n")
140140
_, _ = fmt.Fprintln(os.Stderr, toolInput)
141141
}
142-
_, _ = fmt.Fprintln(os.Stderr, "\nOUTPUT:\n")
142+
_, _ = fmt.Fprint(os.Stderr, "\nOUTPUT:\n\n")
143143
}
144144
fmt.Print(s)
145145
if !strings.HasSuffix(s, "\n") {

pkg/engine/engine.go

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/acorn-io/gptscript/pkg/openai"
1515
"github.com/acorn-io/gptscript/pkg/types"
1616
"github.com/acorn-io/gptscript/pkg/version"
17+
"github.com/google/shlex"
1718
)
1819

1920
// InternalSystemPrompt is added to all threads. Changing this is very dangerous as it has a
@@ -152,19 +153,24 @@ func (e *Engine) runCommand(ctx context.Context, tool types.Tool, input string)
152153
dec := json.NewDecoder(bytes.NewReader([]byte(input)))
153154
dec.UseNumber()
154155

156+
envMap := map[string]string{}
155157
if err := json.Unmarshal([]byte(input), &data); err == nil {
156158
for k, v := range data {
157-
envName := fmt.Sprintf("%s", strings.ToUpper(strings.ReplaceAll(k, "-", "_")))
159+
envName := strings.ToUpper(strings.ReplaceAll(k, "-", "_"))
158160
switch val := v.(type) {
159161
case string:
162+
envMap[envName] = val
160163
env = append(env, envName+"="+val)
161164
case json.Number:
165+
envMap[envName] = string(val)
162166
env = append(env, envName+"="+string(val))
163167
case bool:
168+
envMap[envName] = fmt.Sprint(val)
164169
env = append(env, envName+"="+fmt.Sprint(val))
165170
default:
166171
data, err := json.Marshal(val)
167172
if err == nil {
173+
envMap[envName] = string(data)
168174
env = append(env, envName+"="+string(data))
169175
}
170176
}
@@ -184,9 +190,19 @@ func (e *Engine) runCommand(ctx context.Context, tool types.Tool, input string)
184190
return "", err
185191
}
186192
interpreter = strings.TrimSpace(interpreter)[2:]
193+
194+
interpreter = os.Expand(interpreter, func(s string) string {
195+
return envMap[s]
196+
})
197+
198+
args, err := shlex.Split(interpreter)
199+
if err != nil {
200+
return "", err
201+
}
202+
187203
output := &bytes.Buffer{}
188204

189-
cmd := exec.Command(interpreter, f.Name())
205+
cmd := exec.Command(args[0], append(args[1:], f.Name())...)
190206
cmd.Env = env
191207
cmd.Stdin = strings.NewReader(input)
192208
cmd.Stderr = os.Stderr
@@ -198,7 +214,7 @@ func (e *Engine) runCommand(ctx context.Context, tool types.Tool, input string)
198214
return "", err
199215
}
200216

201-
return string(output.Bytes()), nil
217+
return output.String(), nil
202218
}
203219

204220
func (e *Engine) Start(ctx Context, input string) (*Return, error) {

pkg/mvl/log.go

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package mvl
22

33
import (
4-
"encoding/json"
54
"fmt"
65
"os"
76
"runtime"
@@ -34,24 +33,6 @@ func (f formatter) Format(entry *logrus.Entry) ([]byte, error) {
3433
msg)), nil
3534
}
3635

37-
type verbose struct {
38-
}
39-
40-
func (f verbose) Format(entry *logrus.Entry) ([]byte, error) {
41-
buf, err := json.MarshalIndent(struct {
42-
Time time.Time `json:"time,omitempty"`
43-
Level string `json:"level,omitempty"`
44-
Message string `json:"message,omitempty"`
45-
Data any `json:"data,omitempty"`
46-
}{
47-
Time: entry.Time,
48-
Level: entry.Level.String(),
49-
Message: entry.Message,
50-
Data: entry.Data,
51-
}, "", " ")
52-
return append(buf, []byte("\n")...), err
53-
}
54-
5536
func SetDebug() {
5637
logrus.SetFormatter(&logrus.JSONFormatter{
5738
PrettyPrint: os.Getenv("GPTSCRIPT_JSON_LOG_SINGLE_LINE") != "true",

pkg/test/examples_test.go

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,17 @@ const (
1717
)
1818

1919
func TestExamples(t *testing.T) {
20-
l, err := os.ReadDir(examplePath)
21-
require.NoError(t, err)
22-
if err != nil {
23-
t.Fatal(err)
20+
tests := []string{
21+
"fib.gpt",
22+
"echo.gpt",
23+
"helloworld.gpt",
2424
}
25-
26-
for _, entry := range l {
27-
entry.Name()
28-
t.Run(entry.Name(), func(t *testing.T) {
25+
for _, entry := range tests {
26+
t.Run(entry, func(t *testing.T) {
2927
r, err := runner.New()
3028
require.NoError(t, err)
3129

32-
prg, err := loader.Program(context.Background(), filepath.Join(examplePath, entry.Name()), "")
30+
prg, err := loader.Program(context.Background(), filepath.Join(examplePath, entry), "")
3331
require.NoError(t, err)
3432

3533
output, err := r.Run(context.Background(), prg, os.Environ(), "")

scripts/ci.gpt

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,15 @@
1-
tools: make
1+
tools: make, sys.abort
22

3-
Run each step sequentially
3+
Run each step sequentially, if either step fails abort
44

55
1. Run "make" to compile
66
2. Run "make test" to test
7+
3. Run "make validate" to test
78

89
Then print SUCCESS
910
---
1011
tool: make
1112
description: Runs the "make"
1213
args: arg: the args to pass to make
1314

14-
#!/bin/sh
15-
set -e
16-
17-
echo "START MAKE OUTPUT:"
18-
echo "Running make ${ARG}"
19-
make ${ARG}
20-
echo "END MAKE OUTPUT"
15+
#!make ${ARG}

0 commit comments

Comments
 (0)