Skip to content

Commit

Permalink
enhance: use workspace file revisions to avoid clobbering the database
Browse files Browse the repository at this point in the history
Signed-off-by: Nick Hale <[email protected]>
  • Loading branch information
njhale committed Feb 12, 2025
1 parent 36e9c0a commit 69e6681
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 10 deletions.
2 changes: 1 addition & 1 deletion database/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ go 1.23.3

require (
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
github.com/gptscript-ai/go-gptscript v0.9.6-0.20250204133419-744b25b84a61
github.com/gptscript-ai/go-gptscript v0.9.6-0.20250211184209-834896a4bb9f
github.com/ncruces/go-sqlite3 v0.20.3
)

Expand Down
4 changes: 2 additions & 2 deletions database/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM=
github.com/go-test/deep v1.0.8/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
github.com/gptscript-ai/go-gptscript v0.9.6-0.20250204133419-744b25b84a61 h1:QxLjsLOYlsVLPwuRkP0Q8EcAoZT1s8vU2ZBSX0+R6CI=
github.com/gptscript-ai/go-gptscript v0.9.6-0.20250204133419-744b25b84a61/go.mod h1:/FVuLwhz+sIfsWUgUHWKi32qT0i6+IXlUlzs70KKt/Q=
github.com/gptscript-ai/go-gptscript v0.9.6-0.20250211184209-834896a4bb9f h1:h3evXo0m2o6TjUnnzbE9Nh7XlsZUeWjrWAS72SpIUkI=
github.com/gptscript-ai/go-gptscript v0.9.6-0.20250211184209-834896a4bb9f/go.mod h1:/FVuLwhz+sIfsWUgUHWKi32qT0i6+IXlUlzs70KKt/Q=
github.com/invopop/yaml v0.2.0 h1:7zky/qH+O0DwAyoobXUqvVBwgBFRxKoQ/3FjcVpjTMY=
github.com/invopop/yaml v0.2.0/go.mod h1:2XuRLgs/ouIrW3XNzuNj7J3Nvu/Dig5MXvbCEdiBN3Q=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
Expand Down
35 changes: 28 additions & 7 deletions database/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,16 +37,34 @@ func main() {
dbWorkspacePath = "/databases/" + dbFileName
)

// Read the database file from the workspace
initialDBData, err := g.ReadFileInWorkspace(ctx, dbWorkspacePath, gptscript.ReadFileInWorkspaceOptions{
// Get the current latest revision from the workspace
revisionInfos, err := g.ListRevisionsForFileInWorkspace(ctx, dbWorkspacePath, gptscript.ListRevisionsForFileInWorkspaceOptions{
WorkspaceID: workspaceID,
})
var notFoundErr *gptscript.NotFoundInWorkspaceError
if err != nil && !errors.As(err, &notFoundErr) {
fmt.Printf("Error reading DB file: %v\n", err)
if err != nil {
fmt.Printf("Error listing database revisions: %v\n", err)
os.Exit(1)
}

var revisionID string
if len(revisionInfos) > 0 {
revisionID = revisionInfos[len(revisionInfos)-1].RevisionID
}

// Read the database file from the workspace
var initialDBData []byte
if revisionID != "" {
initialDBData, err = g.GetRevisionForFileInWorkspace(ctx, dbWorkspacePath, revisionID, gptscript.GetRevisionForFileInWorkspaceOptions{
WorkspaceID: workspaceID,
})

var notFoundErr *gptscript.NotFoundInWorkspaceError
if err != nil && !errors.As(err, &notFoundErr) {
fmt.Printf("Error reading DB file: %v\n", err)
os.Exit(1)
}
}

// Create a temporary file for the SQLite database
dbFile, err := os.CreateTemp("", dbFileName)
if err != nil {
Expand Down Expand Up @@ -74,7 +92,7 @@ func main() {
case "runDatabaseCommand":
result, err = cmd.RunDatabaseCommand(ctx, dbFile, os.Getenv("SQLITE3_ARGS"))
if err == nil {
err = saveWorkspaceDB(ctx, g, dbWorkspacePath, dbFile, initialDBData)
err = saveWorkspaceDB(ctx, g, dbWorkspacePath, revisionID, dbFile, initialDBData)
}
case "databaseContext":
result, err = cmd.DatabaseContext(ctx, dbFile)
Expand All @@ -95,6 +113,7 @@ func saveWorkspaceDB(
ctx context.Context,
g *gptscript.GPTScript,
dbWorkspacePath string,
revisionID string,
dbFile *os.File,
initialDBData []byte,
) error {
Expand All @@ -108,7 +127,9 @@ func saveWorkspaceDB(
}

if err := g.WriteFileInWorkspace(ctx, dbWorkspacePath, updatedDBData, gptscript.WriteFileInWorkspaceOptions{
WorkspaceID: workspaceID,
WorkspaceID: workspaceID,
CreateRevision: &([]bool{true}[0]),
LatestRevision: revisionID,
}); err != nil {
return fmt.Errorf("Error writing updated DB file to workspace: %v", err)
}
Expand Down

0 comments on commit 69e6681

Please sign in to comment.