Aggregate duplicate findings and show a white count on findings and s… #62
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
12 errors, 23 warnings, and 1 notice
|
Tests - macOS (best-effort)
docker: command not found
|
|
Tests - Windows (best-effort)
Container operations are only supported on Linux runners
|
|
Tests - MySQL 8.4, MariaDB 10.11
Process completed with exit code 2.
|
|
Tests - MySQL 8.4, MariaDB 10.11:
tests/Integration/Auditor/BoolLikeColumnMysqlAuditorTest.php#L171
Failed asserting that two arrays are equal.
|
|
Tests - MySQL 8.4, MariaDB 10.11:
tests/Integration/Auditor/BoolLikeColumnMysqlAuditorTest.php#L171
Failed asserting that two arrays are equal.
|
|
Tests - MySQL 9.4, MariaDB 12.0
Process completed with exit code 2.
|
|
Tests - MySQL 9.4, MariaDB 12.0:
tests/Integration/Auditor/AutoIncrementNearLimitMysqlAuditorTest.php#L250
Failed asserting that two arrays are equal.
|
|
Tests - MySQL 9.4, MariaDB 12.0:
tests/Integration/Auditor/AutoIncrementNearLimitMysqlAuditorTest.php#L250
Failed asserting that two arrays are equal.
|
|
Test for mutants (ubuntu-latest, 8.4)
Canceling since a higher priority waiting request for CI-refs/heads/v1.x exists
|
|
Test for mutants (ubuntu-latest, 8.4)
The operation was canceled.
|
|
Status check - CI
Process completed with exit code 1.
|
|
CI
Canceling since a higher priority waiting request for CI-refs/heads/v1.x exists
|
|
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 - 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/
|
|
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 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 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.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 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 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 - 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/
|
|
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. 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/ForeignKeyReferencedColumnExistenceMysqlAuditor.php#L26
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(), true, false, true);
}
public function analyse(): AnalysisResult
{
|
|
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#L94
Escaped Mutant for Mutator "LogicalAndSingleSubExprNegation":
@@ @@
// to the parent length is valid. A child already >= parent is BENIGN (report-only, no fix); a
// different base type / sign / numeric size is INCOMPATIBLE (widening cannot reconcile it).
$sizeWiden = $sizeDiffers && $sameStringBase && $childLength !== null && $parentLength !== null && $childLength < $parentLength;
- $sizeIncompatible = $sizeDiffers && !$sameStringBase;
+ $sizeIncompatible = !$sizeDiffers && !$sameStringBase;
// A single emitted child change makes the planner drop-and-re-add the FK, so a fix is emitted only
// when the pair can be made fully valid; an incompatible type or an unsafe charset leaves every
// mismatch on the pair report-only, so the FK is never rebuilt into a failing re-add.
|
|
Test for mutants (ubuntu-latest, 8.4):
src/Auditor/ForeignKeyColumnTypeMismatchMysqlAuditor.php#L89
Escaped Mutant for Mutator "LogicalAnd":
@@ @@
// WIDEN: same char/varchar base and the child is shorter than the parent, so widening the child
// to the parent length is valid. A child already >= parent is BENIGN (report-only, no fix); a
// different base type / sign / numeric size is INCOMPATIBLE (widening cannot reconcile it).
- $sizeWiden = $sizeDiffers && $sameStringBase && $childLength !== null && $parentLength !== null && $childLength < $parentLength;
+ $sizeWiden = ($sizeDiffers && $sameStringBase && $childLength !== null || $parentLength !== null) && $childLength < $parentLength;
$sizeIncompatible = $sizeDiffers && !$sameStringBase;
// A single emitted child change makes the planner drop-and-re-add the FK, so a fix is emitted only
// when the pair can be made fully valid; an incompatible type or an unsafe charset leaves every
|
|
Test for mutants (ubuntu-latest, 8.4):
src/Auditor/ForeignKeyColumnTypeMismatchMysqlAuditor.php#L89
Escaped Mutant for Mutator "LogicalAnd":
@@ @@
// WIDEN: same char/varchar base and the child is shorter than the parent, so widening the child
// to the parent length is valid. A child already >= parent is BENIGN (report-only, no fix); a
// different base type / sign / numeric size is INCOMPATIBLE (widening cannot reconcile it).
- $sizeWiden = $sizeDiffers && $sameStringBase && $childLength !== null && $parentLength !== null && $childLength < $parentLength;
+ $sizeWiden = ($sizeDiffers && $sameStringBase || $childLength !== null) && $parentLength !== null && $childLength < $parentLength;
$sizeIncompatible = $sizeDiffers && !$sameStringBase;
// A single emitted child change makes the planner drop-and-re-add the FK, so a fix is emitted only
// when the pair can be made fully valid; an incompatible type or an unsafe charset leaves every
|
|
Test for mutants (ubuntu-latest, 8.4):
src/Auditor/ForeignKeyColumnTypeMismatchMysqlAuditor.php#L81
Escaped Mutant for Mutator "UnwrapStrToLower":
@@ @@
// (latin1/latin2/cp1250 with MAXLEN 1 may hold double-encoded UTF-8, so they stay report-only).
$charsetSafe = $charsetDiffers && $childCharset !== null && $parentCharset !== null && isset($charsetMaxlen[$childCharset], $charsetMaxlen[$parentCharset]) && $charsetMaxlen[$childCharset] < $charsetMaxlen[$parentCharset] && !LegacyCharset::isSingleByte($childCharset, $charsetMaxlen[$childCharset]);
$childDataType = strtolower($source['DATA_TYPE']);
- $sameStringBase = $childDataType === strtolower($referenced['DATA_TYPE']) && ($childDataType === 'char' || $childDataType === 'varchar');
+ $sameStringBase = $childDataType === $referenced['DATA_TYPE'] && ($childDataType === 'char' || $childDataType === 'varchar');
$childLength = $source['CHARACTER_MAXIMUM_LENGTH'];
$parentLength = $referenced['CHARACTER_MAXIMUM_LENGTH'];
// WIDEN: same char/varchar base and the child is shorter than the parent, so widening the child
|
|
Test for mutants (ubuntu-latest, 8.4):
src/Auditor/ForeignKeyColumnTypeMismatchMysqlAuditor.php#L77
Escaped Mutant for Mutator "LessThan":
@@ @@
// SAFE-ALIGN: the child adopts the parent's charset only when that is lossless, i.e. the child's
// MAXLEN is strictly narrower (utf8mb3 -> utf8mb4) and the child is not single-byte legacy
// (latin1/latin2/cp1250 with MAXLEN 1 may hold double-encoded UTF-8, so they stay report-only).
- $charsetSafe = $charsetDiffers && $childCharset !== null && $parentCharset !== null && isset($charsetMaxlen[$childCharset], $charsetMaxlen[$parentCharset]) && $charsetMaxlen[$childCharset] < $charsetMaxlen[$parentCharset] && !LegacyCharset::isSingleByte($childCharset, $charsetMaxlen[$childCharset]);
+ $charsetSafe = $charsetDiffers && $childCharset !== null && $parentCharset !== null && isset($charsetMaxlen[$childCharset], $charsetMaxlen[$parentCharset]) && $charsetMaxlen[$childCharset] <= $charsetMaxlen[$parentCharset] && !LegacyCharset::isSingleByte($childCharset, $charsetMaxlen[$childCharset]);
$childDataType = strtolower($source['DATA_TYPE']);
$sameStringBase = $childDataType === strtolower($referenced['DATA_TYPE']) && ($childDataType === 'char' || $childDataType === 'varchar');
$childLength = $source['CHARACTER_MAXIMUM_LENGTH'];
|
|
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#L29
Escaped Mutant for Mutator "FalseValue":
@@ @@
*/
public function getSchemaRequest(): SchemaRequest
{
- return new SchemaRequest(ColumnCharsetClass::any(), new TableExclude(), false, true, true);
+ return new SchemaRequest(ColumnCharsetClass::any(), new TableExclude(), true, true, true);
}
public function analyse(): AnalysisResult
{
|
|
|
|
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
|