# evol-testbed Reusable Gitea Actions container image for Evol C/C++/Vulkan builds. Image: ```text git.neosisyphus.com/evol3d/evol-testbed:latest ``` The image extends: ```text catthehacker/ubuntu:act-latest ``` Included tools: - Clang/LLVM 22 - `clang-format-22` - `clang-tidy-22` - `lld-22` - `lldb-22` - Meson - Ninja - Python 3 / pip / venv - Vulkan headers/tools - Mesa Vulkan drivers - `build-essential` - `pkg-config` - Git ## Build locally ```bash docker build -t evol-testbed:latest . ``` Test locally: ```bash docker run --rm -it evol-testbed:latest bash -lc ' clang --version && clang++ --version && meson --version && ninja --version && python3 --version && pkg-config --modversion vulkan && vulkaninfo --summary || true ' ``` ## Push manually ```bash docker login git.neosisyphus.com docker tag evol-testbed:latest git.neosisyphus.com/evol3d/evol-testbed:latest docker push git.neosisyphus.com/evol3d/evol-testbed:latest ``` ## Automatic publishing The workflow at: ```text .gitea/workflows/build-ci-image.yml ``` builds and pushes the image on changes to `Dockerfile`, `.dockerignore`, or the workflow itself. Required Gitea Actions secret: ```text REGISTRY_PASSWORD ``` Use a Gitea token/password with package/container registry write permission. Optional secret: ```text REGISTRY_USERNAME ``` If `REGISTRY_USERNAME` is omitted, the workflow uses `$GITHUB_ACTOR`. ## Use from another Gitea project ```yaml name: build on: push: pull_request: jobs: build: runs-on: ubuntu-latest container: image: git.neosisyphus.com/evol3d/evol-testbed:latest steps: - uses: actions/checkout@v4 - name: Check toolchain run: | clang --version clang++ --version meson --version ninja --version python3 --version pkg-config --modversion vulkan vulkaninfo --summary || true - name: Configure run: meson setup build - name: Build run: meson compile -C build ``` Use the fully-qualified image path. Do not use only `evol-testbed:latest`; Docker will look on Docker Hub or for a local image instead of your Gitea registry. ## Notes - `latest` may be cached by the runner unless `act_runner` is configured with `container.force_pull: true`. - `vulkaninfo` may still fail on unusual runners, but Vulkan headers and build tools are installed. Use `pkg-config --modversion vulkan` as the compile-time check.