systems:ci

Hosted runner providers

  • GitHub Actions: Used for Windows, macOS, Linux, FreeBSD (in a VM)
  • CircleCI: ARM Linux

Formerly, CircleCI was used for FreeBSD. Travis CI used to be used for s390x Linux. Azure Pipelines used to be used.

Self-hosted runner systems

Currently, none are run by the project/foundation itself, and provided by the community. Official runners (if they exist) should also be documented on the systems page.

Name Architecture OS CI Platform Provided by Notes
php-ci-ppc64 PowerPC 64-bit, big endian Gentoo GitHub Actions (github-act-runner) calvinb@php.net Attached, not yet running jobs. Should be containerized

Provisioning new runners

New self-hosted runners should only be necessary if we can't use a hosted platform for it (or a hosted platform is too expensive). Integrating with GitHub Actions is preferable. For platforms that the official GitHub Actions runner doesn't support, alternative implementations like github-act-runner can be used. Ideally, new runner systems should be hosted in i.e. a datacentre

The process looks something like this:

  1. Set up your runner, and make your fork of php-src use it. It's recommended you add a nightly flow instead of push, unless you have i.e. autoscaling. Iterate and trigger nightly runs manually.
  2. If your added workflow is in a good state, create a PR for it.
  3. Once the workflow is ready to be merged, but before it is merged, get the runner added to the php/php-src repository.
Notes on setup for non-Docker runners

For platforms that aren't containerized, you may need to set up things manually. For databases, make sure you set up the correct credentials. Note running tests in a container is a good idea for reproducibility/isolation/security reasons, but this might not be set up yet.

Installing necessary libraries will depend on your OS and what extensions you want to test.

DBA: You may need to use QDBM instead of GDBM.

Postgres: You just need to set up a user if you aren't going to use root. Set the appropriate environment variables in your platform's test action and create a user and database like so:

CREATE ROLE ‘ci’ WITH LOGIN;
\password ci
CREATE DATABASE test WITH OWNER ci;

MySQL: The tests assume MySQL 8; you may run into issues with MariaDB. If you're running a non-root user, you must either set log_bin to off or log_bin_trust_function_creators to on. For creating a user and database:

CREATE DATABASE TEST;
CREATE USER 'ci'@'localhost' IDENTIFIED BY 'ci’;
GRANT SELECT, CREATE, DROP, SUPER ON *.* TO 'ci'@'localhost';
GRANT ALL PRIVILEGES ON test.* TO 'ci'@'localhost';
systems/ci.txt · Last modified: 2025/02/17 17:19 by calvinb