# setup-forgejo ## Description Setup Forgejo and a runner. The forgejo-test-helper.sh script is available to help test and debug actions. `forgejo=http://root:admin1234@${{ steps.forgejo.outputs.host-port }}` * `forgejo-test-helper.sh push_self_action $forgejo root myaction vTest` Creates the repository `$forgejo/root/myaction` and populates it with the content of the repository under test, except for the `.forgejo` directory (it would otherwise create an infinite loop). The tag `vTest` is set to the SHA under test. * `forgejo-test-helper.sh run_workflow testrepo $forgejo root testrepo myaction` Creates the repository `$forgejo/root/testrepo` and populates it with the content of the `testrepo` directory. All occurrences of `SELF` in `testrepo/.forgejo/workflows/*.yml` are replaced with `$forgejo/root/myaction`. * `forgejo-test-helper.sh push testrepo $forgejo root testrepo` Creates the repository `$forgejo/root/testrepo` and populates it with the content of the `testrepo` directory. * `forgejo-test-helper.sh build_runner $forgejo/forgejo/runner v3.0.1` Builds the forgejo runner from source in `./forgejo-runner/forgejo-runner`. `export PATH=$(pwd)/forgejo-runner:$PATH` will ensure that calling `forgejo-runner.sh` will use this binary instead of downloading a released version of the runner. If the version is not specified, build from the main branch. The combination of `push_self_action` and `run_workflow` allows to run Forgejo Actions workflows from `testrepo` that use the action under test (`myaction`) to verify it works as intended. The [forgejo-curl.sh](https://code.forgejo.org/forgejo/forgejo-curl#forgejo-curlsh) script is logged in the instance and ready to be used with web or api endpoints. It can only be run on the `self-hosted` platform, running on a host with LXC installed. ## Inputs | parameter | description | required | default | | --- | --- | --- | --- | | image | Container image | `false` | codeberg.org/forgejo/forgejo | | image-version | Container image version | `false` | 1.20 | | user | Administrator user name | `false` | root | | password | Administrator password | `false` | admin1234 | | runner | Runner git repository | `false` | https://code.forgejo.org/forgejo/runner | | runner-version | Runner version | `false` | v3.0.1 | | container | Name of the container running the Forgejo instance | `false` | forgejo | | lxc-ip-prefix | Class C IP prefix used by LXC | `false` | 10.0.23 | ## Outputs | parameter | description | | --- | --- | | url | URL of the Forgejo instance | | host-port | Host and port of the Forgejo instance, e.g 172.0.17.2:3000 | | token | Administrator application token with all,sudo scopes | | runner-logs | Filename of the Forgejo runner logs | | runner-file | Path to the runner file | ## Example ``` name: Setup Forgejo on: [push] jobs: setup-forgejo: runs-on: self-hosted steps: - uses: actions/checkout@v3 - id: forgejo uses: actions/setup-forgejo@v1 with: image-version: 1.20 - run: | curl ${{ steps.forgejo.outputs.url }}/api/forgejo/v1/version | grep 1.20 ``` ## Hacking * Update the README from the action file with https://github.com/npalm/action-docs `action-docs --update-readme` To manually run and debug workflows from `testdata/example-*`, from the root of the source directory, with docker and forgejo-curl.sh installed, mimic what `.forgejo/workflows/integration.yml` does. There may be some manual tweaking (such as creating temporary directories) because the tests run as root, but they do not need to run as root. * `forgejo-curl.sh logout` * `forgejo.sh setup root admin1234 codeberg.org/forgejo/forgejo 1.21` * `firefox http://$(cat forgejo-ip):3000` * `forgejo-runner.sh setup` * `export example=pull-request` * `export EXAMPLE_DIR=$(pwd)/testdata/example-$example` * `$EXAMPLE_DIR/setup.sh` # if it exists * `$EXAMPLE_DIR/run.sh` or * `forgejo-test-helper.sh run_workflow testdata/example-$example http://root:admin1234@$(cat forgejo-ip):3000 root example-$example setup-forgejo $(cat forgejo-token)` * `forgejo-runner.sh teardown` * `forgejo.sh teardown`