alt/services/worker/cmd/alt-worker-migrate/main.go
toki f762d2abd9 feat: worker persistence layer and socket session updates
- Add worker storage layer with PostgreSQL/sqlc setup
- Add migration files for worker backbone schema
- Add job runner and built-in jobs implementation
- Add Redis key definitions for worker state management
- Archive socket-session-loop milestone (completed/renamed)
- Update roadmap current.md and foundation-alignment phase
- Add socket endpoint integration and runtime smoke tests
- Add infra-check, worker-storage-check, worker-storage-gen CLI tools
- Update API socket server and config
- Add pubspec dependencies and client socket endpoint changes
- Add config tests for API and worker services
2026-05-28 19:05:10 +09:00

52 lines
1.2 KiB
Go

package main
import (
"context"
"log/slog"
"net/url"
"os"
"time"
"github.com/jackc/pgx/v5"
"git.toki-labs.com/toki/alt/services/worker/internal/config"
"git.toki-labs.com/toki/alt/services/worker/internal/storage/postgres"
)
// redactDatabaseURL parses and redacts the password from a database URL connection string.
func redactDatabaseURL(rawURL string) string {
u, err := url.Parse(rawURL)
if err != nil {
return "[invalid database url]"
}
if u.User != nil {
if _, hasPassword := u.User.Password(); hasPassword {
u.User = url.UserPassword(u.User.Username(), "xxxxx")
}
}
return u.String()
}
func main() {
cfg := config.Load()
slog.Info("starting migrations", "database_url", redactDatabaseURL(cfg.DatabaseURL))
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
conn, err := pgx.Connect(ctx, cfg.DatabaseURL)
if err != nil {
slog.Error("failed to connect to database", "error", err)
os.Exit(1)
}
defer conn.Close(ctx)
err = postgres.RunMigrations(ctx, conn)
if err != nil {
slog.Error("failed to run migrations", "error", err)
os.Exit(1)
}
slog.Info("migrations completed successfully")
}