package db import ( mcdsldb "git.wntrmute.dev/kyle/mcdsl/db" ) // Migrations is the ordered list of MCNS schema migrations. var Migrations = []mcdsldb.Migration{ { Version: 1, Name: "zones and records", SQL: ` CREATE TABLE IF NOT EXISTS zones ( id INTEGER PRIMARY KEY, name TEXT NOT NULL UNIQUE, primary_ns TEXT NOT NULL, admin_email TEXT NOT NULL, refresh INTEGER NOT NULL DEFAULT 3600, retry INTEGER NOT NULL DEFAULT 600, expire INTEGER NOT NULL DEFAULT 86400, minimum_ttl INTEGER NOT NULL DEFAULT 300, serial INTEGER NOT NULL DEFAULT 0, created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')), updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')) ); CREATE TABLE IF NOT EXISTS records ( id INTEGER PRIMARY KEY, zone_id INTEGER NOT NULL REFERENCES zones(id) ON DELETE CASCADE, name TEXT NOT NULL, type TEXT NOT NULL CHECK (type IN ('A', 'AAAA', 'CNAME')), value TEXT NOT NULL, ttl INTEGER NOT NULL DEFAULT 300, created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')), updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')), UNIQUE(zone_id, name, type, value) ); CREATE INDEX IF NOT EXISTS idx_records_zone_name ON records(zone_id, name);`, }, { Version: 2, Name: "seed zones and records from CoreDNS zone files", SQL: ` -- Zone: svc.mcp.metacircular.net (service addresses) INSERT OR IGNORE INTO zones (id, name, primary_ns, admin_email, refresh, retry, expire, minimum_ttl, serial) VALUES (1, 'svc.mcp.metacircular.net', 'ns.mcp.metacircular.net.', 'admin.metacircular.net.', 3600, 600, 86400, 300, 2026032601); -- Zone: mcp.metacircular.net (node addresses) INSERT OR IGNORE INTO zones (id, name, primary_ns, admin_email, refresh, retry, expire, minimum_ttl, serial) VALUES (2, 'mcp.metacircular.net', 'ns.mcp.metacircular.net.', 'admin.metacircular.net.', 3600, 600, 86400, 300, 2026032501); -- svc.mcp.metacircular.net records INSERT OR IGNORE INTO records (zone_id, name, type, value, ttl) VALUES (1, 'metacrypt', 'A', '192.168.88.181', 300); INSERT OR IGNORE INTO records (zone_id, name, type, value, ttl) VALUES (1, 'metacrypt', 'A', '100.95.252.120', 300); INSERT OR IGNORE INTO records (zone_id, name, type, value, ttl) VALUES (1, 'mcr', 'A', '192.168.88.181', 300); INSERT OR IGNORE INTO records (zone_id, name, type, value, ttl) VALUES (1, 'mcr', 'A', '100.95.252.120', 300); INSERT OR IGNORE INTO records (zone_id, name, type, value, ttl) VALUES (1, 'sgard', 'A', '192.168.88.181', 300); INSERT OR IGNORE INTO records (zone_id, name, type, value, ttl) VALUES (1, 'sgard', 'A', '100.95.252.120', 300); INSERT OR IGNORE INTO records (zone_id, name, type, value, ttl) VALUES (1, 'mcp-agent', 'A', '192.168.88.181', 300); INSERT OR IGNORE INTO records (zone_id, name, type, value, ttl) VALUES (1, 'mcp-agent', 'A', '100.95.252.120', 300); -- mcp.metacircular.net records INSERT OR IGNORE INTO records (zone_id, name, type, value, ttl) VALUES (2, 'rift', 'A', '192.168.88.181', 300); INSERT OR IGNORE INTO records (zone_id, name, type, value, ttl) VALUES (2, 'rift', 'A', '100.95.252.120', 300); INSERT OR IGNORE INTO records (zone_id, name, type, value, ttl) VALUES (2, 'ns', 'A', '192.168.88.181', 300); INSERT OR IGNORE INTO records (zone_id, name, type, value, ttl) VALUES (2, 'ns', 'A', '100.95.252.120', 300);`, }, } // Migrate applies all pending migrations. func (d *DB) Migrate() error { return mcdsldb.Migrate(d.DB, Migrations) }