An SDK for building ariga/atlas providers in Go.
go get -u friendliai/atlas-go-sdk
To use the SDK, you need to create a new client with your migrations
folder and the atlas
binary path.
package main
import (
...
"friendliai/atlas-go-sdk/atlasexec"
)
func main() {
// Create a new client
client, err := atlasexec.NewClient("my-migration-folder", "my-atlas-cli-path")
if err != nil {
log.Fatalf("failed to create client: %v", err)
}
}
The SDK provides the following APIs:
Login
: Login to the Atlas CloudLogout
: runs the "atlas logout" command.MigratePush
: runs the "atlas migrate push" command.MigrateLint
: runs the "atlas migrate lint" command.MigrateApplySlice
: runs the "atlas migrate apply" command for multiple targets.MigrateApply
: runs the "atlas migrate apply" command.MigrateApplySlice
: runs the 'atlas migrate apply' command for multiple targets.MigrateDown
: runs the "atlas migrate down" command.MigrateStatus
: runs the "atlas migrate status" command.MigrateTest
: runs the "atlas migrate test" command.SchemaApply
: runs the "atlas schema apply" command.SchemaInspect
: runs the "atlas schema inspect" command.SchemaDiff
: runs the "atlas schema diff" command.SchemaTest
: runs the "atlas schema test" command.
Example with MigrateApply
API:
package main
import (
"context"
"fmt"
"log"
"os"
"friendliai/atlas-go-sdk/atlasexec"
)
func main() {
// Define the execution context, supplying a migration directory
// and potentially an `atlas.hcl` configuration file using `atlasexec.WithHCL`.
workdir, err := atlasexec.NewWorkingDir(
atlasexec.WithMigrations(
os.DirFS("./migrations"),
),
)
if err != nil {
log.Fatalf("failed to load working directory: %v", err)
}
// atlasexec works on a temporary directory, so we need to close it
defer workdir.Close()
// Initialize the client.
client, err := atlasexec.NewClient(workdir.Path(), "atlas")
if err != nil {
log.Fatalf("failed to initialize client: %v", err)
}
// Run `atlas migrate apply` on a SQLite database under /tmp.
res, err := client.MigrateApply(context.Background(), &atlasexec.MigrateApplyParams{
URL: "sqlite:///tmp/demo.db?_fk=1&cache=shared",
})
if err != nil {
log.Fatalf("failed to apply migrations: %v", err)
}
fmt.Printf("Applied %d migrations\n", len(res.Applied))
}