- Add pkg/buildinfo with Version/BuildDate (set via ldflags, VCS fallback); cmd/relspec now sources version info from it - Emit "RelSpec <version> (built: <date>)" in generated file headers for bun, gorm, drizzle, pgsql (incl. migration), mssql, sqlite writers - pgsql writer: getSortedColumns now sorts by Sequence then Name so the streaming WriteSchema/WriteDatabase path preserves source column order - dbml reader: mergeTable re-bases merged-in column Sequence values past the existing max, fixing colliding sequences (and alphabetical fallback) when a table is split across multiple DBML files - Tests for bun/gorm header + column order, and dbml multi-file merge ordering
50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
// Package buildinfo exposes the RelSpec version and build date so that both the
|
|
// CLI and the schema writers can stamp generated output with the same values.
|
|
package buildinfo
|
|
|
|
import (
|
|
"fmt"
|
|
"runtime/debug"
|
|
"time"
|
|
)
|
|
|
|
// Version and BuildDate are set via -ldflags at build time (see Makefile). When
|
|
// built without ldflags they are backfilled from the Go module build info.
|
|
var (
|
|
Version = "dev"
|
|
BuildDate = "unknown"
|
|
)
|
|
|
|
func init() {
|
|
if Version != "dev" {
|
|
return
|
|
}
|
|
info, ok := debug.ReadBuildInfo()
|
|
if !ok {
|
|
return
|
|
}
|
|
var rev, vcsTime string
|
|
for _, s := range info.Settings {
|
|
switch s.Key {
|
|
case "vcs.revision":
|
|
if len(s.Value) >= 7 {
|
|
rev = s.Value[:7]
|
|
}
|
|
case "vcs.time":
|
|
vcsTime = s.Value
|
|
}
|
|
}
|
|
if rev != "" {
|
|
Version = rev
|
|
}
|
|
if t, err := time.Parse(time.RFC3339, vcsTime); err == nil {
|
|
BuildDate = t.UTC().Format("2006-01-02 15:04:05 UTC")
|
|
}
|
|
}
|
|
|
|
// GeneratedComment returns the one-line provenance string embedded in generated
|
|
// files, e.g. "RelSpec dev (built: unknown)".
|
|
func GeneratedComment() string {
|
|
return fmt.Sprintf("RelSpec %s (built: %s)", Version, BuildDate)
|
|
}
|