setup-forgejo/README.md

4.2 KiB

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.

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 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

Documentation

Update the README from the action file with https://github.com/npalm/action-docs action-docs --update-readme

Local testing

To 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

Remote testing

To reduce the runtime the following variables can be set to control the number of cases run by the integration tests. If set to none they are not run at all for that version of Forgejo. If it does not exist, all tests are run.

  • V1_21_TESTS
  • V1_20_TESTS