When running tests in Woodpecker CI, it is useful to run a detached (in the background, AKA a service) MySQL server, as explained in the Woodpecker CI documentation. For that to work, the initial user is provided as an environment variable and created when the server starts.
Forgejo does not automatically create a user and it needs to be done via the command line, as shown in the following .woodpecker.yml
:
pipeline:
forgejo:
detach: true
image: codeberg.org/forgejo/forgejo:1.18
ports: ["80"]
environment:
- GITEA__security__INSTALL_LOCK=true
- GITEA__server__HTTP_PORT=80
- GITEA__server__ROOT_URL=http://forgejo/
commands:
- /usr/bin/entrypoint &
- sleep 5
- su git -c 'gitea admin user create --admin --username root --password admin1234 --email root@example.com'
- wait
version:
image: 'golang:1.19-bullseye'
commands:
- sleep 10
- curl http://forgejo/api/v1/version
The detach
keyword runs the forgejo
step in the background (that is what detach: true
is for) and moves to the version
step immediately. It takes a few seconds for the Forgejo server to come up: this is the reason for the sleep 10
. When Forgejo is run from the command line like so:
docker run --name forgejo -e GITEA__security__INSTALL_LOCK=true -d codeberg.org/forgejo-experimental/forgejo:1.18
it runs the /usr/bin/entrypoint
script which starts the server, waiting for incoming requests. But when run from Woodpecker CI, the list of commands
is run instead and the Forgejo server does not start implicitly. It needs to be started explicitly, in the background, by calling /usr/bin/entrypoint
. After a sleep 5
it is ready to create a new user which is done with admin user create ...
. It must then wait
on the Forgejo server, otherwise it will terminate immediately instead of waiting for the pipeline to finish.
The result of the pipeline above will be the Forgejo version displayed like this:
{"version":"1.18.0+1"}