mirror of https://github.com/FriendsOfTYPO3/tea.git synced 2024-11-21 17:56:13 +01:00

Merge branch 'main' into TASK/fix-package.json-for-dependabot

This commit is contained in:
Bernd Sengupta 2024-10-30 17:41:40 +01:00 committed by GitHub
commit 8f9b1fffcc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
54 changed files with 372 additions and 189 deletions

View file

@ -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.

View file

@ -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] "

View file

@ -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

View file

@ -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'

187
.gitlab/pipeline/ci/php.ini Normal file
View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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:

View file

@ -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:

View file

@ -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:

View file

@ -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:

View file

@ -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:

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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}

View file

@ -44,7 +44,7 @@ continuous integration.
Introduction
PHPVersionSupport
TestingFramework
ReleaseBranchingStrategy
Environment
DependencyManager
Running

View file

@ -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.

View file

@ -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 <https://github.com/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 <https://github.com/TYPO3/testing-framework>`__
- which supports only one TYPO3 LTS version at a time - will work just fine.

View file

@ -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

View file

@ -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
*/

View file

@ -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

View file

@ -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

View file

@ -1,39 +0,0 @@
<?php
declare(strict_types=1);
namespace TTN\Tea\Tests\Unit\Domain\Repository;
use TTN\Tea\Domain\Repository\TeaRepository;
use TYPO3\CMS\Extbase\Object\ObjectManagerInterface;
use TYPO3\CMS\Extbase\Persistence\Repository;
use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
/**
* @covers \TTN\Tea\Domain\Repository\TeaRepository
*/
final class TeaRepositoryTest extends UnitTestCase
{
private TeaRepository $subject;
protected function setUp(): void
{
parent::setUp();
if (\interface_exists(ObjectManagerInterface::class)) {
$objectManagerStub = $this->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);
}
}

View file

@ -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."