diff --git a/.github/ISSUE_TEMPLATE/technical_feedback.md b/.github/ISSUE_TEMPLATE/technical_feedback.md deleted file mode 100644 index ae28863..0000000 --- a/.github/ISSUE_TEMPLATE/technical_feedback.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -name: Technical Feedback -about: Provide technical feedback to help us improve -title: "Technical Feedback: Please add a speaking title" -labels: 'feedback' -assignees: '' - ---- - -**Describe the area** -A short introduction to the area, e.g. a decision regarding file formats, location, etc. - -**Feedback** -Your feedback, e.g. what would you do instead, what are pros and cons of the different ways in doing things. diff --git a/.github/dependabot.yml b/.github/dependabot.yml index c39d0fe..7db4bfe 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -9,7 +9,7 @@ updates: # adjust this number according to your own milestones if used. milestone: 12 commit-message: - prefix: "[TASK] " + prefix: "[TASK][Dependabot] " - package-ecosystem: "composer" directory: "/" @@ -30,7 +30,7 @@ updates: # adjust this number according to your own milestones if used. milestone: 12 commit-message: - prefix: "[TASK] " + prefix: "[TASK][Dependabot] " - package-ecosystem: "npm" directory: "/" @@ -40,4 +40,4 @@ updates: # adjust this number according to your own milestones if used. milestone: 12 commit-message: - prefix: "[TASK] " + prefix: "[TASK][Dependabot] " diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4234a93..e59e02a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -83,6 +83,7 @@ jobs: - "json:lint" - "php:cs-fixer" - "php:mess" + - "php:rector" - "php:sniff" - "php:stan" - "typoscript:lint" @@ -326,6 +327,7 @@ jobs: documentation: name: Documentation runs-on: ubuntu-24.04 + timeout-minutes: 2 steps: - name: Checkout uses: actions/checkout@v4 diff --git a/.gitlab/pipeline/.gitlab-ci.yml b/.gitlab/pipeline/.gitlab-ci.yml index 711eebe..ee51fac 100644 --- a/.gitlab/pipeline/.gitlab-ci.yml +++ b/.gitlab/pipeline/.gitlab-ci.yml @@ -8,8 +8,8 @@ stages: include: - '/.gitlab/pipeline/jobs/.composer-update.yml' - - '/.gitlab/pipeline/jobs/.default.yml' - '/.gitlab/pipeline/jobs/.default-frontend.yml' + - '/.gitlab/pipeline/jobs/.default.yml' - '/.gitlab/pipeline/jobs/.variables.yml' - '/.gitlab/pipeline/jobs/build-composer-dependencies.yml' - '/.gitlab/pipeline/jobs/composer-normalize.yml' @@ -20,21 +20,22 @@ include: - '/.gitlab/pipeline/jobs/func-php8.0-v11-lowest.yml' - '/.gitlab/pipeline/jobs/func-php8.1-v11-highest.yml' - '/.gitlab/pipeline/jobs/func-php8.1-v11-lowest.yml' - - '/.gitlab/pipeline/jobs/func-php8.2-v11-highest.yml' - - '/.gitlab/pipeline/jobs/func-php8.2-v11-lowest.yml' - '/.gitlab/pipeline/jobs/func-php8.1-v12-highest.yml' - '/.gitlab/pipeline/jobs/func-php8.1-v12-lowest.yml' + - '/.gitlab/pipeline/jobs/func-php8.2-v11-highest.yml' + - '/.gitlab/pipeline/jobs/func-php8.2-v11-lowest.yml' - '/.gitlab/pipeline/jobs/func-php8.2-v12-highest.yml' - '/.gitlab/pipeline/jobs/func-php8.2-v12-lowest.yml' - '/.gitlab/pipeline/jobs/javascript-lint.yml' - '/.gitlab/pipeline/jobs/json-lint.yml' + - '/.gitlab/pipeline/jobs/php-cs-fixer.yml' - '/.gitlab/pipeline/jobs/php-lint-php7.4.yml' - '/.gitlab/pipeline/jobs/php-lint-php8.0.yml' - '/.gitlab/pipeline/jobs/php-lint-php8.1.yml' - '/.gitlab/pipeline/jobs/php-lint-php8.2.yml' - '/.gitlab/pipeline/jobs/php-lint-php8.3.yml' - '/.gitlab/pipeline/jobs/phpcs.yml' - - '/.gitlab/pipeline/jobs/php-cs-fixer.yml' + - '/.gitlab/pipeline/jobs/rector.yml' - '/.gitlab/pipeline/jobs/typoscript-lint.yml' - '/.gitlab/pipeline/jobs/unit-php7.4-v11-highest.yml' - '/.gitlab/pipeline/jobs/unit-php7.4-v11-lowest.yml' @@ -42,14 +43,14 @@ include: - '/.gitlab/pipeline/jobs/unit-php8.0-v11-lowest.yml' - '/.gitlab/pipeline/jobs/unit-php8.1-v11-highest.yml' - '/.gitlab/pipeline/jobs/unit-php8.1-v11-lowest.yml' - - '/.gitlab/pipeline/jobs/unit-php8.2-v11-highest.yml' - - '/.gitlab/pipeline/jobs/unit-php8.2-v11-lowest.yml' - - '/.gitlab/pipeline/jobs/unit-php8.3-v11-highest.yml' - - '/.gitlab/pipeline/jobs/unit-php8.3-v11-lowest.yml' - '/.gitlab/pipeline/jobs/unit-php8.1-v12-highest.yml' - '/.gitlab/pipeline/jobs/unit-php8.1-v12-lowest.yml' + - '/.gitlab/pipeline/jobs/unit-php8.2-v11-highest.yml' + - '/.gitlab/pipeline/jobs/unit-php8.2-v11-lowest.yml' - '/.gitlab/pipeline/jobs/unit-php8.2-v12-highest.yml' - '/.gitlab/pipeline/jobs/unit-php8.2-v12-lowest.yml' + - '/.gitlab/pipeline/jobs/unit-php8.3-v11-highest.yml' + - '/.gitlab/pipeline/jobs/unit-php8.3-v11-lowest.yml' - '/.gitlab/pipeline/jobs/unit-php8.3-v12-highest.yml' - '/.gitlab/pipeline/jobs/unit-php8.3-v12-lowest.yml' - '/.gitlab/pipeline/jobs/xliff-lint.yml' diff --git a/.gitlab/pipeline/ci/php.ini b/.gitlab/pipeline/ci/php.ini new file mode 100644 index 0000000..74da89a --- /dev/null +++ b/.gitlab/pipeline/ci/php.ini @@ -0,0 +1,187 @@ +[PHP] +engine = On +short_open_tag = Off +precision = 14 +output_buffering = 4096 +zlib.output_compression = Off +implicit_flush = Off +unserialize_callback_func = +serialize_precision = -1 +disable_functions = +disable_classes = +zend.enable_gc = On +expose_php = Off +; Resource Limits ; +max_execution_time = 600 +request_terminate_timeout = 0 +max_input_time = -1 +;max_input_nesting_level = 64 +max_input_vars = 5000 +memory_limit = -1 +; Error handling and logging ; +error_reporting = E_ALL +display_errors = On +display_startup_errors = On +log_errors = On +log_errors_max_len = 1024 +ignore_repeated_errors = Off +ignore_repeated_source = Off +report_memleaks = On +;xmlrpc_errors = 0 +;xmlrpc_error_number = 0 +html_errors = On +; Data Handling ; +variables_order = "EGPCS" +request_order = "GP" +register_argc_argv = Off +auto_globals_jit = On +post_max_size = 100M +auto_prepend_file = +auto_append_file = +default_mimetype = "text/html" +default_charset = "UTF-8" +; Paths and Directories ; +doc_root = +user_dir = +enable_dl = Off +cgi.fix_pathinfo=0 +; File Uploads ; +file_uploads = On +upload_max_filesize = 100M +max_file_uploads = 20 +; Fopen wrappers ; +allow_url_fopen = On +allow_url_include = Off +default_socket_timeout = 60 +;auto_detect_line_endings = Off +; Dynamic Extensions ; + +[CLI Server] +cli_server.color = On + +[Date] +date.timezone = UTC + +[Pdo_mysql] +pdo_mysql.cache_size = 2000 +pdo_mysql.default_socket= + +[SQL] +sql.safe_mode = Off + +[ODBC] +odbc.allow_persistent = On +odbc.check_persistent = On +odbc.max_persistent = -1 +odbc.max_links = -1 +odbc.defaultlrl = 4096 +odbc.defaultbinmode = 1 + +[Interbase] +ibase.allow_persistent = 1 +ibase.max_persistent = -1 +ibase.max_links = -1 +ibase.timestampformat = "%Y-%m-%d %H:%M:%S" +ibase.dateformat = "%Y-%m-%d" +ibase.timeformat = "%H:%M:%S" + +[MySQLi] +mysqli.max_persistent = -1 +mysqli.allow_persistent = On +mysqli.max_links = -1 +mysqli.cache_size = 2000 +mysqli.default_port = 3306 +mysqli.default_socket = +mysqli.default_host = +mysqli.default_user = +mysqli.default_pw = +mysqli.reconnect = Off + +[mysqlnd] +mysqlnd.collect_statistics = On +mysqlnd.collect_memory_statistics = Off + +[PostgreSQL] +pgsql.allow_persistent = On +pgsql.auto_reset_persistent = Off +pgsql.max_persistent = -1 +pgsql.max_links = -1 +pgsql.ignore_notice = 0 +pgsql.log_notice = 0 + +[bcmath] +bcmath.scale = 0 + +[Session] +session.save_handler = files +session.use_strict_mode = 0 +session.use_cookies = 1 +session.use_only_cookies = 1 +session.name = PHPSESSID +session.auto_start = 0 +session.cookie_lifetime = 0 +session.cookie_path = / +session.cookie_domain = +session.cookie_httponly = +session.serialize_handler = php +session.gc_probability = 0 +session.gc_divisor = 1000 +session.gc_maxlifetime = 1440 +session.referer_check = +session.cache_limiter = nocache +session.cache_expire = 180 +session.use_trans_sid = 0 +session.hash_function = 0 +session.hash_bits_per_character = 5 +url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" + +[Assertion] +zend.assertions = -1 + +[Tidy] +tidy.clean_output = Off + +[soap] +soap.wsdl_cache_enabled=1 +soap.wsdl_cache_dir="/tmp" +soap.wsdl_cache_ttl=86400 +soap.wsdl_cache_limit = 5 + + +[ldap] +ldap.max_links = -1 + +[opcache] +opcache.enable=1 +opcache.enable_cli=1 +opcache.memory_consumption=500 +opcache.interned_strings_buffer=16 +opcache.max_accelerated_files=1000000 +;opcache.max_wasted_percentage=5 +;opcache.use_cwd=1 +opcache.validate_timestamps=1 +opcache.revalidate_freq=0 +;opcache.revalidate_path=0 +;opcache.save_comments=1 +opcache.fast_shutdown=1 +;opcache.enable_file_override=0 +;opcache.optimization_level=0xffffffff +;opcache.inherited_hack=1 +;opcache.dups_fix=0 +;opcache.blacklist_filename= +;opcache.max_file_size=0 +;opcache.consistency_checks=0 +;opcache.force_restart_timeout=180 +;opcache.error_log= +;opcache.log_verbosity_level=1 +;opcache.preferred_memory_model= +;opcache.protect_memory=0 +;opcache.restrict_api= +;opcache.mmap_base= +;opcache.file_cache= +;opcache.file_cache_only=0 +;opcache.file_cache_consistency_checks=1 +;opcache.file_cache_fallback=1 +;opcache.huge_code_pages=1 +;opcache.validate_permission=0 +;opcache.validate_root=0 diff --git a/.gitlab/pipeline/jobs/.default.yml b/.gitlab/pipeline/jobs/.default.yml index c54f19c..2396446 100644 --- a/.gitlab/pipeline/jobs/.default.yml +++ b/.gitlab/pipeline/jobs/.default.yml @@ -1,4 +1,8 @@ .default: - image: ghcr.io/sbuerk/demo-core-testing-php83:latest + image: ghcr.io/typo3/core-testing-php83:latest before_script: - bash .gitlab/build/docker_install.sh > /dev/null + variables: + PHP_INI_SCAN_DIR: "/etc/php" + script: + - cp $CI_PROJECT_DIR/.gitlab/pipeline/ci/php.ini /usr/local/etc/php/php.ini; # copy php.ini into image diff --git a/.gitlab/pipeline/jobs/func-php7.4-v11-highest.yml b/.gitlab/pipeline/jobs/func-php7.4-v11-highest.yml index 8ee58cf..68f6353 100644 --- a/.gitlab/pipeline/jobs/func-php7.4-v11-highest.yml +++ b/.gitlab/pipeline/jobs/func-php7.4-v11-highest.yml @@ -1,6 +1,6 @@ func-php7.4-v11-highest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php74:latest + image: ghcr.io/typo3/core-testing-php74:latest services: - mariadb:10 stage: test diff --git a/.gitlab/pipeline/jobs/func-php7.4-v11-lowest.yml b/.gitlab/pipeline/jobs/func-php7.4-v11-lowest.yml index 5d8fc3e..d87b592 100644 --- a/.gitlab/pipeline/jobs/func-php7.4-v11-lowest.yml +++ b/.gitlab/pipeline/jobs/func-php7.4-v11-lowest.yml @@ -1,6 +1,6 @@ func-php7.4-v11-lowest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php74:latest + image: ghcr.io/typo3/core-testing-php74:latest services: - mariadb:10 stage: test diff --git a/.gitlab/pipeline/jobs/func-php8.0-v11-highest.yml b/.gitlab/pipeline/jobs/func-php8.0-v11-highest.yml index 3886a61..4b819fd 100644 --- a/.gitlab/pipeline/jobs/func-php8.0-v11-highest.yml +++ b/.gitlab/pipeline/jobs/func-php8.0-v11-highest.yml @@ -1,6 +1,6 @@ func-php8.0-v11-highest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php80:latest + image: ghcr.io/typo3/core-testing-php80:latest services: - mariadb:10 stage: test diff --git a/.gitlab/pipeline/jobs/func-php8.0-v11-lowest.yml b/.gitlab/pipeline/jobs/func-php8.0-v11-lowest.yml index 5e42d76..14b0571 100644 --- a/.gitlab/pipeline/jobs/func-php8.0-v11-lowest.yml +++ b/.gitlab/pipeline/jobs/func-php8.0-v11-lowest.yml @@ -1,6 +1,6 @@ func-php8.0-v11-lowest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php80:latest + image: ghcr.io/typo3/core-testing-php80:latest services: - mariadb:10 stage: test diff --git a/.gitlab/pipeline/jobs/func-php8.1-v11-highest.yml b/.gitlab/pipeline/jobs/func-php8.1-v11-highest.yml index 6b22539..ca7bd93 100644 --- a/.gitlab/pipeline/jobs/func-php8.1-v11-highest.yml +++ b/.gitlab/pipeline/jobs/func-php8.1-v11-highest.yml @@ -1,6 +1,6 @@ func-php8.1-v11-highest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php81:latest + image: ghcr.io/typo3/core-testing-php81:latest services: - mariadb:10 stage: test diff --git a/.gitlab/pipeline/jobs/func-php8.1-v11-lowest.yml b/.gitlab/pipeline/jobs/func-php8.1-v11-lowest.yml index 727c06e..eab6293 100644 --- a/.gitlab/pipeline/jobs/func-php8.1-v11-lowest.yml +++ b/.gitlab/pipeline/jobs/func-php8.1-v11-lowest.yml @@ -1,6 +1,6 @@ func-php8.1-v11-lowest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php81:latest + image: ghcr.io/typo3/core-testing-php81:latest services: - mariadb:10 stage: test diff --git a/.gitlab/pipeline/jobs/func-php8.1-v12-highest.yml b/.gitlab/pipeline/jobs/func-php8.1-v12-highest.yml index 4d9f1d5..49ced8c 100644 --- a/.gitlab/pipeline/jobs/func-php8.1-v12-highest.yml +++ b/.gitlab/pipeline/jobs/func-php8.1-v12-highest.yml @@ -1,6 +1,6 @@ func-php8.1-v11-highest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php81:latest + image: ghcr.io/typo3/core-testing-php81:latest services: - mariadb:10 stage: test diff --git a/.gitlab/pipeline/jobs/func-php8.1-v12-lowest.yml b/.gitlab/pipeline/jobs/func-php8.1-v12-lowest.yml index 0c9b872..4963df1 100644 --- a/.gitlab/pipeline/jobs/func-php8.1-v12-lowest.yml +++ b/.gitlab/pipeline/jobs/func-php8.1-v12-lowest.yml @@ -1,6 +1,6 @@ func-php8.1-v11-lowest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php81:latest + image: ghcr.io/typo3/core-testing-php81:latest services: - mariadb:10 stage: test diff --git a/.gitlab/pipeline/jobs/func-php8.2-v11-highest.yml b/.gitlab/pipeline/jobs/func-php8.2-v11-highest.yml index 326ac25..c29c224 100644 --- a/.gitlab/pipeline/jobs/func-php8.2-v11-highest.yml +++ b/.gitlab/pipeline/jobs/func-php8.2-v11-highest.yml @@ -1,6 +1,6 @@ func-php8.2-v11-highest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php82:latest + image: ghcr.io/typo3/core-testing-php82:latest services: - mariadb:10 stage: test diff --git a/.gitlab/pipeline/jobs/func-php8.2-v11-lowest.yml b/.gitlab/pipeline/jobs/func-php8.2-v11-lowest.yml index ac287c5..07ae353 100644 --- a/.gitlab/pipeline/jobs/func-php8.2-v11-lowest.yml +++ b/.gitlab/pipeline/jobs/func-php8.2-v11-lowest.yml @@ -1,6 +1,6 @@ func-php8.2-v11-lowest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php82:latest + image: ghcr.io/typo3/core-testing-php82:latest services: - mariadb:10 stage: test diff --git a/.gitlab/pipeline/jobs/func-php8.2-v12-highest.yml b/.gitlab/pipeline/jobs/func-php8.2-v12-highest.yml index 419fdb6..cb3d952 100644 --- a/.gitlab/pipeline/jobs/func-php8.2-v12-highest.yml +++ b/.gitlab/pipeline/jobs/func-php8.2-v12-highest.yml @@ -1,6 +1,6 @@ func-php8.2-v12-highest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php82:latest + image: ghcr.io/typo3/core-testing-php82:latest services: - mariadb:10 stage: test diff --git a/.gitlab/pipeline/jobs/func-php8.2-v12-lowest.yml b/.gitlab/pipeline/jobs/func-php8.2-v12-lowest.yml index 044298f..2ba379d 100644 --- a/.gitlab/pipeline/jobs/func-php8.2-v12-lowest.yml +++ b/.gitlab/pipeline/jobs/func-php8.2-v12-lowest.yml @@ -1,6 +1,6 @@ func-php8.2-v12-lowest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php82:latest + image: ghcr.io/typo3/core-testing-php82:latest services: - mariadb:10 stage: test diff --git a/.gitlab/pipeline/jobs/func-php8.3-v11-highest.yml b/.gitlab/pipeline/jobs/func-php8.3-v11-highest.yml index 8bab8fd..6feac9d 100644 --- a/.gitlab/pipeline/jobs/func-php8.3-v11-highest.yml +++ b/.gitlab/pipeline/jobs/func-php8.3-v11-highest.yml @@ -1,6 +1,6 @@ func-php8.3-v11-highest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php83:latest + image: ghcr.io/typo3/core-testing-php83:latest services: - mariadb:10 stage: test diff --git a/.gitlab/pipeline/jobs/func-php8.3-v11-lowest.yml b/.gitlab/pipeline/jobs/func-php8.3-v11-lowest.yml index fff827a..2ddc49c 100644 --- a/.gitlab/pipeline/jobs/func-php8.3-v11-lowest.yml +++ b/.gitlab/pipeline/jobs/func-php8.3-v11-lowest.yml @@ -1,6 +1,6 @@ func-php8.3-v11-lowest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php83:latest + image: ghcr.io/typo3/core-testing-php83:latest services: - mariadb:10 stage: test diff --git a/.gitlab/pipeline/jobs/func-php8.3-v12-highest.yml b/.gitlab/pipeline/jobs/func-php8.3-v12-highest.yml index 87a412c..eb2a0f0 100644 --- a/.gitlab/pipeline/jobs/func-php8.3-v12-highest.yml +++ b/.gitlab/pipeline/jobs/func-php8.3-v12-highest.yml @@ -1,6 +1,6 @@ func-php8.3-v11-highest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php83:latest + image: ghcr.io/typo3/core-testing-php83:latest services: - mariadb:10 stage: test diff --git a/.gitlab/pipeline/jobs/func-php8.3-v12-lowest.yml b/.gitlab/pipeline/jobs/func-php8.3-v12-lowest.yml index 86eb3af..3eb28a1 100644 --- a/.gitlab/pipeline/jobs/func-php8.3-v12-lowest.yml +++ b/.gitlab/pipeline/jobs/func-php8.3-v12-lowest.yml @@ -1,6 +1,6 @@ func-php8.3-v12-lowest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php83:latest + image: ghcr.io/typo3/core-testing-php83:latest services: - mariadb:10 stage: test diff --git a/.gitlab/pipeline/jobs/php-lint-php7.4.yml b/.gitlab/pipeline/jobs/php-lint-php7.4.yml index 3de2ee3..03bff54 100644 --- a/.gitlab/pipeline/jobs/php-lint-php7.4.yml +++ b/.gitlab/pipeline/jobs/php-lint-php7.4.yml @@ -1,6 +1,6 @@ php-lint-php7.4: extends: .composer-update - image: ghcr.io/sbuerk/demo-core-testing-php74:latest + image: ghcr.io/typo3/core-testing-php74:latest stage: lint needs: [ ] script: diff --git a/.gitlab/pipeline/jobs/php-lint-php8.0.yml b/.gitlab/pipeline/jobs/php-lint-php8.0.yml index 0485908..bb24279 100644 --- a/.gitlab/pipeline/jobs/php-lint-php8.0.yml +++ b/.gitlab/pipeline/jobs/php-lint-php8.0.yml @@ -1,6 +1,6 @@ php-lint-php8.0: extends: .composer-update - image: ghcr.io/sbuerk/demo-core-testing-php80:latest + image: ghcr.io/typo3/core-testing-php80:latest stage: lint needs: [ ] script: diff --git a/.gitlab/pipeline/jobs/php-lint-php8.1.yml b/.gitlab/pipeline/jobs/php-lint-php8.1.yml index 1c70cef..3d7ddb8 100644 --- a/.gitlab/pipeline/jobs/php-lint-php8.1.yml +++ b/.gitlab/pipeline/jobs/php-lint-php8.1.yml @@ -1,6 +1,6 @@ php-lint-php8.1: extends: .composer-update - image: ghcr.io/sbuerk/demo-core-testing-php81:latest + image: ghcr.io/typo3/core-testing-php81:latest stage: lint needs: [ ] script: diff --git a/.gitlab/pipeline/jobs/php-lint-php8.2.yml b/.gitlab/pipeline/jobs/php-lint-php8.2.yml index dec469e..37b934d 100644 --- a/.gitlab/pipeline/jobs/php-lint-php8.2.yml +++ b/.gitlab/pipeline/jobs/php-lint-php8.2.yml @@ -1,6 +1,6 @@ php-lint-php8.2: extends: .composer-update - image: ghcr.io/sbuerk/demo-core-testing-php82:latest + image: ghcr.io/typo3/core-testing-php82:latest stage: lint needs: [ ] script: diff --git a/.gitlab/pipeline/jobs/php-lint-php8.3.yml b/.gitlab/pipeline/jobs/php-lint-php8.3.yml index 537fbb5..092ef05 100644 --- a/.gitlab/pipeline/jobs/php-lint-php8.3.yml +++ b/.gitlab/pipeline/jobs/php-lint-php8.3.yml @@ -1,6 +1,6 @@ php-lint-php8.3: extends: .composer-update - image: ghcr.io/sbuerk/demo-core-testing-php83:latest + image: ghcr.io/typo3/core-testing-php83:latest stage: lint needs: [ ] script: diff --git a/.gitlab/pipeline/jobs/rector.yml b/.gitlab/pipeline/jobs/rector.yml new file mode 100644 index 0000000..013e940 --- /dev/null +++ b/.gitlab/pipeline/jobs/rector.yml @@ -0,0 +1,11 @@ +rector: + extends: .default + stage: codestyle + needs: + - build-composer-dependencies + - php-lint-php7.4 + - php-lint-php8.0 + - php-lint-php8.1 + - php-lint-php8.2 + script: + - composer ci:php:rector diff --git a/.gitlab/pipeline/jobs/unit-php7.4-v11-highest.yml b/.gitlab/pipeline/jobs/unit-php7.4-v11-highest.yml index f0b7c1e..e440b26 100644 --- a/.gitlab/pipeline/jobs/unit-php7.4-v11-highest.yml +++ b/.gitlab/pipeline/jobs/unit-php7.4-v11-highest.yml @@ -1,6 +1,6 @@ unit-php7.4-v11-highest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php74:latest + image: ghcr.io/typo3/core-testing-php74:latest stage: test needs: - build-composer-dependencies diff --git a/.gitlab/pipeline/jobs/unit-php7.4-v11-lowest.yml b/.gitlab/pipeline/jobs/unit-php7.4-v11-lowest.yml index 9d96492..1408415 100644 --- a/.gitlab/pipeline/jobs/unit-php7.4-v11-lowest.yml +++ b/.gitlab/pipeline/jobs/unit-php7.4-v11-lowest.yml @@ -1,6 +1,6 @@ unit-php7.4-v11-lowest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php74:latest + image: ghcr.io/typo3/core-testing-php74:latest stage: test needs: - build-composer-dependencies diff --git a/.gitlab/pipeline/jobs/unit-php8.0-v11-highest.yml b/.gitlab/pipeline/jobs/unit-php8.0-v11-highest.yml index 4d69629..fe68ecb 100644 --- a/.gitlab/pipeline/jobs/unit-php8.0-v11-highest.yml +++ b/.gitlab/pipeline/jobs/unit-php8.0-v11-highest.yml @@ -1,6 +1,6 @@ unit-php8.0-v11-highest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php80:latest + image: ghcr.io/typo3/core-testing-php80:latest stage: test needs: - build-composer-dependencies diff --git a/.gitlab/pipeline/jobs/unit-php8.0-v11-lowest.yml b/.gitlab/pipeline/jobs/unit-php8.0-v11-lowest.yml index 51e1947..0293c3f 100644 --- a/.gitlab/pipeline/jobs/unit-php8.0-v11-lowest.yml +++ b/.gitlab/pipeline/jobs/unit-php8.0-v11-lowest.yml @@ -1,6 +1,6 @@ unit-php8.0-v11-lowest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php80:latest + image: ghcr.io/typo3/core-testing-php80:latest stage: test needs: - build-composer-dependencies diff --git a/.gitlab/pipeline/jobs/unit-php8.1-v11-highest.yml b/.gitlab/pipeline/jobs/unit-php8.1-v11-highest.yml index cef350c..c4e8a50 100644 --- a/.gitlab/pipeline/jobs/unit-php8.1-v11-highest.yml +++ b/.gitlab/pipeline/jobs/unit-php8.1-v11-highest.yml @@ -1,6 +1,6 @@ unit-php8.1-v11-highest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php81:latest + image: ghcr.io/typo3/core-testing-php81:latest stage: test needs: - build-composer-dependencies diff --git a/.gitlab/pipeline/jobs/unit-php8.1-v11-lowest.yml b/.gitlab/pipeline/jobs/unit-php8.1-v11-lowest.yml index 6cca462..1eca603 100644 --- a/.gitlab/pipeline/jobs/unit-php8.1-v11-lowest.yml +++ b/.gitlab/pipeline/jobs/unit-php8.1-v11-lowest.yml @@ -1,6 +1,6 @@ unit-php8.1-v11-lowest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php81:latest + image: ghcr.io/typo3/core-testing-php81:latest stage: test needs: - build-composer-dependencies diff --git a/.gitlab/pipeline/jobs/unit-php8.1-v12-highest.yml b/.gitlab/pipeline/jobs/unit-php8.1-v12-highest.yml index 7928dcd..fc1fb61 100644 --- a/.gitlab/pipeline/jobs/unit-php8.1-v12-highest.yml +++ b/.gitlab/pipeline/jobs/unit-php8.1-v12-highest.yml @@ -1,6 +1,6 @@ unit-php8.1-v12-highest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php81:latest + image: ghcr.io/typo3/core-testing-php81:latest stage: test needs: - build-composer-dependencies diff --git a/.gitlab/pipeline/jobs/unit-php8.1-v12-lowest.yml b/.gitlab/pipeline/jobs/unit-php8.1-v12-lowest.yml index e58e6fa..7e3a700 100644 --- a/.gitlab/pipeline/jobs/unit-php8.1-v12-lowest.yml +++ b/.gitlab/pipeline/jobs/unit-php8.1-v12-lowest.yml @@ -1,6 +1,6 @@ unit-php8.1-v12-lowest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php81:latest + image: ghcr.io/typo3/core-testing-php81:latest stage: test needs: - build-composer-dependencies diff --git a/.gitlab/pipeline/jobs/unit-php8.2-v11-highest.yml b/.gitlab/pipeline/jobs/unit-php8.2-v11-highest.yml index 222ed85..044a430 100644 --- a/.gitlab/pipeline/jobs/unit-php8.2-v11-highest.yml +++ b/.gitlab/pipeline/jobs/unit-php8.2-v11-highest.yml @@ -1,6 +1,6 @@ unit-php8.2-v11-highest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php82:latest + image: ghcr.io/typo3/core-testing-php82:latest stage: test needs: - build-composer-dependencies diff --git a/.gitlab/pipeline/jobs/unit-php8.2-v11-lowest.yml b/.gitlab/pipeline/jobs/unit-php8.2-v11-lowest.yml index f72e2b5..f1d111c 100644 --- a/.gitlab/pipeline/jobs/unit-php8.2-v11-lowest.yml +++ b/.gitlab/pipeline/jobs/unit-php8.2-v11-lowest.yml @@ -1,6 +1,6 @@ unit-php8.2-v11-lowest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php82:latest + image: ghcr.io/typo3/core-testing-php82:latest stage: test needs: - build-composer-dependencies diff --git a/.gitlab/pipeline/jobs/unit-php8.2-v12-highest.yml b/.gitlab/pipeline/jobs/unit-php8.2-v12-highest.yml index b01dd37..9663b4b 100644 --- a/.gitlab/pipeline/jobs/unit-php8.2-v12-highest.yml +++ b/.gitlab/pipeline/jobs/unit-php8.2-v12-highest.yml @@ -1,6 +1,6 @@ unit-php8.2-v12-highest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php82:latest + image: ghcr.io/typo3/core-testing-php82:latest stage: test needs: - build-composer-dependencies diff --git a/.gitlab/pipeline/jobs/unit-php8.2-v12-lowest.yml b/.gitlab/pipeline/jobs/unit-php8.2-v12-lowest.yml index 7ef1a80..2a86d30 100644 --- a/.gitlab/pipeline/jobs/unit-php8.2-v12-lowest.yml +++ b/.gitlab/pipeline/jobs/unit-php8.2-v12-lowest.yml @@ -1,6 +1,6 @@ unit-php8.2-v12-lowest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php82:latest + image: ghcr.io/typo3/core-testing-php82:latest stage: test needs: - build-composer-dependencies diff --git a/.gitlab/pipeline/jobs/unit-php8.3-v11-highest.yml b/.gitlab/pipeline/jobs/unit-php8.3-v11-highest.yml index 1ae7f74..fa3e57e 100644 --- a/.gitlab/pipeline/jobs/unit-php8.3-v11-highest.yml +++ b/.gitlab/pipeline/jobs/unit-php8.3-v11-highest.yml @@ -1,6 +1,6 @@ unit-php8.3-v11-highest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php83:latest + image: ghcr.io/typo3/core-testing-php83:latest stage: test needs: - build-composer-dependencies diff --git a/.gitlab/pipeline/jobs/unit-php8.3-v11-lowest.yml b/.gitlab/pipeline/jobs/unit-php8.3-v11-lowest.yml index 0c0a3b8..4f94d7c 100644 --- a/.gitlab/pipeline/jobs/unit-php8.3-v11-lowest.yml +++ b/.gitlab/pipeline/jobs/unit-php8.3-v11-lowest.yml @@ -1,6 +1,6 @@ unit-php8.3-v11-lowest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php83:latest + image: ghcr.io/typo3/core-testing-php83:latest stage: test needs: - build-composer-dependencies diff --git a/.gitlab/pipeline/jobs/unit-php8.3-v12-highest.yml b/.gitlab/pipeline/jobs/unit-php8.3-v12-highest.yml index a11e941..24338fe 100644 --- a/.gitlab/pipeline/jobs/unit-php8.3-v12-highest.yml +++ b/.gitlab/pipeline/jobs/unit-php8.3-v12-highest.yml @@ -1,6 +1,6 @@ unit-php8.3-v12-highest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php83:latest + image: ghcr.io/typo3/core-testing-php83:latest stage: test needs: - build-composer-dependencies diff --git a/.gitlab/pipeline/jobs/unit-php8.3-v12-lowest.yml b/.gitlab/pipeline/jobs/unit-php8.3-v12-lowest.yml index 567980b..094565a 100644 --- a/.gitlab/pipeline/jobs/unit-php8.3-v12-lowest.yml +++ b/.gitlab/pipeline/jobs/unit-php8.3-v12-lowest.yml @@ -1,6 +1,6 @@ unit-php8.3-v12-lowest: extends: .default - image: ghcr.io/sbuerk/demo-core-testing-php83:latest + image: ghcr.io/typo3/core-testing-php83:latest stage: test needs: - build-composer-dependencies diff --git a/Build/Scripts/runTests.sh b/Build/Scripts/runTests.sh index 99b6a60..020014a 100755 --- a/Build/Scripts/runTests.sh +++ b/Build/Scripts/runTests.sh @@ -4,7 +4,9 @@ # TYPO3 extension tea test runner based on docker. # -trap 'cleanUp;exit 2' SIGINT +if [ "${CI}" != "true" ]; then + trap 'echo "runTests.sh SIGINT signal emitted";cleanUp;exit 2' SIGINT +fi waitFor() { local HOST=${1} diff --git a/Documentation/Index.rst b/Documentation/Index.rst index a53417b..0bcfdb5 100644 --- a/Documentation/Index.rst +++ b/Documentation/Index.rst @@ -44,7 +44,7 @@ continuous integration. Introduction PHPVersionSupport - TestingFramework + ReleaseBranchingStrategy Environment DependencyManager Running diff --git a/Documentation/ReleaseBranchingStrategy.rst b/Documentation/ReleaseBranchingStrategy.rst new file mode 100644 index 0000000..6fa141d --- /dev/null +++ b/Documentation/ReleaseBranchingStrategy.rst @@ -0,0 +1,65 @@ +.. include:: /Includes.rst.txt + +.. _release-branching-strategy: + +============================== +Release and Branching Strategy +============================== + +When maintaining TYPO3 extensions, developers often need to support multiple +TYPO3 Long-Term Support (LTS) versions simultaneously. This typically requires +a clear release and branching strategy to manage development and maintenance +across different TYPO3 versions. + +There are two common strategies for managing branches when supporting multiple +TYPO3 LTS versions. + +.. contents:: Table of Contents: + :backlinks: top + :class: compact-list + :depth: 2 + :local: + +.. _release-branching-strategy-one-branch: + +Approach 1: One branch for multiple TYPO3 LTS versions +====================================================== + +In this approach, there is a single main branch that receives new features and +updates, while supporting multiple TYPO3 LTS versions at the same time. + +The downside of this approach is that it may require some version-dependent +code switches, which can increase complexity. However, the major advantage is +that there is only one branch to maintain, making it easier to implement new +features and code changes across all supported TYPO3 versions. + +This approach simplifies the maintenance of the extension and is preferred when +minimizing maintenance overhead is the primary concern. + +.. _release-branching-strategy-multiple-branches: + +Approach 2: Separate branch per TYPO3 LTS version +================================================= + +In this approach, there is one main branch for each TYPO3 LTS version. This +means that each branch exclusively supports a single TYPO3 LTS version. + +The advantage here is that version-specific code can be used without requiring +version-dependent switches, reducing complexity in the codebase. However, this +approach increases the maintenance burden, as any new features or updates must +be applied to each branch individually. + +This approach may be necessary when there are significant differences between +TYPO3 LTS versions or when you want to avoid version-dependent code. + +.. _release-strategy-conclusion: + +Conclusion +========== + +The appropriate release and branching strategy depends on the specific +requirements of the extension and the TYPO3 versions you are supporting. If +reducing maintenance complexity is a priority, using a single branch for +multiple versions is often the better choice. However, if you need to tailor +your extension for each version, a separate branch for each version may be more +suitable. diff --git a/Documentation/TestingFramework.rst b/Documentation/TestingFramework.rst deleted file mode 100644 index 1cdd068..0000000 --- a/Documentation/TestingFramework.rst +++ /dev/null @@ -1,57 +0,0 @@ -.. include:: /Includes.rst.txt - -.. _testing-framework: - -================= -Testing framework -================= - -Extensions usually need to support two LTS versions of TYPO3 in parallel, -assuming that they should support all currently supported TYPO3 LTS versions. -To achieve this, there are two different approaches, which also affect the -choice of a testing framework for unit and functional tests. - -.. contents:: Table of Contents: - :backlinks: top - :class: compact-list - :depth: 2 - :local: - -.. _testing-framework-approach-many-versions: - -Approach 1: One branch for many TYPO3 LTS versions -================================================== - -With this approach, there is one main branch that gets new features. It needs to -support two TYPO3 LTS versions in parallel. - -The downside is that this slightly increases code complexity as -version-dependent code switches might be necessary. The upside is that there -is only one branch to maintain, which makes adding new features (and all other -code changes) a lot less of a hassle. - -The `Nimut testing framework `__ -can support multiple TYPO3 versions at a time, and -it provides version-independent abstractions for testing, making it the perfect -companion for this approach. - -This is the approach that we have chosen for this extension as we do not want -to maintain two branches in parallel. - -.. _testing-framework-approach-one-version: - -Approach 2: One branch per TYPO3 LTS version -============================================ - -With this approach, there are two main branches that get new features in -parallel. Each branch supports exactly one TYPO3 LTS version. - -The upside is that this slightly decreases code complexity as -version-dependent code switches are not necessary. The downside is that there -are two branches to maintain, which makes adding new features (and all other -code changes) more of a hassle. - -For this approach, the -`TYPO3 testing framework `__ -- which supports only one TYPO3 LTS version at a time - will work just fine. - diff --git a/README.md b/README.md index 753a493..fffe369 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![TYPO3 V11](https://img.shields.io/badge/TYPO3-11-orange.svg)](https://get.typo3.org/version/11) [![License](https://img.shields.io/github/license/TYPO3-Documentation/tea)](https://packagist.org/packages/ttn/tea) [![Total downloads](https://poser.pugx.org/ttn/tea/downloads.svg)](https://packagist.org/packages/ttn/tea) -[![GitHub CI status](https://github.com/FriendsOfTYPO3/tea/workflows/CI/badge.svg?branch=main)](https://github.com/FriendsOfTYPO3/tea/actions) +[![GitHub CI status](https://github.com/FriendsOfTYPO3/tea/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/FriendsOfTYPO3/tea/actions) [![GitLab CI status](https://gitlab.typo3.org/qa/example-extension/badges/main/pipeline.svg)](https://gitlab.typo3.org/qa/example-extension/-/pipelines) [![Coverage Status](https://coveralls.io/repos/github/TYPO3-Documentation/tea/badge.svg?branch=main)](https://coveralls.io/github/TYPO3-Documentation/tea?branch=main) @@ -26,7 +26,7 @@ You can also use this extension to manage your collection of delicious teas. We value and welcome feedback of all kinds, including discussions. Feedback can be sent via TYPO3 slack within [our channel](https://app.slack.com/client/T024TUMLZ/CSQ8T0VS5) or via direct massages to the team members. We also welcome email. All the contact information is available at our [typo3.org team page](https://typo3.org/community/teams/best-practices). -Another way is to open an [issue on GitHub](https://github.com/FriendsOfTYPO3/tea/issues/new/choose). +Another way is to create a [discussion on GitHub](https://github.com/FriendsOfTYPO3/tea/discussions). ## Philosophies diff --git a/Tests/Functional/Domain/Repository/TeaRepositoryTest.php b/Tests/Functional/Domain/Repository/TeaRepositoryTest.php index d781747..08f6558 100644 --- a/Tests/Functional/Domain/Repository/TeaRepositoryTest.php +++ b/Tests/Functional/Domain/Repository/TeaRepositoryTest.php @@ -8,6 +8,7 @@ use TTN\Tea\Domain\Model\Tea; use TTN\Tea\Domain\Repository\TeaRepository; use TYPO3\CMS\Extbase\Domain\Model\FileReference; use TYPO3\CMS\Extbase\Persistence\PersistenceManagerInterface; +use TYPO3\CMS\Extbase\Persistence\Repository; use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase; /** @@ -31,6 +32,14 @@ final class TeaRepositoryTest extends FunctionalTestCase $this->subject = $this->get(TeaRepository::class); } + /** + * @test + */ + public function isRepository(): void + { + self::assertInstanceOf(Repository::class, $this->subject); + } + /** * @test */ diff --git a/Tests/Unit/Controller/FrontEndEditorControllerTest.php b/Tests/Unit/Controller/FrontEndEditorControllerTest.php index 45c7737..b871613 100644 --- a/Tests/Unit/Controller/FrontEndEditorControllerTest.php +++ b/Tests/Unit/Controller/FrontEndEditorControllerTest.php @@ -22,6 +22,9 @@ use TYPO3\TestingFramework\Core\AccessibleObjectInterface; use TYPO3\TestingFramework\Core\Unit\UnitTestCase; /** + * Note: Unit tests for controllers are not considered best practice anymore. Instead, functional tests should be used. + * We're currently in the process of migrating all controller tests to functional tests. + * * @covers \TTN\Tea\Controller\FrontEndEditorController */ final class FrontEndEditorControllerTest extends UnitTestCase diff --git a/Tests/Unit/Controller/TeaControllerTest.php b/Tests/Unit/Controller/TeaControllerTest.php index ed46a8f..b8913d9 100644 --- a/Tests/Unit/Controller/TeaControllerTest.php +++ b/Tests/Unit/Controller/TeaControllerTest.php @@ -17,6 +17,9 @@ use TYPO3\TestingFramework\Core\AccessibleObjectInterface; use TYPO3\TestingFramework\Core\Unit\UnitTestCase; /** + * Note: Unit tests for controllers are not considered best practice anymore. Instead, functional tests should be used. + * We're currently in the process of migrating all controller tests to functional tests. + * * @covers \TTN\Tea\Controller\TeaController */ final class TeaControllerTest extends UnitTestCase diff --git a/Tests/Unit/Domain/Repository/TeaRepositoryTest.php b/Tests/Unit/Domain/Repository/TeaRepositoryTest.php deleted file mode 100644 index c7e9e8b..0000000 --- a/Tests/Unit/Domain/Repository/TeaRepositoryTest.php +++ /dev/null @@ -1,39 +0,0 @@ -createStub(ObjectManagerInterface::class); - // @phpstan-ignore-next-line This line is 11LTS-specific, but we're running PHPStan on TYPO3 12. - $this->subject = new TeaRepository($objectManagerStub); - } else { - $this->subject = new TeaRepository(); - } - } - - /** - * @test - */ - public function isRepository(): void - { - self::assertInstanceOf(Repository::class, $this->subject); - } -} diff --git a/composer.json b/composer.json index dce00d8..13c82dd 100644 --- a/composer.json +++ b/composer.json @@ -47,31 +47,31 @@ "typo3/cms-frontend": "^11.5.4 || ^12.4.2" }, "require-dev": { - "ergebnis/composer-normalize": "^2.43.0", - "friendsofphp/php-cs-fixer": "^3.64.0", - "helmich/typo3-typoscript-lint": "^3.1.1", - "icanhazstring/composer-unused": "^0.8.11", - "php-parallel-lint/php-parallel-lint": "^1.4", - "phpmd/phpmd": "^2.15.0", - "phpstan/extension-installer": "^1.4.3", - "phpstan/phpstan": "^1.12.3", - "phpstan/phpstan-phpunit": "^1.4.0", - "phpstan/phpstan-strict-rules": "^1.6.0", - "phpunit/phpunit": "^9.6.20", - "saschaegerer/phpstan-typo3": "^1.10.2", - "seld/jsonlint": "^1.11.0", - "spaze/phpstan-disallowed-calls": "^3.4", - "squizlabs/php_codesniffer": "^3.10.2", - "ssch/typo3-rector": "^2.6.5", - "ssch/typo3-rector-testing-framework": "^2.0.1", - "symfony/console": "^5.4 || ^6.4 || ^7.0", - "symfony/translation": "^5.4 || ^6.4 || ^7.0", - "symfony/yaml": "^5.4 || ^6.4 || ^7.0", - "tomasvotruba/cognitive-complexity": "^0.2.3", - "tomasvotruba/type-coverage": "^0.3.1", + "ergebnis/composer-normalize": "2.44.0", + "friendsofphp/php-cs-fixer": "3.64.0", + "helmich/typo3-typoscript-lint": "3.1.1", + "icanhazstring/composer-unused": "0.8.11", + "php-parallel-lint/php-parallel-lint": "1.4.0", + "phpmd/phpmd": "2.15.0", + "phpstan/extension-installer": "1.4.3", + "phpstan/phpstan": "1.12.7", + "phpstan/phpstan-phpunit": "1.4.0", + "phpstan/phpstan-strict-rules": "1.6.1", + "phpunit/phpunit": "9.6.20", + "saschaegerer/phpstan-typo3": "1.10.2", + "seld/jsonlint": "1.11.0", + "spaze/phpstan-disallowed-calls": "3.5.1", + "squizlabs/php_codesniffer": "3.10.3", + "ssch/typo3-rector": "2.11.0", + "ssch/typo3-rector-testing-framework": "2.0.1", + "symfony/console": "^5.4.44 || ^6.4.12 || ^7.1.5", + "symfony/translation": "^5.4.44 || ^6.4.12 || ^7.1.5", + "symfony/yaml": "^5.4.44 || ^6.4.12 || ^7.1.5", + "tomasvotruba/cognitive-complexity": "0.2.3", + "tomasvotruba/type-coverage": "1.0.0", "typo3/cms-fluid-styled-content": "^11.5.4 || ^12.4.2", - "typo3/coding-standards": "^0.6.1 || ^0.8.0", - "typo3/testing-framework": "^7.1.0", + "typo3/coding-standards": "0.6.1 || 0.8.0", + "typo3/testing-framework": "7.1.0", "webmozart/assert": "^1.11.0" }, "replace": { @@ -147,16 +147,18 @@ "ci:php:cs-fixer": "php-cs-fixer fix --config .php-cs-fixer.php -v --dry-run --diff", "ci:php:lint": "parallel-lint .*.php *.php Classes Configuration Tests", "ci:php:mess": "phpmd Classes text Build/phpmd/phpmd.xml", + "ci:php:rector": "rector --dry-run", "ci:php:sniff": "phpcs --standard=Build/phpcs/phpcs.xml Classes Configuration Tests", "ci:php:stan": "phpstan --no-progress -v", "ci:static": [ "@ci:composer:normalize", "@ci:composer:unused", "@ci:json:lint", - "@ci:php:cs-fixer", "@ci:php:lint", - "@ci:php:sniff", + "@ci:php:rector", "@ci:php:stan", + "@ci:php:cs-fixer", + "@ci:php:sniff", "@ci:typoscript:lint", "@ci:xliff:lint", "@ci:yaml:lint" @@ -174,10 +176,12 @@ "docs:generate": "docker run --rm --pull always -v $(pwd):/project -it ghcr.io/typo3-documentation/render-guides:latest --config=Documentation", "fix:composer:normalize": "@composer normalize --no-check-lock", "fix:php": [ + "@fix:php:rector", "@fix:php:cs", "@fix:php:sniff" ], "fix:php:cs": "php-cs-fixer fix --config .php-cs-fixer.php", + "fix:php:rector": "rector", "fix:php:sniff": "phpcbf --standard=Build/phpcs/phpcs.xml Classes Configuration Tests", "phpstan:baseline": "phpstan --generate-baseline --allow-empty-baseline", "prepare-release": [ @@ -218,6 +222,7 @@ "ci:php:cs-fixer": "Checks the code style with the PHP Coding Standards Fixer (PHP-CS-Fixer).", "ci:php:lint": "Lints the PHP files for syntax errors.", "ci:php:mess": "Runs PHP mess detection.", + "ci:php:rector": "Checks for code for changes by Rector.", "ci:php:sniff": "Checks the code style with PHP_CodeSniffer (PHPCS).", "ci:php:stan": "Checks the PHP types using PHPStan.", "ci:static": "Runs all static code checks (syntax, style, types).", @@ -232,6 +237,7 @@ "fix:composer:normalize": "Normalizes composer.json file content.", "fix:php": "Runs all fixers for the PHP code.", "fix:php:cs": "Fixes the code style with PHP-CS-Fixer.", + "fix:php:rector": "Updates the code with Rector.", "fix:php:sniff": "Fixes the code style with PHP_CodeSniffer.", "phpstan:baseline": "Updates the PHPStan baseline file to match the code.", "prepare-release": "Removes development-only files in preparation of a TER release."