woodpecker/docs/versioned_docs/version-2.0/92-development/06-guides.md
qwerty287 948b4224c7
Add 2.x docs (#2865)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Anbraten <anton@ju60.de>
2023-11-23 17:00:54 +01:00

1.9 KiB

Guides

ORM

Woodpecker uses Xorm as ORM for the database connection. You can find its documentation at gobook.io/read/gitea.com/xorm.

Add a new migration

Woodpecker uses migrations to change the database schema if a database model has been changed. If for example a developer removes a property Counter from the model Repo in server/model/ they would need to add a new migration task like the following example to a file like server/store/datastore/migration/004_repos_drop_repo_counter.go:

package migration

import (
  "xorm.io/xorm"
)

var alterTableReposDropCounter = task{
  name: "alter-table-drop-counter",
  fn: func(sess *xorm.Session) error {
    return dropTableColumns(sess, "repos", "repo_counter")
  },
}

:::info Adding new properties to models will be handled automatically by the underlying ORM based on the struct field tags of the model. If you add a completely new model, you have to add it to the allBeans variable at server/store/datastore/migration/migration.go to get a new table created. :::

:::warning You should not use sess.Begin(), sess.Commit() or sess.Close() inside a migration. Session / transaction handling will be done by the underlying migration manager. :::

To automatically execute the migration after the start of the server, the new migration needs to be added to the end of migrationTasks in server/store/datastore/migration/migration.go. After a successful execution of that transaction the server will automatically add the migration to a list, so it won't be executed again on the next start.

Constants of official images

All official default images, are saved in shared/constant/constant.go and must be pinned by an exact tag.