ci: bring back Oracle database coverage in GitHub Actions [full-ci] - #41808
Open
oc-tmueller wants to merge 3 commits into
Open
ci: bring back Oracle database coverage in GitHub Actions [full-ci]#41808oc-tmueller wants to merge 3 commits into
oc-tmueller wants to merge 3 commits into
Conversation
The Oracle database layer - ConnectionFactory, OracleConnection, OracleMigrator, AdapterOCI8 and the OCI expression builder - has always remained in the code base, but the setup class that makes it reachable had been removed, so an instance could no longer be installed against Oracle at all. That also meant no CI job could exercise that layer. Restore OC\Setup\OCI, its dbSetupClasses entry, the dbconnectionstring handling in AbstractDatabase and the --database-connection-string option of maintenance:install. The web installer is unchanged: Oracle is not offered there, because the default supportedDatabases config still lists only sqlite, mysql and pgsql. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Signed-off-by: Thomas Müller <323649642+oc-tmueller@users.noreply.github.com>
The drone to GitHub Actions migration dropped the Oracle pipeline. Bring it back as a php-unit.yml matrix entry driven by a new databases input, served by gvenzl/oracle-free:23-slim-faststart. Oracle lives in the FREEPDB1 pluggable database, so the installer is called with a connect string carrying SERVICE_NAME instead of a host. The oci8 extension is only requested for Oracle jobs, and DB_TYPE is only exported for Oracle so test-phpunit.sh narrows the run to --group DB - the other databases keep running the full suite unchanged. As in drone, Oracle does not run on every pull request: it is gated on full-ci in the pull request title and runs nightly. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Signed-off-by: Thomas Müller <323649642+oc-tmueller@users.noreply.github.com>
Oracle cannot store empty strings, so the file cache converts them to null before writing a row. For the storage root, whose path is the empty string, that left md5() being called with null: on PHP 8 that raises a deprecation notice, and the resulting path_hash was the hash of null rather than the hash of the empty string used on every other database. Found by running the PHPUnit DB suite against Oracle. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Signed-off-by: Thomas Müller <323649642+oc-tmueller@users.noreply.github.com>
oc-tmueller
force-pushed
the
ci/oracle-db-in-github-actions
branch
from
September 4, 2026 15:39
6680154 to
566b274
Compare
phil-davis
approved these changes
Sep 4, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
The drone → GitHub Actions migration dropped the Oracle DB pipeline, and #41555 then removed the installer-side Oracle support, so an instance can no longer be installed against Oracle at all — even though the whole Oracle runtime layer (
ConnectionFactory,OracleConnection,OracleMigrator,AdapterOCI8,OCIExpressionBuilder, plus Oracle branches inAppConfig,AllConfig,Files\Cache\Cacheand many tests) is still shipped and untested.This restores just enough to get that layer under test again.
1. CLI installer (
feat:)A partial revert of 95e3cde:
OC\Setup\OCI, itsdbSetupClassesentry,dbconnectionstringhandling inAbstractDatabase, and the--database-connection-stringoption ofmaintenance:install.The web installer is deliberately left unchanged — no template or
setup.jschange, andhasOracleis not re-added.getSupportedDatabases(false)reads thesupportedDatabasesconfig, which still defaults tosqlite, mysql, pgsql, so Oracle is not offered in the UI. This exists for CI coverage of code we still ship; it is not a re-declaration of production support for Oracle.2. CI job (
ci:)php-unit.ymlgains adatabasesinput (defaulting to today's five jobs, so nothing changes for the existing matrix) and anoracleservice ongvenzl/oracle-free:23-slim-faststart(23ai), using the same "empty image string disables the service" idiom as the existingmysql/postgresservices.Notable details:
FREEPDB1pluggable database, so--database-hostis not passed; a connect string carryingSERVICE_NAMEis used instead, andConnectionFactorythen takes itsconnectstringpath.oci8is only requested fromsetup-phpfor Oracle jobs (it is built from source, so it costs a few minutes).DB_TYPEis now exported to theRun PHPUnitstep for Oracle only, sotest-phpunit.shnarrows the run to--group DBas drone did. The other databases keep running the full suite exactly as today.As in drone ("Note: do not run Oracle by default in PRs"), Oracle does not run on every PR: it is gated on
full-ciin the PR title, plus a new nightly workflow.3. One Oracle-specific bug found this way (
fix:)Oracle cannot store empty strings, so the file cache converts
''→nullbefore writing a row (#31692). For the storage root, whose path is the empty string, that leftmd5(null): a PHP 8 deprecation, and apath_hashthat was the hash of null rather than of''. This commit is separable if you would rather see it on its own.Verification
Locally, against a real
gvenzl/oracle-free:23-slim-faststartwithoci83.4.0 and PHP 8.3:maintenance:installline from the workflow succeeds — 48 tables, 35 sequences, 35 triggers, 65 migrationsphpunit --group DBis green:Tests: 5421, Assertions: 35231, Skipped: 29The 29 skips are pre-existing platform skips, including the three Oracle ones that were already in the tree (
MDB2SchemaManagerTest::testAutoIncrement,MigratorTest::testDuplicateKeyUpgrade,ApiTest::testShareStorageMountPoint→ doctrine/dbal#4687).What only CI can prove is the runner-side
oci8build time and theoracleservice's health under Actions — hencefull-cion this PR.Types of changes
Checklist
🤖 Generated with Claude Code