Files
unsupervised-scheduler/.gitea/workflows/ci.yml
T
thatguygriffandClaude Opus 5 d5f6ebf0b5 Move actions/cache to v4 and probe the cache URL
thatguygriff/infra#1 turned the runner cache server on, so actions/cache
has an endpoint for the first time. v4 rather than v3 because v4.2+ can
speak the cache service v2 API, which is what the runner serves.

The instrumentation step now also prints ACTIONS_CACHE_URL, so a single
run shows the endpoint arriving and the cache being read in one log
rather than needing a separate probe.

Refs #178.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Uw545F1vveNJKjzLxdi2ks
2026-08-20 15:56:37 -03:00

217 lines
8.3 KiB
YAML

name: CI
on:
push:
branches:
- main
- develop
pull_request:
jobs:
# PHPCS and PHPStan share a job so the two of them draw once on Setup PHP
# rather than twice. That step is slow and intermittently fails on 8.3
# (see #178), so every job that can be folded into another is one less
# chance for a run to fall over. They run as separate steps, and PHPCS
# failing stops the job before PHPStan reports.
quality:
name: Coding Standards & Static Analysis
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# setup-php installs PHP 8.3+ through php-builder, which apt-installs ~70
# -dev packages before unpacking the build (#178). Ubuntu's own image
# deletes the .debs after install, so every job re-downloads them from
# the archive. Keep them and restore them from the cache server, which
# lives in the cluster, turning a WAN download into a local one.
#
# The dep list is the same for every PHP version on the builder path, so
# one shared key serves them all. Only the .debs are cached, never
# /var/lib/apt/lists — a stale index is how you get 404s on install.
- name: Keep downloaded .debs
run: |
sudo rm -f /etc/apt/apt.conf.d/docker-clean
echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' \
| sudo tee /etc/apt/apt.conf.d/99keep-downloaded-packages >/dev/null
- name: Cache apt packages
uses: actions/cache@v4
with:
path: /var/cache/apt/archives/*.deb
key: apt-php-builder-deps-${{ runner.arch }}-v1
# Temporary, for #178: shows whether the cache actually served the
# builder's dependencies, and times the step that consumes them.
- name: Report restored .debs
run: |
echo "ACTIONS_CACHE_URL: ${ACTIONS_CACHE_URL:-<unset>}"
echo "restored .debs: $(ls /var/cache/apt/archives/*.deb 2>/dev/null | wc -l)"
echo "restored size: $(du -sh /var/cache/apt/archives 2>/dev/null | cut -f1)"
date -u +'setup-php start: %H:%M:%S'
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.3'
tools: composer:v2
- name: Cache Composer packages
uses: actions/cache@v4
with:
path: ~/.composer/cache
key: composer-${{ hashFiles('composer.json') }}
- name: Install dependencies
run: composer install --prefer-dist --no-progress --no-interaction
- name: Run PHPCS
run: composer cs
- name: Run PHPStan
run: composer lint
test:
name: Tests (PHP ${{ matrix.php }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
php:
- '8.1'
- '8.2'
- '8.3'
steps:
- uses: actions/checkout@v4
# setup-php installs PHP 8.3+ through php-builder, which apt-installs ~70
# -dev packages before unpacking the build (#178). Ubuntu's own image
# deletes the .debs after install, so every job re-downloads them from
# the archive. Keep them and restore them from the cache server, which
# lives in the cluster, turning a WAN download into a local one.
#
# The dep list is the same for every PHP version on the builder path, so
# one shared key serves them all. Only the .debs are cached, never
# /var/lib/apt/lists — a stale index is how you get 404s on install.
- name: Keep downloaded .debs
run: |
sudo rm -f /etc/apt/apt.conf.d/docker-clean
echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' \
| sudo tee /etc/apt/apt.conf.d/99keep-downloaded-packages >/dev/null
- name: Cache apt packages
uses: actions/cache@v4
with:
path: /var/cache/apt/archives/*.deb
key: apt-php-builder-deps-${{ runner.arch }}-v1
# Temporary, for #178: shows whether the cache actually served the
# builder's dependencies, and times the step that consumes them.
- name: Report restored .debs
run: |
echo "ACTIONS_CACHE_URL: ${ACTIONS_CACHE_URL:-<unset>}"
echo "restored .debs: $(ls /var/cache/apt/archives/*.deb 2>/dev/null | wc -l)"
echo "restored size: $(du -sh /var/cache/apt/archives 2>/dev/null | cut -f1)"
date -u +'setup-php start: %H:%M:%S'
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: mbstring, intl
coverage: none
tools: composer:v2
- name: Cache Composer packages
uses: actions/cache@v4
with:
path: ~/.composer/cache
key: ${{ matrix.php }}-composer-${{ hashFiles('composer.json') }}
- name: Install dependencies
run: composer install --prefer-dist --no-progress --no-interaction
- name: Run PHPUnit
run: composer test
no-debug:
name: No Debug Code
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check for debug statements
run: |
# \b keeps method calls like DateTimeImmutable::add() from matching dd(.
if grep -rn --include="*.php" -E "\b(var_dump|var_export|print_r|error_log|dd|dump)\s*\(" src/; then
echo "Debug code found in src/ — please remove before merging."
exit 1
fi
build:
name: Build Plugin Zip
runs-on: ubuntu-latest
# Only build a shippable artifact once changes land on main, and only
# after the quality gates pass.
needs: [quality, test, no-debug]
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
# setup-php installs PHP 8.3+ through php-builder, which apt-installs ~70
# -dev packages before unpacking the build (#178). Ubuntu's own image
# deletes the .debs after install, so every job re-downloads them from
# the archive. Keep them and restore them from the cache server, which
# lives in the cluster, turning a WAN download into a local one.
#
# The dep list is the same for every PHP version on the builder path, so
# one shared key serves them all. Only the .debs are cached, never
# /var/lib/apt/lists — a stale index is how you get 404s on install.
- name: Keep downloaded .debs
run: |
sudo rm -f /etc/apt/apt.conf.d/docker-clean
echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' \
| sudo tee /etc/apt/apt.conf.d/99keep-downloaded-packages >/dev/null
- name: Cache apt packages
uses: actions/cache@v4
with:
path: /var/cache/apt/archives/*.deb
key: apt-php-builder-deps-${{ runner.arch }}-v1
# Temporary, for #178: shows whether the cache actually served the
# builder's dependencies, and times the step that consumes them.
- name: Report restored .debs
run: |
echo "ACTIONS_CACHE_URL: ${ACTIONS_CACHE_URL:-<unset>}"
echo "restored .debs: $(ls /var/cache/apt/archives/*.deb 2>/dev/null | wc -l)"
echo "restored size: $(du -sh /var/cache/apt/archives 2>/dev/null | cut -f1)"
date -u +'setup-php start: %H:%M:%S'
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.3'
tools: composer:v2
- name: Build plugin zip
run: composer build
- name: Read plugin version
id: meta
run: |
version="$(sed -nE 's/^[[:space:]]*\*?[[:space:]]*Version:[[:space:]]*([^[:space:]]+).*/\1/p' unsupervised-schedular.php | head -1)"
echo "version=${version}" >> "$GITHUB_OUTPUT"
# Gitea/Actions re-zips artifacts on download. Upload the unpacked plugin
# folder (not the built zip) so the downloaded archive's top level is
# unsupervised-schedular/ and installs directly in WordPress. Uploading
# the zip instead double-wraps it ("No valid plugins were found").
- name: Unpack plugin for artifact
run: unzip -q "dist/unsupervised-schedular-${{ steps.meta.outputs.version }}.zip" -d artifact
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: unsupervised-schedular-${{ steps.meta.outputs.version }}
path: artifact/
if-no-files-found: error