migrable
Declarative config file migrations for TOML.
API Reference
config
config
Config
type Config struct
Load
func Load(configDir string) (*Config, error)
engine
engine
MigrationMeta
type MigrationMeta struct
MigrateResult
type MigrateResult struct
MigrateResult holds the outcome of a Migrate call.
RollbackBlockedError
type RollbackBlockedError struct
RollbackBlockedError is returned when a rollback cannot proceed because one or more ops are marked as irreversible.
ValidationIssue
type ValidationIssue struct
ValidationIssue describes a single problem found during validation.
ValidationResult
type ValidationResult struct
ValidationResult collects all errors and warnings from validation.
DiscoverMigrations
func DiscoverMigrations(migrationsDir string) ([]MigrationMeta, error)
WriteFilesAtomic
func WriteFilesAtomic(files map[string][]byte) error
WriteFilesAtomic writes multiple files transactionally. All files are first written to temp files in the same directories as their targets. Only after all temp files are written successfully are they renamed to their final paths. On any failure, all temp files are cleaned up.
WriteFileAtomic
func WriteFileAtomic(path string, data []byte) error
Init
func Init(dir string) error
Init scaffolds a new migrable project in the given directory. It creates migrable.toml, the migrations directory, and a next/ staging directory.
Merge
func Merge(migrationsDir string, version string) (string, error)
Merge combines staging files from next/ into a single versioned migration file. Returns the output file path.
Migrate
func Migrate(cfg *config.Config, dryRun bool) (*MigrateResult, error)
Migrate applies all pending migrations to the target file(s).
Rollback
func Rollback(cfg *config.Config, dryRun bool) (*MigrateResult, error)
Rollback reverses the most recently applied migration.
SplitFileKey
func SplitFileKey(path string, fileKeys []string) (fileKey string, innerPath string, err error)
SplitFileKey splits a dot-separated path into a file key and the inner path within that file. For single-file projects (one key), the full path is returned unchanged as the inner path. For multi-file projects, the first unescaped dot segment must match one of the file keys.
Validate
func Validate(migrationsDir string) (*ValidationResult, error)
Validate checks all migration files in migrationsDir (and next/ if it exists) for correctness. It collects all issues rather than stopping at the first.
ReadSchemaVersion
func ReadSchemaVersion(filePath string) (*semver.Version, error)
WriteSchemaVersion
func WriteSchemaVersion(filePath string, version *semver.Version) error
RollbackBlockedError.Error
func (e *RollbackBlockedError) Error() string
ops
ops
Package ops implements the 14 migration operations.
MatchSubset
const MatchSubset MatchMode = "subset"
MatchExact
const MatchExact MatchMode = "exact"
MatchAll
const MatchAll MatchMode = "all"
MatchIndex
const MatchIndex MatchMode = "index"
MatchHasKey
const MatchHasKey MatchMode = "has_key"
MatchNotHasKey
const MatchNotHasKey MatchMode = "not_has_key"
MatchRegex
const MatchRegex MatchMode = "regex"
OpAddField
const OpAddField OpType = "add_field"
OpRemoveField
const OpRemoveField OpType = "remove_field"
OpRenameField
const OpRenameField OpType = "rename_field"
OpMoveField
const OpMoveField OpType = "move_field"
OpAddCollection
const OpAddCollection OpType = "add_collection"
OpDropCollection
const OpDropCollection OpType = "drop_collection"
OpSetValue
const OpSetValue OpType = "set_value"
OpSetValueWhere
const OpSetValueWhere OpType = "set_value_where"
OpRemoveWhere
const OpRemoveWhere OpType = "remove_where"
OpAppend
const OpAppend OpType = "append"
OpTransform
const OpTransform OpType = "transform"
OpMergeDefaults
const OpMergeDefaults OpType = "merge_defaults"
OpMergeDefaultsByKey
const OpMergeDefaultsByKey OpType = "merge_defaults_by_key"
OpRaw
const OpRaw OpType = "raw"
MatchMode
type MatchMode string
Migration
type Migration struct
OpType
type OpType string
Op
type Op struct
DownOp
type DownOp struct
ExecSetValue
func ExecSetValue(doc *tomledit.DocumentNode, op Op) error
ExecSetValueWhere
func ExecSetValueWhere(doc *tomledit.DocumentNode, op Op) error
ExecRemoveWhere
func ExecRemoveWhere(doc *tomledit.DocumentNode, op Op) error
ExecAppend
func ExecAppend(doc *tomledit.DocumentNode, op Op) error
ExecMergeDefaults
func ExecMergeDefaults(doc *tomledit.DocumentNode, op Op) error
ExecMergeDefaultsByKey
func ExecMergeDefaultsByKey(doc *tomledit.DocumentNode, op Op) error
Execute
func Execute(doc *tomledit.DocumentNode, op Op) error
Matches
func Matches(item map[string]any, where any, mode MatchMode, index int, arrayLen int) bool
Matches checks whether item matches the where clause according to the given mode. arrayLen is the total array length, needed for negative index normalization. index is the current element's position in the array.
ParseMigration
func ParseMigration(data []byte) (*Migration, error)
ExecRaw
func ExecRaw(doc *tomledit.DocumentNode, op Op) error
ExecAddField
func ExecAddField(doc *tomledit.DocumentNode, op Op) error
ExecRemoveField
func ExecRemoveField(doc *tomledit.DocumentNode, op Op) error
ExecRenameField
func ExecRenameField(doc *tomledit.DocumentNode, op Op) error
ExecMoveField
func ExecMoveField(doc *tomledit.DocumentNode, op Op) error
ExecAddCollection
func ExecAddCollection(doc *tomledit.DocumentNode, op Op) error
ExecDropCollection
func ExecDropCollection(doc *tomledit.DocumentNode, op Op) error
ExecTransform
func ExecTransform(doc *tomledit.DocumentNode, op Op) error
Op Types
| Field | Type | Tag | Description |
|---|---|---|---|
Type | OpType | ||
Section | string | "structure" or "data" | |
Path | string | Common | |
Down | *DownOp | ||
FieldType | string | "type" field from TOML | |
Default | any | ||
From | string | rename_field, move_field | |
To | string | ||
Fields | map[string]any | add_collection | |
Value | any | set_value, raw | |
Content | string | ||
Where | any | set_value_where, remove_where | |
MatchMode | string | ||
Set | map[string]any | ||
Expr | string | transform | |
MatchField | string | merge_defaults_by_key | |
Defaults | []map[string]any |
CLI
See the README for the CLI command reference.