Forked clean from public hackathon repo (Starfire-AgentTeam, BSL 1.1) with full rebrand to Molecule AI under github.com/Molecule-AI/molecule-monorepo. Brand: Starfire → Molecule AI. Slug: starfire / agent-molecule → molecule. Env vars: STARFIRE_* → MOLECULE_*. Go module: github.com/agent-molecule/platform → github.com/Molecule-AI/molecule-monorepo/platform. Python packages: starfire_plugin → molecule_plugin, starfire_agent → molecule_agent. DB: agentmolecule → molecule. History truncated; see public repo for prior commits and contributor attribution. Verified green: go test -race ./... (platform), pytest (workspace-template 1129 + sdk 132), vitest (canvas 352), build (mcp). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
52 lines
1.0 KiB
Go
52 lines
1.0 KiB
Go
package db
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
"sort"
|
|
|
|
_ "github.com/lib/pq"
|
|
)
|
|
|
|
var DB *sql.DB
|
|
|
|
func InitPostgres(databaseURL string) error {
|
|
var err error
|
|
DB, err = sql.Open("postgres", databaseURL)
|
|
if err != nil {
|
|
return fmt.Errorf("open postgres: %w", err)
|
|
}
|
|
DB.SetMaxOpenConns(25)
|
|
DB.SetMaxIdleConns(5)
|
|
|
|
if err := DB.Ping(); err != nil {
|
|
return fmt.Errorf("ping postgres: %w", err)
|
|
}
|
|
log.Println("Connected to Postgres")
|
|
return nil
|
|
}
|
|
|
|
func RunMigrations(migrationsDir string) error {
|
|
files, err := filepath.Glob(filepath.Join(migrationsDir, "*.sql"))
|
|
if err != nil {
|
|
return fmt.Errorf("glob migrations: %w", err)
|
|
}
|
|
sort.Strings(files)
|
|
|
|
for _, f := range files {
|
|
log.Printf("Applying migration: %s", filepath.Base(f))
|
|
content, err := os.ReadFile(f)
|
|
if err != nil {
|
|
return fmt.Errorf("read %s: %w", f, err)
|
|
}
|
|
if _, err := DB.Exec(string(content)); err != nil {
|
|
return fmt.Errorf("exec %s: %w", filepath.Base(f), err)
|
|
}
|
|
}
|
|
log.Printf("Applied %d migrations", len(files))
|
|
return nil
|
|
}
|