mirror of https://github.com/FriendsOfTYPO3/tea.git synced 2025-03-15 14:03:50 +01:00

Compare commits

...

9 commits

Author SHA1 Message Date
Oliver Klee
b7fbf21fc3 [TASK] Drop the PHP_CodeSniffer configuration file ()
Followup to 
2025-02-03 17:37:01 +01:00
Karsten Nowak
25dd6694e8 [DOCS] Extend PHIVE section in docs ()
Fixes 
Fixes 
2025-02-03 17:37:01 +01:00
fc16c2ccde [TASK] Raise PHP Language Level to 8.1 ()
Resolves: 
2025-02-03 17:37:01 +01:00
Oliver Klee
e47753ecab [FEATURE] Add support for PHP 8.4 ()
Comment-out GitHub Action jobs that fail with PHP 8.4 due to
incompatible dependencies.
2025-02-03 17:37:01 +01:00
Oliver Klee
0384464033 [TASK] Drop support for Symfony 5.x ()
As we now require TYPO3 >= 12LTS, and as that version requires
Symfony >= 6.x, we now can safely drop support for Symfony 5.x
2025-02-03 17:37:01 +01:00
dependabot[bot]
3fd97a95fc [Dependabot] Update helmich/typo3-typoscript-lint requirement from 3.1.1 || 3.2.1 to ^3.3.0 ()
---
updated-dependencies:
- dependency-name: helmich/typo3-typoscript-lint
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-03 17:37:01 +01:00
Eike Starkmann
29a08dd71b [FEATURE] Switch the PHPUnit tests to paratest ()
Fixes 
2025-02-03 17:37:00 +01:00
Eike Starkmann
8a703d1947 [TASK] ok we still need parallel here
Part of 
2025-02-03 17:22:06 +01:00
Eike Starkmann
a308257d74 [TASK] remove no longer needed php-ex commands and PHP_INI_SCAN_DIR
Part of , 
2025-02-03 17:17:16 +01:00
18 changed files with 108 additions and 184 deletions

View file

@ -44,6 +44,7 @@ jobs:
- "8.1"
- "8.2"
- "8.3"
- "8.4"
code-quality:
name: "Code quality checks"
runs-on: ubuntu-24.04
@ -174,6 +175,12 @@ jobs:
- typo3-version: "^12.4"
php-version: "8.3"
composer-dependencies: highest
- typo3-version: "^12.4"
php-version: "8.4"
composer-dependencies: lowest
- typo3-version: "^12.4"
php-version: "8.4"
composer-dependencies: highest
functional-tests:
name: "Functional tests"
runs-on: ubuntu-24.04
@ -251,6 +258,12 @@ jobs:
- typo3-version: "^12.4"
php-version: "8.3"
composer-dependencies: highest
# - typo3-version: "^12.4"
# php-version: "8.4"
# composer-dependencies: lowest
- typo3-version: "^12.4"
php-version: "8.4"
composer-dependencies: highest
shellcheck:
name: Check shell scripts
runs-on: ubuntu-24.04

View file

@ -3,10 +3,3 @@
[[ ! -e /.dockerenv ]] && exit 0
set -xe
apk add parallel
apk add icu-dev
docker-php-ext-configure intl
docker-php-ext-install intl
docker-php-ext-enable intl
docker-php-ext-install pdo_mysql mysqli

View file

@ -20,6 +20,8 @@ include:
- '/.gitlab/pipeline/jobs/func-v12-php8.2-lowest.yml'
- '/.gitlab/pipeline/jobs/func-v12-php8.3-highest.yml'
- '/.gitlab/pipeline/jobs/func-v12-php8.3-lowest.yml'
- '/.gitlab/pipeline/jobs/func-v12-php8.4-highest.yml'
- '/.gitlab/pipeline/jobs/func-v12-php8.4-lowest.yml'
- '/.gitlab/pipeline/jobs/javascript-lint.yml'
- '/.gitlab/pipeline/jobs/json-lint.yml'
- '/.gitlab/pipeline/jobs/php-cs-fixer.yml'
@ -34,6 +36,7 @@ include:
- '/.gitlab/pipeline/jobs/unit-v12-php8.2-lowest.yml'
- '/.gitlab/pipeline/jobs/unit-v12-php8.3-highest.yml'
- '/.gitlab/pipeline/jobs/unit-v12-php8.3-lowest.yml'
- '/.gitlab/pipeline/jobs/unit-v12-php8.4-highest.yml'
- '/.gitlab/pipeline/jobs/xliff-lint.yml'
- '/.gitlab/pipeline/jobs/yaml-lint.yml'
- template: Security/Secret-Detection.gitlab-ci.yml

View file

@ -2,7 +2,5 @@
image: ghcr.io/typo3/core-testing-php83:latest
before_script:
- bash .gitlab/build/docker_install.sh > /dev/null
variables:
PHP_INI_SCAN_DIR: "/usr/local/etc/php/"
script:
- cp $CI_PROJECT_DIR/.gitlab/pipeline/ci/php.ini /usr/local/etc/php/conf.d/z_php.ini; # copy php.ini into image

View file

@ -0,0 +1,14 @@
func-v12-php8.4-highest:
extends: .default
image: ghcr.io/typo3/core-testing-php84:latest
services:
- mariadb:10
stage: test
needs:
- build-composer-dependencies
- php-lint-php8.4
script:
- echo "Job ${CI_JOB_NAME}"
- composer require --no-ansi --no-interaction --no-progress --no-install typo3/cms-core:"^12.4"
- composer update --no-ansi --no-interaction --no-progress --with-dependencies
- composer ci:tests:functional

View file

@ -0,0 +1,14 @@
func-v12-php8.4-lowest:
extends: .default
image: ghcr.io/typo3/core-testing-php84:latest
services:
- mariadb:10
stage: test
needs:
- build-composer-dependencies
- php-lint-php8.4
script:
- echo "Job ${CI_JOB_NAME}"
- composer require --no-ansi --no-interaction --no-progress --no-install typo3/cms-core:"^12.4"
- composer update --no-ansi --no-interaction --no-progress --with-dependencies --prefer-lowest
- composer ci:tests:functional

View file

@ -0,0 +1,7 @@
php-lint-php8.4:
extends: .composer-update
image: ghcr.io/typo3/core-testing-php84:latest
stage: lint
needs: [ ]
script:
- composer ci:php:lint

View file

@ -0,0 +1,11 @@
unit-v12-php8.4-highest:
extends: .default
image: ghcr.io/typo3/core-testing-php84:latest
stage: test
needs:
- build-composer-dependencies
- php-lint-php8.4
script:
- echo "Job ${CI_JOB_NAME}"
- composer require --no-progress typo3/cms-core:"^12.4"
- composer ci:tests:unit

View file

@ -555,7 +555,7 @@ case ${TEST_SUITE} in
;;
functional)
[ -z "${TEST_FILE}" ] && TEST_FILE="Tests/Functional"
COMMAND=".Build/bin/phpunit -c Build/phpunit/FunctionalTests.xml --exclude-group not-${DBMS} ${EXTRA_TEST_OPTIONS} ${TEST_FILE}"
COMMAND=".Build/bin/paratest -c Build/phpunit/FunctionalTests.xml --exclude-group not-${DBMS} ${EXTRA_TEST_OPTIONS} ${TEST_FILE}"
case ${DBMS} in
mariadb)
echo "Using driver: ${DATABASE_DRIVER}"
@ -642,12 +642,12 @@ case ${TEST_SUITE} in
;;
unit)
[ -z "${TEST_FILE}" ] && TEST_FILE="Tests/Unit"
${CONTAINER_BIN} run ${CONTAINER_COMMON_PARAMS} --name unit-${SUFFIX} ${XDEBUG_MODE} -e XDEBUG_CONFIG="${XDEBUG_CONFIG}" ${IMAGE_PHP} .Build/bin/phpunit -c Build/phpunit/UnitTests.xml ${EXTRA_TEST_OPTIONS} ${TEST_FILE}
${CONTAINER_BIN} run ${CONTAINER_COMMON_PARAMS} --name unit-${SUFFIX} ${XDEBUG_MODE} -e XDEBUG_CONFIG="${XDEBUG_CONFIG}" ${IMAGE_PHP} .Build/bin/paratest -c Build/phpunit/UnitTests.xml ${EXTRA_TEST_OPTIONS} ${TEST_FILE}
SUITE_EXIT_CODE=$?
;;
unitRandom)
[ -z "${TEST_FILE}" ] && TEST_FILE="Tests/Unit"
${CONTAINER_BIN} run ${CONTAINER_COMMON_PARAMS} --name unit-random-${SUFFIX} ${XDEBUG_MODE} -e XDEBUG_CONFIG="${XDEBUG_CONFIG}" ${IMAGE_PHP} .Build/bin/phpunit -c Build/phpunit/UnitTests.xml --order-by=random ${EXTRA_TEST_OPTIONS} ${PHPUNIT_RANDOM} ${TEST_FILE}
${CONTAINER_BIN} run ${CONTAINER_COMMON_PARAMS} --name unit-random-${SUFFIX} ${XDEBUG_MODE} -e XDEBUG_CONFIG="${XDEBUG_CONFIG}" ${IMAGE_PHP} .Build/bin/paratest -c Build/phpunit/UnitTests.xml --order-by=random ${EXTRA_TEST_OPTIONS} ${PHPUNIT_RANDOM} ${TEST_FILE}
SUITE_EXIT_CODE=$?
;;
update)

View file

@ -1,128 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ruleset name="phpList Coding Standard">
<description>
This standard requires PHP_CodeSniffer >= 3.5.3.
</description>
<arg name="colors"/>
<arg name="extensions" value="php"/>
<!--The complete PSR-12 rule set-->
<rule ref="PSR12"/>
<!-- Arrays -->
<rule ref="Generic.Arrays.DisallowLongArraySyntax"/>
<rule ref="Squiz.Arrays.ArrayBracketSpacing"/>
<!-- Classes -->
<rule ref="Generic.Classes.DuplicateClassName"/>
<rule ref="PSR1.Classes.ClassDeclaration"/>
<rule ref="Squiz.Classes.ClassFileName"/>
<rule ref="Squiz.Classes.DuplicateProperty"/>
<rule ref="Squiz.Classes.LowercaseClassKeywords"/>
<rule ref="Squiz.Classes.SelfMemberReference"/>
<!-- Code analysis -->
<rule ref="Generic.CodeAnalysis.AssignmentInCondition"/>
<rule ref="Generic.CodeAnalysis.EmptyStatement"/>
<rule ref="Generic.CodeAnalysis.ForLoopShouldBeWhileLoop"/>
<rule ref="Generic.CodeAnalysis.ForLoopWithTestFunctionCall"/>
<rule ref="Generic.CodeAnalysis.JumbledIncrementer"/>
<rule ref="Generic.CodeAnalysis.UnconditionalIfStatement"/>
<rule ref="Generic.CodeAnalysis.UnnecessaryFinalModifier"/>
<rule ref="Generic.CodeAnalysis.UselessOverridingMethod"/>
<!-- Commenting -->
<rule ref="Generic.Commenting.Fixme"/>
<rule ref="Generic.Commenting.Todo"/>
<rule ref="PEAR.Commenting.InlineComment"/>
<rule ref="Squiz.Commenting.DocCommentAlignment"/>
<rule ref="Squiz.Commenting.EmptyCatchComment"/>
<rule ref="Squiz.Commenting.FunctionCommentThrowTag"/>
<rule ref="Squiz.Commenting.PostStatementComment"/>
<!-- Control structures -->
<rule ref="PEAR.ControlStructures.ControlSignature"/>
<!-- Debug -->
<rule ref="Generic.Debug.ClosureLinter"/>
<!-- Files -->
<rule ref="Generic.Files.LineLength">
<exclude-pattern>Configuration/TCA/</exclude-pattern>
</rule>
<rule ref="Generic.Files.OneClassPerFile"/>
<rule ref="Generic.Files.OneInterfacePerFile"/>
<rule ref="Generic.Files.OneObjectStructurePerFile"/>
<rule ref="Zend.Files.ClosingTag"/>
<!-- Formatting -->
<rule ref="PEAR.Formatting.MultiLineAssignment"/>
<!-- Functions -->
<rule ref="Generic.Functions.CallTimePassByReference"/>
<rule ref="Squiz.Functions.FunctionDuplicateArgument"/>
<rule ref="Squiz.Functions.GlobalFunction"/>
<!-- Methods -->
<rule ref="PSR2.Methods.MethodDeclaration.Underscore"/>
<!-- Metrics -->
<rule ref="Generic.Metrics.CyclomaticComplexity"/>
<rule ref="Generic.Metrics.NestingLevel"/>
<!-- Naming conventions -->
<rule ref="Generic.NamingConventions.ConstructorName"/>
<rule ref="PEAR.NamingConventions.ValidClassName"/>
<!-- Objects -->
<rule ref="Squiz.Objects.ObjectMemberComma"/>
<!-- Operators -->
<rule ref="Squiz.Operators.IncrementDecrementUsage"/>
<rule ref="Squiz.Operators.ValidLogicalOperators"/>
<!-- PHP -->
<rule ref="Generic.PHP.BacktickOperator"/>
<rule ref="Generic.PHP.CharacterBeforePHPOpeningTag"/>
<rule ref="Generic.PHP.DeprecatedFunctions"/>
<rule ref="Generic.PHP.DisallowAlternativePHPTags"/>
<rule ref="Generic.PHP.DisallowShortOpenTag"/>
<rule ref="Generic.PHP.DiscourageGoto"/>
<rule ref="Generic.PHP.ForbiddenFunctions"/>
<rule ref="Generic.PHP.NoSilencedErrors"/>
<rule ref="Squiz.PHP.CommentedOutCode">
<properties>
<property name="maxPercentage" value="70"/>
</properties>
</rule>
<rule ref="Squiz.PHP.DisallowMultipleAssignments"/>
<rule ref="Squiz.PHP.DisallowSizeFunctionsInLoops"/>
<rule ref="Squiz.PHP.DiscouragedFunctions"/>
<rule ref="Squiz.PHP.Eval"/>
<rule ref="Squiz.PHP.GlobalKeyword"/>
<rule ref="Squiz.PHP.Heredoc"/>
<rule ref="Squiz.PHP.InnerFunctions"/>
<rule ref="Squiz.PHP.LowercasePHPFunctions"/>
<rule ref="Squiz.PHP.NonExecutableCode"/>
<!-- Scope -->
<rule ref="Squiz.Scope.MemberVarScope"/>
<rule ref="Squiz.Scope.StaticThisUsage"/>
<!--Strings-->
<rule ref="Squiz.Strings.DoubleQuoteUsage"/>
<!-- Whitespace -->
<rule ref="PEAR.WhiteSpace.ObjectOperatorIndent"/>
<rule ref="PEAR.WhiteSpace.ScopeClosingBrace"/>
<rule ref="Squiz.WhiteSpace.CastSpacing"/>
<rule ref="Squiz.WhiteSpace.LogicalOperatorSpacing"/>
<rule ref="Squiz.WhiteSpace.OperatorSpacing">
<properties>
<property name="ignoreNewlines" value="true" />
</properties>
</rule>
<rule ref="Squiz.WhiteSpace.PropertyLabelSpacing"/>
<rule ref="Squiz.WhiteSpace.SemicolonSpacing"/>
</ruleset>

View file

@ -6,6 +6,7 @@ This project adheres to [Semantic Versioning](https://semver.org/).
## x.y.z
### Added
- Add support for PHP 8.4 (#1536)
- Add support for PostgreSQL 16 (#1271)
### Changed

View file

@ -17,15 +17,10 @@ use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
*/
class FrontEndEditorController extends ActionController
{
private Context $context;
private TeaRepository $teaRepository;
public function __construct(Context $context, TeaRepository $teaRepository)
{
$this->context = $context;
$this->teaRepository = $teaRepository;
}
public function __construct(
private readonly Context $context,
private readonly TeaRepository $teaRepository,
) {}
public function indexAction(): ResponseInterface
{
@ -48,9 +43,7 @@ class FrontEndEditorController extends ActionController
return $userUid;
}
/**
* @Extbase\IgnoreValidation("tea")
*/
#[Extbase\IgnoreValidation(['argumentName' => 'tea'])]
public function editAction(Tea $tea): ResponseInterface
{
$this->checkIfUserIsOwner($tea);
@ -79,9 +72,7 @@ class FrontEndEditorController extends ActionController
return $this->redirect('index');
}
/**
* @Extbase\IgnoreValidation("tea")
*/
#[Extbase\IgnoreValidation(['argumentName' => 'tea'])]
public function newAction(?Tea $tea = null): ResponseInterface
{
// Note: We are using `makeInstance` here instead of `new` to allow for XCLASSing.
@ -100,9 +91,7 @@ class FrontEndEditorController extends ActionController
return $this->redirect('index');
}
/**
* @Extbase\IgnoreValidation("tea")
*/
#[Extbase\IgnoreValidation(['argumentName' => 'tea'])]
public function deleteAction(Tea $tea): ResponseInterface
{
$this->checkIfUserIsOwner($tea);

View file

@ -14,12 +14,9 @@ use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
*/
class TeaController extends ActionController
{
private TeaRepository $teaRepository;
public function __construct(TeaRepository $teaRepository)
{
$this->teaRepository = $teaRepository;
}
public function __construct(
private readonly TeaRepository $teaRepository,
) {}
public function indexAction(): ResponseInterface
{

View file

@ -14,22 +14,18 @@ use TYPO3\CMS\Extbase\Persistence\Generic\LazyLoadingProxy;
*/
class Tea extends AbstractEntity
{
/**
* @Extbase\Validate("StringLength", options={"maximum": 255})
* @Extbase\Validate("NotEmpty")
*/
#[Extbase\Validate(['validator' => 'StringLength', 'options' => ['maximum' => 255]])]
#[Extbase\Validate(['validator' => 'NotEmpty'])]
protected string $title = '';
/**
* @Extbase\Validate("StringLength", options={"maximum": 2000})
*/
#[Extbase\Validate(['validator' => 'StringLength', 'options' => ['maximum' => 2000]])]
protected string $description = '';
/**
* @var FileReference|null
* @phpstan-var FileReference|LazyLoadingProxy|null
* @Extbase\ORM\Lazy
*/
#[Extbase\ORM\Lazy]
protected $image;
// Note: We cannot use `@var` for the more specific type annotation here as this confuses the Extbase type mapper.

View file

@ -16,3 +16,18 @@ install or upgrade some tool as the tool's dependencies conflict with the
dependencies on another library). It also allows running versions of tools
that require a PHP version that is higher than the lowest allowed PHP version
for this project.
.. _using-phive-to-install-phpcov:
Using PHIVE to install `phpunit/phpcov`
=======================================
To support php version 7.4 and 8.2 in the `tea` extension, we are using PHIVE
to install `phpunit/phpcov`.
We need `phpunit/phpcov` in version 10 to support php 8.2.
Our minimum php version 7.4 would prevent the installation with composer.
.. note::
To find more information about install and usage,
please check out the documentation of `PHIVE <https://phar.io>`__.

View file

@ -39,7 +39,7 @@
"docs": "https://docs.typo3.org/p/ttn/tea/main/en-us/"
},
"require": {
"php": "~8.1.0 || ~8.2.0 || ~8.3.0",
"php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
"psr/http-message": "^1.0.1",
"typo3/cms-core": "^12.4.26",
"typo3/cms-extbase": "^12.4.26",
@ -47,9 +47,10 @@
"typo3/cms-frontend": "^12.4.26"
},
"require-dev": {
"brianium/paratest": "6.11.1",
"ergebnis/composer-normalize": "2.45.0",
"friendsofphp/php-cs-fixer": "3.68.5",
"helmich/typo3-typoscript-lint": "3.1.1 || 3.2.1",
"helmich/typo3-typoscript-lint": "^3.3.0",
"icanhazstring/composer-unused": "0.8.11",
"php-parallel-lint/php-parallel-lint": "1.4.0",
"phpmd/phpmd": "2.15.0",
@ -63,9 +64,9 @@
"spaze/phpstan-disallowed-calls": "4.2.1",
"ssch/typo3-rector": "2.12.2",
"ssch/typo3-rector-testing-framework": "2.0.1",
"symfony/console": "5.4.47 || 6.4.17 || 7.2.1",
"symfony/translation": "5.4.45 || 6.4.13 || 7.2.2",
"symfony/yaml": "5.4.45 || 6.4.18 || 7.2.3",
"symfony/console": "6.4.17 || 7.2.1",
"symfony/translation": "6.4.13 || 7.2.2",
"symfony/yaml": "6.4.18 || 7.2.3",
"tomasvotruba/cognitive-complexity": "0.2.3",
"tomasvotruba/type-coverage": "1.0.0",
"typo3/cms-fluid-styled-content": "^12.4.26",
@ -126,7 +127,7 @@
"ci:coverage:functional": [
"@ci:tests:create-directories",
"@coverage:create-directories",
"phpunit -c Build/phpunit/FunctionalTests.xml --whitelist Classes --coverage-php=build/coverage/functional.cov Tests/Functional"
"paratest -c Build/phpunit/FunctionalTests.xml --whitelist Classes --coverage-php=build/coverage/functional.cov Tests/Functional"
],
"ci:coverage:merge": [
"@coverage:create-directories",
@ -134,7 +135,7 @@
],
"ci:coverage:unit": [
"@coverage:create-directories",
"phpunit -c Build/phpunit/UnitTests.xml --whitelist Classes --coverage-php=build/coverage/unit.cov Tests/Unit"
"paratest -c Build/phpunit/UnitTests.xml --whitelist Classes --coverage-php=build/coverage/unit.cov Tests/Unit"
],
"ci:json:lint": "find . ! -path '*/.cache/*' ! -path '*/.Build/*' ! -path '*/node_modules/*' -name '*.json' | xargs -r php .Build/bin/jsonlint -q",
"ci:php": [
@ -162,9 +163,9 @@
"ci:tests:create-directories": "mkdir -p .Build/public/typo3temp/var/tests",
"ci:tests:functional": [
"@ci:tests:create-directories",
"find 'Tests/Functional' -wholename '*Test.php' | parallel --gnu 'echo; echo \\\"Running functional test suite {}\\\"; .Build/bin/phpunit -c Build/phpunit/FunctionalTests.xml {}';"
"paratest -c Build/phpunit/FunctionalTests.xml Tests/Functional"
],
"ci:tests:unit": "phpunit -c Build/phpunit/UnitTests.xml Tests/Unit",
"ci:tests:unit": "paratest -c Build/phpunit/UnitTests.xml Tests/Unit",
"ci:typoscript:lint": "typoscript-lint -c Configuration/TsLint.yml --ansi -n --fail-on-warnings -vvv Configuration/TypoScript",
"ci:xliff:lint": "php Build/xliff/xliff-lint lint:xliff Resources/Private/Language",
"ci:yaml:lint": "find . ! -path '*.Build/*' ! -path '*node_modules/*' \\( -name '*.yaml' -o -name '*.yml' \\) | xargs -r php ./.Build/bin/yaml-lint",

View file

@ -7,7 +7,7 @@ $EM_CONF[$_EXTKEY] = [
'category' => 'example',
'constraints' => [
'depends' => [
'php' => '8.1.0-8.3.99',
'php' => '8.1.0-8.4.99',
'typo3' => '12.4.26-12.4.99',
'extbase' => '12.4.26-12.4.99',
'fluid' => '12.4.26-12.4.99',

View file

@ -26,7 +26,7 @@ return RectorConfig::configure()
__DIR__ . '/ext_emconf.php',
__DIR__ . '/ext_localconf.php',
])
->withPhpVersion(PhpVersion::PHP_74)
->withPhpVersion(PhpVersion::PHP_81)
->withPhpSets(
true
)
@ -94,7 +94,7 @@ return RectorConfig::configure()
])
->withImportNames(true, true, false)
->withConfiguredRule(ExtEmConfRector::class, [
ExtEmConfRector::PHP_VERSION_CONSTRAINT => '8.1.0-8.3.99',
ExtEmConfRector::PHP_VERSION_CONSTRAINT => '8.1.0-8.4.99',
ExtEmConfRector::TYPO3_VERSION_CONSTRAINT => '12.4.26-12.4.99',
ExtEmConfRector::ADDITIONAL_VALUES_TO_BE_REMOVED => [],
])