Guard unprimed empty-table audits and read auto-increment counters as… #64
ci.yaml
on: push
Matrix: tests
Matrix: Coding standard
Matrix: Static analysis
Matrix: Test for mutants
Matrix: Code coverage finish
Status check - CI
2s
Annotations
5 errors, 23 warnings, and 1 notice
|
Tests - Windows (best-effort)
Container operations are only supported on Linux runners
|
|
Tests - macOS (best-effort)
docker: command not found
|
|
Tests - MySQL 8.4, MariaDB 10.11
Process completed with exit code 2.
|
|
Tests - MySQL 9.4, MariaDB 12.0
Process completed with exit code 2.
|
|
Status check - CI
Process completed with exit code 1.
|
|
Coding standard (ubuntu-latest, 8.4)
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/cache@v4, actions/checkout@v4, actions/github-script@v7. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
Static analysis (ubuntu-latest, 8.4)
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/cache@v4, actions/checkout@v4, actions/github-script@v7. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
Tests - MySQL 8.4, MariaDB 10.11
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/cache@v4, actions/checkout@v4, actions/github-script@v7. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
Tests - PHP 8.2
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/cache@v4, actions/checkout@v4, actions/github-script@v7, actions/upload-artifact@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
Tests - PHP 8.3
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/cache@v4, actions/checkout@v4, actions/github-script@v7, actions/upload-artifact@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
Tests - PHP 8.4
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/cache@v4, actions/checkout@v4, actions/github-script@v7, actions/upload-artifact@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
Tests - PHP 7.4
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/cache@v4, actions/checkout@v4, actions/github-script@v7, actions/upload-artifact@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
Tests - PHP 8.0
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/cache@v4, actions/checkout@v4, actions/github-script@v7, actions/upload-artifact@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
Tests - PHP 8.1
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/cache@v4, actions/checkout@v4, actions/github-script@v7, actions/upload-artifact@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
Tests - PHP 7.4, lowest deps
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/cache@v4, actions/checkout@v4, actions/github-script@v7, actions/upload-artifact@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
Tests - PHP 8.1, nextras-dbal 4
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/cache@v4, actions/checkout@v4, actions/github-script@v7, actions/upload-artifact@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
Tests - MySQL 9.4, MariaDB 12.0
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/cache@v4, actions/checkout@v4, actions/github-script@v7. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
Test for mutants (ubuntu-latest, 8.4)
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/cache@v4, actions/checkout@v4, actions/github-script@v7, actions/upload-artifact@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
Test for mutants (ubuntu-latest, 8.4):
src/Auditor/Latin1EncodingMysqlAuditor.php#L156
Escaped Mutant for Mutator "ArrayItemRemoval":
@@ @@
}
}
$schemaName = $this->schema->getDatabaseDefault()['name'];
- $textTypes = ['char', 'varchar', 'tinytext', 'text', 'mediumtext', 'longtext'];
+ $textTypes = ['varchar', 'tinytext', 'text', 'mediumtext', 'longtext'];
$columns = [];
foreach ($this->schema->getColumns() as $column) {
$charset = $column['CHARACTER_SET_NAME'];
|
|
Test for mutants (ubuntu-latest, 8.4):
src/Auditor/Latin1EncodingMysqlAuditor.php#L138
Escaped Mutant for Mutator "CastInt":
@@ @@
/** @var literal-string $literalSql */
$literalSql = $sql;
$row = $this->dbal->query($literalSql)[0];
- return ['non_ascii' => (int) $row['non_ascii'], 'valid_utf8' => (int) $row['valid_utf8'], 'invalid_utf8' => (int) $row['invalid_utf8']];
+ return ['non_ascii' => (int) $row['non_ascii'], 'valid_utf8' => $row['valid_utf8'], 'invalid_utf8' => (int) $row['invalid_utf8']];
}
/**
* @return list<array{TABLE_SCHEMA: string, TABLE_NAME: string, COLUMN_NAME: string, COLUMN_TYPE: string}>
|
|
Test for mutants (ubuntu-latest, 8.4):
src/Auditor/Latin1EncodingMysqlAuditor.php#L102
Escaped Mutant for Mutator "Concat":
@@ @@
if ($valid > 0) {
return 'holds likely double-encoded UTF-8 (' . $valid . ' non-ASCII row(s) form valid UTF-8) —' . ' use assume-double-encoded after spot-checking samples.';
}
- return 'holds genuine single-byte data (' . $invalid . ' non-ASCII row(s) are not valid UTF-8) —' . ' safe to convert as genuine (assume-genuine).';
+ return 'holds genuine single-byte data (' . $invalid . ' safe to convert as genuine (assume-genuine).' . ' non-ASCII row(s) are not valid UTF-8) —';
}
/**
* @return array{non_ascii: int, valid_utf8: int, invalid_utf8: int}
|
|
Test for mutants (ubuntu-latest, 8.4):
src/Auditor/InvalidDateMysqlAuditor.php#L31
Escaped Mutant for Mutator "Continue_":
@@ @@
$profile = null;
foreach ($columnsByTable[$table] ?? [] as $column) {
if (!in_array(strtolower($column['DATA_TYPE']), self::DateTypes, true)) {
- continue;
+ break;
}
$profile ??= $profiler->getProfile($table);
if ($profile === null || $profile['rowCount'] === 0) {
|
|
Test for mutants (ubuntu-latest, 8.4):
src/Auditor/ForeignKeyReferencedColumnExistenceMysqlAuditor.php#L35
Escaped Mutant for Mutator "Foreach_":
@@ @@
public function analyse(): AnalysisResult
{
$existingTables = [];
- foreach ($this->schema->getTableNames() as $name) {
+ foreach ([] as $name) {
$existingTables[$name] = true;
}
$db = $this->schema->getDatabaseDefault()['name'];
|
|
Test for mutants (ubuntu-latest, 8.4):
src/Auditor/ForeignKeyColumnTypeMismatchMysqlAuditor.php#L110
Escaped Mutant for Mutator "CastString":
@@ @@
if ($charsetDiffers) {
$changes = [];
if ($pairFixable) {
- $changes[] = ColumnTargetChange::forColumn($db, $fk->table, $column)->setCharsetCollation((string) $parentCharset, (string) $referenced['COLLATION_NAME']);
+ $changes[] = ColumnTargetChange::forColumn($db, $fk->table, $column)->setCharsetCollation((string) $parentCharset, $referenced['COLLATION_NAME']);
}
$entries[] = ['table' => $fk->table, 'column' => $column, 'kind' => 0, 'violation' => new Violation('foreign_key.charset_mismatch', 'Column ' . $sourceSource->toString() . ' references column ' . $referencedSource->toString() . ' but the character set does not match.', $sourceSource, $changes !== [], $changes !== [] ? self::FixHint : null, $changes)];
}
|
|
Test for mutants (ubuntu-latest, 8.4):
src/Auditor/ForeignKeyColumnTypeMismatchMysqlAuditor.php#L57
Escaped Mutant for Mutator "Continue_":
@@ @@
// absent (e.g. the referenced table does not exist) is excluded — that is the referenced-column
// existence auditor's concern.
if ($source === null || $referenced === null) {
- continue;
+ break;
}
$charsetDiffers = $source['CHARACTER_SET_NAME'] !== $referenced['CHARACTER_SET_NAME'];
$sizeDiffers = $source['COLUMN_TYPE'] !== $referenced['COLUMN_TYPE'];
|
|
Test for mutants (ubuntu-latest, 8.4):
src/Auditor/ForeignKeyColumnNameMismatchMysqlAuditor.php#L42
Escaped Mutant for Mutator "TrueValue":
@@ @@
$pattern = $this->config->getPattern();
$baseTables = [];
foreach ($this->schema->getTables() as $table) {
- $baseTables[$table['TABLE_NAME']] = true;
+ $baseTables[$table['TABLE_NAME']] = false;
}
$fkColumns = [];
foreach ($this->schema->getForeignKeyGraph()->getConstraints() as $constraint) {
|
|
Test for mutants (ubuntu-latest, 8.4):
src/Auditor/EmptyTableMysqlAuditor.php#L24
Escaped Mutant for Mutator "Continue_":
@@ @@
continue;
}
if (!$this->isTableEmpty($db, $table)) {
- continue;
+ break;
}
$source = new TableViolationSource($db, null, $table);
$violations[] = new Violation('empty_table', 'Table ' . $source->toString() . ' is empty.', $source);
|
|
Test for mutants (ubuntu-latest, 8.4):
src/Auditor/EmptyTableAuditor.php#L39
Escaped Mutant for Mutator "FalseValue":
@@ @@
*/
public function getSchemaRequest(): SchemaRequest
{
- return new SchemaRequest(ColumnCharsetClass::any(), new TableExclude(), false, false, true);
+ return new SchemaRequest(ColumnCharsetClass::any(), new TableExclude(), false, true, true);
}
public function getCategory(): AnalyserCategory
{
|
|
Tests - macOS (best-effort)
The macos-latest label will migrate to macOS 26 beginning June 15, 2026. For more information see https://github.com/actions/runner-images/issues/14167
|
Artifacts
Produced during runtime
| Name | Size | Digest | |
|---|---|---|---|
|
Logs - Mutations
|
105 KB |
sha256:61ab5e420d5f6b5372c350637cc18a5ca9793a4bc5dad3af3a8ac8323e8e2f33
|
|