summaryrefslogtreecommitdiff
path: root/cmd/migrate/main.go
blob: a24b7bc8efe6e4345d68f73069a7f051ee9fda41 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package main

import (
	"context"
	"flag"
	"fmt"
	"os"
	"time"

	"aigw/internal/controlplane"
)

func main() {
	environment := flag.String("database-url-env", "AIGW_DATABASE_URL", "environment variable containing the PostgreSQL URL")
	status := flag.Bool("status", false, "print the latest applied migration instead of changing the schema")
	flag.Parse()
	databaseURL := os.Getenv(*environment)
	if databaseURL == "" {
		fmt.Fprintf(os.Stderr, "%s is empty\n", *environment)
		os.Exit(1)
	}
	ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
	defer cancel()
	if *status {
		migration, err := controlplane.MigrationStatusDatabase(ctx, databaseURL)
		if err != nil {
			fmt.Fprintln(os.Stderr, err)
			os.Exit(1)
		}
		fmt.Printf("version=%d name=%s checksum=%s applied_at=%s\n", migration.Version, migration.Name, migration.Checksum, migration.AppliedAt.Format(time.RFC3339))
		return
	}
	if err := controlplane.MigrateDatabase(ctx, databaseURL); err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(1)
	}
	fmt.Println("control-plane schema is up to date")
}