CI Images / Build CI image (PHP 8.2) (pull_request) Successful in 3s
CI Images / Build CI image (PHP 8.5) (pull_request) Successful in 8s
CI / Tests (PHP 8.3) (pull_request) Successful in 30s
CI Images / Build CI image (PHP 8.3) (pull_request) Successful in 4s
CI / Tests (PHP 8.2) (pull_request) Successful in 23s
CI / Tests (PHP 8.1) (pull_request) Successful in 28s
CI / No Debug Code (pull_request) Successful in 4s
CI / Coding Standards & Static Analysis (pull_request) Successful in 43s
CI / Tests (PHP 8.5) (pull_request) Successful in 23s
CI / Build Plugin Zip (pull_request) Skipped
CI Images / Build CI image (PHP 8.1) (pull_request) Successful in 1m3s
docs/ci.md and the workflow comment both described secrets.GITHUB_TOKEN as the working credential with REGISTRY_TOKEN as a fallback. That is backwards: the task token is rejected by Gitea's container registry (go-gitea/gitea#23642) and the first publish attempt failed on exactly that. REGISTRY_TOKEN is required. Part of #187 Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01D9acV1mHktGAb1uyvNmrR2
97 lines
3.4 KiB
YAML
97 lines
3.4 KiB
YAML
name: CI Images
|
|
|
|
# Publishes the per-PHP-version images that ci.yml and release.yml run inside
|
|
# (#187). Nothing else consumes them, so this workflow is the only place the
|
|
# registry path is written down.
|
|
#
|
|
# Triggers:
|
|
# - the Dockerfile or this workflow changing on main, so an edit ships;
|
|
# - the same paths on a pull request, which builds but does not push, so a
|
|
# broken Dockerfile is caught before it reaches main;
|
|
# - workflow_dispatch, to rebuild on demand;
|
|
# - weekly, so PHP patch releases and Alpine security updates land without
|
|
# anyone remembering to ask.
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
paths:
|
|
- '.gitea/ci/Dockerfile'
|
|
- '.gitea/workflows/ci-images.yml'
|
|
pull_request:
|
|
paths:
|
|
- '.gitea/ci/Dockerfile'
|
|
- '.gitea/workflows/ci-images.yml'
|
|
schedule:
|
|
- cron: '17 4 * * 1'
|
|
workflow_dispatch:
|
|
|
|
env:
|
|
# The instance ROOT_URL host — the container registry lives on the same host.
|
|
REGISTRY: git.unsupervised.ca
|
|
IMAGE: unsupervised/ci-php
|
|
|
|
jobs:
|
|
build:
|
|
name: Build CI image (PHP ${{ matrix.php }})
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
# One version failing should not hide whether the others built.
|
|
fail-fast: false
|
|
matrix:
|
|
# Keep in step with the test matrix in ci.yml.
|
|
php:
|
|
- '8.1'
|
|
- '8.2'
|
|
- '8.3'
|
|
- '8.5'
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
# The images are built natively, so they carry the runner's
|
|
# architecture only. Fine while every runner is arm64; if a runner of a
|
|
# different architecture ever joins the pool it will overwrite these
|
|
# tags with its own arch and the others will fail to pull.
|
|
- name: Check Docker is available
|
|
run: |
|
|
if ! docker info >/dev/null 2>&1; then
|
|
echo "No usable Docker daemon in the job container." >&2
|
|
echo "act_runner needs container.docker_host set (or left empty to autodetect)." >&2
|
|
exit 1
|
|
fi
|
|
docker version --format 'client {{.Client.Version}} / server {{.Server.Version}} / arch {{.Server.Arch}}'
|
|
|
|
# REGISTRY_TOKEN (org secret, a PAT with the package scope) is what
|
|
# actually works. Gitea's Actions task token is rejected by the
|
|
# container registry — go-gitea/gitea#23642 — so the GITHUB_TOKEN
|
|
# fallback below only exists to keep this readable on an instance where
|
|
# that is ever fixed. See docs/ci.md.
|
|
- name: Log in to the container registry
|
|
if: github.event_name != 'pull_request'
|
|
run: |
|
|
echo "${{ secrets.REGISTRY_TOKEN || secrets.GITHUB_TOKEN }}" \
|
|
| docker login "${REGISTRY}" -u "${{ vars.REGISTRY_USER || github.actor }}" --password-stdin
|
|
|
|
- name: Build
|
|
run: |
|
|
docker build \
|
|
--pull \
|
|
--build-arg "PHP_VERSION=${{ matrix.php }}" \
|
|
--tag "${REGISTRY}/${IMAGE}:${{ matrix.php }}" \
|
|
--file .gitea/ci/Dockerfile \
|
|
.gitea/ci
|
|
|
|
# Pull requests build only — the tags on the registry are what the other
|
|
# workflows run inside, so only main and a manual dispatch move them.
|
|
- name: Push
|
|
if: github.event_name != 'pull_request'
|
|
run: |
|
|
image="${REGISTRY}/${IMAGE}:${{ matrix.php }}"
|
|
docker push "${image}"
|
|
echo "Published ${image}"
|
|
|
|
- name: Log out
|
|
if: always() && github.event_name != 'pull_request'
|
|
run: docker logout "${REGISTRY}" || true
|