name: checks on: push: branches: - 'main' pull_request: enable-email-notifications: true env: FORGEJO_HOST_PORT: 'forgejo:3000' FORGEJO_ADMIN_USER: 'root' FORGEJO_ADMIN_PASSWORD: 'admin1234' FORGEJO_RUNNER_SECRET: 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' FORGEJO_SCRIPT: | /usr/bin/s6-svscan /etc/s6 & sleep 10 ; su -c "forgejo admin user create --admin --username $FORGEJO_ADMIN_USER --password $FORGEJO_ADMIN_PASSWORD --email root@example.com" git && su -c "forgejo forgejo-cli actions register --labels docker --name therunner --secret $FORGEJO_RUNNER_SECRET" git && sleep infinity GOPROXY: https://goproxy.io,direct jobs: build-and-tests: name: build and test if: vars.ROLE == 'forgejo-coding' runs-on: docker container: image: 'code.forgejo.org/oci/ci:1' services: forgejo: image: code.forgejo.org/forgejo/forgejo:11 env: FORGEJO__security__INSTALL_LOCK: "true" FORGEJO__log__LEVEL: "debug" FORGEJO__actions__ENABLED: "true" FORGEJO_ADMIN_USER: root FORGEJO_ADMIN_PASSWORD: admin1234 FORGEJO_RUNNER_SECRET: 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' cmd: - 'bash' - '-c' - '/usr/bin/s6-svscan /etc/s6 & sleep 10 ; su -c "forgejo admin user create --admin --username $FORGEJO_ADMIN_USER --password $FORGEJO_ADMIN_PASSWORD --email root@example.com" git && su -c "forgejo forgejo-cli actions register --labels docker --name therunner --secret $FORGEJO_RUNNER_SECRET" git && sleep infinity' steps: - uses: https://data.forgejo.org/actions/checkout@v4 - uses: https://data.forgejo.org/actions/setup-go@v5 with: go-version-file: go.mod - name: validate go version run: | set -ex toolchain=$(grep -oP '(?<=toolchain ).+' go.mod) version=$(go version | cut -d' ' -f3) if dpkg --compare-versions ${version#go} lt ${toolchain#go}; then echo "go version too low: $toolchain >= $version" exit 1 fi - run: make vet - run: make build - uses: https://code.forgejo.org/actions/upload-artifact@v3 with: name: forgejo-runner path: forgejo-runner - name: check the forgejo server is responding run: | sleep 10 # matches the sleep 10 in the bootstrap of the Forgejo instance # in case of a slow machine, give it time to bootstrap retry --delay=10 --times=6 bash -c 'test $FORGEJO_ADMIN_USER = $(curl -sS http://$FORGEJO_ADMIN_USER:$FORGEJO_ADMIN_PASSWORD@$FORGEJO_HOST_PORT/api/v1/user | jq --raw-output .login)' - run: make FORGEJO_URL=http://$FORGEJO_HOST_PORT test runner-exec-tests: name: runner exec tests if: vars.ROLE == 'forgejo-coding' runs-on: lxc-bookworm needs: [build-and-tests] steps: - uses: actions/checkout@v4 - uses: https://code.forgejo.org/actions/download-artifact@v3 with: name: forgejo-runner - run: chmod +x forgejo-runner - name: install docker run: | mkdir /etc/docker cat > /etc/docker/daemon.json <& /tmp/out ; then cat /tmp/out echo "IPv6 not enabled, should fail" exit 1 fi - name: forgejo-runner exec --var run: | set -x ./forgejo-runner exec --var MY_VAR=testvariable --workflows .forgejo/testdata/var.yml |& tee /tmp/var.out grep --quiet 'Success - Main echo "VAR -> testvariable"' /tmp/var.out integration-tests: name: integration tests if: vars.ROLE == 'forgejo-coding' runs-on: lxc-bookworm steps: - uses: https://data.forgejo.org/actions/checkout@v4 - uses: https://data.forgejo.org/actions/setup-go@v5 with: go-version-file: go.mod - name: apt install docker.io run: | export DEBIAN_FRONTEND=noninteractive apt-get update -qq apt-get -q install -qq -y docker.io - name: integration test run: | go test ./act/container go test -timeout 30m ./act/runner/... runner-integration-tests: name: runner integration tests if: vars.ROLE == 'forgejo-coding' runs-on: lxc-bookworm needs: [build-and-tests] steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version-file: go.mod - name: install docker run: | mkdir /etc/docker cat > /etc/docker/daemon.json <