headscale/hscontrol/db
Kristoffer Dalby 82958835ce db: enforce strict version upgrade path
Add a version check that runs before database migrations to ensure
users do not skip minor versions or downgrade. This protects database
migrations and allows future cleanup of old migration code.

Rules enforced:
- Same minor version: always allowed (patch changes either way)
- Single minor upgrade (e.g. 0.27 -> 0.28): allowed
- Multi-minor upgrade (e.g. 0.25 -> 0.28): blocked with guidance
- Any minor downgrade: blocked
- Major version change: blocked
- Dev builds: warn but allow, preserve stored version

The version is stored in a purpose-built database_versions table
after migrations succeed. The table is created with raw SQL before
gormigrate runs to avoid circular dependencies.

Updates #3058
2026-02-19 08:21:23 +01:00
..
sqliteconfig all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
testdata/sqlite db: use PolicyManager for RequestTags migration 2026-01-21 15:10:29 +01:00
api_key.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
api_key_test.go grpc: support expire/delete API keys by ID 2026-01-20 17:13:38 +01:00
db.go db: enforce strict version upgrade path 2026-02-19 08:21:23 +01:00
db_test.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
ephemeral_garbage_collector_test.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
ip.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
ip_test.go all: upgrade to Go 1.26rc2 and modernize codebase 2026-02-08 12:35:23 +01:00
node.go all: upgrade to Go 1.26rc2 and modernize codebase 2026-02-08 12:35:23 +01:00
node_test.go all: upgrade to Go 1.26rc2 and modernize codebase 2026-02-08 12:35:23 +01:00
policy.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
preauth_keys.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
preauth_keys_test.go all: upgrade to Go 1.26rc2 and modernize codebase 2026-02-08 12:35:23 +01:00
schema.sql db: enforce strict version upgrade path 2026-02-19 08:21:23 +01:00
suite_test.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
text_serialiser.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
user_update_test.go hscontrol: use Updates() instead of Save() for partial updates 2025-11-11 12:47:48 -06:00
users.go all: fix golangci-lint issues (#3064) 2026-02-06 21:45:32 +01:00
users_test.go all: upgrade to Go 1.26rc2 and modernize codebase 2026-02-08 12:35:23 +01:00
versioncheck.go db: enforce strict version upgrade path 2026-02-19 08:21:23 +01:00
versioncheck_test.go db: enforce strict version upgrade path 2026-02-19 08:21:23 +01:00