~bigbes/core-go

ref: ba01be8449eadd60ffae7ae28f27247bbefa8bcc core-go/cmd/sourcehut-migrate/main.go -rw-r--r-- 2.8 KiB
ba01be84 — Conrad Hoffmann server: replace deprecated gqlgen code 1 year, 1 month ago
                                                                                
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package main

import (
	"errors"
	"fmt"
	"log"
	"os"
	"path/filepath"

	"git.sr.ht/~bitfehler/brant/cli"
	"github.com/alexflint/go-arg"
	_ "github.com/jackc/pgx/v5/stdlib"

	"git.sr.ht/~sircmpwn/core-go/config"
)

type Args struct {
	ServiceMeta   *cli.Args `arg:"subcommand:meta.sr.ht" help:"run meta.sr.ht migration"`
	ServiceGit    *cli.Args `arg:"subcommand:git.sr.ht" help:"run git.sr.ht migration"`
	ServiceHg     *cli.Args `arg:"subcommand:hg.sr.ht" help:"run hg.sr.ht migration"`
	ServiceBuilds *cli.Args `arg:"subcommand:builds.sr.ht" help:"run builds.sr.ht migration"`
	ServiceTodo   *cli.Args `arg:"subcommand:todo.sr.ht" help:"run todo.sr.ht migration"`
	ServiceLists  *cli.Args `arg:"subcommand:lists.sr.ht" help:"run lists.sr.ht migration"`
	ServiceMan    *cli.Args `arg:"subcommand:man.sr.ht" help:"run man.sr.ht migration"`
	ServiceHub    *cli.Args `arg:"subcommand:hub.sr.ht" help:"run hub.sr.ht migration"`
	ServicePaste  *cli.Args `arg:"subcommand:paste.sr.ht" help:"run paste.sr.ht migration"`
	ServicePages  *cli.Args `arg:"subcommand:pages.sr.ht" help:"run pages.sr.ht migration"`
}

func (a Args) Epilogue() string {
	return "Use `<cmd> --help` for help with individual commands"
}

func main() {
	var a Args
	p := arg.MustParse(&a)
	if p.Subcommand() == nil {
		p.WriteHelp(os.Stderr)
		os.Exit(1)
	}

	service := p.SubcommandNames()[0]
	var brantArgs *cli.Args
	switch {
	case a.ServiceMeta != nil:
		brantArgs = a.ServiceMeta
	case a.ServiceGit != nil:
		brantArgs = a.ServiceGit
	case a.ServiceHg != nil:
		brantArgs = a.ServiceHg
	case a.ServiceBuilds != nil:
		brantArgs = a.ServiceBuilds
	case a.ServiceTodo != nil:
		brantArgs = a.ServiceTodo
	case a.ServiceLists != nil:
		brantArgs = a.ServiceLists
	case a.ServiceMan != nil:
		brantArgs = a.ServiceMan
	case a.ServiceHub != nil:
		brantArgs = a.ServiceHub
	case a.ServicePaste != nil:
		brantArgs = a.ServicePaste
	case a.ServicePages != nil:
		brantArgs = a.ServicePages
	default:
		panic(fmt.Errorf("unhandled service: %s", service))
	}

	cfg := config.LoadFiles()

	if brantArgs.DataSourceName == "" {
		dbstring, ok := cfg.Get(service, "connection-string")
		if !ok {
			log.Fatalf("No database configured for %s", service)
		}
		brantArgs.DataSourceName = dbstring
	}

	if brantArgs.Directory == "" {
		m, err := os.Stat("migrations")
		if err != nil && !errors.Is(err, os.ErrNotExist) {
			log.Fatalf("Error checking for migrations: %s", err.Error())
		}
		if err == nil && m.IsDir() {
			log.Println("sourcehut-migrate: ./migrations directory found, not defaulting to sr.ht::assets")
		} else {
			assetsDir := "/usr/share/sourcehut"
			if assets, ok := cfg.Get("sr.ht", "assets"); ok {
				assetsDir = assets
			}
			migrations := filepath.Join(assetsDir, "migrations", service)
			brantArgs.Directory = migrations
		}
	}

	cli.RunWithArgs(brantArgs)
}