1# Forgejo Runner23**WARNING:** this is [alpha release quality](https://en.wikipedia.org/wiki/Software_release_life_cycle#Alpha) code and should not be considered secure enough to deploy in production.45A daemon that connects to a Forgejo instance and runs jobs for continous integration. The [installation and usage instructions](https://forgejo.org/docs/next/admin/actions/) are part of the Forgejo documentation.67# Reporting bugs89When filing a bug in [the issue tracker](https://code.forgejo.org/forgejo/runner/issues), it is very helpful to propose a pull request [in the end-to-end tests](https://code.forgejo.org/forgejo/end-to-end/src/branch/main/actions) repository that adds a reproducer. It will fail the CI and unambiguously demonstrate that the problem exists. In most cases it is enough to add a workflow ([see the echo example](https://code.forgejo.org/forgejo/end-to-end/src/branch/main/actions/example-echo)). For more complicated cases it is also possible to add a runner config file as well as shell scripts to setup and teardown the test case ([see the service example](https://code.forgejo.org/forgejo/end-to-end/src/branch/main/actions/example-service)).1011# Hacking1213The Forgejo runner depends on [a fork of ACT](https://code.forgejo.org/forgejo/act) and is a dependency of the [setup-forgejo action](https://code.forgejo.org/actions/setup-forgejo). See [the full dependency graph](https://code.forgejo.org/actions/cascading-pr/#forgejo-dependencies) for a global view.1415## Local debug1617The repositories are checked out in the same directory:1819- **runner**: [Forgejo runner](https://code.forgejo.org/forgejo/runner)20- **act**: [ACT](https://code.forgejo.org/forgejo/act)21- **setup-forgejo**: [setup-forgejo](https://code.forgejo.org/actions/setup-forgejo)2223### Install dependencies2425The dependencies are installed manually or with:2627```shell28setup-forgejo/forgejo-dependencies.sh29```3031### Build the Forgejo runner with the local ACT3233The Forgejo runner is rebuilt with the ACT directory by changing the `runner/go.mod` file to:3435```36replace github.com/nektos/act => ../act37```3839Running:4041```42cd runner ; go mod tidy43```4445Building:4647```shell48cd runner ; rm -f forgejo-runner ; make forgejo-runner49```5051### Launch Forgejo and the runner5253A Forgejo instance is launched with:5455```shell56cd setup-forgejo57./forgejo.sh setup58firefox $(cat forgejo-url)59```6061The user is `root` with password `admin1234`. The runner is registered with:6263```64cd setup-forgejo65docker exec --user 1000 forgejo forgejo actions generate-runner-token > forgejo-runner-token66../runner/forgejo-runner register --no-interactive --instance "$(cat forgejo-url)" --name runner --token $(cat forgejo-runner-token) --labels docker:docker://node:20-bullseye,self-hosted:host://-self-hosted,lxc:lxc://debian:bullseye67```6869And launched with:7071```shell72cd setup-forgejo ; ../runner/forgejo-runner --config runner-config.yml daemon73```7475Note that the `runner-config.yml` is required in that particular case76to configure the network in `bridge` mode, otherwise the runner will77create a network that cannot reach the forgejo instance.7879### Try a sample workflow8081From the Forgejo web interface, create a repository and add the82following to `.forgejo/workflows/try.yaml`. It will launch the job and83the result can be observed from the `actions` tab.8485```yaml86on: [push]87jobs:88 ls:89 runs-on: docker90 steps:91 - uses: actions/checkout@v392 - run: |93 ls ${{ github.workspace }}94```