Skip to main content
Version: Next ๐Ÿšง

Guides

ORMโ€‹

Woodpecker uses Xorm as ORM for the database connection.

Add a new migrationโ€‹

Woodpecker uses migrations to change the database schema if a database model has been changed. Add the new migration task into server/store/datastore/migration/.

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.

Building images locallyโ€‹

Serverโ€‹

### build web component
make vendor
cd web/
pnpm install --frozen-lockfile
pnpm build
cd ..

### define the platforms to build for (e.g. linux/amd64)
# (the | is not a typo here)
export PLATFORMS='linux|amd64'
make cross-compile-server

### build the image
docker buildx build --platform linux/amd64 -t username/repo:tag -f docker/Dockerfile.server.multiarch --push .
info

The cross-compile-server rule makes use of xgo, a go cross-compiler. You need to be on a amd64 host to do this, as xgo is only available for amd64 (see xgo#213). You can try to use the build-server rule instead, however this one fails for some OS (e.g. macOS).

Agentโ€‹

### build the agent
make build-agent

### build the image
docker buildx build --platform linux/amd64 -t username/repo:tag -f docker/Dockerfile.agent.multiarch --push .

CLIโ€‹

### build the CLI
make build-cli

### build the image
docker buildx build --platform linux/amd64 -t username/repo:tag -f docker/Dockerfile.cli.multiarch --push .