mirror of
https://gitea.com/gitea/runner.git
synced 2026-11-06 15:20:29 +00:00
Without a docker daemon six `act/runner` tests failed instead of passing. A dry run still created and removed job networks, the job teardown dropped the dry-run flag along with every other context value, and the container mocks asked the daemon for the runner arch. This also speeds up the tests and CI without dropping assertions. Most of the time went to git and docker round trips, which are now pinned, batched or coalesced, and the dind and e2e steps cache or overlap more of their setup. On CI, `act/runner` went from 77s to 55s and `test-dind` from 108s to 55s. Locally, `act/runner` without docker went from 53s to 7s. Split out of https://gitea.com/gitea/runner/pulls/1348, which adds Windows CI on top. The go cache changes moved to https://gitea.com/gitea/runner/pulls/1350. Written by Claude Code. --------- Co-authored-by: bircni <[email protected]> Reviewed-on: https://gitea.com/gitea/runner/pulls/1349 Reviewed-by: bircni <[email protected]> Co-authored-by: silverwind <[email protected]>
75 lines
3.1 KiB
YAML
75 lines
3.1 KiB
YAML
name: checks
|
|
on:
|
|
pull_request:
|
|
workflow_dispatch:
|
|
|
|
env:
|
|
# The runner image ships a stale docker.io login; point docker at an empty config so
|
|
# image pulls go straight to anonymous instead of attempting (and failing) that auth
|
|
# first. The path must be a literal: the `runner` context is unavailable in workflow-level
|
|
# env, so `${{ runner.temp }}` would resolve to empty and config.Dir() would fall back
|
|
# to ~/.docker with the stale credentials.
|
|
DOCKER_CONFIG: /tmp/docker-noauth
|
|
|
|
jobs:
|
|
lint:
|
|
name: check and test
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
- uses: ./.gitea/actions/go-setup
|
|
- name: prepare anonymous docker config
|
|
run: mkdir -p "$DOCKER_CONFIG" && echo '{}' > "$DOCKER_CONFIG/config.json"
|
|
# Pre-pull act/runner's two largest base images so a slow pull can't dominate `make test`;
|
|
# the rest (alpine/ubuntu) pull on demand, absorbed by the make-test -timeout. The host
|
|
# daemon retains them between runs, and their digest pins skip the registry when it has them.
|
|
- name: pre-pull test images
|
|
env:
|
|
TEST_JOB_IMAGE: node:24-bookworm-slim@sha256:55fb5f5a527ea2c5c4a95f963e48ef90aa38c7b346054fdc8ee9957a2b55d205 # renovate: datasource=docker
|
|
TEST_SERVICE_IMAGE: nginx:alpine@sha256:a3554c0d0b48177b1413c26e01f695334428020d9df01243fbae3e11cfd17417 # renovate: datasource=docker
|
|
run: |
|
|
for image in "$TEST_JOB_IMAGE" "$TEST_SERVICE_IMAGE"; do
|
|
if [ "$(docker image inspect --format '{{.Os}}/{{.Architecture}}' "$image" 2>/dev/null)" != linux/amd64 ]; then
|
|
for attempt in 1 2 3; do
|
|
docker pull "$image" && break
|
|
[ "$attempt" = 3 ] || sleep 5
|
|
done
|
|
fi
|
|
docker tag "$image" "${image%@*}"
|
|
done
|
|
- name: lint
|
|
run: make lint
|
|
- name: checks
|
|
run: make checks
|
|
- name: build
|
|
run: make build
|
|
- name: test
|
|
run: make test
|
|
# Build the dind image and run the daemon-facing tests against the docker version it
|
|
# ships, catching daemon-level regressions (e.g. gitea/runner#981) before release. Runs
|
|
# after `make test` so the images it needs are already present on the host daemon.
|
|
- name: test against dind image
|
|
run: make test-dind
|
|
- name: test against podman
|
|
run: make test-dind TARGET=podman
|
|
- name: coverage report
|
|
run: |
|
|
make coverage-report
|
|
cat .tmp/coverage.md >> "$GITHUB_STEP_SUMMARY"
|
|
|
|
e2e:
|
|
name: gitea compatibility (${{ matrix.gitea_image }})
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
gitea_image:
|
|
- gitea/gitea:latest
|
|
- gitea/gitea:main-nightly
|
|
steps:
|
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
- uses: ./.gitea/actions/go-setup
|
|
- name: prepare anonymous docker config
|
|
run: mkdir -p "$DOCKER_CONFIG" && echo '{}' > "$DOCKER_CONFIG/config.json"
|
|
- name: e2e compatibility
|
|
run: make test-e2e E2E_GITEA_IMAGE=${{ matrix.gitea_image }}
|