forgejo/models/migrations/migrations.go

509 lines
30 KiB
Go
Raw Normal View History

2015-02-12 05:58:37 +03:00
// Copyright 2015 The Gogs Authors. All rights reserved.
// Copyright 2017 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
2015-02-12 05:58:37 +03:00
2015-01-22 15:49:52 +03:00
package migrations
import (
"context"
2015-02-12 05:58:37 +03:00
"fmt"
2015-01-22 15:56:50 +03:00
[DB] Forgejo database migrations - Implements https://codeberg.org/forgejo/discussions/issues/32#issuecomment-918737 - Allows to add Forgejo-specific migrations that don't interfere with Gitea's migration logic. Please do note that we cannot liberally add migrations for Gitea tables, as they might do their own migrations in a future version on that table, and that could undo our migrations. Luckily, we don't have a scenario where that's needed and thus not taken into account. Co-authored-by: Gusted <postmaster@gusted.xyz> Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/795 (cherry picked from commit 8ee32978c0af1f8f71679c87f695df2b90b617c8) (cherry picked from commit c240b34f595a7a9763f7b748052ac98f9f18954d) (cherry picked from commit 03936c649243a0a29701393d58e63e33064c7461) (cherry picked from commit a20ed852f8b6d28872c05d688bffe5c6976bfa03) (cherry picked from commit 1dfa82676f1feb745633618fde2d362bf19c4f28) (cherry picked from commit c39ae0bf8abced8fd5dc32589e68515ac308b69b) (cherry picked from commit cfaff08996c9f42592c95a63fe907b45b8a9317a) (cherry picked from commit 94a458835a2b0336b26c1c9df64fdfe2de47f496) (cherry picked from commit 61a3cf77dfe3f612ff110eb19f94dcb08051daf1) (cherry picked from commit abb350fde879cc495761dc4616b7aa0fc5d94d54) (cherry picked from commit 5194829d6b4ed702cf50ff875da57d04d77c8a18) (cherry picked from commit 89239a60f23cad7dad03add744e23a4f3b10d6a4) (cherry picked from commit 683cfd86efc5fa8cc04973ce3115351515a20917) (cherry picked from commit f4546cfed92844e3666b80130eadabb9348b88ae) (cherry picked from commit 86614d5826392b3fbe68355baeab9a0a761883a5) (cherry picked from commit e4b9c32187a039a83686a82856a9a192919c6e82) (cherry picked from commit 8c253719afa9b82f169757df007587d38560c06d) (cherry picked from commit 857365d6c15b5471d63662b1d89d1523151c4f79) (cherry picked from commit a488b3952f58bbf28bfa101a24e52dad7c9662eb) (cherry picked from commit 98313c49109c941426beecc1a3e7887f28b99970) (cherry picked from commit 430d95e8240971e266705d2e7202a5c785379cb2) (cherry picked from commit 08bf9d918fbb67f5ac06c0cfdc24229aa14ff83f) (cherry picked from commit f8a170e2d042fcb8f314e123de6918317ac1e909) (cherry picked from commit d20e325378e67087279496d35b575e566836aaa1) (cherry picked from commit 6c0aa7dd4fd8c234984d455933f69f51abcb2d32) (cherry picked from commit 46c08c26c7bd3260b3ac7678f24566b467f4a2fb) (cherry picked from commit 9ee22153c4ec62392693c9151d5395221d097f70) [DB] Ensure forgejo migration up to date (squash) - Hook Forgejo's `EnsureUpToDate` to Gitea's `EnsureUpToDate`, such that the Forgejo migrations are also being checked to be up to date. - I'm not sure how I missed this and if this has caused any problems, but due to the lack of any open issue about it it seems to not be a big problem. (cherry picked from commit 6c65b6dcf6ab0d58e5c2d03a866e4e38294f72ad) (cherry picked from commit 6d45c37d843147e69b0a27ebe35c617d7f574b76) [DB] Add test for TestEnsureUpToDate (squash) - Add a test for the behavior of `EnsureUpToDate`, to ensure it will error when needed and succeed when the forgejo version is up to date. - Add forgejo_migrations package to GO_TEST_PACKAGES, to avoid running it with `test-unit` and instead test it with `test-*-migration`. (cherry picked from commit b172a506914fee40a50daa51f0c8e547427fd2f8) (cherry picked from commit d8af3088205b592340fd836135ffe97da9cec5a6) (cherry picked from commit e69e64a32c5e38247e94ab880536e3cfeab67cc6) (cherry picked from commit 4e8363fad4e08845960912a3ea3fe7265ee60602) (cherry picked from commit fc9ecd6c533eca864503423cf4a21710984a6b75) (cherry picked from commit e5c446e3dc9bc6e9549862f7b764a634f4fbaaae) (cherry picked from commit 7066a15655a33f57ccfb68cf2cb994ea57ad3666) (cherry picked from commit 9183cdc8354d529a1c2b570551bc1578fb10d58b) (cherry picked from commit 5f93039e0d7c8a7eb79df16ce0d8603f948b1bd2) Conflicts: Makefile https://codeberg.org/forgejo/forgejo/pulls/2245 (cherry picked from commit a039b3b0c9a7016de9e7e71ea0cc7a1185adb8d9)
2023-06-03 11:41:16 +03:00
"code.gitea.io/gitea/models/forgejo_migrations"
"code.gitea.io/gitea/models/migrations/v1_10"
"code.gitea.io/gitea/models/migrations/v1_11"
"code.gitea.io/gitea/models/migrations/v1_12"
"code.gitea.io/gitea/models/migrations/v1_13"
"code.gitea.io/gitea/models/migrations/v1_14"
"code.gitea.io/gitea/models/migrations/v1_15"
"code.gitea.io/gitea/models/migrations/v1_16"
"code.gitea.io/gitea/models/migrations/v1_17"
"code.gitea.io/gitea/models/migrations/v1_18"
"code.gitea.io/gitea/models/migrations/v1_19"
"code.gitea.io/gitea/models/migrations/v1_20"
"code.gitea.io/gitea/models/migrations/v1_21"
"code.gitea.io/gitea/models/migrations/v1_22"
"code.gitea.io/gitea/models/migrations/v1_23"
"code.gitea.io/gitea/models/migrations/v1_6"
"code.gitea.io/gitea/models/migrations/v1_7"
"code.gitea.io/gitea/models/migrations/v1_8"
"code.gitea.io/gitea/models/migrations/v1_9"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
[UPGRADE] run sanity checks before the database is upgraded (cherry picked from commit 69741e4e66932a9ac092089e7ba27399c55dcd1a) (cherry picked from commit 2a3c7b09cbdfd62cca2619aaf37b6913a373d142) (cherry picked from commit a1554c1168d897e8db4024d716a837c012bf74e9) (cherry picked from commit edae2c6d2dda7f44e40ae88fba60a15f61b72232) (cherry picked from commit 49737cf009a6a0fc119cf8a1a1593493c77c841a) (cherry picked from commit ec53704c34a3e9491b4f210250d5e053f4b221e5) (cherry picked from commit 7a1c5c0f323cb5e9235d8fa6e59a0a1b172d3abb) (cherry picked from commit e658c20c0f21b42f741c0149e0e79ea0bb3b949c) (cherry picked from commit baf575468f39c5dd0c2ff3498ef9f706d12d114e) (cherry picked from commit 40cb14eff427c801243e374f7c60fef994bcb792) (cherry picked from commit 25ab4d07136d023236de00e9143957c856b4d196) (cherry picked from commit 5a29005215a5e9419ed3096c1bc0aae172f45089) (cherry picked from commit fef1260e990719af49644970aaa2a7219438b681) (cherry picked from commit eadbbb1afe6f36cfaf4cc3fc346b510893f21011) (cherry picked from commit db22d61eb47b56cc7cf0f44934f8f550df029e76) (cherry picked from commit 9d3b0be39a008e2e1a4f474b0ab74627e003430d) (cherry picked from commit b3fa3c1292228ef4833b6ea1f120102471478256) (cherry picked from commit c8300d4fe24fccaefc18e95ec8c6d689f1cb4d7a) (cherry picked from commit 8ba6a4c9dbd9cbb2758b02016f1858d1e85633ce) (cherry picked from commit 8b8df652c1eb7806e590751942b4689e374e1128) (cherry picked from commit fc8fa050c688451c9c2079b1f0f71ed11a6d7e4d) (cherry picked from commit bcf3faf69843421517bf3ddf032fe92cbf0a766d) (cherry picked from commit 514a631aa650987ef3400ad31eb32af676a97164) (cherry picked from commit 529c7a09f73bdb27ac14e0cdb6312eac2bc1109c) (cherry picked from commit 0d093d76e2d27523f42606d78c1302057c328913)
2023-08-09 01:05:06 +03:00
forgejo_services "code.gitea.io/gitea/services/forgejo"
2019-10-17 12:26:49 +03:00
"xorm.io/xorm"
"xorm.io/xorm/names"
2015-01-22 15:49:52 +03:00
)
const minDBVersion = 70 // Gitea 1.5.3
2015-02-12 05:58:37 +03:00
type migration struct {
idNumber int64 // DB version is "the last migration's idNumber" + 1
description string
migrate func(*xorm.Engine) error
}
// newMigration creates a new migration
func newMigration(idNumber int64, desc string, fn func(*xorm.Engine) error) *migration {
return &migration{idNumber, desc, fn}
}
// Migrate executes the migration
func (m *migration) Migrate(x *xorm.Engine) error {
return m.migrate(x)
}
2015-01-22 15:49:52 +03:00
// Version describes the version table. Should have only one row with id==1
2015-01-22 15:49:52 +03:00
type Version struct {
ID int64 `xorm:"pk autoincr"`
Version int64 // DB version is "the last migration's idNumber" + 1
2015-01-22 15:49:52 +03:00
}
// Use noopMigration when there is a migration that has been no-oped
var noopMigration = func(_ *xorm.Engine) error { return nil }
var preparedMigrations []*migration
2015-01-22 15:49:52 +03:00
// This is a sequence of migrations. Add new migrations to the bottom of the list.
// If you want to "retire" a migration, remove it from the top of the list and
// update minDBVersion accordingly
func prepareMigrationTasks() []*migration {
if preparedMigrations != nil {
return preparedMigrations
}
preparedMigrations = []*migration{
// Gitea 1.5.0 ends at database version 69
newMigration(70, "add issue_dependencies", v1_6.AddIssueDependencies),
newMigration(71, "protect each scratch token", v1_6.AddScratchHash),
newMigration(72, "add review", v1_6.AddReview),
// Gitea 1.6.0 ends at database version 73
newMigration(73, "add must_change_password column for users table", v1_7.AddMustChangePassword),
newMigration(74, "add approval whitelists to protected branches", v1_7.AddApprovalWhitelistsToProtectedBranches),
newMigration(75, "clear nonused data which not deleted when user was deleted", v1_7.ClearNonusedData),
// Gitea 1.7.0 ends at database version 76
newMigration(76, "add pull request rebase with merge commit", v1_8.AddPullRequestRebaseWithMerge),
newMigration(77, "add theme to users", v1_8.AddUserDefaultTheme),
newMigration(78, "rename repo is_bare to repo is_empty", v1_8.RenameRepoIsBareToIsEmpty),
newMigration(79, "add can close issues via commit in any branch", v1_8.AddCanCloseIssuesViaCommitInAnyBranch),
newMigration(80, "add is locked to issues", v1_8.AddIsLockedToIssues),
newMigration(81, "update U2F counter type", v1_8.ChangeU2FCounterType),
// Gitea 1.8.0 ends at database version 82
newMigration(82, "hot fix for wrong release sha1 on release table", v1_9.FixReleaseSha1OnReleaseTable),
newMigration(83, "add uploader id for table attachment", v1_9.AddUploaderIDForAttachment),
newMigration(84, "add table to store original imported gpg keys", v1_9.AddGPGKeyImport),
newMigration(85, "hash application token", v1_9.HashAppToken),
newMigration(86, "add http method to webhook", v1_9.AddHTTPMethodToWebhook),
newMigration(87, "add avatar field to repository", v1_9.AddAvatarFieldToRepository),
// Gitea 1.9.0 ends at database version 88
newMigration(88, "add commit status context field to commit_status", v1_10.AddCommitStatusContext),
newMigration(89, "add original author/url migration info to issues, comments, and repo ", v1_10.AddOriginalMigrationInfo),
newMigration(90, "change length of some repository columns", v1_10.ChangeSomeColumnsLengthOfRepo),
newMigration(91, "add index on owner_id of repository and type, review_id of comment", v1_10.AddIndexOnRepositoryAndComment),
newMigration(92, "remove orphaned repository index statuses", v1_10.RemoveLingeringIndexStatus),
newMigration(93, "add email notification enabled preference to user", v1_10.AddEmailNotificationEnabledToUser),
newMigration(94, "add enable_status_check, status_check_contexts to protected_branch", v1_10.AddStatusCheckColumnsForProtectedBranches),
newMigration(95, "add table columns for cross referencing issues", v1_10.AddCrossReferenceColumns),
newMigration(96, "delete orphaned attachments", v1_10.DeleteOrphanedAttachments),
newMigration(97, "add repo_admin_change_team_access to user", v1_10.AddRepoAdminChangeTeamAccessColumnForUser),
newMigration(98, "add original author name and id on migrated release", v1_10.AddOriginalAuthorOnMigratedReleases),
newMigration(99, "add task table and status column for repository table", v1_10.AddTaskTable),
newMigration(100, "update migration repositories' service type", v1_10.UpdateMigrationServiceTypes),
newMigration(101, "change length of some external login users columns", v1_10.ChangeSomeColumnsLengthOfExternalLoginUser),
// Gitea 1.10.0 ends at database version 102
newMigration(102, "update migration repositories' service type", v1_11.DropColumnHeadUserNameOnPullRequest),
newMigration(103, "Add WhitelistDeployKeys to protected branch", v1_11.AddWhitelistDeployKeysToBranches),
newMigration(104, "remove unnecessary columns from label", v1_11.RemoveLabelUneededCols),
newMigration(105, "add includes_all_repositories to teams", v1_11.AddTeamIncludesAllRepositories),
newMigration(106, "add column `mode` to table watch", v1_11.AddModeColumnToWatch),
newMigration(107, "Add template options to repository", v1_11.AddTemplateToRepo),
newMigration(108, "Add comment_id on table notification", v1_11.AddCommentIDOnNotification),
newMigration(109, "add can_create_org_repo to team", v1_11.AddCanCreateOrgRepoColumnForTeam),
newMigration(110, "change review content type to text", v1_11.ChangeReviewContentToText),
newMigration(111, "update branch protection for can push and whitelist enable", v1_11.AddBranchProtectionCanPushAndEnableWhitelist),
newMigration(112, "remove release attachments which repository deleted", v1_11.RemoveAttachmentMissedRepo),
newMigration(113, "new feature: change target branch of pull requests", v1_11.FeatureChangeTargetBranch),
newMigration(114, "Remove authentication credentials from stored URL", v1_11.SanitizeOriginalURL),
newMigration(115, "add user_id prefix to existing user avatar name", v1_11.RenameExistingUserAvatarName),
newMigration(116, "Extend TrackedTimes", v1_11.ExtendTrackedTimes),
// Gitea 1.11.0 ends at database version 117
newMigration(117, "Add block on rejected reviews branch protection", v1_12.AddBlockOnRejectedReviews),
newMigration(118, "Add commit id and stale to reviews", v1_12.AddReviewCommitAndStale),
newMigration(119, "Fix migrated repositories' git service type", v1_12.FixMigratedRepositoryServiceType),
newMigration(120, "Add owner_name on table repository", v1_12.AddOwnerNameOnRepository),
newMigration(121, "add is_restricted column for users table", v1_12.AddIsRestricted),
newMigration(122, "Add Require Signed Commits to ProtectedBranch", v1_12.AddRequireSignedCommits),
newMigration(123, "Add original information for reactions", v1_12.AddReactionOriginals),
newMigration(124, "Add columns to user and repository", v1_12.AddUserRepoMissingColumns),
newMigration(125, "Add some columns on review for migration", v1_12.AddReviewMigrateInfo),
newMigration(126, "Fix topic repository count", v1_12.FixTopicRepositoryCount),
newMigration(127, "add repository code language statistics", v1_12.AddLanguageStats),
newMigration(128, "fix merge base for pull requests", v1_12.FixMergeBase),
newMigration(129, "remove dependencies from deleted repositories", v1_12.PurgeUnusedDependencies),
newMigration(130, "Expand webhooks for more granularity", v1_12.ExpandWebhooks),
newMigration(131, "Add IsSystemWebhook column to webhooks table", v1_12.AddSystemWebhookColumn),
newMigration(132, "Add Branch Protection Protected Files Column", v1_12.AddBranchProtectionProtectedFilesColumn),
newMigration(133, "Add EmailHash Table", v1_12.AddEmailHashTable),
newMigration(134, "Refix merge base for merged pull requests", v1_12.RefixMergeBase),
newMigration(135, "Add OrgID column to Labels table", v1_12.AddOrgIDLabelColumn),
newMigration(136, "Add CommitsAhead and CommitsBehind Column to PullRequest Table", v1_12.AddCommitDivergenceToPulls),
newMigration(137, "Add Branch Protection Block Outdated Branch", v1_12.AddBlockOnOutdatedBranch),
newMigration(138, "Add ResolveDoerID to Comment table", v1_12.AddResolveDoerIDCommentColumn),
newMigration(139, "prepend refs/heads/ to issue refs", v1_12.PrependRefsHeadsToIssueRefs),
// Gitea 1.12.0 ends at database version 140
newMigration(140, "Save detected language file size to database instead of percent", v1_13.FixLanguageStatsToSaveSize),
newMigration(141, "Add KeepActivityPrivate to User table", v1_13.AddKeepActivityPrivateUserColumn),
newMigration(142, "Ensure Repository.IsArchived is not null", v1_13.SetIsArchivedToFalse),
newMigration(143, "recalculate Stars number for all user", v1_13.RecalculateStars),
newMigration(144, "update Matrix Webhook http method to 'PUT'", v1_13.UpdateMatrixWebhookHTTPMethod),
newMigration(145, "Increase Language field to 50 in LanguageStats", v1_13.IncreaseLanguageField),
newMigration(146, "Add projects info to repository table", v1_13.AddProjectsInfo),
newMigration(147, "create review for 0 review id code comments", v1_13.CreateReviewsForCodeComments),
newMigration(148, "remove issue dependency comments who refer to non existing issues", v1_13.PurgeInvalidDependenciesComments),
newMigration(149, "Add Created and Updated to Milestone table", v1_13.AddCreatedAndUpdatedToMilestones),
newMigration(150, "add primary key to repo_topic", v1_13.AddPrimaryKeyToRepoTopic),
newMigration(151, "set default password algorithm to Argon2", v1_13.SetDefaultPasswordToArgon2),
newMigration(152, "add TrustModel field to Repository", v1_13.AddTrustModelToRepository),
newMigration(153, "add Team review request support", v1_13.AddTeamReviewRequestSupport),
newMigration(154, "add timestamps to Star, Label, Follow, Watch and Collaboration", v1_13.AddTimeStamps),
// Gitea 1.13.0 ends at database version 155
newMigration(155, "add changed_protected_files column for pull_request table", v1_14.AddChangedProtectedFilesPullRequestColumn),
newMigration(156, "fix publisher ID for tag releases", v1_14.FixPublisherIDforTagReleases),
newMigration(157, "ensure repo topics are up-to-date", v1_14.FixRepoTopics),
newMigration(158, "code comment replies should have the commitID of the review they are replying to", v1_14.UpdateCodeCommentReplies),
newMigration(159, "update reactions constraint", v1_14.UpdateReactionConstraint),
newMigration(160, "Add block on official review requests branch protection", v1_14.AddBlockOnOfficialReviewRequests),
newMigration(161, "Convert task type from int to string", v1_14.ConvertTaskTypeToString),
newMigration(162, "Convert webhook task type from int to string", v1_14.ConvertWebhookTaskTypeToString),
newMigration(163, "Convert topic name from 25 to 50", v1_14.ConvertTopicNameFrom25To50),
newMigration(164, "Add scope and nonce columns to oauth2_grant table", v1_14.AddScopeAndNonceColumnsToOAuth2Grant),
newMigration(165, "Convert hook task type from char(16) to varchar(16) and trim the column", v1_14.ConvertHookTaskTypeToVarcharAndTrim),
newMigration(166, "Where Password is Valid with Empty String delete it", v1_14.RecalculateUserEmptyPWD),
newMigration(167, "Add user redirect", v1_14.AddUserRedirect),
newMigration(168, "Recreate user table to fix default values", v1_14.RecreateUserTableToFixDefaultValues),
newMigration(169, "Update DeleteBranch comments to set the old_ref to the commit_sha", v1_14.CommentTypeDeleteBranchUseOldRef),
newMigration(170, "Add Dismissed to Review table", v1_14.AddDismissedReviewColumn),
newMigration(171, "Add Sorting to ProjectBoard table", v1_14.AddSortingColToProjectBoard),
newMigration(172, "Add sessions table for go-chi/session", v1_14.AddSessionTable),
newMigration(173, "Add time_id column to Comment", v1_14.AddTimeIDCommentColumn),
newMigration(174, "Create repo transfer table", v1_14.AddRepoTransfer),
newMigration(175, "Fix Postgres ID Sequences broken by recreate-table", v1_14.FixPostgresIDSequences),
newMigration(176, "Remove invalid labels from comments", v1_14.RemoveInvalidLabels),
newMigration(177, "Delete orphaned IssueLabels", v1_14.DeleteOrphanedIssueLabels),
// Gitea 1.14.0 ends at database version 178
newMigration(178, "Add LFS columns to Mirror", v1_15.AddLFSMirrorColumns),
newMigration(179, "Convert avatar url to text", v1_15.ConvertAvatarURLToText),
newMigration(180, "Delete credentials from past migrations", v1_15.DeleteMigrationCredentials),
newMigration(181, "Always save primary email on email address table", v1_15.AddPrimaryEmail2EmailAddress),
newMigration(182, "Add issue resource index table", v1_15.AddIssueResourceIndexTable),
newMigration(183, "Create PushMirror table", v1_15.CreatePushMirrorTable),
newMigration(184, "Rename Task errors to message", v1_15.RenameTaskErrorsToMessage),
newMigration(185, "Add new table repo_archiver", v1_15.AddRepoArchiver),
newMigration(186, "Create protected tag table", v1_15.CreateProtectedTagTable),
newMigration(187, "Drop unneeded webhook related columns", v1_15.DropWebhookColumns),
newMigration(188, "Add key is verified to gpg key", v1_15.AddKeyIsVerified),
// Gitea 1.15.0 ends at database version 189
newMigration(189, "Unwrap ldap.Sources", v1_16.UnwrapLDAPSourceCfg),
newMigration(190, "Add agit flow pull request support", v1_16.AddAgitFlowPullRequest),
newMigration(191, "Alter issue/comment table TEXT fields to LONGTEXT", v1_16.AlterIssueAndCommentTextFieldsToLongText),
newMigration(192, "RecreateIssueResourceIndexTable to have a primary key instead of an unique index", v1_16.RecreateIssueResourceIndexTable),
newMigration(193, "Add repo id column for attachment table", v1_16.AddRepoIDForAttachment),
newMigration(194, "Add Branch Protection Unprotected Files Column", v1_16.AddBranchProtectionUnprotectedFilesColumn),
newMigration(195, "Add table commit_status_index", v1_16.AddTableCommitStatusIndex),
newMigration(196, "Add Color to ProjectBoard table", v1_16.AddColorColToProjectBoard),
newMigration(197, "Add renamed_branch table", v1_16.AddRenamedBranchTable),
newMigration(198, "Add issue content history table", v1_16.AddTableIssueContentHistory),
newMigration(199, "No-op (remote version is using AppState now)", noopMigration),
newMigration(200, "Add table app_state", v1_16.AddTableAppState),
newMigration(201, "Drop table remote_version (if exists)", v1_16.DropTableRemoteVersion),
newMigration(202, "Create key/value table for user settings", v1_16.CreateUserSettingsTable),
newMigration(203, "Add Sorting to ProjectIssue table", v1_16.AddProjectIssueSorting),
newMigration(204, "Add key is verified to ssh key", v1_16.AddSSHKeyIsVerified),
newMigration(205, "Migrate to higher varchar on user struct", v1_16.MigrateUserPasswordSalt),
newMigration(206, "Add authorize column to team_unit table", v1_16.AddAuthorizeColForTeamUnit),
newMigration(207, "Add webauthn table and migrate u2f data to webauthn - NO-OPED", v1_16.AddWebAuthnCred),
newMigration(208, "Use base32.HexEncoding instead of base64 encoding for cred ID as it is case insensitive - NO-OPED", v1_16.UseBase32HexForCredIDInWebAuthnCredential),
newMigration(209, "Increase WebAuthentication CredentialID size to 410 - NO-OPED", v1_16.IncreaseCredentialIDTo410),
newMigration(210, "v208 was completely broken - remigrate", v1_16.RemigrateU2FCredentials),
// Gitea 1.16.2 ends at database version 211
newMigration(211, "Create ForeignReference table", v1_17.CreateForeignReferenceTable),
newMigration(212, "Add package tables", v1_17.AddPackageTables),
newMigration(213, "Add allow edits from maintainers to PullRequest table", v1_17.AddAllowMaintainerEdit),
newMigration(214, "Add auto merge table", v1_17.AddAutoMergeTable),
newMigration(215, "allow to view files in PRs", v1_17.AddReviewViewedFiles),
newMigration(216, "No-op (Improve Action table indices v1)", noopMigration),
newMigration(217, "Alter hook_task table TEXT fields to LONGTEXT", v1_17.AlterHookTaskTextFieldsToLongText),
newMigration(218, "Improve Action table indices v2", v1_17.ImproveActionTableIndices),
newMigration(219, "Add sync_on_commit column to push_mirror table", v1_17.AddSyncOnCommitColForPushMirror),
newMigration(220, "Add container repository property", v1_17.AddContainerRepositoryProperty),
newMigration(221, "Store WebAuthentication CredentialID as bytes and increase size to at least 1024", v1_17.StoreWebauthnCredentialIDAsBytes),
newMigration(222, "Drop old CredentialID column", v1_17.DropOldCredentialIDColumn),
newMigration(223, "Rename CredentialIDBytes column to CredentialID", v1_17.RenameCredentialIDBytes),
// Gitea 1.17.0 ends at database version 224
newMigration(224, "Add badges to users", v1_18.CreateUserBadgesTable),
newMigration(225, "Alter gpg_key/public_key content TEXT fields to MEDIUMTEXT", v1_18.AlterPublicGPGKeyContentFieldsToMediumText),
newMigration(226, "Conan and generic packages do not need to be semantically versioned", v1_18.FixPackageSemverField),
newMigration(227, "Create key/value table for system settings", v1_18.CreateSystemSettingsTable),
newMigration(228, "Add TeamInvite table", v1_18.AddTeamInviteTable),
newMigration(229, "Update counts of all open milestones", v1_18.UpdateOpenMilestoneCounts),
newMigration(230, "Add ConfidentialClient column (default true) to OAuth2Application table", v1_18.AddConfidentialClientColumnToOAuth2ApplicationTable),
// Gitea 1.18.0 ends at database version 231
newMigration(231, "Add index for hook_task", v1_19.AddIndexForHookTask),
newMigration(232, "Alter package_version.metadata_json to LONGTEXT", v1_19.AlterPackageVersionMetadataToLongText),
newMigration(233, "Add header_authorization_encrypted column to webhook table", v1_19.AddHeaderAuthorizationEncryptedColWebhook),
newMigration(234, "Add package cleanup rule table", v1_19.CreatePackageCleanupRuleTable),
newMigration(235, "Add index for access_token", v1_19.AddIndexForAccessToken),
newMigration(236, "Create secrets table", v1_19.CreateSecretsTable),
newMigration(237, "Drop ForeignReference table", v1_19.DropForeignReferenceTable),
newMigration(238, "Add updated unix to LFSMetaObject", v1_19.AddUpdatedUnixToLFSMetaObject),
newMigration(239, "Add scope for access_token", v1_19.AddScopeForAccessTokens),
newMigration(240, "Add actions tables", v1_19.AddActionsTables),
newMigration(241, "Add card_type column to project table", v1_19.AddCardTypeToProjectTable),
newMigration(242, "Alter gpg_key_import content TEXT field to MEDIUMTEXT", v1_19.AlterPublicGPGKeyImportContentFieldToMediumText),
newMigration(243, "Add exclusive label", v1_19.AddExclusiveLabel),
// Gitea 1.19.0 ends at database version 244
newMigration(244, "Add NeedApproval to actions tables", v1_20.AddNeedApprovalToActionRun),
newMigration(245, "Rename Webhook org_id to owner_id", v1_20.RenameWebhookOrgToOwner),
newMigration(246, "Add missed column owner_id for project table", v1_20.AddNewColumnForProject),
newMigration(247, "Fix incorrect project type", v1_20.FixIncorrectProjectType),
newMigration(248, "Add version column to action_runner table", v1_20.AddVersionToActionRunner),
newMigration(249, "Improve Action table indices v3", v1_20.ImproveActionTableIndices),
newMigration(250, "Change Container Metadata", v1_20.ChangeContainerMetadataMultiArch),
newMigration(251, "Fix incorrect owner team unit access mode", v1_20.FixIncorrectOwnerTeamUnitAccessMode),
newMigration(252, "Fix incorrect admin team unit access mode", v1_20.FixIncorrectAdminTeamUnitAccessMode),
newMigration(253, "Fix ExternalTracker and ExternalWiki accessMode in owner and admin team", v1_20.FixExternalTrackerAndExternalWikiAccessModeInOwnerAndAdminTeam),
newMigration(254, "Add ActionTaskOutput table", v1_20.AddActionTaskOutputTable),
newMigration(255, "Add ArchivedUnix Column", v1_20.AddArchivedUnixToRepository),
newMigration(256, "Add is_internal column to package", v1_20.AddIsInternalColumnToPackage),
newMigration(257, "Add Actions Artifact table", v1_20.CreateActionArtifactTable),
newMigration(258, "Add PinOrder Column", v1_20.AddPinOrderToIssue),
newMigration(259, "Convert scoped access tokens", v1_20.ConvertScopedAccessTokens),
// Gitea 1.20.0 ends at database version 260
newMigration(260, "Drop custom_labels column of action_runner table", v1_21.DropCustomLabelsColumnOfActionRunner),
newMigration(261, "Add variable table", v1_21.CreateVariableTable),
newMigration(262, "Add TriggerEvent to action_run table", v1_21.AddTriggerEventToActionRun),
newMigration(263, "Add git_size and lfs_size columns to repository table", v1_21.AddGitSizeAndLFSSizeToRepositoryTable),
newMigration(264, "Add branch table", v1_21.AddBranchTable),
newMigration(265, "Alter Actions Artifact table", v1_21.AlterActionArtifactTable),
newMigration(266, "Reduce commit status", v1_21.ReduceCommitStatus),
newMigration(267, "Add action_tasks_version table", v1_21.CreateActionTasksVersionTable),
newMigration(268, "Update Action Ref", v1_21.UpdateActionsRefIndex),
newMigration(269, "Drop deleted branch table", v1_21.DropDeletedBranchTable),
newMigration(270, "Fix PackageProperty typo", v1_21.FixPackagePropertyTypo),
newMigration(271, "Allow archiving labels", v1_21.AddArchivedUnixColumInLabelTable),
newMigration(272, "Add Version to ActionRun table", v1_21.AddVersionToActionRunTable),
newMigration(273, "Add Action Schedule Table", v1_21.AddActionScheduleTable),
newMigration(274, "Add Actions artifacts expiration date", v1_21.AddExpiredUnixColumnInActionArtifactTable),
newMigration(275, "Add ScheduleID for ActionRun", v1_21.AddScheduleIDForActionRun),
newMigration(276, "Add RemoteAddress to mirrors", v1_21.AddRemoteAddressToMirrors),
newMigration(277, "Add Index to issue_user.issue_id", v1_21.AddIndexToIssueUserIssueID),
newMigration(278, "Add Index to comment.dependent_issue_id", v1_21.AddIndexToCommentDependentIssueID),
newMigration(279, "Add Index to action.user_id", v1_21.AddIndexToActionUserID),
// Gitea 1.21.0 ends at database version 280
newMigration(280, "Rename user themes", v1_22.RenameUserThemes),
newMigration(281, "Add auth_token table", v1_22.CreateAuthTokenTable),
newMigration(282, "Add Index to pull_auto_merge.doer_id", v1_22.AddIndexToPullAutoMergeDoerID),
newMigration(283, "Add combined Index to issue_user.uid and issue_id", v1_22.AddCombinedIndexToIssueUser),
newMigration(284, "Add ignore stale approval column on branch table", v1_22.AddIgnoreStaleApprovalsColumnToProtectedBranchTable),
newMigration(285, "Add PreviousDuration to ActionRun", v1_22.AddPreviousDurationToActionRun),
newMigration(286, "Add support for SHA256 git repositories", v1_22.AdjustDBForSha256),
newMigration(287, "Use Slug instead of ID for Badges", v1_22.UseSlugInsteadOfIDForBadges),
newMigration(288, "Add user_blocking table", v1_22.AddUserBlockingTable),
newMigration(289, "Add default_wiki_branch to repository table", v1_22.AddDefaultWikiBranch),
newMigration(290, "Add PayloadVersion to HookTask", v1_22.AddPayloadVersionToHookTaskTable),
newMigration(291, "Add Index to attachment.comment_id", v1_22.AddCommentIDIndexofAttachment),
newMigration(292, "Ensure every project has exactly one default column - No Op", noopMigration),
newMigration(293, "Ensure every project has exactly one default column", v1_22.CheckProjectColumnsConsistency),
// Gitea 1.22.0-rc0 ends at database version 294
newMigration(294, "Add unique index for project issue table", v1_22.AddUniqueIndexForProjectIssue),
newMigration(295, "Add commit status summary table", v1_22.AddCommitStatusSummary),
newMigration(296, "Add missing field of commit status summary table", v1_22.AddCommitStatusSummary2),
newMigration(297, "Add everyone_access_mode for repo_unit", noopMigration),
newMigration(298, "Drop wrongly created table o_auth2_application", v1_22.DropWronglyCreatedTable),
// Gitea 1.22.0-rc1 ends at migration ID number 298 (database version 299)
newMigration(299, "Add content version to issue and comment table", v1_23.AddContentVersionToIssueAndComment),
newMigration(300, "Add force-push branch protection support", v1_23.AddForcePushBranchProtection),
newMigration(301, "Add skip_secondary_authorization option to oauth2 application table", v1_23.AddSkipSecondaryAuthColumnToOAuth2ApplicationTable),
newMigration(302, "Add index to action_task stopped log_expired", v1_23.AddIndexToActionTaskStoppedLogExpired),
}
return preparedMigrations
2015-01-23 10:54:16 +03:00
}
2015-01-22 15:49:52 +03:00
// GetCurrentDBVersion returns the current db version
func GetCurrentDBVersion(x *xorm.Engine) (int64, error) {
if err := x.Sync(new(Version)); err != nil {
return -1, fmt.Errorf("sync: %w", err)
}
currentVersion := &Version{ID: 1}
has, err := x.Get(currentVersion)
if err != nil {
return -1, fmt.Errorf("get: %w", err)
}
if !has {
return -1, nil
}
return currentVersion.Version, nil
}
func calcDBVersion(migrations []*migration) int64 {
dbVer := int64(minDBVersion + len(migrations))
if migrations[0].idNumber != minDBVersion {
panic("migrations should start at minDBVersion")
}
if dbVer != migrations[len(migrations)-1].idNumber+1 {
panic("migrations are not in order")
}
return dbVer
}
// ExpectedDBVersion returns the expected db version
func ExpectedDBVersion() int64 {
return calcDBVersion(prepareMigrationTasks())
}
// EnsureUpToDate will check if the db is at the correct version
func EnsureUpToDate(x *xorm.Engine) error {
currentDB, err := GetCurrentDBVersion(x)
if err != nil {
return err
}
if currentDB < 0 {
return fmt.Errorf("database has not been initialized")
}
if minDBVersion > currentDB {
return fmt.Errorf("DB version %d (<= %d) is too old for auto-migration. Upgrade to Gitea 1.6.4 first then upgrade to this version", currentDB, minDBVersion)
}
expectedDB := ExpectedDBVersion()
if currentDB != expectedDB {
return fmt.Errorf(`current database version %d is not equal to the expected version %d. Please run "forgejo [--config /path/to/app.ini] migrate" to update the database version`, currentDB, expectedDB)
}
[DB] Forgejo database migrations - Implements https://codeberg.org/forgejo/discussions/issues/32#issuecomment-918737 - Allows to add Forgejo-specific migrations that don't interfere with Gitea's migration logic. Please do note that we cannot liberally add migrations for Gitea tables, as they might do their own migrations in a future version on that table, and that could undo our migrations. Luckily, we don't have a scenario where that's needed and thus not taken into account. Co-authored-by: Gusted <postmaster@gusted.xyz> Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/795 (cherry picked from commit 8ee32978c0af1f8f71679c87f695df2b90b617c8) (cherry picked from commit c240b34f595a7a9763f7b748052ac98f9f18954d) (cherry picked from commit 03936c649243a0a29701393d58e63e33064c7461) (cherry picked from commit a20ed852f8b6d28872c05d688bffe5c6976bfa03) (cherry picked from commit 1dfa82676f1feb745633618fde2d362bf19c4f28) (cherry picked from commit c39ae0bf8abced8fd5dc32589e68515ac308b69b) (cherry picked from commit cfaff08996c9f42592c95a63fe907b45b8a9317a) (cherry picked from commit 94a458835a2b0336b26c1c9df64fdfe2de47f496) (cherry picked from commit 61a3cf77dfe3f612ff110eb19f94dcb08051daf1) (cherry picked from commit abb350fde879cc495761dc4616b7aa0fc5d94d54) (cherry picked from commit 5194829d6b4ed702cf50ff875da57d04d77c8a18) (cherry picked from commit 89239a60f23cad7dad03add744e23a4f3b10d6a4) (cherry picked from commit 683cfd86efc5fa8cc04973ce3115351515a20917) (cherry picked from commit f4546cfed92844e3666b80130eadabb9348b88ae) (cherry picked from commit 86614d5826392b3fbe68355baeab9a0a761883a5) (cherry picked from commit e4b9c32187a039a83686a82856a9a192919c6e82) (cherry picked from commit 8c253719afa9b82f169757df007587d38560c06d) (cherry picked from commit 857365d6c15b5471d63662b1d89d1523151c4f79) (cherry picked from commit a488b3952f58bbf28bfa101a24e52dad7c9662eb) (cherry picked from commit 98313c49109c941426beecc1a3e7887f28b99970) (cherry picked from commit 430d95e8240971e266705d2e7202a5c785379cb2) (cherry picked from commit 08bf9d918fbb67f5ac06c0cfdc24229aa14ff83f) (cherry picked from commit f8a170e2d042fcb8f314e123de6918317ac1e909) (cherry picked from commit d20e325378e67087279496d35b575e566836aaa1) (cherry picked from commit 6c0aa7dd4fd8c234984d455933f69f51abcb2d32) (cherry picked from commit 46c08c26c7bd3260b3ac7678f24566b467f4a2fb) (cherry picked from commit 9ee22153c4ec62392693c9151d5395221d097f70) [DB] Ensure forgejo migration up to date (squash) - Hook Forgejo's `EnsureUpToDate` to Gitea's `EnsureUpToDate`, such that the Forgejo migrations are also being checked to be up to date. - I'm not sure how I missed this and if this has caused any problems, but due to the lack of any open issue about it it seems to not be a big problem. (cherry picked from commit 6c65b6dcf6ab0d58e5c2d03a866e4e38294f72ad) (cherry picked from commit 6d45c37d843147e69b0a27ebe35c617d7f574b76) [DB] Add test for TestEnsureUpToDate (squash) - Add a test for the behavior of `EnsureUpToDate`, to ensure it will error when needed and succeed when the forgejo version is up to date. - Add forgejo_migrations package to GO_TEST_PACKAGES, to avoid running it with `test-unit` and instead test it with `test-*-migration`. (cherry picked from commit b172a506914fee40a50daa51f0c8e547427fd2f8) (cherry picked from commit d8af3088205b592340fd836135ffe97da9cec5a6) (cherry picked from commit e69e64a32c5e38247e94ab880536e3cfeab67cc6) (cherry picked from commit 4e8363fad4e08845960912a3ea3fe7265ee60602) (cherry picked from commit fc9ecd6c533eca864503423cf4a21710984a6b75) (cherry picked from commit e5c446e3dc9bc6e9549862f7b764a634f4fbaaae) (cherry picked from commit 7066a15655a33f57ccfb68cf2cb994ea57ad3666) (cherry picked from commit 9183cdc8354d529a1c2b570551bc1578fb10d58b) (cherry picked from commit 5f93039e0d7c8a7eb79df16ce0d8603f948b1bd2) Conflicts: Makefile https://codeberg.org/forgejo/forgejo/pulls/2245 (cherry picked from commit a039b3b0c9a7016de9e7e71ea0cc7a1185adb8d9)
2023-06-03 11:41:16 +03:00
return forgejo_migrations.EnsureUpToDate(x)
}
func getPendingMigrations(curDBVer int64, migrations []*migration) []*migration {
return migrations[curDBVer-minDBVersion:]
}
func migrationIDNumberToDBVersion(idNumber int64) int64 {
return idNumber + 1
}
2015-01-22 15:49:52 +03:00
// Migrate database to current version
func Migrate(x *xorm.Engine) error {
migrations := prepareMigrationTasks()
maxDBVer := calcDBVersion(migrations)
// Set a new clean the default mapper to GonicMapper as that is the default for Gitea.
x.SetMapper(names.GonicMapper{})
if err := x.Sync(new(Version)); err != nil {
return fmt.Errorf("sync: %w", err)
}
2015-01-22 15:49:52 +03:00
[UPGRADE] run sanity checks before the database is upgraded (cherry picked from commit 69741e4e66932a9ac092089e7ba27399c55dcd1a) (cherry picked from commit 2a3c7b09cbdfd62cca2619aaf37b6913a373d142) (cherry picked from commit a1554c1168d897e8db4024d716a837c012bf74e9) (cherry picked from commit edae2c6d2dda7f44e40ae88fba60a15f61b72232) (cherry picked from commit 49737cf009a6a0fc119cf8a1a1593493c77c841a) (cherry picked from commit ec53704c34a3e9491b4f210250d5e053f4b221e5) (cherry picked from commit 7a1c5c0f323cb5e9235d8fa6e59a0a1b172d3abb) (cherry picked from commit e658c20c0f21b42f741c0149e0e79ea0bb3b949c) (cherry picked from commit baf575468f39c5dd0c2ff3498ef9f706d12d114e) (cherry picked from commit 40cb14eff427c801243e374f7c60fef994bcb792) (cherry picked from commit 25ab4d07136d023236de00e9143957c856b4d196) (cherry picked from commit 5a29005215a5e9419ed3096c1bc0aae172f45089) (cherry picked from commit fef1260e990719af49644970aaa2a7219438b681) (cherry picked from commit eadbbb1afe6f36cfaf4cc3fc346b510893f21011) (cherry picked from commit db22d61eb47b56cc7cf0f44934f8f550df029e76) (cherry picked from commit 9d3b0be39a008e2e1a4f474b0ab74627e003430d) (cherry picked from commit b3fa3c1292228ef4833b6ea1f120102471478256) (cherry picked from commit c8300d4fe24fccaefc18e95ec8c6d689f1cb4d7a) (cherry picked from commit 8ba6a4c9dbd9cbb2758b02016f1858d1e85633ce) (cherry picked from commit 8b8df652c1eb7806e590751942b4689e374e1128) (cherry picked from commit fc8fa050c688451c9c2079b1f0f71ed11a6d7e4d) (cherry picked from commit bcf3faf69843421517bf3ddf032fe92cbf0a766d) (cherry picked from commit 514a631aa650987ef3400ad31eb32af676a97164) (cherry picked from commit 529c7a09f73bdb27ac14e0cdb6312eac2bc1109c) (cherry picked from commit 0d093d76e2d27523f42606d78c1302057c328913)
2023-08-09 01:05:06 +03:00
var previousVersion int64
currentVersion := &Version{ID: 1}
2015-01-22 15:49:52 +03:00
has, err := x.Get(currentVersion)
if err != nil {
return fmt.Errorf("get: %w", err)
2015-01-22 15:56:50 +03:00
} else if !has {
// If the version record does not exist, it is a fresh installation, and we can skip all migrations.
// XORM model framework will create all tables when initializing.
currentVersion.ID = 0
currentVersion.Version = maxDBVer
2015-01-22 15:56:50 +03:00
if _, err = x.InsertOne(currentVersion); err != nil {
return fmt.Errorf("insert: %w", err)
2015-01-22 15:56:50 +03:00
}
[UPGRADE] run sanity checks before the database is upgraded (cherry picked from commit 69741e4e66932a9ac092089e7ba27399c55dcd1a) (cherry picked from commit 2a3c7b09cbdfd62cca2619aaf37b6913a373d142) (cherry picked from commit a1554c1168d897e8db4024d716a837c012bf74e9) (cherry picked from commit edae2c6d2dda7f44e40ae88fba60a15f61b72232) (cherry picked from commit 49737cf009a6a0fc119cf8a1a1593493c77c841a) (cherry picked from commit ec53704c34a3e9491b4f210250d5e053f4b221e5) (cherry picked from commit 7a1c5c0f323cb5e9235d8fa6e59a0a1b172d3abb) (cherry picked from commit e658c20c0f21b42f741c0149e0e79ea0bb3b949c) (cherry picked from commit baf575468f39c5dd0c2ff3498ef9f706d12d114e) (cherry picked from commit 40cb14eff427c801243e374f7c60fef994bcb792) (cherry picked from commit 25ab4d07136d023236de00e9143957c856b4d196) (cherry picked from commit 5a29005215a5e9419ed3096c1bc0aae172f45089) (cherry picked from commit fef1260e990719af49644970aaa2a7219438b681) (cherry picked from commit eadbbb1afe6f36cfaf4cc3fc346b510893f21011) (cherry picked from commit db22d61eb47b56cc7cf0f44934f8f550df029e76) (cherry picked from commit 9d3b0be39a008e2e1a4f474b0ab74627e003430d) (cherry picked from commit b3fa3c1292228ef4833b6ea1f120102471478256) (cherry picked from commit c8300d4fe24fccaefc18e95ec8c6d689f1cb4d7a) (cherry picked from commit 8ba6a4c9dbd9cbb2758b02016f1858d1e85633ce) (cherry picked from commit 8b8df652c1eb7806e590751942b4689e374e1128) (cherry picked from commit fc8fa050c688451c9c2079b1f0f71ed11a6d7e4d) (cherry picked from commit bcf3faf69843421517bf3ddf032fe92cbf0a766d) (cherry picked from commit 514a631aa650987ef3400ad31eb32af676a97164) (cherry picked from commit 529c7a09f73bdb27ac14e0cdb6312eac2bc1109c) (cherry picked from commit 0d093d76e2d27523f42606d78c1302057c328913)
2023-08-09 01:05:06 +03:00
} else {
previousVersion = currentVersion.Version
2015-01-22 15:49:52 +03:00
}
curDBVer := currentVersion.Version
// Outdated Forgejo database version is not supported
if curDBVer < minDBVersion {
log.Fatal(`Forgejo no longer supports auto-migration from your previously installed version.
Please try upgrading to a lower version first (suggested v1.6.4), then upgrade to this version.`)
2015-11-25 17:27:27 +03:00
return nil
}
// Downgrading Forgejo's database version not supported
if maxDBVer < curDBVer {
msg := fmt.Sprintf("Your database (migration version: %d) is for a newer Forgejo, you can not use the newer database for this old Forgejo release (%d).", curDBVer, maxDBVer)
msg += "\nForgejo will exit to keep your database safe and unchanged. Please use the correct Forgejo release, do not change the migration version manually (incorrect manual operation may lose data)."
if !setting.IsProd {
msg += fmt.Sprintf("\nIf you are in development and really know what you're doing, you can force changing the migration version by executing: UPDATE version SET version=%d WHERE id=1;", maxDBVer)
}
2023-08-13 15:49:30 +03:00
log.Fatal("Migration Error: %s", msg)
return nil
2015-08-10 17:59:12 +03:00
}
// Some migration tasks depend on the git command
if git.DefaultContext == nil {
if err = git.InitSimple(context.Background()); err != nil {
return err
}
}
[UPGRADE] run sanity checks before the database is upgraded (cherry picked from commit 69741e4e66932a9ac092089e7ba27399c55dcd1a) (cherry picked from commit 2a3c7b09cbdfd62cca2619aaf37b6913a373d142) (cherry picked from commit a1554c1168d897e8db4024d716a837c012bf74e9) (cherry picked from commit edae2c6d2dda7f44e40ae88fba60a15f61b72232) (cherry picked from commit 49737cf009a6a0fc119cf8a1a1593493c77c841a) (cherry picked from commit ec53704c34a3e9491b4f210250d5e053f4b221e5) (cherry picked from commit 7a1c5c0f323cb5e9235d8fa6e59a0a1b172d3abb) (cherry picked from commit e658c20c0f21b42f741c0149e0e79ea0bb3b949c) (cherry picked from commit baf575468f39c5dd0c2ff3498ef9f706d12d114e) (cherry picked from commit 40cb14eff427c801243e374f7c60fef994bcb792) (cherry picked from commit 25ab4d07136d023236de00e9143957c856b4d196) (cherry picked from commit 5a29005215a5e9419ed3096c1bc0aae172f45089) (cherry picked from commit fef1260e990719af49644970aaa2a7219438b681) (cherry picked from commit eadbbb1afe6f36cfaf4cc3fc346b510893f21011) (cherry picked from commit db22d61eb47b56cc7cf0f44934f8f550df029e76) (cherry picked from commit 9d3b0be39a008e2e1a4f474b0ab74627e003430d) (cherry picked from commit b3fa3c1292228ef4833b6ea1f120102471478256) (cherry picked from commit c8300d4fe24fccaefc18e95ec8c6d689f1cb4d7a) (cherry picked from commit 8ba6a4c9dbd9cbb2758b02016f1858d1e85633ce) (cherry picked from commit 8b8df652c1eb7806e590751942b4689e374e1128) (cherry picked from commit fc8fa050c688451c9c2079b1f0f71ed11a6d7e4d) (cherry picked from commit bcf3faf69843421517bf3ddf032fe92cbf0a766d) (cherry picked from commit 514a631aa650987ef3400ad31eb32af676a97164) (cherry picked from commit 529c7a09f73bdb27ac14e0cdb6312eac2bc1109c) (cherry picked from commit 0d093d76e2d27523f42606d78c1302057c328913)
2023-08-09 01:05:06 +03:00
if err := forgejo_services.PreMigrationSanityChecks(x, previousVersion, setting.CfgProvider); err != nil {
return err
}
// Migrate
for _, m := range getPendingMigrations(curDBVer, migrations) {
log.Info("Migration[%d]: %s", m.idNumber, m.description)
// Reset the mapper between each migration - migrations are not supposed to depend on each other
x.SetMapper(names.GonicMapper{})
if err = m.Migrate(x); err != nil {
return fmt.Errorf("migration[%d]: %s failed: %w", m.idNumber, m.description, err)
2015-01-22 15:49:52 +03:00
}
currentVersion.Version = migrationIDNumberToDBVersion(m.idNumber)
if _, err = x.ID(1).Update(currentVersion); err != nil {
return err
}
2015-01-22 15:49:52 +03:00
}
[DB] Forgejo database migrations - Implements https://codeberg.org/forgejo/discussions/issues/32#issuecomment-918737 - Allows to add Forgejo-specific migrations that don't interfere with Gitea's migration logic. Please do note that we cannot liberally add migrations for Gitea tables, as they might do their own migrations in a future version on that table, and that could undo our migrations. Luckily, we don't have a scenario where that's needed and thus not taken into account. Co-authored-by: Gusted <postmaster@gusted.xyz> Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/795 (cherry picked from commit 8ee32978c0af1f8f71679c87f695df2b90b617c8) (cherry picked from commit c240b34f595a7a9763f7b748052ac98f9f18954d) (cherry picked from commit 03936c649243a0a29701393d58e63e33064c7461) (cherry picked from commit a20ed852f8b6d28872c05d688bffe5c6976bfa03) (cherry picked from commit 1dfa82676f1feb745633618fde2d362bf19c4f28) (cherry picked from commit c39ae0bf8abced8fd5dc32589e68515ac308b69b) (cherry picked from commit cfaff08996c9f42592c95a63fe907b45b8a9317a) (cherry picked from commit 94a458835a2b0336b26c1c9df64fdfe2de47f496) (cherry picked from commit 61a3cf77dfe3f612ff110eb19f94dcb08051daf1) (cherry picked from commit abb350fde879cc495761dc4616b7aa0fc5d94d54) (cherry picked from commit 5194829d6b4ed702cf50ff875da57d04d77c8a18) (cherry picked from commit 89239a60f23cad7dad03add744e23a4f3b10d6a4) (cherry picked from commit 683cfd86efc5fa8cc04973ce3115351515a20917) (cherry picked from commit f4546cfed92844e3666b80130eadabb9348b88ae) (cherry picked from commit 86614d5826392b3fbe68355baeab9a0a761883a5) (cherry picked from commit e4b9c32187a039a83686a82856a9a192919c6e82) (cherry picked from commit 8c253719afa9b82f169757df007587d38560c06d) (cherry picked from commit 857365d6c15b5471d63662b1d89d1523151c4f79) (cherry picked from commit a488b3952f58bbf28bfa101a24e52dad7c9662eb) (cherry picked from commit 98313c49109c941426beecc1a3e7887f28b99970) (cherry picked from commit 430d95e8240971e266705d2e7202a5c785379cb2) (cherry picked from commit 08bf9d918fbb67f5ac06c0cfdc24229aa14ff83f) (cherry picked from commit f8a170e2d042fcb8f314e123de6918317ac1e909) (cherry picked from commit d20e325378e67087279496d35b575e566836aaa1) (cherry picked from commit 6c0aa7dd4fd8c234984d455933f69f51abcb2d32) (cherry picked from commit 46c08c26c7bd3260b3ac7678f24566b467f4a2fb) (cherry picked from commit 9ee22153c4ec62392693c9151d5395221d097f70) [DB] Ensure forgejo migration up to date (squash) - Hook Forgejo's `EnsureUpToDate` to Gitea's `EnsureUpToDate`, such that the Forgejo migrations are also being checked to be up to date. - I'm not sure how I missed this and if this has caused any problems, but due to the lack of any open issue about it it seems to not be a big problem. (cherry picked from commit 6c65b6dcf6ab0d58e5c2d03a866e4e38294f72ad) (cherry picked from commit 6d45c37d843147e69b0a27ebe35c617d7f574b76) [DB] Add test for TestEnsureUpToDate (squash) - Add a test for the behavior of `EnsureUpToDate`, to ensure it will error when needed and succeed when the forgejo version is up to date. - Add forgejo_migrations package to GO_TEST_PACKAGES, to avoid running it with `test-unit` and instead test it with `test-*-migration`. (cherry picked from commit b172a506914fee40a50daa51f0c8e547427fd2f8) (cherry picked from commit d8af3088205b592340fd836135ffe97da9cec5a6) (cherry picked from commit e69e64a32c5e38247e94ab880536e3cfeab67cc6) (cherry picked from commit 4e8363fad4e08845960912a3ea3fe7265ee60602) (cherry picked from commit fc9ecd6c533eca864503423cf4a21710984a6b75) (cherry picked from commit e5c446e3dc9bc6e9549862f7b764a634f4fbaaae) (cherry picked from commit 7066a15655a33f57ccfb68cf2cb994ea57ad3666) (cherry picked from commit 9183cdc8354d529a1c2b570551bc1578fb10d58b) (cherry picked from commit 5f93039e0d7c8a7eb79df16ce0d8603f948b1bd2) Conflicts: Makefile https://codeberg.org/forgejo/forgejo/pulls/2245 (cherry picked from commit a039b3b0c9a7016de9e7e71ea0cc7a1185adb8d9)
2023-06-03 11:41:16 +03:00
// Execute Forgejo specific migrations.
return forgejo_migrations.Migrate(x)
2015-01-22 15:49:52 +03:00
}