diff --git a/models/forgejo_migrations/migrate.go b/models/forgejo_migrations/migrate.go
index 713db4a090..8bd3b448dc 100644
--- a/models/forgejo_migrations/migrate.go
+++ b/models/forgejo_migrations/migrate.go
@@ -37,6 +37,8 @@ func NewMigration(desc string, fn func(*xorm.Engine) error) *Migration {
 // Add new migrations to the bottom of the list.
 var migrations = []*Migration{
 	NewMigration("Add Forgejo Blocked Users table", forgejo_v1_20.AddForgejoBlockedUser),
+	// v2 -> v3
+	NewMigration("create the forgejo_sem_ver table", forgejo_v1_20.CreateSemVerTable),
 }
 
 // GetCurrentDBVersion returns the current Forgejo database version.
diff --git a/models/forgejo_migrations/v1_20/v2.go b/models/forgejo_migrations/v1_20/v2.go
new file mode 100644
index 0000000000..39f3b58924
--- /dev/null
+++ b/models/forgejo_migrations/v1_20/v2.go
@@ -0,0 +1,15 @@
+// SPDX-License-Identifier: MIT
+
+package forgejo_v1_20 //nolint:revive
+
+import (
+	"xorm.io/xorm"
+)
+
+func CreateSemVerTable(x *xorm.Engine) error {
+	type ForgejoSemVer struct {
+		Version string
+	}
+
+	return x.Sync(new(ForgejoSemVer))
+}