Skip to content

Commit

Permalink
Merge pull request #327 from laminas/1.28.x-merge-up-into-2.0.x_je7Wpu2i
Browse files Browse the repository at this point in the history
Merge release 1.28.0 into 2.0.x
  • Loading branch information
boesing authored Jan 17, 2025
2 parents 4b8a6bd + d0980e7 commit a9db0d3
Show file tree
Hide file tree
Showing 34 changed files with 203 additions and 108 deletions.
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM node:21.7.3-alpine as compiler
FROM node:21.7.3-alpine AS compiler

RUN mkdir -p /usr/local/source
WORKDIR /usr/local/source
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ Currently, it identifies the following:
- PHPUnit tests based on the presence of `phpunit.xml.dist` or `phpunit.xml` files.
- phpcs checks based on the presence of `phpcs.xml.dist` or `phpcs.xml` files.
- Psalm checks based on the presence of `psalm.xml.dist` or `psalm.xml` files.
- PHPStan checks based on the presence of `phpstan.neon`, `phpstan.neon.dist` or `phpstan.dist.neon` files.
- ComposerRequireChecker checks based on the presence of `composer-require-checker.json` file.
- phpbench benchmarks based on the presence of a `phpbench.json`.
- Infection mutation tests based on the presence of `infection.json` or `infection.json.dist`. In case that `roave/infection-static-analysis-plugin` is installed, this will be used instead.
Expand Down
1 change: 1 addition & 0 deletions laminas-ci.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,7 @@
"8.1",
"8.2",
"8.3",
"8.4",
"@default"
]
},
Expand Down
17 changes: 9 additions & 8 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
},
"dependencies": {
"@actions/core": "^1.10.0",
"@cfworker/json-schema": "^1.12.5",
"@cfworker/json-schema": "^2.0.0",
"@types/semver": "^7.3.13",
"semver": "^7.3.8"
},
Expand All @@ -33,7 +33,7 @@
"source-map-loader": "^5.0.0",
"ts-jest": "^29.0.3",
"ts-node": "^10.9.1",
"typescript": "~5.5.0",
"typescript": "~5.7.0",
"webpack": "^5.74.0",
"webpack-cli": "^5.0.0"
}
Expand Down
2 changes: 1 addition & 1 deletion src/config/app.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ describe('config/app', () => {
${'~8.1'} | ${[ '8.1' ]}
${'~8.1.0'} | ${[ '8.1' ]}
${'~8.1.12'} | ${[ '8.1' ]}
${'^8.0 || ~8.0.0 || ~8.1.12'} | ${[ '8.0', '8.1', '8.2', '8.3' ]}
${'^8.0 || ~8.0.0 || ~8.1.12'} | ${[ '8.0', '8.1', '8.2', '8.3', '8.4' ]}
${'<=8.1.0'} | ${[ '8.0', '8.1' ]}
`('for "$constraint" === $expected', ({constraint, expected}) => {
expect(gatherVersions({require: {php: constraint}})).toEqual(expected);
Expand Down
3 changes: 2 additions & 1 deletion src/config/app.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import fs, {PathLike} from 'fs';
import semver from 'semver';
import parseJsonFile from '../json';
import {isToolRunningContainerDefaultPhpVersion, Tool, ToolExecutionType} from '../tools';
import {isToolRunningContainerDefaultPhpVersion, Tool} from '../tools';
import {Logger} from '../logging';
import {ToolExecutionType} from '../enum/toolExecutionType';
import {
CONTAINER_DEFAULT_PHP_VERSION,
CURRENT_STABLE,
Expand Down
13 changes: 13 additions & 0 deletions src/enum/toolExecutionType.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
export enum ToolExecutionType {
/**
* @description Executed on every supported PHP version with lowest & latest dependencies.
* In case, a lock-file is present, the minimum supported PHP version will also run with LOCKED
* dependencies.
*/
MATRIX = 'matrix',

/**
* @description Executed on the minimum PHP version with either LOCKED or LATEST dependencies.
*/
STATIC = 'static',
}
4 changes: 4 additions & 0 deletions src/enum/toolType.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export enum ToolType {
LINTER = 'linter',
CODE_CHECK = 'code_check',
}
114 changes: 22 additions & 92 deletions src/tools.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,17 @@
import fs, {PathLike} from 'fs';
import {Config} from './config/app';
import {ComposerJson} from './config/composer';
import parseJsonFile from './json';
import {CONTAINER_DEFAULT_PHP_VERSION} from './config/php';

export enum ToolExecutionType {
/**
* @description Executed on every supported PHP version with lowest & latest dependencies.
* In case, a lock-file is present, the minimum supported PHP version will also run with LOCKED
* dependencies.
*/
MATRIX = 'matrix',

/**
* @description Executed on the minimum PHP version with either LOCKED or LATEST dependencies.
*/
STATIC = 'static',
}

enum ToolType {
LINTER = 'linter',
CODE_CHECK = 'code_check',
}
import {PHPUnitTool} from './tools/phpunit';
import {InfectionTool} from './tools/infection';
import {PhpCodeSnifferTool} from './tools/codesniffer';
import {PsalmTool} from './tools/psalm';
import {ComposerRequireCheckerTool} from './tools/composerRequireChecker';
import {PhpBenchTool} from './tools/phpbench';
import {CodeceptionTool} from './tools/codeception';
import {PhpCsFixerTool} from './tools/phpCsFixer';
import {PHPStanTool} from './tools/phpstan';
import {ToolExecutionType} from './enum/toolExecutionType';
import {ToolType} from './enum/toolType';

export type Tool = {
executionType: ToolExecutionType,
Expand All @@ -36,16 +26,6 @@ export type ToolRunningContainerDefaultPhpVersion = Tool & {
php: typeof CONTAINER_DEFAULT_PHP_VERSION,
}

function detectInfectionCommand(): string {
const composerJson: ComposerJson = parseJsonFile('composer.json', true) as ComposerJson;

if (composerJson['require-dev']?.['roave/infection-static-analysis-plugin'] !== undefined) {
return './vendor/bin/roave-infection-static-analysis-plugin';
}

return './vendor/bin/infection';
}

function backwardCompatibilityCheckTool(config: Config): ToolRunningContainerDefaultPhpVersion | null {
if (!config.backwardCompatibilityCheck) {
return null;
Expand All @@ -70,14 +50,14 @@ export default function createTools(config: Config): Array<Tool> {
{
executionType : ToolExecutionType.STATIC,
name : 'Documentation Linting',
command : 'markdownlint doc/book/**/*.md',
command : "markdownlint 'doc/book/**/*.md'",
filesToCheck : [ 'doc/book/' ],
toolType : ToolType.LINTER,
},
{
executionType : ToolExecutionType.STATIC,
name : 'Documentation Linting',
command : 'markdownlint docs/book/**/*.md',
command : "markdownlint 'docs/book/**/*.md'",
filesToCheck : [ 'docs/book/' ],
toolType : ToolType.LINTER,
},
Expand All @@ -95,65 +75,15 @@ export default function createTools(config: Config): Array<Tool> {
filesToCheck : [ 'README.md' ],
toolType : ToolType.LINTER,
},
{
executionType : ToolExecutionType.MATRIX,
name : 'PHPUnit',
command : './vendor/bin/phpunit',
filesToCheck : [ 'phpunit.xml.dist', 'phpunit.xml' ],
toolType : ToolType.CODE_CHECK,
lintConfigCommand : 'xmllint --schema vendor/phpunit/phpunit/phpunit.xsd',
},
{
executionType : ToolExecutionType.STATIC,
name : 'Infection',
command : detectInfectionCommand(),
filesToCheck : [ 'infection.json', 'infection.json.dist' ],
toolType : ToolType.CODE_CHECK,
},
{
executionType : ToolExecutionType.STATIC,
name : 'PHPCodeSniffer',
command : './vendor/bin/phpcs -q --report=checkstyle | cs2pr',
filesToCheck : [ 'phpcs.xml', 'phpcs.xml.dist' ],
toolType : ToolType.CODE_CHECK,
lintConfigCommand : 'xmllint --schema vendor/squizlabs/php_codesniffer/phpcs.xsd',
},
{
executionType : ToolExecutionType.STATIC,
name : 'Psalm',
command : './vendor/bin/psalm --shepherd --stats --output-format=github --no-cache',
filesToCheck : [ 'psalm.xml.dist', 'psalm.xml' ],
toolType : ToolType.CODE_CHECK,
lintConfigCommand : 'xmllint --schema vendor/vimeo/psalm/config.xsd',
},
{
executionType : ToolExecutionType.STATIC,
name : 'Composer Require Checker',
command : './vendor/bin/composer-require-checker check --config-file=composer-require-checker.json -n -v composer.json',
filesToCheck : [ 'composer-require-checker.json' ],
toolType : ToolType.CODE_CHECK,
},
{
executionType : ToolExecutionType.STATIC,
name : 'PHPBench',
command : './vendor/bin/phpbench run --revs=2 --iterations=2 --report=aggregate',
filesToCheck : [ 'phpbench.json' ],
toolType : ToolType.CODE_CHECK,
},
{
executionType : ToolExecutionType.STATIC,
name : 'Codeception',
command : './vendor/bin/codecept run',
filesToCheck : [ 'codeception.yml.dist', 'codeception.yml' ],
toolType : ToolType.CODE_CHECK,
},
{
executionType : ToolExecutionType.STATIC,
name : 'PHP CS Fixer',
command : './vendor/bin/php-cs-fixer fix -v --diff --dry-run',
filesToCheck : [ '.php-cs-fixer.php', '.php-cs-fixer.dist.php' ],
toolType : ToolType.CODE_CHECK,
},
PHPUnitTool,
InfectionTool,
PhpCodeSnifferTool,
PsalmTool,
ComposerRequireCheckerTool,
PhpBenchTool,
CodeceptionTool,
PhpCsFixerTool,
PHPStanTool,
backwardCompatibilityCheckTool(config),
].filter((tool) => tool !== null) as Tool[];

Expand Down
10 changes: 10 additions & 0 deletions src/tools/codeception.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import {ToolExecutionType} from '../enum/toolExecutionType';
import {ToolType} from '../enum/toolType';

export const CodeceptionTool = {
executionType : ToolExecutionType.STATIC,
name : 'Codeception',
command : './vendor/bin/codecept run',
filesToCheck : [ 'codeception.yml.dist', 'codeception.yml' ],
toolType : ToolType.CODE_CHECK,
};
11 changes: 11 additions & 0 deletions src/tools/codesniffer.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import {ToolType} from '../enum/toolType';
import {ToolExecutionType} from '../enum/toolExecutionType';

export const PhpCodeSnifferTool = {
executionType : ToolExecutionType.STATIC,
name : 'PHPCodeSniffer',
command : './vendor/bin/phpcs -q --report=checkstyle | cs2pr',
filesToCheck : [ 'phpcs.xml', 'phpcs.xml.dist' ],
toolType : ToolType.CODE_CHECK,
lintConfigCommand : 'xmllint --schema vendor/squizlabs/php_codesniffer/phpcs.xsd',
};
10 changes: 10 additions & 0 deletions src/tools/composerRequireChecker.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import {ToolType} from '../enum/toolType';
import {ToolExecutionType} from '../enum/toolExecutionType';

export const ComposerRequireCheckerTool = {
executionType : ToolExecutionType.STATIC,
name : 'Composer Require Checker',
command : './vendor/bin/composer-require-checker check --config-file=composer-require-checker.json -n -v composer.json',
filesToCheck : [ 'composer-require-checker.json' ],
toolType : ToolType.CODE_CHECK,
};
22 changes: 22 additions & 0 deletions src/tools/infection.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import {ToolType} from '../enum/toolType';
import {ComposerJson} from '../config/composer';
import parseJsonFile from '../json';
import {ToolExecutionType} from '../enum/toolExecutionType';

export const InfectionTool = {
executionType : ToolExecutionType.STATIC,
name : 'Infection',
command : detectInfectionCommand(),
filesToCheck : [ 'infection.json', 'infection.json.dist' ],
toolType : ToolType.CODE_CHECK,
};

function detectInfectionCommand(): string {
const composerJson: ComposerJson = parseJsonFile('composer.json', true) as ComposerJson;

if (composerJson['require-dev']?.['roave/infection-static-analysis-plugin'] !== undefined) {
return './vendor/bin/roave-infection-static-analysis-plugin';
}

return './vendor/bin/infection';
}
10 changes: 10 additions & 0 deletions src/tools/phpCsFixer.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import {ToolType} from '../enum/toolType';
import {ToolExecutionType} from '../enum/toolExecutionType';

export const PhpCsFixerTool = {
executionType : ToolExecutionType.STATIC,
name : 'PHP CS Fixer',
command : './vendor/bin/php-cs-fixer fix -v --diff --dry-run',
filesToCheck : [ '.php-cs-fixer.php', '.php-cs-fixer.dist.php' ],
toolType : ToolType.CODE_CHECK,
};
10 changes: 10 additions & 0 deletions src/tools/phpbench.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import {ToolType} from '../enum/toolType';
import {ToolExecutionType} from '../enum/toolExecutionType';

export const PhpBenchTool = {
executionType : ToolExecutionType.STATIC,
name : 'PHPBench',
command : './vendor/bin/phpbench run --revs=2 --iterations=2 --report=aggregate',
filesToCheck : [ 'phpbench.json' ],
toolType : ToolType.CODE_CHECK,
};
10 changes: 10 additions & 0 deletions src/tools/phpstan.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import {ToolType} from '../enum/toolType';
import {ToolExecutionType} from '../enum/toolExecutionType';

export const PHPStanTool = {
executionType : ToolExecutionType.STATIC,
name : 'PHPStan',
command : './vendor/bin/phpstan analyse --error-format=github --ansi --no-progress',
filesToCheck : [ 'phpstan.neon', 'phpstan.neon.dist', 'phpstan.dist.neon' ],
toolType : ToolType.CODE_CHECK,
};
11 changes: 11 additions & 0 deletions src/tools/phpunit.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import {ToolType} from '../enum/toolType';
import {ToolExecutionType} from '../enum/toolExecutionType';

export const PHPUnitTool = {
executionType : ToolExecutionType.MATRIX,
name : 'PHPUnit',
command : './vendor/bin/phpunit',
filesToCheck : [ 'phpunit.xml.dist', 'phpunit.xml' ],
toolType : ToolType.CODE_CHECK,
lintConfigCommand : 'xmllint --schema vendor/phpunit/phpunit/phpunit.xsd',
};
11 changes: 11 additions & 0 deletions src/tools/psalm.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import {ToolType} from '../enum/toolType';
import {ToolExecutionType} from '../enum/toolExecutionType';

export const PsalmTool = {
executionType : ToolExecutionType.STATIC,
name : 'Psalm',
command : './vendor/bin/psalm --shepherd --stats --output-format=github --no-cache',
filesToCheck : [ 'psalm.xml.dist', 'psalm.xml' ],
toolType : ToolType.CODE_CHECK,
lintConfigCommand : 'xmllint --schema vendor/vimeo/psalm/config.xsd',
};
3 changes: 3 additions & 0 deletions tests/code-check-phpstan-alternative-dist/.laminas-ci.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"stablePHP": "8.3"
}
Loading

0 comments on commit a9db0d3

Please sign in to comment.