diff --git a/.dockerignore b/.dockerignore
index b9393525..d036eb9d 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -12,3 +12,5 @@
/phpunit.xml
/README.md
/rector.php
+/renovate.json
+/version-bumper.yaml
diff --git a/.gitattributes b/.gitattributes
index 48f1a277..9c9f6305 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -15,3 +15,4 @@
/phpunit.xml export-ignore
/rector.php export-ignore
/renovate.json export-ignore
+/version-bumper.yaml export-ignore
diff --git a/.github/workflows/cgl.yaml b/.github/workflows/cgl.yaml
index e7903785..f87db66a 100644
--- a/.github/workflows/cgl.yaml
+++ b/.github/workflows/cgl.yaml
@@ -21,7 +21,8 @@ jobs:
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
- php-version: 8.2
+ # @todo Use PHP 8.4 once PHP-CS-Fixer supports it
+ php-version: 8.3
tools: composer:v2, composer-require-checker, composer-unused, cs2pr
coverage: none
@@ -39,7 +40,7 @@ jobs:
- name: Reset composer.json
run: git checkout composer.json composer.lock
- name: Re-install Composer dependencies
- uses: ramsey/composer-install@v2
+ uses: ramsey/composer-install@v3
- name: Check for unused dependencies
run: composer-unused --excludePackage=nyholm/psr7
diff --git a/.github/workflows/documentation.yaml b/.github/workflows/documentation.yaml
index 10935a19..b3c549a0 100644
--- a/.github/workflows/documentation.yaml
+++ b/.github/workflows/documentation.yaml
@@ -29,7 +29,7 @@ jobs:
- name: Setup Pages
uses: actions/configure-pages@v5
- name: Render documentation
- run: docker-compose -f docs/_build/docker-compose.yaml run --rm build
+ run: docker compose -f docs/_build/docker-compose.yaml run --rm build
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml
index 7f0dfb94..28322141 100644
--- a/.github/workflows/tests.yaml
+++ b/.github/workflows/tests.yaml
@@ -16,9 +16,17 @@ jobs:
strategy:
fail-fast: false
matrix:
- php-version: ["8.1", "8.2", "8.3"]
- composer-version: ["2.1", "2.2", "2.3", "2.4", "2.5", "2.6", "2.7"]
+ php-version: ["8.1", "8.2", "8.3", "8.4"]
+ composer-version: ["2.1", "2.2", "2.3", "2.4", "2.5", "2.6", "2.7", "2.8"]
dependencies: ["highest", "lowest"]
+ # Skip tests for PHP 8.4 and incompatible Composer versions
+ exclude:
+ - php-version: "8.4"
+ composer-version: "2.1"
+ - php-version: "8.4"
+ composer-version: "2.2"
+ - php-version: "8.4"
+ composer-version: "2.3"
steps:
- uses: actions/checkout@v4
with:
@@ -34,11 +42,11 @@ jobs:
# Install dependencies
- name: Install Composer dependencies
- uses: ramsey/composer-install@v2
+ uses: ramsey/composer-install@v3
with:
dependency-versions: ${{ matrix.dependencies }}
# Composer < 2.7 is not compatible with symfony/console 7.x
- composer-options: ${{ matrix.composer-version != '2.7' && '--with symfony/console:<7' }}
+ composer-options: ${{ matrix.composer-version < 2.7 && '--with symfony/console:<7' }}
# Run tests
- name: Run tests
@@ -56,18 +64,15 @@ jobs:
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
- php-version: 8.3
+ php-version: 8.4
tools: composer:v2
coverage: pcov
# Install dependencies
- name: Install Composer dependencies
- uses: ramsey/composer-install@v2
+ uses: ramsey/composer-install@v3
with:
dependency-versions: highest
- # @todo Remove once Composer 2.7 is released and supported
- # Composer < 2.7 is not compatible with symfony/console 7.x
- composer-options: "--with symfony/console:<7"
# Run Unit tests
- name: Build coverage directory
@@ -104,7 +109,7 @@ jobs:
# CodeClimate
- name: CodeClimate report
- uses: paambaati/codeclimate-action@v8.0.0
+ uses: paambaati/codeclimate-action@v9.0.0
if: env.CC_TEST_REPORTER_ID
env:
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php
index c268c402..1d17f9c8 100644
--- a/.php-cs-fixer.php
+++ b/.php-cs-fixer.php
@@ -21,20 +21,21 @@
* along with this program. If not, see .
*/
-$config = new \PhpCsFixer\Config();
+$config = new PhpCsFixer\Config();
$config->getFinder()
->files()
->name('*.php')
->in(__DIR__)
->ignoreVCSIgnored(true)
+ ->ignoreDotFiles(false)
;
-$ruleset = new \CPSIT\PhpCsFixerConfig\Rule\DefaultRuleset();
+$ruleset = new CPSIT\PhpCsFixerConfig\Rule\DefaultRuleset();
$ruleset->apply($config);
// Enable parallel runs (PHP-CS-Fixer >= v3.57)
-if (class_exists(\PhpCsFixer\Runner\Parallel\ParallelConfigFactory::class)) {
- $config->setParallelConfig(\PhpCsFixer\Runner\Parallel\ParallelConfigFactory::detect());
+if (class_exists(PhpCsFixer\Runner\Parallel\ParallelConfigFactory::class)) {
+ $config->setParallelConfig(PhpCsFixer\Runner\Parallel\ParallelConfigFactory::detect());
}
return $config;
diff --git a/Dockerfile b/Dockerfile
index 8da57fe7..fea040ee 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,7 +1,7 @@
-FROM composer/composer:2.7-bin AS composer
+FROM composer/composer:2.8-bin AS composer
LABEL maintainer="Elias Häußler "
-FROM php:8.3-alpine
+FROM php:8.4-alpine
COPY --from=composer /composer /usr/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER=1
diff --git a/README.md b/README.md
index 6a8202f6..975e2c10 100644
--- a/README.md
+++ b/README.md
@@ -39,6 +39,7 @@ composer create-project cpsit/project-builder
### Docker
[![Docker](https://img.shields.io/docker/v/cpsit/project-builder?label=version&logo=docker&sort=semver)](https://hub.docker.com/r/cpsit/project-builder)
+[![GHCR Pulls](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fipitio.github.io%2Fbackage%2FCPS-IT%2Fproject-builder%2Fproject-builder.json&query=%24.downloads&label=GHCR%20pulls&color=brightgreen)](https://github.com/CPS-IT/project-builder/pkgs/container/project-builder)
[![Docker Pulls](https://img.shields.io/docker/pulls/cpsit/project-builder?color=brightgreen)](https://hub.docker.com/r/cpsit/project-builder)
```bash
diff --git a/composer.json b/composer.json
index b47af12f..6bb1c26a 100644
--- a/composer.json
+++ b/composer.json
@@ -16,7 +16,7 @@
}
],
"require": {
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0",
+ "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
"ext-filter": "*",
"ext-json": "*",
"ext-mbstring": "*",
@@ -32,7 +32,7 @@
"psr/http-message": "^1.0 || ^2.0",
"sebastianfeldmann/cli": "^3.4",
"symfony/config": "^5.4 || ^6.0 || ^7.0",
- "symfony/console": "^5.4 || ^6.0",
+ "symfony/console": "^5.4 || ^6.0 || ^7.0",
"symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0",
"symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0",
"symfony/expression-language": "^5.4 || ^6.0 || ^7.0",
@@ -50,6 +50,7 @@
"composer/xdebug-handler": "^3.0",
"cpsit/php-cs-fixer-config": "^1.1",
"donatj/mock-webserver": "^2.5",
+ "eliashaeussler/version-bumper": "^1.2",
"ergebnis/composer-normalize": "^2.26",
"phpstan/extension-installer": "^1.2",
"phpstan/phpstan": "^1.9",
@@ -74,6 +75,7 @@
},
"config": {
"allow-plugins": {
+ "eliashaeussler/version-bumper": true,
"ergebnis/composer-normalize": true,
"phpstan/extension-installer": true
},
diff --git a/composer.lock b/composer.lock
index fec49f7d..28f223e6 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,25 +4,25 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "1dfab5c540f38a67aa16f01cd8951308",
+ "content-hash": "db2260a7fd531684a7e404787a15601b",
"packages": [
{
"name": "cocur/slugify",
- "version": "v4.5.1",
+ "version": "v4.6.0",
"source": {
"type": "git",
"url": "https://github.com/cocur/slugify.git",
- "reference": "7c6e088228b9f082050876ae8b0cd287b117b840"
+ "reference": "1d674022e9cbefa80b4f51aa3e2375b6e3c14fdb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cocur/slugify/zipball/7c6e088228b9f082050876ae8b0cd287b117b840",
- "reference": "7c6e088228b9f082050876ae8b0cd287b117b840",
+ "url": "https://api.github.com/repos/cocur/slugify/zipball/1d674022e9cbefa80b4f51aa3e2375b6e3c14fdb",
+ "reference": "1d674022e9cbefa80b4f51aa3e2375b6e3c14fdb",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
- "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0"
+ "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
},
"conflict": {
"symfony/config": "<3.4 || >=4,<4.3",
@@ -76,27 +76,27 @@
],
"support": {
"issues": "https://github.com/cocur/slugify/issues",
- "source": "https://github.com/cocur/slugify/tree/v4.5.1"
+ "source": "https://github.com/cocur/slugify/tree/v4.6.0"
},
- "time": "2023-09-17T07:26:20+00:00"
+ "time": "2024-09-10T14:09:25+00:00"
},
{
"name": "cuyz/valinor",
- "version": "1.12.0",
+ "version": "1.14.1",
"source": {
"type": "git",
"url": "https://github.com/CuyZ/Valinor.git",
- "reference": "3bc40798a5ff64aee8a28509b73f7f84d5c66ac9"
+ "reference": "12033fccdcc6afa7e73b3e234e4d6656530f2bcb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/CuyZ/Valinor/zipball/3bc40798a5ff64aee8a28509b73f7f84d5c66ac9",
- "reference": "3bc40798a5ff64aee8a28509b73f7f84d5c66ac9",
+ "url": "https://api.github.com/repos/CuyZ/Valinor/zipball/12033fccdcc6afa7e73b3e234e4d6656530f2bcb",
+ "reference": "12033fccdcc6afa7e73b3e234e4d6656530f2bcb",
"shasum": ""
},
"require": {
"composer-runtime-api": "^2.0",
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0",
+ "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
"psr/simple-cache": "^1.0 || ^2.0 || ^3.0"
},
"require-dev": {
@@ -143,7 +143,7 @@
],
"support": {
"issues": "https://github.com/CuyZ/Valinor/issues",
- "source": "https://github.com/CuyZ/Valinor/tree/1.12.0"
+ "source": "https://github.com/CuyZ/Valinor/tree/1.14.1"
},
"funding": [
{
@@ -151,26 +151,26 @@
"type": "github"
}
],
- "time": "2024-04-04T16:42:55+00:00"
+ "time": "2024-11-06T07:46:46+00:00"
},
{
"name": "guzzlehttp/guzzle",
- "version": "7.8.1",
+ "version": "7.9.2",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
- "reference": "41042bc7ab002487b876a0683fc8dce04ddce104"
+ "reference": "d281ed313b989f213357e3be1a179f02196ac99b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104",
- "reference": "41042bc7ab002487b876a0683fc8dce04ddce104",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b",
+ "reference": "d281ed313b989f213357e3be1a179f02196ac99b",
"shasum": ""
},
"require": {
"ext-json": "*",
- "guzzlehttp/promises": "^1.5.3 || ^2.0.1",
- "guzzlehttp/psr7": "^1.9.1 || ^2.5.1",
+ "guzzlehttp/promises": "^1.5.3 || ^2.0.3",
+ "guzzlehttp/psr7": "^2.7.0",
"php": "^7.2.5 || ^8.0",
"psr/http-client": "^1.0",
"symfony/deprecation-contracts": "^2.2 || ^3.0"
@@ -181,9 +181,9 @@
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"ext-curl": "*",
- "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999",
+ "guzzle/client-integration-tests": "3.0.2",
"php-http/message-factory": "^1.1",
- "phpunit/phpunit": "^8.5.36 || ^9.6.15",
+ "phpunit/phpunit": "^8.5.39 || ^9.6.20",
"psr/log": "^1.1 || ^2.0 || ^3.0"
},
"suggest": {
@@ -261,7 +261,7 @@
],
"support": {
"issues": "https://github.com/guzzle/guzzle/issues",
- "source": "https://github.com/guzzle/guzzle/tree/7.8.1"
+ "source": "https://github.com/guzzle/guzzle/tree/7.9.2"
},
"funding": [
{
@@ -277,20 +277,20 @@
"type": "tidelift"
}
],
- "time": "2023-12-03T20:35:24+00:00"
+ "time": "2024-07-24T11:22:20+00:00"
},
{
"name": "guzzlehttp/promises",
- "version": "2.0.2",
+ "version": "2.0.4",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
- "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223"
+ "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223",
- "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455",
+ "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455",
"shasum": ""
},
"require": {
@@ -298,7 +298,7 @@
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
- "phpunit/phpunit": "^8.5.36 || ^9.6.15"
+ "phpunit/phpunit": "^8.5.39 || ^9.6.20"
},
"type": "library",
"extra": {
@@ -344,7 +344,7 @@
],
"support": {
"issues": "https://github.com/guzzle/promises/issues",
- "source": "https://github.com/guzzle/promises/tree/2.0.2"
+ "source": "https://github.com/guzzle/promises/tree/2.0.4"
},
"funding": [
{
@@ -360,20 +360,20 @@
"type": "tidelift"
}
],
- "time": "2023-12-03T20:19:20+00:00"
+ "time": "2024-10-17T10:06:22+00:00"
},
{
"name": "guzzlehttp/psr7",
- "version": "2.6.2",
+ "version": "2.7.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221"
+ "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221",
- "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
+ "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
"shasum": ""
},
"require": {
@@ -388,8 +388,8 @@
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
- "http-interop/http-factory-tests": "^0.9",
- "phpunit/phpunit": "^8.5.36 || ^9.6.15"
+ "http-interop/http-factory-tests": "0.9.0",
+ "phpunit/phpunit": "^8.5.39 || ^9.6.20"
},
"suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
@@ -460,7 +460,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/2.6.2"
+ "source": "https://github.com/guzzle/psr7/tree/2.7.0"
},
"funding": [
{
@@ -476,20 +476,20 @@
"type": "tidelift"
}
],
- "time": "2023-12-03T20:05:35+00:00"
+ "time": "2024-07-18T11:15:46+00:00"
},
{
"name": "nyholm/psr7",
- "version": "1.8.1",
+ "version": "1.8.2",
"source": {
"type": "git",
"url": "https://github.com/Nyholm/psr7.git",
- "reference": "aa5fc277a4f5508013d571341ade0c3886d4d00e"
+ "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Nyholm/psr7/zipball/aa5fc277a4f5508013d571341ade0c3886d4d00e",
- "reference": "aa5fc277a4f5508013d571341ade0c3886d4d00e",
+ "url": "https://api.github.com/repos/Nyholm/psr7/zipball/a71f2b11690f4b24d099d6b16690a90ae14fc6f3",
+ "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3",
"shasum": ""
},
"require": {
@@ -542,7 +542,7 @@
],
"support": {
"issues": "https://github.com/Nyholm/psr7/issues",
- "source": "https://github.com/Nyholm/psr7/tree/1.8.1"
+ "source": "https://github.com/Nyholm/psr7/tree/1.8.2"
},
"funding": [
{
@@ -554,7 +554,7 @@
"type": "github"
}
],
- "time": "2023-11-13T09:31:12+00:00"
+ "time": "2024-09-09T07:06:30+00:00"
},
{
"name": "opis/json-schema",
@@ -1060,16 +1060,16 @@
},
{
"name": "psr/log",
- "version": "3.0.0",
+ "version": "3.0.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
- "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001"
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001",
- "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
"shasum": ""
},
"require": {
@@ -1104,9 +1104,9 @@
"psr-3"
],
"support": {
- "source": "https://github.com/php-fig/log/tree/3.0.0"
+ "source": "https://github.com/php-fig/log/tree/3.0.2"
},
- "time": "2021-07-14T16:46:02+00:00"
+ "time": "2024-09-11T13:17:53+00:00"
},
{
"name": "psr/simple-cache",
@@ -1263,16 +1263,16 @@
},
{
"name": "symfony/cache",
- "version": "v6.4.8",
+ "version": "v6.4.14",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache.git",
- "reference": "287142df5579ce223c485b3872df3efae8390984"
+ "reference": "36fb8aa88833708e9f29014b6f15fac051a8b613"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/cache/zipball/287142df5579ce223c485b3872df3efae8390984",
- "reference": "287142df5579ce223c485b3872df3efae8390984",
+ "url": "https://api.github.com/repos/symfony/cache/zipball/36fb8aa88833708e9f29014b6f15fac051a8b613",
+ "reference": "36fb8aa88833708e9f29014b6f15fac051a8b613",
"shasum": ""
},
"require": {
@@ -1339,7 +1339,7 @@
"psr6"
],
"support": {
- "source": "https://github.com/symfony/cache/tree/v6.4.8"
+ "source": "https://github.com/symfony/cache/tree/v6.4.14"
},
"funding": [
{
@@ -1355,7 +1355,7 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-11-05T15:34:40+00:00"
},
{
"name": "symfony/cache-contracts",
@@ -1435,16 +1435,16 @@
},
{
"name": "symfony/config",
- "version": "v6.4.8",
+ "version": "v6.4.14",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
- "reference": "12e7e52515ce37191b193cf3365903c4f3951e35"
+ "reference": "4e55e7e4ffddd343671ea972216d4509f46c22ef"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/config/zipball/12e7e52515ce37191b193cf3365903c4f3951e35",
- "reference": "12e7e52515ce37191b193cf3365903c4f3951e35",
+ "url": "https://api.github.com/repos/symfony/config/zipball/4e55e7e4ffddd343671ea972216d4509f46c22ef",
+ "reference": "4e55e7e4ffddd343671ea972216d4509f46c22ef",
"shasum": ""
},
"require": {
@@ -1490,7 +1490,7 @@
"description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/config/tree/v6.4.8"
+ "source": "https://github.com/symfony/config/tree/v6.4.14"
},
"funding": [
{
@@ -1506,20 +1506,20 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-11-04T11:33:53+00:00"
},
{
"name": "symfony/console",
- "version": "v6.4.9",
+ "version": "v6.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "6edb5363ec0c78ad4d48c5128ebf4d083d89d3a9"
+ "reference": "f1fc6f47283e27336e7cebb9e8946c8de7bff9bd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/6edb5363ec0c78ad4d48c5128ebf4d083d89d3a9",
- "reference": "6edb5363ec0c78ad4d48c5128ebf4d083d89d3a9",
+ "url": "https://api.github.com/repos/symfony/console/zipball/f1fc6f47283e27336e7cebb9e8946c8de7bff9bd",
+ "reference": "f1fc6f47283e27336e7cebb9e8946c8de7bff9bd",
"shasum": ""
},
"require": {
@@ -1584,7 +1584,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v6.4.9"
+ "source": "https://github.com/symfony/console/tree/v6.4.15"
},
"funding": [
{
@@ -1600,20 +1600,20 @@
"type": "tidelift"
}
],
- "time": "2024-06-28T09:49:33+00:00"
+ "time": "2024-11-06T14:19:14+00:00"
},
{
"name": "symfony/dependency-injection",
- "version": "v6.4.9",
+ "version": "v6.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
- "reference": "a4df9dfe5da2d177af6643610c7bee2cb76a9f5e"
+ "reference": "70ab1f65a4516ef741e519ea938e6aa465e6aa36"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/a4df9dfe5da2d177af6643610c7bee2cb76a9f5e",
- "reference": "a4df9dfe5da2d177af6643610c7bee2cb76a9f5e",
+ "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/70ab1f65a4516ef741e519ea938e6aa465e6aa36",
+ "reference": "70ab1f65a4516ef741e519ea938e6aa465e6aa36",
"shasum": ""
},
"require": {
@@ -1665,7 +1665,7 @@
"description": "Allows you to standardize and centralize the way objects are constructed in your application",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/dependency-injection/tree/v6.4.9"
+ "source": "https://github.com/symfony/dependency-injection/tree/v6.4.15"
},
"funding": [
{
@@ -1681,7 +1681,7 @@
"type": "tidelift"
}
],
- "time": "2024-06-19T10:45:28+00:00"
+ "time": "2024-11-09T06:56:25+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -1752,16 +1752,16 @@
},
{
"name": "symfony/event-dispatcher",
- "version": "v6.4.8",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "8d7507f02b06e06815e56bb39aa0128e3806208b"
+ "reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8d7507f02b06e06815e56bb39aa0128e3806208b",
- "reference": "8d7507f02b06e06815e56bb39aa0128e3806208b",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e",
+ "reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e",
"shasum": ""
},
"require": {
@@ -1812,7 +1812,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.8"
+ "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.13"
},
"funding": [
{
@@ -1828,7 +1828,7 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-09-25T14:18:03+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
@@ -1908,16 +1908,16 @@
},
{
"name": "symfony/expression-language",
- "version": "v6.4.8",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/expression-language.git",
- "reference": "0b63cb437741a42104d3ccc9bf60bbd8e1acbd2a"
+ "reference": "3524904fb026356a5230cd197f9a4e6a61e0e7df"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/expression-language/zipball/0b63cb437741a42104d3ccc9bf60bbd8e1acbd2a",
- "reference": "0b63cb437741a42104d3ccc9bf60bbd8e1acbd2a",
+ "url": "https://api.github.com/repos/symfony/expression-language/zipball/3524904fb026356a5230cd197f9a4e6a61e0e7df",
+ "reference": "3524904fb026356a5230cd197f9a4e6a61e0e7df",
"shasum": ""
},
"require": {
@@ -1952,7 +1952,7 @@
"description": "Provides an engine that can compile and evaluate expressions",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/expression-language/tree/v6.4.8"
+ "source": "https://github.com/symfony/expression-language/tree/v6.4.13"
},
"funding": [
{
@@ -1968,20 +1968,20 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-10-09T08:40:40+00:00"
},
{
"name": "symfony/filesystem",
- "version": "v6.4.9",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "b51ef8059159330b74a4d52f68e671033c0fe463"
+ "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/b51ef8059159330b74a4d52f68e671033c0fe463",
- "reference": "b51ef8059159330b74a4d52f68e671033c0fe463",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/4856c9cf585d5a0313d8d35afd681a526f038dd3",
+ "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3",
"shasum": ""
},
"require": {
@@ -2018,7 +2018,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v6.4.9"
+ "source": "https://github.com/symfony/filesystem/tree/v6.4.13"
},
"funding": [
{
@@ -2034,20 +2034,20 @@
"type": "tidelift"
}
],
- "time": "2024-06-28T09:49:33+00:00"
+ "time": "2024-10-25T15:07:50+00:00"
},
{
"name": "symfony/finder",
- "version": "v6.4.8",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "3ef977a43883215d560a2cecb82ec8e62131471c"
+ "reference": "daea9eca0b08d0ed1dc9ab702a46128fd1be4958"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/3ef977a43883215d560a2cecb82ec8e62131471c",
- "reference": "3ef977a43883215d560a2cecb82ec8e62131471c",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/daea9eca0b08d0ed1dc9ab702a46128fd1be4958",
+ "reference": "daea9eca0b08d0ed1dc9ab702a46128fd1be4958",
"shasum": ""
},
"require": {
@@ -2082,7 +2082,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/finder/tree/v6.4.8"
+ "source": "https://github.com/symfony/finder/tree/v6.4.13"
},
"funding": [
{
@@ -2098,24 +2098,24 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-10-01T08:30:56+00:00"
},
{
"name": "symfony/polyfill-ctype",
- "version": "v1.30.0",
+ "version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "0424dff1c58f028c451efff2045f5d92410bd540"
+ "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540",
- "reference": "0424dff1c58f028c451efff2045f5d92410bd540",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
+ "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
},
"provide": {
"ext-ctype": "*"
@@ -2161,7 +2161,7 @@
"portable"
],
"support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0"
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0"
},
"funding": [
{
@@ -2177,24 +2177,24 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T15:07:36+00:00"
+ "time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
- "version": "v1.30.0",
+ "version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a"
+ "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/64647a7c30b2283f5d49b874d84a18fc22054b7a",
- "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
+ "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
},
"suggest": {
"ext-intl": "For best performance"
@@ -2239,7 +2239,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.30.0"
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0"
},
"funding": [
{
@@ -2255,24 +2255,24 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T15:07:36+00:00"
+ "time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
- "version": "v1.30.0",
+ "version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
- "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb"
+ "reference": "3833d7255cc303546435cb650316bff708a1c75c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/a95281b0be0d9ab48050ebd988b967875cdb9fdb",
- "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c",
+ "reference": "3833d7255cc303546435cb650316bff708a1c75c",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
},
"suggest": {
"ext-intl": "For best performance"
@@ -2320,7 +2320,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.30.0"
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0"
},
"funding": [
{
@@ -2336,24 +2336,24 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T15:07:36+00:00"
+ "time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.30.0",
+ "version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c"
+ "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c",
- "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341",
+ "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
},
"provide": {
"ext-mbstring": "*"
@@ -2400,7 +2400,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0"
},
"funding": [
{
@@ -2416,24 +2416,24 @@
"type": "tidelift"
}
],
- "time": "2024-06-19T12:30:46+00:00"
+ "time": "2024-09-09T11:45:10+00:00"
},
{
- "name": "symfony/polyfill-php80",
- "version": "v1.30.0",
+ "name": "symfony/polyfill-php81",
+ "version": "v1.31.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "77fa7995ac1b21ab60769b7323d600a991a90433"
+ "url": "https://github.com/symfony/polyfill-php81.git",
+ "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433",
- "reference": "77fa7995ac1b21ab60769b7323d600a991a90433",
+ "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
+ "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
},
"type": "library",
"extra": {
@@ -2447,7 +2447,7 @@
"bootstrap.php"
],
"psr-4": {
- "Symfony\\Polyfill\\Php80\\": ""
+ "Symfony\\Polyfill\\Php81\\": ""
},
"classmap": [
"Resources/stubs"
@@ -2458,10 +2458,6 @@
"MIT"
],
"authors": [
- {
- "name": "Ion Bazan",
- "email": "ion.bazan@gmail.com"
- },
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
@@ -2471,7 +2467,7 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+ "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
@@ -2480,7 +2476,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0"
+ "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0"
},
"funding": [
{
@@ -2496,20 +2492,20 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T15:07:36+00:00"
+ "time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/process",
- "version": "v6.4.8",
+ "version": "v6.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5"
+ "reference": "3cb242f059c14ae08591c5c4087d1fe443564392"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/8d92dd79149f29e89ee0f480254db595f6a6a2c5",
- "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5",
+ "url": "https://api.github.com/repos/symfony/process/zipball/3cb242f059c14ae08591c5c4087d1fe443564392",
+ "reference": "3cb242f059c14ae08591c5c4087d1fe443564392",
"shasum": ""
},
"require": {
@@ -2541,7 +2537,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v6.4.8"
+ "source": "https://github.com/symfony/process/tree/v6.4.15"
},
"funding": [
{
@@ -2557,7 +2553,7 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-11-06T14:19:14+00:00"
},
{
"name": "symfony/service-contracts",
@@ -2644,16 +2640,16 @@
},
{
"name": "symfony/string",
- "version": "v6.4.9",
+ "version": "v6.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "76792dbd99690a5ebef8050d9206c60c59e681d7"
+ "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/76792dbd99690a5ebef8050d9206c60c59e681d7",
- "reference": "76792dbd99690a5ebef8050d9206c60c59e681d7",
+ "url": "https://api.github.com/repos/symfony/string/zipball/73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f",
+ "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f",
"shasum": ""
},
"require": {
@@ -2710,7 +2706,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v6.4.9"
+ "source": "https://github.com/symfony/string/tree/v6.4.15"
},
"funding": [
{
@@ -2726,20 +2722,20 @@
"type": "tidelift"
}
],
- "time": "2024-06-28T09:25:38+00:00"
+ "time": "2024-11-13T13:31:12+00:00"
},
{
"name": "symfony/var-exporter",
- "version": "v6.4.9",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-exporter.git",
- "reference": "f9a060622e0d93777b7f8687ec4860191e16802e"
+ "reference": "0f605f72a363f8743001038a176eeb2a11223b51"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-exporter/zipball/f9a060622e0d93777b7f8687ec4860191e16802e",
- "reference": "f9a060622e0d93777b7f8687ec4860191e16802e",
+ "url": "https://api.github.com/repos/symfony/var-exporter/zipball/0f605f72a363f8743001038a176eeb2a11223b51",
+ "reference": "0f605f72a363f8743001038a176eeb2a11223b51",
"shasum": ""
},
"require": {
@@ -2787,7 +2783,7 @@
"serialize"
],
"support": {
- "source": "https://github.com/symfony/var-exporter/tree/v6.4.9"
+ "source": "https://github.com/symfony/var-exporter/tree/v6.4.13"
},
"funding": [
{
@@ -2803,20 +2799,20 @@
"type": "tidelift"
}
],
- "time": "2024-06-24T15:53:56+00:00"
+ "time": "2024-09-25T14:18:03+00:00"
},
{
"name": "symfony/yaml",
- "version": "v6.4.8",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "52903de178d542850f6f341ba92995d3d63e60c9"
+ "reference": "e99b4e94d124b29ee4cf3140e1b537d2dad8cec9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/52903de178d542850f6f341ba92995d3d63e60c9",
- "reference": "52903de178d542850f6f341ba92995d3d63e60c9",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/e99b4e94d124b29ee4cf3140e1b537d2dad8cec9",
+ "reference": "e99b4e94d124b29ee4cf3140e1b537d2dad8cec9",
"shasum": ""
},
"require": {
@@ -2859,7 +2855,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v6.4.8"
+ "source": "https://github.com/symfony/yaml/tree/v6.4.13"
},
"funding": [
{
@@ -2875,28 +2871,28 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-09-25T14:18:03+00:00"
},
{
"name": "twig/twig",
- "version": "v3.10.3",
+ "version": "v3.15.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
- "reference": "67f29781ffafa520b0bbfbd8384674b42db04572"
+ "reference": "2d5b3964cc21d0188633d7ddce732dc8e874db02"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/Twig/zipball/67f29781ffafa520b0bbfbd8384674b42db04572",
- "reference": "67f29781ffafa520b0bbfbd8384674b42db04572",
+ "url": "https://api.github.com/repos/twigphp/Twig/zipball/2d5b3964cc21d0188633d7ddce732dc8e874db02",
+ "reference": "2d5b3964cc21d0188633d7ddce732dc8e874db02",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
+ "php": ">=8.0.2",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-mbstring": "^1.3",
- "symfony/polyfill-php80": "^1.22"
+ "symfony/polyfill-php81": "^1.29"
},
"require-dev": {
"psr/container": "^1.0|^2.0",
@@ -2942,7 +2938,7 @@
],
"support": {
"issues": "https://github.com/twigphp/Twig/issues",
- "source": "https://github.com/twigphp/Twig/tree/v3.10.3"
+ "source": "https://github.com/twigphp/Twig/tree/v3.15.0"
},
"funding": [
{
@@ -2954,7 +2950,7 @@
"type": "tidelift"
}
],
- "time": "2024-05-16T10:04:27+00:00"
+ "time": "2024-11-17T15:59:19+00:00"
},
{
"name": "webmozart/assert",
@@ -3140,16 +3136,16 @@
},
{
"name": "composer/ca-bundle",
- "version": "1.5.1",
+ "version": "1.5.3",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
- "reference": "063d9aa8696582f5a41dffbbaf3c81024f0a604a"
+ "reference": "3b1fc3f0be055baa7c6258b1467849c3e8204eb2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/ca-bundle/zipball/063d9aa8696582f5a41dffbbaf3c81024f0a604a",
- "reference": "063d9aa8696582f5a41dffbbaf3c81024f0a604a",
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/3b1fc3f0be055baa7c6258b1467849c3e8204eb2",
+ "reference": "3b1fc3f0be055baa7c6258b1467849c3e8204eb2",
"shasum": ""
},
"require": {
@@ -3159,8 +3155,8 @@
},
"require-dev": {
"phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^8 || ^9",
"psr/log": "^1.0 || ^2.0 || ^3.0",
- "symfony/phpunit-bridge": "^4.2 || ^5",
"symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0"
},
"type": "library",
@@ -3196,7 +3192,7 @@
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/ca-bundle/issues",
- "source": "https://github.com/composer/ca-bundle/tree/1.5.1"
+ "source": "https://github.com/composer/ca-bundle/tree/1.5.3"
},
"funding": [
{
@@ -3212,20 +3208,20 @@
"type": "tidelift"
}
],
- "time": "2024-07-08T15:28:20+00:00"
+ "time": "2024-11-04T10:15:26+00:00"
},
{
"name": "composer/class-map-generator",
- "version": "1.3.4",
+ "version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/composer/class-map-generator.git",
- "reference": "b1b3fd0b4eaf3ddf3ee230bc340bf3fff454a1a3"
+ "reference": "98bbf6780e56e0fd2404fe4b82eb665a0f93b783"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/class-map-generator/zipball/b1b3fd0b4eaf3ddf3ee230bc340bf3fff454a1a3",
- "reference": "b1b3fd0b4eaf3ddf3ee230bc340bf3fff454a1a3",
+ "url": "https://api.github.com/repos/composer/class-map-generator/zipball/98bbf6780e56e0fd2404fe4b82eb665a0f93b783",
+ "reference": "98bbf6780e56e0fd2404fe4b82eb665a0f93b783",
"shasum": ""
},
"require": {
@@ -3238,8 +3234,8 @@
"phpstan/phpstan-deprecation-rules": "^1",
"phpstan/phpstan-phpunit": "^1",
"phpstan/phpstan-strict-rules": "^1.1",
- "symfony/filesystem": "^5.4 || ^6",
- "symfony/phpunit-bridge": "^5"
+ "phpunit/phpunit": "^8",
+ "symfony/filesystem": "^5.4 || ^6"
},
"type": "library",
"extra": {
@@ -3269,7 +3265,7 @@
],
"support": {
"issues": "https://github.com/composer/class-map-generator/issues",
- "source": "https://github.com/composer/class-map-generator/tree/1.3.4"
+ "source": "https://github.com/composer/class-map-generator/tree/1.4.0"
},
"funding": [
{
@@ -3285,52 +3281,52 @@
"type": "tidelift"
}
],
- "time": "2024-06-12T14:13:04+00:00"
+ "time": "2024-10-03T18:14:00+00:00"
},
{
"name": "composer/composer",
- "version": "2.7.7",
+ "version": "2.8.3",
"source": {
"type": "git",
"url": "https://github.com/composer/composer.git",
- "reference": "291942978f39435cf904d33739f98d7d4eca7b23"
+ "reference": "2a7c71266b2545a3bed9f4860734081963f6e688"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/composer/zipball/291942978f39435cf904d33739f98d7d4eca7b23",
- "reference": "291942978f39435cf904d33739f98d7d4eca7b23",
+ "url": "https://api.github.com/repos/composer/composer/zipball/2a7c71266b2545a3bed9f4860734081963f6e688",
+ "reference": "2a7c71266b2545a3bed9f4860734081963f6e688",
"shasum": ""
},
"require": {
- "composer/ca-bundle": "^1.0",
- "composer/class-map-generator": "^1.3.3",
+ "composer/ca-bundle": "^1.5",
+ "composer/class-map-generator": "^1.4.0",
"composer/metadata-minifier": "^1.0",
- "composer/pcre": "^2.1 || ^3.1",
+ "composer/pcre": "^2.2 || ^3.2",
"composer/semver": "^3.3",
"composer/spdx-licenses": "^1.5.7",
"composer/xdebug-handler": "^2.0.2 || ^3.0.3",
- "justinrainbow/json-schema": "^5.2.11",
+ "justinrainbow/json-schema": "^5.3",
"php": "^7.2.5 || ^8.0",
"psr/log": "^1.0 || ^2.0 || ^3.0",
- "react/promise": "^2.8 || ^3",
+ "react/promise": "^2.11 || ^3.2",
"seld/jsonlint": "^1.4",
"seld/phar-utils": "^1.2",
"seld/signal-handler": "^2.0",
- "symfony/console": "^5.4.11 || ^6.0.11 || ^7",
- "symfony/filesystem": "^5.4 || ^6.0 || ^7",
- "symfony/finder": "^5.4 || ^6.0 || ^7",
+ "symfony/console": "^5.4.35 || ^6.3.12 || ^7.0.3",
+ "symfony/filesystem": "^5.4.35 || ^6.3.12 || ^7.0.3",
+ "symfony/finder": "^5.4.35 || ^6.3.12 || ^7.0.3",
"symfony/polyfill-php73": "^1.24",
"symfony/polyfill-php80": "^1.24",
"symfony/polyfill-php81": "^1.24",
- "symfony/process": "^5.4 || ^6.0 || ^7"
+ "symfony/process": "^5.4.35 || ^6.3.12 || ^7.0.3"
},
"require-dev": {
- "phpstan/phpstan": "^1.11.0",
+ "phpstan/phpstan": "^1.11.8",
"phpstan/phpstan-deprecation-rules": "^1.2.0",
"phpstan/phpstan-phpunit": "^1.4.0",
"phpstan/phpstan-strict-rules": "^1.6.0",
"phpstan/phpstan-symfony": "^1.4.0",
- "symfony/phpunit-bridge": "^6.4.1 || ^7.0.1"
+ "symfony/phpunit-bridge": "^6.4.3 || ^7.0.1"
},
"suggest": {
"ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
@@ -3343,7 +3339,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.7-dev"
+ "dev-main": "2.8-dev"
},
"phpstan": {
"includes": [
@@ -3383,7 +3379,7 @@
"irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/composer/issues",
"security": "https://github.com/composer/composer/security/policy",
- "source": "https://github.com/composer/composer/tree/2.7.7"
+ "source": "https://github.com/composer/composer/tree/2.8.3"
},
"funding": [
{
@@ -3399,7 +3395,7 @@
"type": "tidelift"
}
],
- "time": "2024-06-10T20:11:12+00:00"
+ "time": "2024-11-17T12:13:04+00:00"
},
{
"name": "composer/metadata-minifier",
@@ -3472,30 +3468,38 @@
},
{
"name": "composer/pcre",
- "version": "3.1.4",
+ "version": "3.3.2",
"source": {
"type": "git",
"url": "https://github.com/composer/pcre.git",
- "reference": "04229f163664973f68f38f6f73d917799168ef24"
+ "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/pcre/zipball/04229f163664973f68f38f6f73d917799168ef24",
- "reference": "04229f163664973f68f38f6f73d917799168ef24",
+ "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
+ "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
"shasum": ""
},
"require": {
"php": "^7.4 || ^8.0"
},
+ "conflict": {
+ "phpstan/phpstan": "<1.11.10"
+ },
"require-dev": {
- "phpstan/phpstan": "^1.3",
- "phpstan/phpstan-strict-rules": "^1.1",
- "symfony/phpunit-bridge": "^5"
+ "phpstan/phpstan": "^1.12 || ^2",
+ "phpstan/phpstan-strict-rules": "^1 || ^2",
+ "phpunit/phpunit": "^8 || ^9"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "3.x-dev"
+ },
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
}
},
"autoload": {
@@ -3523,7 +3527,7 @@
],
"support": {
"issues": "https://github.com/composer/pcre/issues",
- "source": "https://github.com/composer/pcre/tree/3.1.4"
+ "source": "https://github.com/composer/pcre/tree/3.3.2"
},
"funding": [
{
@@ -3539,28 +3543,28 @@
"type": "tidelift"
}
],
- "time": "2024-05-27T13:40:54+00:00"
+ "time": "2024-11-12T16:29:46+00:00"
},
{
"name": "composer/semver",
- "version": "3.4.2",
+ "version": "3.4.3",
"source": {
"type": "git",
"url": "https://github.com/composer/semver.git",
- "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6"
+ "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6",
- "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6",
+ "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
+ "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
"shasum": ""
},
"require": {
"php": "^5.3.2 || ^7.0 || ^8.0"
},
"require-dev": {
- "phpstan/phpstan": "^1.4",
- "symfony/phpunit-bridge": "^4.2 || ^5"
+ "phpstan/phpstan": "^1.11",
+ "symfony/phpunit-bridge": "^3 || ^7"
},
"type": "library",
"extra": {
@@ -3604,7 +3608,7 @@
"support": {
"irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/semver/issues",
- "source": "https://github.com/composer/semver/tree/3.4.2"
+ "source": "https://github.com/composer/semver/tree/3.4.3"
},
"funding": [
{
@@ -3620,7 +3624,7 @@
"type": "tidelift"
}
],
- "time": "2024-07-12T11:35:52+00:00"
+ "time": "2024-09-19T14:15:21+00:00"
},
{
"name": "composer/spdx-licenses",
@@ -3770,21 +3774,21 @@
},
{
"name": "cpsit/php-cs-fixer-config",
- "version": "1.1.0",
+ "version": "1.2.0",
"source": {
"type": "git",
"url": "https://github.com/CPS-IT/php-cs-fixer-config.git",
- "reference": "6bc0b94688dc21e897e3f6297b02b43f6bea9755"
+ "reference": "ce51940f501753387160c25d83852e4a71f5bb76"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/CPS-IT/php-cs-fixer-config/zipball/6bc0b94688dc21e897e3f6297b02b43f6bea9755",
- "reference": "6bc0b94688dc21e897e3f6297b02b43f6bea9755",
+ "url": "https://api.github.com/repos/CPS-IT/php-cs-fixer-config/zipball/ce51940f501753387160c25d83852e4a71f5bb76",
+ "reference": "ce51940f501753387160c25d83852e4a71f5bb76",
"shasum": ""
},
"require": {
"friendsofphp/php-cs-fixer": "^3.14",
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0"
+ "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
},
"require-dev": {
"armin/editorconfig-cli": "^1.8 || ^2.0",
@@ -3794,8 +3798,8 @@
"phpstan/phpstan-deprecation-rules": "^1.1",
"phpstan/phpstan-phpunit": "^1.3",
"phpstan/phpstan-strict-rules": "^1.5",
- "phpunit/phpunit": "^10.5",
- "rector/rector": "^0.18.13"
+ "phpunit/phpunit": "^10.1 || ^11.0",
+ "rector/rector": "^1.0.0"
},
"type": "library",
"autoload": {
@@ -3818,9 +3822,72 @@
"description": "Shared PHP-CS-Fixer configuration for CPS projects",
"support": {
"issues": "https://github.com/CPS-IT/php-cs-fixer-config/issues",
- "source": "https://github.com/CPS-IT/php-cs-fixer-config/tree/1.1.0"
+ "source": "https://github.com/CPS-IT/php-cs-fixer-config/tree/1.2.0"
+ },
+ "time": "2024-11-07T07:08:55+00:00"
+ },
+ {
+ "name": "cypresslab/gitelephant",
+ "version": "v4.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/matteosister/GitElephant.git",
+ "reference": "6f396bdb41fa0b2e5e414e16188f6eb107021947"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/matteosister/GitElephant/zipball/6f396bdb41fa0b2e5e414e16188f6eb107021947",
+ "reference": "6f396bdb41fa0b2e5e414e16188f6eb107021947",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.0",
+ "phpcollection/phpcollection": "~0.4|~0.5",
+ "symfony/filesystem": ">=3.4",
+ "symfony/finder": ">=3.4",
+ "symfony/process": ">=3.4"
+ },
+ "require-dev": {
+ "mockery/mockery": "~1.1",
+ "php": ">=7.2.0",
+ "phpstan/phpstan": "*",
+ "phpstan/phpstan-phpunit": "*",
+ "phpunit/phpunit": "~8.0|~9.0",
+ "rector/rector": "*",
+ "symplify/easy-coding-standard": "*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "GitElephant": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-3.0+"
+ ],
+ "authors": [
+ {
+ "name": "Matteo Giachino",
+ "email": "matteog@gmail.com"
+ }
+ ],
+ "description": "An abstraction layer for git written in PHP",
+ "homepage": "http://gitelephant.cypresslab.net/",
+ "keywords": [
+ "git"
+ ],
+ "support": {
+ "issues": "https://github.com/matteosister/GitElephant/issues",
+ "source": "https://github.com/matteosister/GitElephant/tree/v4.5.0"
},
- "time": "2023-12-29T10:59:18+00:00"
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/cypresslab/gitelephant",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-10-08T12:56:52+00:00"
},
{
"name": "donatj/mock-webserver",
@@ -3898,18 +3965,81 @@
],
"time": "2024-01-22T20:41:09+00:00"
},
+ {
+ "name": "eliashaeussler/version-bumper",
+ "version": "1.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/eliashaeussler/version-bumper.git",
+ "reference": "dfaa257fd0fc30c2ae81ae23760e743d5cc3f869"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/eliashaeussler/version-bumper/zipball/dfaa257fd0fc30c2ae81ae23760e743d5cc3f869",
+ "reference": "dfaa257fd0fc30c2ae81ae23760e743d5cc3f869",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "^2.0",
+ "cuyz/valinor": "^1.0",
+ "cypresslab/gitelephant": "^4.5",
+ "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
+ "symfony/console": "^5.4 || ^6.4 || ^7.0",
+ "symfony/filesystem": "^5.4 || ^6.4 || ^7.0",
+ "symfony/yaml": "^5.4 || ^6.4 || ^7.0"
+ },
+ "require-dev": {
+ "armin/editorconfig-cli": "^1.8 || ^2.0",
+ "composer/composer": "^2.2",
+ "eliashaeussler/php-cs-fixer-config": "^2.0",
+ "eliashaeussler/phpstan-config": "^2.0",
+ "eliashaeussler/rector-config": "^3.0",
+ "ergebnis/composer-normalize": "^2.30",
+ "phpstan/extension-installer": "^1.2",
+ "phpstan/phpstan-phpunit": "^1.1",
+ "phpstan/phpstan-symfony": "^1.4",
+ "phpunit/phpunit": "^10.2 || ^11.0"
+ },
+ "type": "composer-plugin",
+ "extra": {
+ "class": "EliasHaeussler\\VersionBumper\\VersionBumperPlugin"
+ },
+ "autoload": {
+ "psr-4": {
+ "EliasHaeussler\\VersionBumper\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "GPL-3.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "Elias Häußler",
+ "email": "elias@haeussler.dev",
+ "homepage": "https://haeussler.dev",
+ "role": "Maintainer"
+ }
+ ],
+ "description": "Composer plugin to bump project versions during release preparations",
+ "support": {
+ "issues": "https://github.com/eliashaeussler/version-bumper/issues",
+ "source": "https://github.com/eliashaeussler/version-bumper/tree/1.3.1"
+ },
+ "time": "2024-11-25T20:28:40+00:00"
+ },
{
"name": "ergebnis/composer-normalize",
- "version": "2.43.0",
+ "version": "2.44.0",
"source": {
"type": "git",
"url": "https://github.com/ergebnis/composer-normalize.git",
- "reference": "4b46330c84bb8f43fac79f5c5a05162fc7c80d75"
+ "reference": "bd0c446426bb837ae0cc9f97948167e658bd11d2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/composer-normalize/zipball/4b46330c84bb8f43fac79f5c5a05162fc7c80d75",
- "reference": "4b46330c84bb8f43fac79f5c5a05162fc7c80d75",
+ "url": "https://api.github.com/repos/ergebnis/composer-normalize/zipball/bd0c446426bb837ae0cc9f97948167e658bd11d2",
+ "reference": "bd0c446426bb837ae0cc9f97948167e658bd11d2",
"shasum": ""
},
"require": {
@@ -3920,20 +4050,20 @@
"ext-json": "*",
"justinrainbow/json-schema": "^5.2.12",
"localheinz/diff": "^1.1.1",
- "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0"
+ "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
},
"require-dev": {
"composer/composer": "^2.7.7",
- "ergebnis/license": "^2.4.0",
- "ergebnis/php-cs-fixer-config": "^6.30.1",
- "ergebnis/phpunit-slow-test-detector": "^2.14.0",
+ "ergebnis/license": "^2.5.0",
+ "ergebnis/php-cs-fixer-config": "^6.37.0",
+ "ergebnis/phpunit-slow-test-detector": "^2.16.0",
"fakerphp/faker": "^1.23.1",
"infection/infection": "~0.26.6",
- "phpunit/phpunit": "^9.6.19",
+ "phpunit/phpunit": "^9.6.20",
"psalm/plugin-phpunit": "~0.19.0",
- "rector/rector": "^1.1.0",
- "symfony/filesystem": "^5.4.40",
- "vimeo/psalm": "^5.24.0"
+ "rector/rector": "^1.2.5",
+ "symfony/filesystem": "^5.4.41",
+ "vimeo/psalm": "^5.26.1"
},
"type": "composer-plugin",
"extra": {
@@ -3973,37 +4103,40 @@
"security": "https://github.com/ergebnis/composer-normalize/blob/main/.github/SECURITY.md",
"source": "https://github.com/ergebnis/composer-normalize"
},
- "time": "2024-06-16T13:22:18+00:00"
+ "time": "2024-09-30T21:56:22+00:00"
},
{
"name": "ergebnis/json",
- "version": "1.2.0",
+ "version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/ergebnis/json.git",
- "reference": "a457f25a5ba7ea11fc94f84d53678c5211abfce0"
+ "reference": "7656ac2aa6c2ca4408f96f599e9a17a22c464f69"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/json/zipball/a457f25a5ba7ea11fc94f84d53678c5211abfce0",
- "reference": "a457f25a5ba7ea11fc94f84d53678c5211abfce0",
+ "url": "https://api.github.com/repos/ergebnis/json/zipball/7656ac2aa6c2ca4408f96f599e9a17a22c464f69",
+ "reference": "7656ac2aa6c2ca4408f96f599e9a17a22c464f69",
"shasum": ""
},
"require": {
"ext-json": "*",
- "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0"
+ "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
},
"require-dev": {
- "ergebnis/data-provider": "^3.2.0",
- "ergebnis/license": "^2.4.0",
- "ergebnis/php-cs-fixer-config": "^6.20.0",
- "ergebnis/phpunit-slow-test-detector": "^2.9.0",
- "fakerphp/faker": "^1.23.1",
+ "ergebnis/data-provider": "^3.3.0",
+ "ergebnis/license": "^2.5.0",
+ "ergebnis/php-cs-fixer-config": "^6.37.0",
+ "ergebnis/phpunit-slow-test-detector": "^2.16.1",
+ "fakerphp/faker": "^1.24.0",
"infection/infection": "~0.26.6",
- "phpunit/phpunit": "^9.6.16",
- "psalm/plugin-phpunit": "~0.18.4",
- "rector/rector": "~0.19.2",
- "vimeo/psalm": "^5.20.0"
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^1.12.10",
+ "phpstan/phpstan-deprecation-rules": "^1.2.1",
+ "phpstan/phpstan-phpunit": "^1.4.0",
+ "phpstan/phpstan-strict-rules": "^1.6.1",
+ "phpunit/phpunit": "^9.6.18",
+ "rector/rector": "^1.2.10"
},
"type": "library",
"extra": {
@@ -4038,20 +4171,20 @@
"security": "https://github.com/ergebnis/json/blob/main/.github/SECURITY.md",
"source": "https://github.com/ergebnis/json"
},
- "time": "2024-01-29T15:09:24+00:00"
+ "time": "2024-11-17T11:51:22+00:00"
},
{
"name": "ergebnis/json-normalizer",
- "version": "4.5.0",
+ "version": "4.7.0",
"source": {
"type": "git",
"url": "https://github.com/ergebnis/json-normalizer.git",
- "reference": "f0ee9e70739f121b27fac8b743e4a52b23de2152"
+ "reference": "36d86389095736944a5954ec440552bbe92e425f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/json-normalizer/zipball/f0ee9e70739f121b27fac8b743e4a52b23de2152",
- "reference": "f0ee9e70739f121b27fac8b743e4a52b23de2152",
+ "url": "https://api.github.com/repos/ergebnis/json-normalizer/zipball/36d86389095736944a5954ec440552bbe92e425f",
+ "reference": "36d86389095736944a5954ec440552bbe92e425f",
"shasum": ""
},
"require": {
@@ -4061,25 +4194,38 @@
"ergebnis/json-schema-validator": "^4.2.0",
"ext-json": "*",
"justinrainbow/json-schema": "^5.2.12",
- "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0"
+ "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
},
"require-dev": {
- "composer/semver": "^3.4.0",
- "ergebnis/data-provider": "^3.2.0",
- "ergebnis/license": "^2.4.0",
- "ergebnis/php-cs-fixer-config": "^6.20.0",
- "ergebnis/phpunit-slow-test-detector": "^2.9.0",
- "fakerphp/faker": "^1.23.1",
+ "composer/semver": "^3.4.3",
+ "ergebnis/composer-normalize": "^2.44.0",
+ "ergebnis/data-provider": "^3.3.0",
+ "ergebnis/license": "^2.5.0",
+ "ergebnis/php-cs-fixer-config": "^6.37.0",
+ "ergebnis/phpunit-slow-test-detector": "^2.16.1",
+ "fakerphp/faker": "^1.24.0",
"infection/infection": "~0.26.6",
- "phpunit/phpunit": "^9.6.16",
- "psalm/plugin-phpunit": "~0.18.4",
- "rector/rector": "~0.19.4",
- "vimeo/psalm": "^5.20.0"
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^1.12.10",
+ "phpstan/phpstan-deprecation-rules": "^1.2.1",
+ "phpstan/phpstan-phpunit": "^1.4.0",
+ "phpstan/phpstan-strict-rules": "^1.6.1",
+ "phpunit/phpunit": "^9.6.19",
+ "rector/rector": "^1.2.10"
},
"suggest": {
"composer/semver": "If you want to use ComposerJsonNormalizer or VersionConstraintNormalizer"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.7-dev"
+ },
+ "composer-normalize": {
+ "indent-size": 2,
+ "indent-style": "space"
+ }
+ },
"autoload": {
"psr-4": {
"Ergebnis\\Json\\Normalizer\\": "src/"
@@ -4107,39 +4253,46 @@
"security": "https://github.com/ergebnis/json-normalizer/blob/main/.github/SECURITY.md",
"source": "https://github.com/ergebnis/json-normalizer"
},
- "time": "2024-01-30T09:10:15+00:00"
+ "time": "2024-11-17T20:34:42+00:00"
},
{
"name": "ergebnis/json-pointer",
- "version": "3.4.0",
+ "version": "3.6.0",
"source": {
"type": "git",
"url": "https://github.com/ergebnis/json-pointer.git",
- "reference": "b654757d873050622c2166f55ab25d04685261c5"
+ "reference": "4fc85d8edb74466d282119d8d9541ec7cffc0798"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/json-pointer/zipball/b654757d873050622c2166f55ab25d04685261c5",
- "reference": "b654757d873050622c2166f55ab25d04685261c5",
+ "url": "https://api.github.com/repos/ergebnis/json-pointer/zipball/4fc85d8edb74466d282119d8d9541ec7cffc0798",
+ "reference": "4fc85d8edb74466d282119d8d9541ec7cffc0798",
"shasum": ""
},
"require": {
- "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0"
+ "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
},
"require-dev": {
+ "ergebnis/composer-normalize": "^2.43.0",
"ergebnis/data-provider": "^3.2.0",
"ergebnis/license": "^2.4.0",
- "ergebnis/php-cs-fixer-config": "^6.20.0",
- "ergebnis/phpunit-slow-test-detector": "^2.9.0",
+ "ergebnis/php-cs-fixer-config": "^6.32.0",
+ "ergebnis/phpunit-slow-test-detector": "^2.15.0",
"fakerphp/faker": "^1.23.1",
"infection/infection": "~0.26.6",
- "phpunit/phpunit": "^9.6.16",
- "psalm/plugin-phpunit": "~0.18.4",
- "rector/rector": "~0.19.2",
- "vimeo/psalm": "^5.20.0"
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^1.12.10",
+ "phpstan/phpstan-deprecation-rules": "^1.2.1",
+ "phpstan/phpstan-phpunit": "^1.4.0",
+ "phpstan/phpstan-strict-rules": "^1.6.1",
+ "phpunit/phpunit": "^9.6.19",
+ "rector/rector": "^1.2.10"
},
"type": "library",
"extra": {
+ "branch-alias": {
+ "dev-main": "3.6-dev"
+ },
"composer-normalize": {
"indent-size": 2,
"indent-style": "space"
@@ -4173,38 +4326,41 @@
"security": "https://github.com/ergebnis/json-pointer/blob/main/.github/SECURITY.md",
"source": "https://github.com/ergebnis/json-pointer"
},
- "time": "2024-01-29T16:37:15+00:00"
+ "time": "2024-11-17T12:37:06+00:00"
},
{
"name": "ergebnis/json-printer",
- "version": "3.5.0",
+ "version": "3.7.0",
"source": {
"type": "git",
"url": "https://github.com/ergebnis/json-printer.git",
- "reference": "549e16fe6de34b8c3aee7b421be12caa552f3ced"
+ "reference": "ced41fce7854152f0e8f38793c2ffe59513cdd82"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/json-printer/zipball/549e16fe6de34b8c3aee7b421be12caa552f3ced",
- "reference": "549e16fe6de34b8c3aee7b421be12caa552f3ced",
+ "url": "https://api.github.com/repos/ergebnis/json-printer/zipball/ced41fce7854152f0e8f38793c2ffe59513cdd82",
+ "reference": "ced41fce7854152f0e8f38793c2ffe59513cdd82",
"shasum": ""
},
"require": {
"ext-json": "*",
"ext-mbstring": "*",
- "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0"
+ "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
},
"require-dev": {
- "ergebnis/data-provider": "^3.2.0",
- "ergebnis/license": "^2.4.0",
- "ergebnis/php-cs-fixer-config": "^6.20.0",
- "ergebnis/phpunit-slow-test-detector": "^2.9.0",
- "fakerphp/faker": "^1.23.1",
+ "ergebnis/data-provider": "^3.3.0",
+ "ergebnis/license": "^2.5.0",
+ "ergebnis/php-cs-fixer-config": "^6.37.0",
+ "ergebnis/phpunit-slow-test-detector": "^2.16.1",
+ "fakerphp/faker": "^1.24.0",
"infection/infection": "~0.26.6",
- "phpunit/phpunit": "^9.6.16",
- "psalm/plugin-phpunit": "~0.18.4",
- "rector/rector": "~0.19.2",
- "vimeo/psalm": "^5.20.0"
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^1.12.10",
+ "phpstan/phpstan-deprecation-rules": "^1.2.1",
+ "phpstan/phpstan-phpunit": "^1.4.1",
+ "phpstan/phpstan-strict-rules": "^1.6.1",
+ "phpunit/phpunit": "^9.6.21",
+ "rector/rector": "^1.2.10"
},
"type": "library",
"autoload": {
@@ -4235,43 +4391,50 @@
"security": "https://github.com/ergebnis/json-printer/blob/main/.github/SECURITY.md",
"source": "https://github.com/ergebnis/json-printer"
},
- "time": "2024-01-29T15:33:37+00:00"
+ "time": "2024-11-17T11:20:51+00:00"
},
{
"name": "ergebnis/json-schema-validator",
- "version": "4.2.0",
+ "version": "4.4.0",
"source": {
"type": "git",
"url": "https://github.com/ergebnis/json-schema-validator.git",
- "reference": "10ed514fdc3f9b71f8a92c567afea21a2f6fa1ef"
+ "reference": "85f90c81f718aebba1d738800af83eeb447dc7ec"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/json-schema-validator/zipball/10ed514fdc3f9b71f8a92c567afea21a2f6fa1ef",
- "reference": "10ed514fdc3f9b71f8a92c567afea21a2f6fa1ef",
+ "url": "https://api.github.com/repos/ergebnis/json-schema-validator/zipball/85f90c81f718aebba1d738800af83eeb447dc7ec",
+ "reference": "85f90c81f718aebba1d738800af83eeb447dc7ec",
"shasum": ""
},
"require": {
"ergebnis/json": "^1.2.0",
"ergebnis/json-pointer": "^3.4.0",
"ext-json": "*",
- "justinrainbow/json-schema": "^5.2.12",
- "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0"
+ "justinrainbow/json-schema": "^5.2.12 || ^6.0.0",
+ "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
},
"require-dev": {
- "ergebnis/data-provider": "^3.2.0",
- "ergebnis/license": "^2.4.0",
- "ergebnis/php-cs-fixer-config": "^6.20.0",
- "ergebnis/phpunit-slow-test-detector": "^2.9.0",
- "fakerphp/faker": "^1.23.1",
+ "ergebnis/composer-normalize": "^2.44.0",
+ "ergebnis/data-provider": "^3.3.0",
+ "ergebnis/license": "^2.5.0",
+ "ergebnis/php-cs-fixer-config": "^6.37.0",
+ "ergebnis/phpunit-slow-test-detector": "^2.16.1",
+ "fakerphp/faker": "^1.24.0",
"infection/infection": "~0.26.6",
- "phpunit/phpunit": "^9.6.16",
- "psalm/plugin-phpunit": "~0.18.4",
- "rector/rector": "~0.19.2",
- "vimeo/psalm": "^5.20.0"
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^1.12.10",
+ "phpstan/phpstan-deprecation-rules": "^1.2.1",
+ "phpstan/phpstan-phpunit": "^1.4.0",
+ "phpstan/phpstan-strict-rules": "^1.6.1",
+ "phpunit/phpunit": "^9.6.20",
+ "rector/rector": "^1.2.10"
},
"type": "library",
"extra": {
+ "branch-alias": {
+ "dev-main": "4.4-dev"
+ },
"composer-normalize": {
"indent-size": 2,
"indent-style": "space"
@@ -4305,7 +4468,7 @@
"security": "https://github.com/ergebnis/json-schema-validator/blob/main/.github/SECURITY.md",
"source": "https://github.com/ergebnis/json-schema-validator"
},
- "time": "2024-01-29T16:50:15+00:00"
+ "time": "2024-11-18T06:32:28+00:00"
},
{
"name": "evenement/evenement",
@@ -4356,16 +4519,16 @@
},
{
"name": "fidry/cpu-core-counter",
- "version": "1.1.0",
+ "version": "1.2.0",
"source": {
"type": "git",
"url": "https://github.com/theofidry/cpu-core-counter.git",
- "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42"
+ "reference": "8520451a140d3f46ac33042715115e290cf5785f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/f92996c4d5c1a696a6a970e20f7c4216200fcc42",
- "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42",
+ "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f",
+ "reference": "8520451a140d3f46ac33042715115e290cf5785f",
"shasum": ""
},
"require": {
@@ -4405,7 +4568,7 @@
],
"support": {
"issues": "https://github.com/theofidry/cpu-core-counter/issues",
- "source": "https://github.com/theofidry/cpu-core-counter/tree/1.1.0"
+ "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0"
},
"funding": [
{
@@ -4413,20 +4576,20 @@
"type": "github"
}
],
- "time": "2024-02-07T09:43:46+00:00"
+ "time": "2024-08-06T10:04:20+00:00"
},
{
"name": "friendsofphp/php-cs-fixer",
- "version": "v3.59.3",
+ "version": "v3.65.0",
"source": {
"type": "git",
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
- "reference": "30ba9ecc2b0e5205e578fe29973c15653d9bfd29"
+ "reference": "79d4f3e77b250a7d8043d76c6af8f0695e8a469f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/30ba9ecc2b0e5205e578fe29973c15653d9bfd29",
- "reference": "30ba9ecc2b0e5205e578fe29973c15653d9bfd29",
+ "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/79d4f3e77b250a7d8043d76c6af8f0695e8a469f",
+ "reference": "79d4f3e77b250a7d8043d76c6af8f0695e8a469f",
"shasum": ""
},
"require": {
@@ -4436,7 +4599,7 @@
"ext-filter": "*",
"ext-json": "*",
"ext-tokenizer": "*",
- "fidry/cpu-core-counter": "^1.0",
+ "fidry/cpu-core-counter": "^1.2",
"php": "^7.4 || ^8.0",
"react/child-process": "^0.6.5",
"react/event-loop": "^1.0",
@@ -4456,18 +4619,18 @@
"symfony/stopwatch": "^5.4 || ^6.0 || ^7.0"
},
"require-dev": {
- "facile-it/paraunit": "^1.3 || ^2.3",
- "infection/infection": "^0.29.5",
- "justinrainbow/json-schema": "^5.2",
+ "facile-it/paraunit": "^1.3.1 || ^2.4",
+ "infection/infection": "^0.29.8",
+ "justinrainbow/json-schema": "^5.3 || ^6.0",
"keradus/cli-executor": "^2.1",
- "mikey179/vfsstream": "^1.6.11",
+ "mikey179/vfsstream": "^1.6.12",
"php-coveralls/php-coveralls": "^2.7",
"php-cs-fixer/accessible-object": "^1.1",
"php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.5",
"php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.5",
- "phpunit/phpunit": "^9.6.19 || ^10.5.21 || ^11.2",
- "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0",
- "symfony/yaml": "^5.4 || ^6.0 || ^7.0"
+ "phpunit/phpunit": "^9.6.21 || ^10.5.38 || ^11.4.3",
+ "symfony/var-dumper": "^5.4.47 || ^6.4.15 || ^7.1.8",
+ "symfony/yaml": "^5.4.45 || ^6.4.13 || ^7.1.6"
},
"suggest": {
"ext-dom": "For handling output formats in XML",
@@ -4508,7 +4671,7 @@
],
"support": {
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
- "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.59.3"
+ "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.65.0"
},
"funding": [
{
@@ -4516,7 +4679,7 @@
"type": "github"
}
],
- "time": "2024-06-16T14:17:03+00:00"
+ "time": "2024-11-25T00:39:24+00:00"
},
{
"name": "idiosyncratic/editorconfig",
@@ -4694,16 +4857,16 @@
},
{
"name": "myclabs/deep-copy",
- "version": "1.12.0",
+ "version": "1.12.1",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c"
+ "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c",
- "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845",
+ "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845",
"shasum": ""
},
"require": {
@@ -4742,7 +4905,7 @@
],
"support": {
"issues": "https://github.com/myclabs/DeepCopy/issues",
- "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0"
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1"
},
"funding": [
{
@@ -4750,20 +4913,20 @@
"type": "tidelift"
}
],
- "time": "2024-06-12T14:39:25+00:00"
+ "time": "2024-11-08T17:47:46+00:00"
},
{
"name": "nikic/php-parser",
- "version": "v5.1.0",
+ "version": "v5.3.1",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1"
+ "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/683130c2ff8c2739f4822ff7ac5c873ec529abd1",
- "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b",
+ "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b",
"shasum": ""
},
"require": {
@@ -4806,9 +4969,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v5.1.0"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1"
},
- "time": "2024-07-01T20:03:41+00:00"
+ "time": "2024-10-08T18:51:32+00:00"
},
{
"name": "phar-io/manifest",
@@ -4928,24 +5091,154 @@
},
"time": "2022-02-21T01:04:05+00:00"
},
+ {
+ "name": "phpcollection/phpcollection",
+ "version": "0.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/schmittjoh/php-collection.git",
+ "reference": "56d18c8c2c0400f2838703246ac7de919a605763"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/schmittjoh/php-collection/zipball/56d18c8c2c0400f2838703246ac7de919a605763",
+ "reference": "56d18c8c2c0400f2838703246ac7de919a605763",
+ "shasum": ""
+ },
+ "require": {
+ "phpoption/phpoption": "1.*"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "0.4-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "PhpCollection": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache2"
+ ],
+ "authors": [
+ {
+ "name": "Johannes M. Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "General-Purpose Collection Library for PHP",
+ "keywords": [
+ "collection",
+ "list",
+ "map",
+ "sequence",
+ "set"
+ ],
+ "support": {
+ "issues": "https://github.com/schmittjoh/php-collection/issues",
+ "source": "https://github.com/schmittjoh/php-collection/tree/0.6.0"
+ },
+ "time": "2022-03-21T13:02:41+00:00"
+ },
+ {
+ "name": "phpoption/phpoption",
+ "version": "1.9.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/schmittjoh/php-option.git",
+ "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54",
+ "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ },
+ "branch-alias": {
+ "dev-master": "1.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpOption\\": "src/PhpOption/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Johannes M. Schmitt",
+ "email": "schmittjoh@gmail.com",
+ "homepage": "https://github.com/schmittjoh"
+ },
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ }
+ ],
+ "description": "Option Type for PHP",
+ "keywords": [
+ "language",
+ "option",
+ "php",
+ "type"
+ ],
+ "support": {
+ "issues": "https://github.com/schmittjoh/php-option/issues",
+ "source": "https://github.com/schmittjoh/php-option/tree/1.9.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-07-20T21:41:07+00:00"
+ },
{
"name": "phpstan/extension-installer",
- "version": "1.4.1",
+ "version": "1.4.3",
"source": {
"type": "git",
"url": "https://github.com/phpstan/extension-installer.git",
- "reference": "f6b87faf9fc7978eab2f7919a8760bc9f58f9203"
+ "reference": "85e90b3942d06b2326fba0403ec24fe912372936"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/f6b87faf9fc7978eab2f7919a8760bc9f58f9203",
- "reference": "f6b87faf9fc7978eab2f7919a8760bc9f58f9203",
+ "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/85e90b3942d06b2326fba0403ec24fe912372936",
+ "reference": "85e90b3942d06b2326fba0403ec24fe912372936",
"shasum": ""
},
"require": {
"composer-plugin-api": "^2.0",
"php": "^7.2 || ^8.0",
- "phpstan/phpstan": "^1.9.0"
+ "phpstan/phpstan": "^1.9.0 || ^2.0"
},
"require-dev": {
"composer/composer": "^2.0",
@@ -4966,24 +5259,28 @@
"MIT"
],
"description": "Composer plugin for automatic installation of PHPStan extensions",
+ "keywords": [
+ "dev",
+ "static analysis"
+ ],
"support": {
"issues": "https://github.com/phpstan/extension-installer/issues",
- "source": "https://github.com/phpstan/extension-installer/tree/1.4.1"
+ "source": "https://github.com/phpstan/extension-installer/tree/1.4.3"
},
- "time": "2024-06-10T08:20:49+00:00"
+ "time": "2024-09-04T20:21:43+00:00"
},
{
"name": "phpstan/phpstan",
- "version": "1.11.7",
+ "version": "1.12.11",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
- "reference": "52d2bbfdcae7f895915629e4694e9497d0f8e28d"
+ "reference": "0d1fc20a962a91be578bcfe7cf939e6e1a2ff733"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/52d2bbfdcae7f895915629e4694e9497d0f8e28d",
- "reference": "52d2bbfdcae7f895915629e4694e9497d0f8e28d",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0d1fc20a962a91be578bcfe7cf939e6e1a2ff733",
+ "reference": "0d1fc20a962a91be578bcfe7cf939e6e1a2ff733",
"shasum": ""
},
"require": {
@@ -5028,25 +5325,25 @@
"type": "github"
}
],
- "time": "2024-07-06T11:17:41+00:00"
+ "time": "2024-11-17T14:08:01+00:00"
},
{
"name": "phpstan/phpstan-deprecation-rules",
- "version": "1.2.0",
+ "version": "1.2.1",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-deprecation-rules.git",
- "reference": "fa8cce7720fa782899a0aa97b6a41225d1bb7b26"
+ "reference": "f94d246cc143ec5a23da868f8f7e1393b50eaa82"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/fa8cce7720fa782899a0aa97b6a41225d1bb7b26",
- "reference": "fa8cce7720fa782899a0aa97b6a41225d1bb7b26",
+ "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/f94d246cc143ec5a23da868f8f7e1393b50eaa82",
+ "reference": "f94d246cc143ec5a23da868f8f7e1393b50eaa82",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0",
- "phpstan/phpstan": "^1.11"
+ "phpstan/phpstan": "^1.12"
},
"require-dev": {
"php-parallel-lint/php-parallel-lint": "^1.2",
@@ -5073,27 +5370,27 @@
"description": "PHPStan rules for detecting usage of deprecated classes, methods, properties, constants and traits.",
"support": {
"issues": "https://github.com/phpstan/phpstan-deprecation-rules/issues",
- "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/1.2.0"
+ "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/1.2.1"
},
- "time": "2024-04-20T06:39:48+00:00"
+ "time": "2024-09-11T15:52:35+00:00"
},
{
"name": "phpstan/phpstan-phpunit",
- "version": "1.4.0",
+ "version": "1.4.1",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-phpunit.git",
- "reference": "f3ea021866f4263f07ca3636bf22c64be9610c11"
+ "reference": "11d4235fbc6313ecbf93708606edfd3222e44949"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/f3ea021866f4263f07ca3636bf22c64be9610c11",
- "reference": "f3ea021866f4263f07ca3636bf22c64be9610c11",
+ "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/11d4235fbc6313ecbf93708606edfd3222e44949",
+ "reference": "11d4235fbc6313ecbf93708606edfd3222e44949",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0",
- "phpstan/phpstan": "^1.11"
+ "phpstan/phpstan": "^1.12"
},
"conflict": {
"phpunit/phpunit": "<7.0"
@@ -5125,27 +5422,27 @@
"description": "PHPUnit extensions and rules for PHPStan",
"support": {
"issues": "https://github.com/phpstan/phpstan-phpunit/issues",
- "source": "https://github.com/phpstan/phpstan-phpunit/tree/1.4.0"
+ "source": "https://github.com/phpstan/phpstan-phpunit/tree/1.4.1"
},
- "time": "2024-04-20T06:39:00+00:00"
+ "time": "2024-11-12T12:43:59+00:00"
},
{
"name": "phpstan/phpstan-strict-rules",
- "version": "1.6.0",
+ "version": "1.6.1",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-strict-rules.git",
- "reference": "363f921dd8441777d4fc137deb99beb486c77df1"
+ "reference": "daeec748b53de80a97498462513066834ec28f8b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/363f921dd8441777d4fc137deb99beb486c77df1",
- "reference": "363f921dd8441777d4fc137deb99beb486c77df1",
+ "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/daeec748b53de80a97498462513066834ec28f8b",
+ "reference": "daeec748b53de80a97498462513066834ec28f8b",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0",
- "phpstan/phpstan": "^1.11"
+ "phpstan/phpstan": "^1.12.4"
},
"require-dev": {
"nikic/php-parser": "^4.13.0",
@@ -5174,28 +5471,28 @@
"description": "Extra strict and opinionated rules for PHPStan",
"support": {
"issues": "https://github.com/phpstan/phpstan-strict-rules/issues",
- "source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.6.0"
+ "source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.6.1"
},
- "time": "2024-04-20T06:37:51+00:00"
+ "time": "2024-09-20T14:04:44+00:00"
},
{
"name": "phpstan/phpstan-symfony",
- "version": "1.4.6",
+ "version": "1.4.12",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-symfony.git",
- "reference": "e909a075d69e0d4db262ac3407350ae2c6b6ab5f"
+ "reference": "c7b7e7f520893621558bfbfdb2694d4364565c1d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/e909a075d69e0d4db262ac3407350ae2c6b6ab5f",
- "reference": "e909a075d69e0d4db262ac3407350ae2c6b6ab5f",
+ "url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/c7b7e7f520893621558bfbfdb2694d4364565c1d",
+ "reference": "c7b7e7f520893621558bfbfdb2694d4364565c1d",
"shasum": ""
},
"require": {
"ext-simplexml": "*",
"php": "^7.2 || ^8.0",
- "phpstan/phpstan": "^1.11.7"
+ "phpstan/phpstan": "^1.12"
},
"conflict": {
"symfony/framework-bundle": "<3.0"
@@ -5246,34 +5543,34 @@
"description": "Symfony Framework extensions and rules for PHPStan",
"support": {
"issues": "https://github.com/phpstan/phpstan-symfony/issues",
- "source": "https://github.com/phpstan/phpstan-symfony/tree/1.4.6"
+ "source": "https://github.com/phpstan/phpstan-symfony/tree/1.4.12"
},
- "time": "2024-07-16T11:48:54+00:00"
+ "time": "2024-11-06T10:13:18+00:00"
},
{
"name": "phpstan/phpstan-webmozart-assert",
- "version": "1.2.7",
+ "version": "1.2.11",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-webmozart-assert.git",
- "reference": "923bd58cc1c8d2bf8e78a8fbca4b224805237dc2"
+ "reference": "960dd44e8466191590dd0d7940d3e9496eebebbd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-webmozart-assert/zipball/923bd58cc1c8d2bf8e78a8fbca4b224805237dc2",
- "reference": "923bd58cc1c8d2bf8e78a8fbca4b224805237dc2",
+ "url": "https://api.github.com/repos/phpstan/phpstan-webmozart-assert/zipball/960dd44e8466191590dd0d7940d3e9496eebebbd",
+ "reference": "960dd44e8466191590dd0d7940d3e9496eebebbd",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0",
- "phpstan/phpstan": "^1.10"
+ "phpstan/phpstan": "^1.12"
},
"require-dev": {
"nikic/php-parser": "^4.13.0",
"php-parallel-lint/php-parallel-lint": "^1.2",
- "phpstan/phpstan-deprecation-rules": "^1.1",
- "phpstan/phpstan-phpunit": "^1.0",
- "phpstan/phpstan-strict-rules": "^1.0",
+ "phpstan/phpstan-deprecation-rules": "^1.2",
+ "phpstan/phpstan-phpunit": "^1.4",
+ "phpstan/phpstan-strict-rules": "^1.6",
"phpunit/phpunit": "^9.5",
"webmozart/assert": "^1.11.0"
},
@@ -5297,38 +5594,38 @@
"description": "PHPStan webmozart/assert extension",
"support": {
"issues": "https://github.com/phpstan/phpstan-webmozart-assert/issues",
- "source": "https://github.com/phpstan/phpstan-webmozart-assert/tree/1.2.7"
+ "source": "https://github.com/phpstan/phpstan-webmozart-assert/tree/1.2.11"
},
- "time": "2024-07-05T08:05:21+00:00"
+ "time": "2024-09-11T15:48:08+00:00"
},
{
"name": "phpunit/php-code-coverage",
- "version": "10.1.15",
+ "version": "10.1.16",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae"
+ "reference": "7e308268858ed6baedc8704a304727d20bc07c77"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae",
- "reference": "5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77",
+ "reference": "7e308268858ed6baedc8704a304727d20bc07c77",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-libxml": "*",
"ext-xmlwriter": "*",
- "nikic/php-parser": "^4.18 || ^5.0",
+ "nikic/php-parser": "^4.19.1 || ^5.1.0",
"php": ">=8.1",
- "phpunit/php-file-iterator": "^4.0",
- "phpunit/php-text-template": "^3.0",
- "sebastian/code-unit-reverse-lookup": "^3.0",
- "sebastian/complexity": "^3.0",
- "sebastian/environment": "^6.0",
- "sebastian/lines-of-code": "^2.0",
- "sebastian/version": "^4.0",
- "theseer/tokenizer": "^1.2.0"
+ "phpunit/php-file-iterator": "^4.1.0",
+ "phpunit/php-text-template": "^3.0.1",
+ "sebastian/code-unit-reverse-lookup": "^3.0.0",
+ "sebastian/complexity": "^3.2.0",
+ "sebastian/environment": "^6.1.0",
+ "sebastian/lines-of-code": "^2.0.2",
+ "sebastian/version": "^4.0.1",
+ "theseer/tokenizer": "^1.2.3"
},
"require-dev": {
"phpunit/phpunit": "^10.1"
@@ -5340,7 +5637,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "10.1-dev"
+ "dev-main": "10.1.x-dev"
}
},
"autoload": {
@@ -5369,7 +5666,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.15"
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16"
},
"funding": [
{
@@ -5377,7 +5674,7 @@
"type": "github"
}
],
- "time": "2024-06-29T08:25:15+00:00"
+ "time": "2024-08-22T04:31:57+00:00"
},
{
"name": "phpunit/php-file-iterator",
@@ -5624,16 +5921,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "10.5.27",
+ "version": "10.5.38",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "2425f713b2a5350568ccb1a2d3984841a23e83c5"
+ "reference": "a86773b9e887a67bc53efa9da9ad6e3f2498c132"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2425f713b2a5350568ccb1a2d3984841a23e83c5",
- "reference": "2425f713b2a5350568ccb1a2d3984841a23e83c5",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a86773b9e887a67bc53efa9da9ad6e3f2498c132",
+ "reference": "a86773b9e887a67bc53efa9da9ad6e3f2498c132",
"shasum": ""
},
"require": {
@@ -5647,14 +5944,14 @@
"phar-io/manifest": "^2.0.4",
"phar-io/version": "^3.2.1",
"php": ">=8.1",
- "phpunit/php-code-coverage": "^10.1.15",
+ "phpunit/php-code-coverage": "^10.1.16",
"phpunit/php-file-iterator": "^4.1.0",
"phpunit/php-invoker": "^4.0.0",
"phpunit/php-text-template": "^3.0.1",
"phpunit/php-timer": "^6.0.0",
"sebastian/cli-parser": "^2.0.1",
"sebastian/code-unit": "^2.0.0",
- "sebastian/comparator": "^5.0.1",
+ "sebastian/comparator": "^5.0.3",
"sebastian/diff": "^5.1.1",
"sebastian/environment": "^6.1.0",
"sebastian/exporter": "^5.1.2",
@@ -5705,7 +6002,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.27"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.38"
},
"funding": [
{
@@ -5721,7 +6018,7 @@
"type": "tidelift"
}
],
- "time": "2024-07-10T11:48:06+00:00"
+ "time": "2024-10-28T13:06:21+00:00"
},
{
"name": "react/cache",
@@ -6097,31 +6394,31 @@
},
{
"name": "react/socket",
- "version": "v1.15.0",
+ "version": "v1.16.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/socket.git",
- "reference": "216d3aec0b87f04a40ca04f481e6af01bdd1d038"
+ "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/reactphp/socket/zipball/216d3aec0b87f04a40ca04f481e6af01bdd1d038",
- "reference": "216d3aec0b87f04a40ca04f481e6af01bdd1d038",
+ "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1",
+ "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1",
"shasum": ""
},
"require": {
"evenement/evenement": "^3.0 || ^2.0 || ^1.0",
"php": ">=5.3.0",
- "react/dns": "^1.11",
+ "react/dns": "^1.13",
"react/event-loop": "^1.2",
- "react/promise": "^3 || ^2.6 || ^1.2.1",
- "react/stream": "^1.2"
+ "react/promise": "^3.2 || ^2.6 || ^1.2.1",
+ "react/stream": "^1.4"
},
"require-dev": {
"phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
- "react/async": "^4 || ^3 || ^2",
+ "react/async": "^4.3 || ^3.3 || ^2",
"react/promise-stream": "^1.4",
- "react/promise-timer": "^1.10"
+ "react/promise-timer": "^1.11"
},
"type": "library",
"autoload": {
@@ -6165,7 +6462,7 @@
],
"support": {
"issues": "https://github.com/reactphp/socket/issues",
- "source": "https://github.com/reactphp/socket/tree/v1.15.0"
+ "source": "https://github.com/reactphp/socket/tree/v1.16.0"
},
"funding": [
{
@@ -6173,7 +6470,7 @@
"type": "open_collective"
}
],
- "time": "2023-12-15T11:02:10+00:00"
+ "time": "2024-07-26T10:38:09+00:00"
},
{
"name": "react/stream",
@@ -6255,21 +6552,21 @@
},
{
"name": "rector/rector",
- "version": "1.2.1",
+ "version": "1.2.10",
"source": {
"type": "git",
"url": "https://github.com/rectorphp/rector.git",
- "reference": "b38a3eed3ce2046f40c001255e2fec9d2746bacf"
+ "reference": "40f9cf38c05296bd32f444121336a521a293fa61"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/rectorphp/rector/zipball/b38a3eed3ce2046f40c001255e2fec9d2746bacf",
- "reference": "b38a3eed3ce2046f40c001255e2fec9d2746bacf",
+ "url": "https://api.github.com/repos/rectorphp/rector/zipball/40f9cf38c05296bd32f444121336a521a293fa61",
+ "reference": "40f9cf38c05296bd32f444121336a521a293fa61",
"shasum": ""
},
"require": {
"php": "^7.2|^8.0",
- "phpstan/phpstan": "^1.11"
+ "phpstan/phpstan": "^1.12.5"
},
"conflict": {
"rector/rector-doctrine": "*",
@@ -6302,7 +6599,7 @@
],
"support": {
"issues": "https://github.com/rectorphp/rector/issues",
- "source": "https://github.com/rectorphp/rector/tree/1.2.1"
+ "source": "https://github.com/rectorphp/rector/tree/1.2.10"
},
"funding": [
{
@@ -6310,7 +6607,7 @@
"type": "github"
}
],
- "time": "2024-07-16T00:22:54+00:00"
+ "time": "2024-11-08T13:59:10+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -6482,16 +6779,16 @@
},
{
"name": "sebastian/comparator",
- "version": "5.0.1",
+ "version": "5.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "2db5010a484d53ebf536087a70b4a5423c102372"
+ "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372",
- "reference": "2db5010a484d53ebf536087a70b4a5423c102372",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e",
+ "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e",
"shasum": ""
},
"require": {
@@ -6502,7 +6799,7 @@
"sebastian/exporter": "^5.0"
},
"require-dev": {
- "phpunit/phpunit": "^10.3"
+ "phpunit/phpunit": "^10.5"
},
"type": "library",
"extra": {
@@ -6547,7 +6844,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues",
"security": "https://github.com/sebastianbergmann/comparator/security/policy",
- "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1"
+ "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3"
},
"funding": [
{
@@ -6555,7 +6852,7 @@
"type": "github"
}
],
- "time": "2023-08-14T13:18:12+00:00"
+ "time": "2024-10-18T14:56:07+00:00"
},
{
"name": "sebastian/complexity",
@@ -7403,16 +7700,16 @@
},
{
"name": "symfony/mime",
- "version": "v6.4.9",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
- "reference": "7d048964877324debdcb4e0549becfa064a20d43"
+ "reference": "1de1cf14d99b12c7ebbb850491ec6ae3ed468855"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mime/zipball/7d048964877324debdcb4e0549becfa064a20d43",
- "reference": "7d048964877324debdcb4e0549becfa064a20d43",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/1de1cf14d99b12c7ebbb850491ec6ae3ed468855",
+ "reference": "1de1cf14d99b12c7ebbb850491ec6ae3ed468855",
"shasum": ""
},
"require": {
@@ -7468,7 +7765,7 @@
"mime-type"
],
"support": {
- "source": "https://github.com/symfony/mime/tree/v6.4.9"
+ "source": "https://github.com/symfony/mime/tree/v6.4.13"
},
"funding": [
{
@@ -7484,20 +7781,20 @@
"type": "tidelift"
}
],
- "time": "2024-06-28T09:49:33+00:00"
+ "time": "2024-10-25T15:07:50+00:00"
},
{
"name": "symfony/options-resolver",
- "version": "v6.4.8",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/options-resolver.git",
- "reference": "22ab9e9101ab18de37839074f8a1197f55590c1b"
+ "reference": "0a62a9f2504a8dd27083f89d21894ceb01cc59db"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/options-resolver/zipball/22ab9e9101ab18de37839074f8a1197f55590c1b",
- "reference": "22ab9e9101ab18de37839074f8a1197f55590c1b",
+ "url": "https://api.github.com/repos/symfony/options-resolver/zipball/0a62a9f2504a8dd27083f89d21894ceb01cc59db",
+ "reference": "0a62a9f2504a8dd27083f89d21894ceb01cc59db",
"shasum": ""
},
"require": {
@@ -7535,7 +7832,7 @@
"options"
],
"support": {
- "source": "https://github.com/symfony/options-resolver/tree/v6.4.8"
+ "source": "https://github.com/symfony/options-resolver/tree/v6.4.13"
},
"funding": [
{
@@ -7551,26 +7848,25 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-09-25T14:18:03+00:00"
},
{
"name": "symfony/polyfill-intl-idn",
- "version": "v1.30.0",
+ "version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
- "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c"
+ "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a6e83bdeb3c84391d1dfe16f42e40727ce524a5c",
- "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773",
+ "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773",
"shasum": ""
},
"require": {
- "php": ">=7.1",
- "symfony/polyfill-intl-normalizer": "^1.10",
- "symfony/polyfill-php72": "^1.10"
+ "php": ">=7.2",
+ "symfony/polyfill-intl-normalizer": "^1.10"
},
"suggest": {
"ext-intl": "For best performance"
@@ -7619,7 +7915,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.30.0"
+ "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0"
},
"funding": [
{
@@ -7635,97 +7931,24 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T15:07:36+00:00"
- },
- {
- "name": "symfony/polyfill-php72",
- "version": "v1.30.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php72.git",
- "reference": "10112722600777e02d2745716b70c5db4ca70442"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/10112722600777e02d2745716b70c5db4ca70442",
- "reference": "10112722600777e02d2745716b70c5db4ca70442",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Php72\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php72/tree/v1.30.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-06-19T12:30:46+00:00"
+ "time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-php73",
- "version": "v1.30.0",
+ "version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php73.git",
- "reference": "ec444d3f3f6505bb28d11afa41e75faadebc10a1"
+ "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/ec444d3f3f6505bb28d11afa41e75faadebc10a1",
- "reference": "ec444d3f3f6505bb28d11afa41e75faadebc10a1",
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb",
+ "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
},
"type": "library",
"extra": {
@@ -7768,7 +7991,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php73/tree/v1.30.0"
+ "source": "https://github.com/symfony/polyfill-php73/tree/v1.31.0"
},
"funding": [
{
@@ -7784,24 +8007,24 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T15:07:36+00:00"
+ "time": "2024-09-09T11:45:10+00:00"
},
{
- "name": "symfony/polyfill-php81",
- "version": "v1.30.0",
+ "name": "symfony/polyfill-php80",
+ "version": "v1.31.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-php81.git",
- "reference": "3fb075789fb91f9ad9af537c4012d523085bd5af"
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/3fb075789fb91f9ad9af537c4012d523085bd5af",
- "reference": "3fb075789fb91f9ad9af537c4012d523085bd5af",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
+ "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
},
"type": "library",
"extra": {
@@ -7815,7 +8038,7 @@
"bootstrap.php"
],
"psr-4": {
- "Symfony\\Polyfill\\Php81\\": ""
+ "Symfony\\Polyfill\\Php80\\": ""
},
"classmap": [
"Resources/stubs"
@@ -7826,6 +8049,10 @@
"MIT"
],
"authors": [
+ {
+ "name": "Ion Bazan",
+ "email": "ion.bazan@gmail.com"
+ },
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
@@ -7835,7 +8062,7 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
+ "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
@@ -7844,7 +8071,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php81/tree/v1.30.0"
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
},
"funding": [
{
@@ -7860,20 +8087,20 @@
"type": "tidelift"
}
],
- "time": "2024-06-19T12:30:46+00:00"
+ "time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/stopwatch",
- "version": "v6.4.8",
+ "version": "v6.4.13",
"source": {
"type": "git",
"url": "https://github.com/symfony/stopwatch.git",
- "reference": "63e069eb616049632cde9674c46957819454b8aa"
+ "reference": "2cae0a6f8d04937d02f6d19806251e2104d54f92"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/stopwatch/zipball/63e069eb616049632cde9674c46957819454b8aa",
- "reference": "63e069eb616049632cde9674c46957819454b8aa",
+ "url": "https://api.github.com/repos/symfony/stopwatch/zipball/2cae0a6f8d04937d02f6d19806251e2104d54f92",
+ "reference": "2cae0a6f8d04937d02f6d19806251e2104d54f92",
"shasum": ""
},
"require": {
@@ -7906,7 +8133,7 @@
"description": "Provides a way to profile code",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/stopwatch/tree/v6.4.8"
+ "source": "https://github.com/symfony/stopwatch/tree/v6.4.13"
},
"funding": [
{
@@ -7922,7 +8149,7 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-09-25T14:18:03+00:00"
},
{
"name": "theseer/tokenizer",
@@ -7977,17 +8204,17 @@
],
"aliases": [],
"minimum-stability": "stable",
- "stability-flags": [],
+ "stability-flags": {},
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0",
+ "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
"ext-filter": "*",
"ext-json": "*",
"ext-mbstring": "*",
"composer-plugin-api": "^2.1",
"composer-runtime-api": "^2.1"
},
- "platform-dev": [],
+ "platform-dev": {},
"plugin-api-version": "2.6.0"
}
diff --git a/docs/conf.py b/docs/conf.py
index 5ada4c0d..e7a7d5c6 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -9,7 +9,7 @@
project = "Project Builder"
copyright = "since 2022 by coding. powerful. systems. CPS GmbH"
author = "Elias Häußler, Martin Adler"
-release = "2.10.0"
+release = "2.13.0"
# -- General configuration ---------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
diff --git a/docs/development/configuration.md b/docs/development/configuration.md
index 4ec0f3bb..d3377270 100644
--- a/docs/development/configuration.md
+++ b/docs/development/configuration.md
@@ -212,6 +212,11 @@ steps:
command: 'git init --initial-branch=main'
skipConfirmation: true
allowFailure: true
+ - type: runCommand
+ options:
+ command: 'composer update'
+ allowFailure: true
+ required: false
- type: showNextSteps
options:
templateFile: templates/next-steps.html.twig
diff --git a/docs/index.md b/docs/index.md
index 11435740..0a2e21ee 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -6,10 +6,10 @@ og:description: A Composer package for creating new projects based on various sp
# Project Builder
-[![Latest Stable Version](http://poser.pugx.org/cpsit/project-builder/v)][1]
-[![Total Downloads](http://poser.pugx.org/cpsit/project-builder/downloads)][2]
-[![Docker](https://img.shields.io/docker/v/cpsit/project-builder?label=docker&sort=semver)][3]
-[![License](http://poser.pugx.org/cpsit/project-builder/license)](contributing/license.md)
+[![Latest Stable Version](https://img.shields.io/packagist/v/cpsit/project-builder?label=version)][1]
+[![Packagist Downloads](https://img.shields.io/packagist/dt/cpsit/project-builder?label=packagist+downloads&color=brightgreen)][2]
+[![GHCR Pulls](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fipitio.github.io%2Fbackage%2FCPS-IT%2Fproject-builder%2Fproject-builder.json&query=%24.downloads&label=GHCR%20pulls&color=brightgreen)][3]
+[![Docker Pulls](https://img.shields.io/docker/pulls/cpsit/project-builder?label=docker+pulls&color=brightgreen)][4]
A Composer package to **create new projects** based on various, specific **project templates**.
All project templates are distributed as separate Composer packages.
@@ -63,6 +63,7 @@ contributing/workflow
contributing/license
```
-[1]: https://packagist.org/packages/cpsit/project-builder
-[2]: https://packagist.org/packages/cpsit/project-builder/stats
-[3]: https://hub.docker.com/r/cpsit/project-builder
+[1]: https://github.com/CPS-IT/project-builder/releases/latest
+[2]: https://packagist.org/packages/cpsit/project-builder
+[3]: https://github.com/CPS-IT/project-builder/pkgs/container/project-builder
+[4]: https://hub.docker.com/r/cpsit/project-builder
diff --git a/installer/composer.json.twig b/installer/composer.json.twig
index 0ebd3bf3..ee41eae1 100644
--- a/installer/composer.json.twig
+++ b/installer/composer.json.twig
@@ -3,7 +3,7 @@
"description": "Template installer for cpsit/project-builder",
"license": "GPL-3.0-or-later",
"require": {
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0",
+ "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
"composer/installers": "^2.0",
"oomphinc/composer-installers-extender": "^2.0",
{% for templateSource in templateSources %}
diff --git a/resources/config.schema.json b/resources/config.schema.json
index ab966702..dd91eac5 100644
--- a/resources/config.schema.json
+++ b/resources/config.schema.json
@@ -315,6 +315,12 @@
"title": "Allow command execution failure",
"description": "Ignore errors occurred during command execution and continue as normal",
"default": false
+ },
+ "required": {
+ "type": "boolean",
+ "title": "Enforce command execution",
+ "description": "If set to true, the command must be executed and cannot be skipped, otherwise project generation fails",
+ "default": true
}
},
"required": [
diff --git a/src/Builder/Config/ValueObject/StepOptions.php b/src/Builder/Config/ValueObject/StepOptions.php
index 6a52f039..bc1fdcb5 100644
--- a/src/Builder/Config/ValueObject/StepOptions.php
+++ b/src/Builder/Config/ValueObject/StepOptions.php
@@ -41,6 +41,7 @@ public function __construct(
private readonly ?string $command = null,
private readonly bool $skipConfirmation = false,
private readonly bool $allowFailure = false,
+ private readonly bool $required = true,
) {}
/**
@@ -75,4 +76,9 @@ public function shouldAllowFailure(): bool
{
return $this->allowFailure;
}
+
+ public function isRequired(): bool
+ {
+ return $this->required;
+ }
}
diff --git a/src/Builder/Generator/Step/RunCommandStep.php b/src/Builder/Generator/Step/RunCommandStep.php
index 5465f2f3..308da5bf 100644
--- a/src/Builder/Generator/Step/RunCommandStep.php
+++ b/src/Builder/Generator/Step/RunCommandStep.php
@@ -57,7 +57,7 @@ public function run(BuildResult $buildResult): bool
if (!$this->config->getOptions()->shouldSkipConfirmation() && !$this->messenger->confirmRunCommand($command)) {
$this->stopped = true;
- return false;
+ return !$this->config->getOptions()->isRequired();
}
$this->messenger->newLine(ComposerIO\IOInterface::VERBOSE);
diff --git a/tests/bootstrap.php b/tests/bootstrap.php
index c1d836af..eb11abca 100644
--- a/tests/bootstrap.php
+++ b/tests/bootstrap.php
@@ -21,7 +21,9 @@
* along with this program. If not, see .
*/
+use CPSIT\ProjectBuilder\DependencyInjection;
+
require_once dirname(__DIR__).'/.build/vendor/autoload.php';
-$factory = CPSIT\ProjectBuilder\DependencyInjection\ContainerFactory::createForTesting();
+$factory = DependencyInjection\ContainerFactory::createForTesting();
$factory->get();
diff --git a/tests/src/Builder/Artifact/Migration/Migration1688738958Test.php b/tests/src/Builder/Artifact/Migration/Migration1688738958Test.php
index 3c889837..a4d8de2a 100644
--- a/tests/src/Builder/Artifact/Migration/Migration1688738958Test.php
+++ b/tests/src/Builder/Artifact/Migration/Migration1688738958Test.php
@@ -44,7 +44,9 @@ final class Migration1688738958Test extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\Builder\Artifact\Migration\Migration1688738958::class);
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\Builder\Artifact\Migration\Migration1688738958::class);
$this->artifact = [
'template' => [
'provider' => [
diff --git a/tests/src/Builder/ArtifactGeneratorTest.php b/tests/src/Builder/ArtifactGeneratorTest.php
index 7a504b3d..f892963c 100644
--- a/tests/src/Builder/ArtifactGeneratorTest.php
+++ b/tests/src/Builder/ArtifactGeneratorTest.php
@@ -46,14 +46,16 @@ final class ArtifactGeneratorTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\Builder\ArtifactGenerator::class);
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\Builder\ArtifactGenerator::class);
$this->artifactFile = Src\Helper\FilesystemHelper::createFileObject(
Src\Helper\FilesystemHelper::getNewTemporaryDirectory(),
'build-artifact.json',
);
$this->buildResult = new Src\Builder\BuildResult(
new Src\Builder\BuildInstructions(
- self::$container->get('app.config'),
+ $this->container->get('app.config'),
'foo',
),
);
diff --git a/tests/src/Builder/ArtifactReaderTest.php b/tests/src/Builder/ArtifactReaderTest.php
index 3431f366..25757082 100644
--- a/tests/src/Builder/ArtifactReaderTest.php
+++ b/tests/src/Builder/ArtifactReaderTest.php
@@ -43,9 +43,11 @@ final class ArtifactReaderTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
+ parent::setUp();
+
$this->artifactFile = dirname(__DIR__).'/Fixtures/Files/build-artifact.json';
- $this->migration = self::$container->get(Tests\Fixtures\DummyMigration::class);
- $this->subject = self::$container->get(Src\Builder\ArtifactReader::class);
+ $this->migration = $this->container->get(Tests\Fixtures\DummyMigration::class);
+ $this->subject = $this->container->get(Src\Builder\ArtifactReader::class);
}
#[Framework\Attributes\Test]
diff --git a/tests/src/Builder/BuildInstructionsTest.php b/tests/src/Builder/BuildInstructionsTest.php
index 35b8dc19..5e281af7 100644
--- a/tests/src/Builder/BuildInstructionsTest.php
+++ b/tests/src/Builder/BuildInstructionsTest.php
@@ -42,8 +42,10 @@ final class BuildInstructionsTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
+ parent::setUp();
+
$this->subject = new Src\Builder\BuildInstructions(
- self::$container->get('app.config'),
+ $this->container->get('app.config'),
'foo',
);
}
@@ -51,7 +53,7 @@ protected function setUp(): void
#[Framework\Attributes\Test]
public function getConfigReturnsConfig(): void
{
- self::assertSame(self::$container->get('app.config'), $this->subject->getConfig());
+ self::assertSame($this->container->get('app.config'), $this->subject->getConfig());
}
#[Framework\Attributes\Test]
diff --git a/tests/src/Builder/BuildResultTest.php b/tests/src/Builder/BuildResultTest.php
index 5296840c..a4072016 100644
--- a/tests/src/Builder/BuildResultTest.php
+++ b/tests/src/Builder/BuildResultTest.php
@@ -44,8 +44,10 @@ final class BuildResultTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
+ parent::setUp();
+
$this->instructions = new Src\Builder\BuildInstructions(
- self::$container->get('app.config'),
+ $this->container->get('app.config'),
'foo',
);
$this->subject = new Src\Builder\BuildResult(
@@ -101,7 +103,7 @@ public function isStepAppliedTestsWhetherStepIsApplied(): void
self::assertFalse($this->subject->isStepApplied('foo'));
self::assertFalse($this->subject->isStepApplied(
- self::$container->get(Src\Builder\Generator\Step\InstallComposerDependenciesStep::class),
+ $this->container->get(Src\Builder\Generator\Step\InstallComposerDependenciesStep::class),
));
}
diff --git a/tests/src/Builder/Generator/GeneratorTest.php b/tests/src/Builder/Generator/GeneratorTest.php
index 2cf59188..5e7b9ebd 100644
--- a/tests/src/Builder/Generator/GeneratorTest.php
+++ b/tests/src/Builder/Generator/GeneratorTest.php
@@ -49,17 +49,19 @@ final class GeneratorTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\Builder\Generator\Generator::class);
- $this->eventDispatcher = self::$container->get(EventDispatcher\EventDispatcherInterface::class);
- $this->eventListener = self::$container->get(Tests\Fixtures\DummyEventListener::class);
- $this->filesystem = self::$container->get(Filesystem\Filesystem::class);
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\Builder\Generator\Generator::class);
+ $this->eventDispatcher = $this->container->get(EventDispatcher\EventDispatcherInterface::class);
+ $this->eventListener = $this->container->get(Tests\Fixtures\DummyEventListener::class);
+ $this->filesystem = $this->container->get(Filesystem\Filesystem::class);
$this->targetDirectory = Src\Helper\FilesystemHelper::getNewTemporaryDirectory();
}
#[Framework\Attributes\Test]
public function runRunsThroughAllConfiguredSteps(): void
{
- self::$io->setUserInputs(['foo']);
+ $this->io->setUserInputs(['foo']);
self::assertCount(0, $this->eventListener->dispatchedEvents);
@@ -73,7 +75,7 @@ public function runRunsThroughAllConfiguredSteps(): void
self::assertTrue($actual->isStepApplied('runCommand'));
self::assertTrue($actual->isMirrored());
- $output = self::$io->getOutput();
+ $output = $this->io->getOutput();
self::assertStringContainsString('Running step #1 "collectBuildInstructions"...', $output);
self::assertStringContainsString('Running step #2 "processSourceFiles"...', $output);
@@ -100,7 +102,7 @@ public function runRunsThroughAllConfiguredSteps(): void
#[Framework\Attributes\Test]
public function runRestartsProjectGenerationOnStepFailure(): void
{
- self::$io->setUserInputs(['', '', '', 'yes', 'foo']);
+ $this->io->setUserInputs(['', '', '', 'yes', 'foo']);
self::assertCount(0, $this->eventListener->dispatchedEvents);
@@ -113,7 +115,7 @@ public function runRestartsProjectGenerationOnStepFailure(): void
self::assertTrue($actual->isStepApplied('mirrorProcessedFiles'));
self::assertTrue($actual->isMirrored());
- $output = self::$io->getOutput();
+ $output = $this->io->getOutput();
self::assertStringContainsString('If you want, you can restart project generation now.', $output);
self::assertFileExists($this->targetDirectory.'/dummy.yaml');
@@ -148,7 +150,7 @@ public function runRevertsAppliedStepsOnStepFailure(): void
// Register custom listener that lets the GenerateBuildArtifactStep fail
$this->eventDispatcher->addListener(Src\Event\ProjectBuildStartedEvent::class, $listener);
- self::$io->setUserInputs(['', '', 'foo', 'no']);
+ $this->io->setUserInputs(['', '', 'foo', 'no']);
$this->subject->run($this->targetDirectory);
@@ -210,12 +212,12 @@ public function runRevertsAppliedStepsAndExistsIfStoppableStepFailed(): void
$subject = new Src\Builder\Generator\Generator(
$config,
- self::$container->get('app.messenger'),
+ $this->container->get('app.messenger'),
$stepFactory,
$this->filesystem,
- self::$container->get(EventDispatcher\EventDispatcherInterface::class),
- self::$container->get(Src\Builder\Writer\JsonFileWriter::class),
- self::$container->get(Src\Builder\ArtifactGenerator::class),
+ $this->container->get(EventDispatcher\EventDispatcherInterface::class),
+ $this->container->get(Src\Builder\Writer\JsonFileWriter::class),
+ $this->container->get(Src\Builder\ArtifactGenerator::class),
);
$actual = $subject->run($this->targetDirectory);
@@ -227,15 +229,15 @@ public function runRevertsAppliedStepsAndExistsIfStoppableStepFailed(): void
#[Framework\Attributes\Test]
public function runDisplaysExceptionMessageOnVerboseOutput(): void
{
- self::$io->setVerbosity(Console\Output\OutputInterface::VERBOSITY_VERBOSE);
- self::$io->setUserInputs(['', '', '', 'no']);
+ $this->io->setVerbosity(Console\Output\OutputInterface::VERBOSITY_VERBOSE);
+ $this->io->setUserInputs(['', '', '', 'no']);
try {
$this->subject->run($this->targetDirectory);
} catch (Src\Exception\StepFailureException) {
}
- $output = self::$io->getOutput();
+ $output = $this->io->getOutput();
self::assertStringContainsString(
'Exception: The given input must not be empty.',
@@ -247,8 +249,8 @@ public function runDisplaysExceptionMessageOnVerboseOutput(): void
#[Framework\Attributes\Test]
public function runDisplaysExceptionTraceOnVeryVerboseOutput(): void
{
- self::$io->setVerbosity(Console\Output\OutputInterface::VERBOSITY_VERY_VERBOSE);
- self::$io->setUserInputs(['', '', '', 'no']);
+ $this->io->setVerbosity(Console\Output\OutputInterface::VERBOSITY_VERY_VERBOSE);
+ $this->io->setUserInputs(['', '', '', 'no']);
try {
$this->subject->run($this->targetDirectory);
@@ -257,14 +259,14 @@ public function runDisplaysExceptionTraceOnVeryVerboseOutput(): void
self::assertStringContainsString(
'Exception: The given input must not be empty.'.PHP_EOL.'#0',
- self::$io->getOutput(),
+ $this->io->getOutput(),
);
}
#[Framework\Attributes\Test]
public function dumpArtifactDumpsBuildArtifact(): void
{
- self::$io->setUserInputs(['foo']);
+ $this->io->setUserInputs(['foo']);
$result = $this->subject->run($this->targetDirectory);
@@ -276,7 +278,7 @@ public function dumpArtifactDumpsBuildArtifact(): void
#[Framework\Attributes\Test]
public function cleanUpCleansUpRemainingFilesInTargetDirectory(): void
{
- self::$io->setUserInputs(['foo']);
+ $this->io->setUserInputs(['foo']);
$result = $this->subject->run($this->targetDirectory);
@@ -285,7 +287,7 @@ public function cleanUpCleansUpRemainingFilesInTargetDirectory(): void
self::assertTrue($result->isStepApplied('cleanUp'));
}
- protected static function createConfig(): Src\Builder\Config\Config
+ protected function createConfig(): Src\Builder\Config\Config
{
$configReader = Src\Builder\Config\ConfigFactory::create();
@@ -305,8 +307,6 @@ protected static function createConfig(): Src\Builder\Config\Config
protected function tearDown(): void
{
- parent::tearDown();
-
$this->eventListener->dispatchedEvents = [];
if ($this->filesystem->exists($this->targetDirectory)) {
diff --git a/tests/src/Builder/Generator/Step/CleanUpStepTest.php b/tests/src/Builder/Generator/Step/CleanUpStepTest.php
index ce19b0e2..99768cc7 100644
--- a/tests/src/Builder/Generator/Step/CleanUpStepTest.php
+++ b/tests/src/Builder/Generator/Step/CleanUpStepTest.php
@@ -43,11 +43,13 @@ final class CleanUpStepTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
+ parent::setUp();
+
$this->filesystem = new Filesystem\Filesystem();
$this->subject = new Src\Builder\Generator\Step\CleanUpStep($this->filesystem);
$this->result = new Src\Builder\BuildResult(
new Src\Builder\BuildInstructions(
- self::$config,
+ $this->config,
Src\Helper\FilesystemHelper::getNewTemporaryDirectory(),
),
);
diff --git a/tests/src/Builder/Generator/Step/CollectBuildInstructionsStepTest.php b/tests/src/Builder/Generator/Step/CollectBuildInstructionsStepTest.php
index 22f328e3..6c7c5062 100644
--- a/tests/src/Builder/Generator/Step/CollectBuildInstructionsStepTest.php
+++ b/tests/src/Builder/Generator/Step/CollectBuildInstructionsStepTest.php
@@ -40,8 +40,10 @@ final class CollectBuildInstructionsStepTest extends Tests\ContainerAwareTestCas
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\Builder\Generator\Step\CollectBuildInstructionsStep::class);
- $this->eventListener = self::$container->get(Tests\Fixtures\DummyEventListener::class);
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\Builder\Generator\Step\CollectBuildInstructionsStep::class);
+ $this->eventListener = $this->container->get(Tests\Fixtures\DummyEventListener::class);
}
#[Framework\Attributes\Test]
@@ -183,8 +185,6 @@ public function runRendersPropertyValueAsTwigTemplate(): void
protected function tearDown(): void
{
- parent::tearDown();
-
$this->eventListener->dispatchedEvents = [];
}
}
diff --git a/tests/src/Builder/Generator/Step/DumpBuildArtifactStepTest.php b/tests/src/Builder/Generator/Step/DumpBuildArtifactStepTest.php
index b11bdc8f..46d680a7 100644
--- a/tests/src/Builder/Generator/Step/DumpBuildArtifactStepTest.php
+++ b/tests/src/Builder/Generator/Step/DumpBuildArtifactStepTest.php
@@ -50,15 +50,17 @@ final class DumpBuildArtifactStepTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->filesystem = self::$container->get(Filesystem\Filesystem::class);
- $this->artifactGenerator = self::$container->get(Src\Builder\ArtifactGenerator::class);
+ parent::setUp();
+
+ $this->filesystem = $this->container->get(Filesystem\Filesystem::class);
+ $this->artifactGenerator = $this->container->get(Src\Builder\ArtifactGenerator::class);
$this->subject = new Src\Builder\Generator\Step\DumpBuildArtifactStep(
$this->filesystem,
- self::$container->get(Src\Builder\Writer\JsonFileWriter::class),
+ $this->container->get(Src\Builder\Writer\JsonFileWriter::class),
$this->artifactGenerator,
);
$this->buildResult = new Src\Builder\BuildResult(
- new Src\Builder\BuildInstructions(self::$config, 'foo'),
+ new Src\Builder\BuildInstructions($this->config, 'foo'),
);
$this->artifactFile = Src\Helper\FilesystemHelper::createFileObject(
$this->buildResult->getWrittenDirectory(),
@@ -134,8 +136,6 @@ public function supportsReturnsFalse(): void
protected function tearDown(): void
{
- parent::tearDown();
-
$this->filesystem->remove($this->artifactFile->getPathname());
}
}
diff --git a/tests/src/Builder/Generator/Step/GenerateBuildArtifactStepTest.php b/tests/src/Builder/Generator/Step/GenerateBuildArtifactStepTest.php
index a6fde721..30ae82a5 100644
--- a/tests/src/Builder/Generator/Step/GenerateBuildArtifactStepTest.php
+++ b/tests/src/Builder/Generator/Step/GenerateBuildArtifactStepTest.php
@@ -45,10 +45,12 @@ final class GenerateBuildArtifactStepTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\Builder\Generator\Step\GenerateBuildArtifactStep::class);
- $this->filesystem = self::$container->get(Filesystem\Filesystem::class);
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\Builder\Generator\Step\GenerateBuildArtifactStep::class);
+ $this->filesystem = $this->container->get(Filesystem\Filesystem::class);
$this->buildResult = new Src\Builder\BuildResult(
- new Src\Builder\BuildInstructions(self::$config, Src\Helper\FilesystemHelper::getNewTemporaryDirectory()),
+ new Src\Builder\BuildInstructions($this->config, Src\Helper\FilesystemHelper::getNewTemporaryDirectory()),
);
$this->artifactFile = Src\Helper\FilesystemHelper::createFileObject(
$this->buildResult->getInstructions()->getTargetDirectory(),
@@ -60,7 +62,7 @@ protected function setUp(): void
#[Framework\Attributes\DataProvider('runAsksForConfirmationIfArtifactPathAlreadyExistsDataProvider')]
public function runAsksForConfirmationIfArtifactPathAlreadyExists(bool $continue, bool $expected): void
{
- self::$io->setUserInputs([$continue ? 'yes' : 'no']);
+ $this->io->setUserInputs([$continue ? 'yes' : 'no']);
$this->filesystem->dumpFile($this->artifactFile->getPathname(), 'test');
@@ -71,7 +73,7 @@ public function runAsksForConfirmationIfArtifactPathAlreadyExists(bool $continue
self::assertNull($this->buildResult->getArtifactFile());
self::assertStringContainsString(
'The build artifact cannot be generated because the resulting file already exists.',
- self::$io->getOutput(),
+ $this->io->getOutput(),
);
}
@@ -94,8 +96,6 @@ public static function runAsksForConfirmationIfArtifactPathAlreadyExistsDataProv
protected function tearDown(): void
{
- parent::tearDown();
-
$this->filesystem->remove($this->artifactFile->getPathname());
}
}
diff --git a/tests/src/Builder/Generator/Step/InstallComposerDependenciesStepTest.php b/tests/src/Builder/Generator/Step/InstallComposerDependenciesStepTest.php
index ccd50f7e..56770858 100644
--- a/tests/src/Builder/Generator/Step/InstallComposerDependenciesStepTest.php
+++ b/tests/src/Builder/Generator/Step/InstallComposerDependenciesStepTest.php
@@ -39,17 +39,19 @@
*/
final class InstallComposerDependenciesStepTest extends Tests\ContainerAwareTestCase
{
- private static Filesystem\Filesystem $filesystem;
- private static string $temporaryDirectory;
+ private Filesystem\Filesystem $filesystem;
+ private string $temporaryDirectory;
private Src\Builder\Generator\Step\InstallComposerDependenciesStep $subject;
private Src\Builder\BuildResult $buildResult;
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\Builder\Generator\Step\InstallComposerDependenciesStep::class);
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\Builder\Generator\Step\InstallComposerDependenciesStep::class);
$this->buildResult = new Src\Builder\BuildResult(
- new Src\Builder\BuildInstructions(self::$config, 'foo'),
+ new Src\Builder\BuildInstructions($this->config, 'foo'),
);
}
@@ -63,23 +65,23 @@ public function runInstallsComposerDependencies(): void
#[Framework\Attributes\Test]
public function runWritesComposerInstallOutputAndFailsOnFailure(): void
{
- $newConfig = self::createConfig();
+ $newConfig = $this->createConfig();
- self::$config->setDeclaringFile($newConfig->getDeclaringFile());
- self::$filesystem->copy(
+ $this->config->setDeclaringFile($newConfig->getDeclaringFile());
+ $this->filesystem->copy(
dirname(__DIR__, 3).'/Fixtures/Files/invalid-composer.json',
- self::$temporaryDirectory.'/composer.json',
+ $this->temporaryDirectory.'/composer.json',
true,
);
self::assertFalse($this->subject->run($this->buildResult));
self::assertStringContainsString(
'Your requirements could not be resolved to an installable set of packages.',
- self::$io->getOutput(),
+ $this->io->getOutput(),
);
}
- protected static function createConfig(): Src\Builder\Config\Config
+ protected function createConfig(): Src\Builder\Config\Config
{
$templateDirectory = dirname(__DIR__, 3).'/Fixtures/Templates/yaml-template';
$finder = Finder\Finder::create()
@@ -88,21 +90,19 @@ protected static function createConfig(): Src\Builder\Config\Config
->notName('composer.lock')
;
- self::$temporaryDirectory = Src\Helper\FilesystemHelper::getNewTemporaryDirectory();
- self::$filesystem = new Filesystem\Filesystem();
- self::$filesystem->mirror($templateDirectory, self::$temporaryDirectory, $finder);
+ $this->temporaryDirectory = Src\Helper\FilesystemHelper::getNewTemporaryDirectory();
+ $this->filesystem = new Filesystem\Filesystem();
+ $this->filesystem->mirror($templateDirectory, $this->temporaryDirectory, $finder);
$configFactory = Src\Builder\Config\ConfigFactory::create();
- return $configFactory->buildFromFile(self::$temporaryDirectory.'/config.yaml', 'yaml');
+ return $configFactory->buildFromFile($this->temporaryDirectory.'/config.yaml', 'yaml');
}
protected function tearDown(): void
{
- parent::tearDown();
-
- if (self::$filesystem->exists(self::$temporaryDirectory)) {
- self::$filesystem->remove(self::$temporaryDirectory);
+ if ($this->filesystem->exists($this->temporaryDirectory)) {
+ $this->filesystem->remove($this->temporaryDirectory);
}
}
}
diff --git a/tests/src/Builder/Generator/Step/Interaction/InteractionFactoryTest.php b/tests/src/Builder/Generator/Step/Interaction/InteractionFactoryTest.php
index 9a43e6cc..390c41dd 100644
--- a/tests/src/Builder/Generator/Step/Interaction/InteractionFactoryTest.php
+++ b/tests/src/Builder/Generator/Step/Interaction/InteractionFactoryTest.php
@@ -39,7 +39,9 @@ final class InteractionFactoryTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\Builder\Generator\Step\Interaction\InteractionFactory::class);
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\Builder\Generator\Step\Interaction\InteractionFactory::class);
}
#[Framework\Attributes\Test]
diff --git a/tests/src/Builder/Generator/Step/Interaction/QuestionInteractionTest.php b/tests/src/Builder/Generator/Step/Interaction/QuestionInteractionTest.php
index 2d069761..5e53aa94 100644
--- a/tests/src/Builder/Generator/Step/Interaction/QuestionInteractionTest.php
+++ b/tests/src/Builder/Generator/Step/Interaction/QuestionInteractionTest.php
@@ -40,8 +40,10 @@ final class QuestionInteractionTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\Builder\Generator\Step\Interaction\QuestionInteraction::class);
- $this->instructions = new Src\Builder\BuildInstructions(self::$config, 'foo');
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\Builder\Generator\Step\Interaction\QuestionInteraction::class);
+ $this->instructions = new Src\Builder\BuildInstructions($this->config, 'foo');
}
#[Framework\Attributes\Test]
@@ -49,7 +51,7 @@ public function interactUsesTruAndFalseAsDefaultYesNoValues(): void
{
$interactionSubject = $this->buildInteractionSubject();
- self::$io->setUserInputs(['yes', 'no']);
+ $this->io->setUserInputs(['yes', 'no']);
self::assertTrue($this->subject->interact($interactionSubject, $this->instructions));
self::assertFalse($this->subject->interact($interactionSubject, $this->instructions));
@@ -63,7 +65,7 @@ public function interactReturnsValueFromMatchingOption(): void
new Src\Builder\Config\ValueObject\PropertyOption('bar', 'not selected'),
]);
- self::$io->setUserInputs(['yes', 'no']);
+ $this->io->setUserInputs(['yes', 'no']);
self::assertSame('foo', $this->subject->interact($interactionSubject, $this->instructions));
self::assertSame('bar', $this->subject->interact($interactionSubject, $this->instructions));
@@ -76,7 +78,7 @@ public function interactUsesFallbackConditionIfOnlyOptionValueIsConfigured(): vo
new Src\Builder\Config\ValueObject\PropertyOption('foo'),
]);
- self::$io->setUserInputs(['yes', 'no']);
+ $this->io->setUserInputs(['yes', 'no']);
self::assertSame('foo', $this->subject->interact($interactionSubject, $this->instructions));
self::assertFalse($this->subject->interact($interactionSubject, $this->instructions));
diff --git a/tests/src/Builder/Generator/Step/Interaction/SelectInteractionTest.php b/tests/src/Builder/Generator/Step/Interaction/SelectInteractionTest.php
index 17182fff..866e97b8 100644
--- a/tests/src/Builder/Generator/Step/Interaction/SelectInteractionTest.php
+++ b/tests/src/Builder/Generator/Step/Interaction/SelectInteractionTest.php
@@ -40,8 +40,10 @@ final class SelectInteractionTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\Builder\Generator\Step\Interaction\SelectInteraction::class);
- $this->instructions = new Src\Builder\BuildInstructions(self::$config, 'foo');
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\Builder\Generator\Step\Interaction\SelectInteraction::class);
+ $this->instructions = new Src\Builder\BuildInstructions($this->config, 'foo');
}
#[Framework\Attributes\Test]
@@ -85,7 +87,7 @@ public function interactReturnsSelectedOption(): void
];
$interactionSubject = $this->buildInteractionSubject($propertyOptions, false, null, true);
- self::$io->setUserInputs(['bar']);
+ $this->io->setUserInputs(['bar']);
self::assertSame('bar', $this->subject->interact($interactionSubject, $this->instructions));
}
@@ -101,7 +103,7 @@ public function interactReturnsSelectedOptionsIfMultipleOptionsAreAllowed(): voi
];
$interactionSubject = $this->buildInteractionSubject($propertyOptions, true);
- self::$io->setUserInputs(['hello,bar']);
+ $this->io->setUserInputs(['hello,bar']);
self::assertSame(['bar', 'hello'], $this->subject->interact($interactionSubject, $this->instructions));
}
diff --git a/tests/src/Builder/Generator/Step/ProcessSharedSourceFilesStepTest.php b/tests/src/Builder/Generator/Step/ProcessSharedSourceFilesStepTest.php
index 8dcc8cff..a65ce5ad 100644
--- a/tests/src/Builder/Generator/Step/ProcessSharedSourceFilesStepTest.php
+++ b/tests/src/Builder/Generator/Step/ProcessSharedSourceFilesStepTest.php
@@ -40,12 +40,14 @@ final class ProcessSharedSourceFilesStepTest extends Tests\ContainerAwareTestCas
protected function setUp(): void
{
+ parent::setUp();
+
$step = $this->findStep();
- $this->subject = self::$container->get(Src\Builder\Generator\Step\ProcessSharedSourceFilesStep::class);
+ $this->subject = $this->container->get(Src\Builder\Generator\Step\ProcessSharedSourceFilesStep::class);
$this->subject->setConfig($step);
$this->result = new Src\Builder\BuildResult(
- new Src\Builder\BuildInstructions(self::$config, 'foo'),
+ new Src\Builder\BuildInstructions($this->config, 'foo'),
);
}
@@ -82,7 +84,7 @@ public function revertRemovesProcessedFiles(): void
self::assertFileDoesNotExist($this->result->getInstructions()->getTemporaryDirectory().'/shared-dummy.yaml');
}
- protected static function createConfig(): Src\Builder\Config\Config
+ protected function createConfig(): Src\Builder\Config\Config
{
$configFactory = Src\Builder\Config\ConfigFactory::create();
@@ -94,7 +96,7 @@ protected static function createConfig(): Src\Builder\Config\Config
private function findStep(): Src\Builder\Config\ValueObject\Step
{
- foreach (self::$config->getSteps() as $step) {
+ foreach ($this->config->getSteps() as $step) {
if (Src\Builder\Generator\Step\ProcessSharedSourceFilesStep::getType() === $step->getType()) {
return $step;
}
diff --git a/tests/src/Builder/Generator/Step/ProcessSourceFilesStepTest.php b/tests/src/Builder/Generator/Step/ProcessSourceFilesStepTest.php
index b4a543d0..22ea501e 100644
--- a/tests/src/Builder/Generator/Step/ProcessSourceFilesStepTest.php
+++ b/tests/src/Builder/Generator/Step/ProcessSourceFilesStepTest.php
@@ -43,12 +43,14 @@ final class ProcessSourceFilesStepTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
+ parent::setUp();
+
$step = $this->findStep();
- $this->subject = self::$container->get(Src\Builder\Generator\Step\ProcessSourceFilesStep::class);
+ $this->subject = $this->container->get(Src\Builder\Generator\Step\ProcessSourceFilesStep::class);
$this->subject->setConfig($step);
$this->result = new Src\Builder\BuildResult(
- new Src\Builder\BuildInstructions(self::$config, 'foo'),
+ new Src\Builder\BuildInstructions($this->config, 'foo'),
);
}
@@ -162,7 +164,7 @@ public static function runCanProcessTheSameSourceFileWithMultipleConditionsDataP
];
}
- protected static function createConfig(): Src\Builder\Config\Config
+ protected function createConfig(): Src\Builder\Config\Config
{
$configFactory = Src\Builder\Config\ConfigFactory::create();
@@ -174,7 +176,7 @@ protected static function createConfig(): Src\Builder\Config\Config
private function findStep(): Src\Builder\Config\ValueObject\Step
{
- foreach (self::$config->getSteps() as $step) {
+ foreach ($this->config->getSteps() as $step) {
if (Src\Builder\Generator\Step\ProcessSourceFilesStep::getType() === $step->getType()) {
return $step;
}
diff --git a/tests/src/Builder/Generator/Step/RunCommandStepTest.php b/tests/src/Builder/Generator/Step/RunCommandStepTest.php
index d3cc3fca..5cc57028 100644
--- a/tests/src/Builder/Generator/Step/RunCommandStepTest.php
+++ b/tests/src/Builder/Generator/Step/RunCommandStepTest.php
@@ -25,6 +25,8 @@
use CPSIT\ProjectBuilder as Src;
use CPSIT\ProjectBuilder\Tests;
+use Generator;
+use LogicException;
use PHPUnit\Framework;
use Symfony\Component\Filesystem;
@@ -38,16 +40,24 @@ final class RunCommandStepTest extends Tests\ContainerAwareTestCase
{
private Src\Builder\Generator\Step\RunCommandStep $subject;
private Src\Builder\BuildResult $result;
+ private Filesystem\Filesystem $filesystem;
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\Builder\Generator\Step\RunCommandStep::class);
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\Builder\Generator\Step\RunCommandStep::class);
$this->result = new Src\Builder\BuildResult(
new Src\Builder\BuildInstructions(
- self::$config,
+ $this->config,
'foo',
),
);
+ $this->filesystem = new Filesystem\Filesystem();
+
+ if (!$this->filesystem->exists($this->result->getWrittenDirectory())) {
+ $this->filesystem->mkdir($this->result->getWrittenDirectory());
+ }
}
#[Framework\Attributes\Test]
@@ -62,7 +72,7 @@ public function runThrowsExceptionIfNoCommandIsGiven(): void
#[Framework\Attributes\Test]
public function runThrowsExceptionIfRevertingIsAttempted(): never
{
- $this->expectException('\LogicException');
+ $this->expectException(LogicException::class);
$this->expectExceptionCode(1687518806);
$this->expectExceptionMessage('An already run command cannot be reverted.');
$this->subject->revert($this->result);
@@ -77,7 +87,7 @@ public function runCommandIsSupported(): void
}
#[Framework\Attributes\Test]
- public function runExecutesCommandWithoutConfirmationIfSKipConfirmationIsConfigured(): void
+ public function runExecutesCommandWithoutConfirmationIfSkipConfirmationIsConfigured(): void
{
$this->subject->setConfig(
new Src\Builder\Config\ValueObject\Step(
@@ -89,16 +99,28 @@ public function runExecutesCommandWithoutConfirmationIfSKipConfirmationIsConfigu
),
);
- $workingDirectory = $this->result->getWrittenDirectory();
-
- $fileSystem = new Filesystem\Filesystem();
- if (!$fileSystem->exists($workingDirectory)) {
- $fileSystem->mkdir($workingDirectory);
- }
-
self::assertTrue($this->subject->run($this->result));
self::assertFalse($this->subject->isStopped());
- self::assertStringNotContainsString('Do you wish to run this command?', self::$io->getOutput());
+ self::assertStringNotContainsString('Do you wish to run this command?', $this->io->getOutput());
+ }
+
+ #[Framework\Attributes\Test]
+ #[Framework\Attributes\DataProvider('runDoesNotExecuteCommandAndRespectsExecutionRequirementDataProvider')]
+ public function runDoesNotExecuteCommandAndRespectsExecutionRequirement(bool $required, bool $expected): void
+ {
+ $this->subject->setConfig(
+ new Src\Builder\Config\ValueObject\Step(
+ Src\Builder\Generator\Step\RunCommandStep::getType(),
+ new Src\Builder\Config\ValueObject\StepOptions(
+ command: 'echo \'foo\'',
+ required: $required,
+ ),
+ ),
+ );
+
+ $this->io->setUserInputs(['no']);
+ self::assertSame($expected, $this->subject->run($this->result));
+ self::assertTrue($this->subject->isStopped());
}
#[Framework\Attributes\Test]
@@ -114,16 +136,9 @@ public function runExecutesCommandAndAllowsExecutionFailures(): void
),
);
- $workingDirectory = $this->result->getWrittenDirectory();
-
- $fileSystem = new Filesystem\Filesystem();
- if (!$fileSystem->exists($workingDirectory)) {
- $fileSystem->mkdir($workingDirectory);
- }
-
self::assertTrue($this->subject->run($this->result));
self::assertFalse($this->subject->isStopped());
- self::assertStringContainsString('not found', self::$io->getOutput());
+ self::assertStringContainsString('not found', $this->io->getOutput());
}
#[Framework\Attributes\Test]
@@ -138,7 +153,7 @@ public function negatedQuestionForExecutionResultsInStoppedRun(): void
),
);
- self::$io->setUserInputs(['no']);
+ $this->io->setUserInputs(['no']);
self::assertFalse($this->subject->run($this->result));
self::assertTrue($this->subject->isStopped());
}
@@ -155,19 +170,23 @@ public function invalidCommandPrintProcessErrorMessage(): void
),
);
- $workingDirectory = $this->result->getWrittenDirectory();
-
- $fileSystem = new Filesystem\Filesystem();
- if (!$fileSystem->exists($workingDirectory)) {
- $fileSystem->mkdir($workingDirectory);
- }
-
- self::$io->setUserInputs(['yes']);
- $actual = $this->subject->run($this->result);
- self::$io->getOutput();
+ $this->io->setUserInputs(['yes']);
+ self::assertFalse($this->subject->run($this->result));
+ }
- self::assertFalse($actual);
+ /**
+ * @return Generator
+ */
+ public static function runDoesNotExecuteCommandAndRespectsExecutionRequirementDataProvider(): Generator
+ {
+ yield 'required' => [true, false];
+ yield 'optional' => [false, true];
+ }
- $fileSystem->remove($workingDirectory);
+ protected function tearDown(): void
+ {
+ if ($this->filesystem->exists($this->result->getWrittenDirectory())) {
+ $this->filesystem->remove($this->result->getWrittenDirectory());
+ }
}
}
diff --git a/tests/src/Builder/Generator/Step/ShowNextStepsStepTest.php b/tests/src/Builder/Generator/Step/ShowNextStepsStepTest.php
index 6b0fbc27..f7274a17 100644
--- a/tests/src/Builder/Generator/Step/ShowNextStepsStepTest.php
+++ b/tests/src/Builder/Generator/Step/ShowNextStepsStepTest.php
@@ -42,9 +42,11 @@ final class ShowNextStepsStepTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\Builder\Generator\Step\ShowNextStepsStep::class);
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\Builder\Generator\Step\ShowNextStepsStep::class);
$this->result = new Src\Builder\BuildResult(
- new Src\Builder\BuildInstructions(self::$config, 'foo'),
+ new Src\Builder\BuildInstructions($this->config, 'foo'),
);
}
@@ -109,7 +111,7 @@ public function runShowsNextStepsFromRenderedTemplateFileAndAppliesStep(): void
);
$actual = $this->subject->run($this->result);
- $output = self::$io->getOutput();
+ $output = $this->io->getOutput();
self::assertTrue($actual);
self::assertStringContainsString('Next steps', $output);
diff --git a/tests/src/Builder/Generator/Step/StepFactoryTest.php b/tests/src/Builder/Generator/Step/StepFactoryTest.php
index de78c7c2..d3ca2d64 100644
--- a/tests/src/Builder/Generator/Step/StepFactoryTest.php
+++ b/tests/src/Builder/Generator/Step/StepFactoryTest.php
@@ -39,7 +39,9 @@ final class StepFactoryTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\Builder\Generator\Step\StepFactory::class);
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\Builder\Generator\Step\StepFactory::class);
}
#[Framework\Attributes\Test]
diff --git a/tests/src/Builder/Writer/GenericFileWriterTest.php b/tests/src/Builder/Writer/GenericFileWriterTest.php
index 97135d65..64210394 100644
--- a/tests/src/Builder/Writer/GenericFileWriterTest.php
+++ b/tests/src/Builder/Writer/GenericFileWriterTest.php
@@ -44,14 +44,16 @@ final class GenericFileWriterTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\Builder\Writer\GenericFileWriter::class);
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\Builder\Writer\GenericFileWriter::class);
}
#[Framework\Attributes\Test]
public function writeCopiesGivenFileToTemporaryDirectory(): void
{
$instructions = new Src\Builder\BuildInstructions(
- self::$container->get('app.config'),
+ $this->container->get('app.config'),
'foo',
);
$sourceFile = __FILE__;
@@ -70,7 +72,7 @@ public function writeCopiesGivenFileToTemporaryDirectory(): void
public function writeCopiesGivenFileToGivenTargetFile(): void
{
$instructions = new Src\Builder\BuildInstructions(
- self::$container->get('app.config'),
+ $this->container->get('app.config'),
'foo',
);
$sourceFile = __FILE__;
diff --git a/tests/src/Builder/Writer/JsonFileWriterTest.php b/tests/src/Builder/Writer/JsonFileWriterTest.php
index 07565be2..b2f5a51e 100644
--- a/tests/src/Builder/Writer/JsonFileWriterTest.php
+++ b/tests/src/Builder/Writer/JsonFileWriterTest.php
@@ -41,7 +41,9 @@ final class JsonFileWriterTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\Builder\Writer\JsonFileWriter::class);
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\Builder\Writer\JsonFileWriter::class);
}
#[Framework\Attributes\Test]
@@ -65,7 +67,7 @@ public static function writeDumpsJsonToGivenFileDataProvider(): Generator
{
yield 'json string' => ['{"foo":"baz"}', '{"foo":"baz"}'];
yield 'serializable json object' => [
- new class() implements JsonSerializable {
+ new class implements JsonSerializable {
/**
* @return array{'foo': string}
*/
diff --git a/tests/src/Builder/Writer/TemplateWriterTest.php b/tests/src/Builder/Writer/TemplateWriterTest.php
index f3c597ff..8c89b1a8 100644
--- a/tests/src/Builder/Writer/TemplateWriterTest.php
+++ b/tests/src/Builder/Writer/TemplateWriterTest.php
@@ -44,14 +44,16 @@ final class TemplateWriterTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\Builder\Writer\TemplateWriter::class);
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\Builder\Writer\TemplateWriter::class);
}
#[Framework\Attributes\Test]
public function writeWritesRenderedTemplateFileToTemporaryDirectory(): void
{
$instructions = new Src\Builder\BuildInstructions(
- self::$container->get('app.config'),
+ $this->container->get('app.config'),
'foo',
);
$instructions->addTemplateVariable('foo', 'foo');
@@ -85,7 +87,7 @@ public function writeWritesRenderedTemplateFileToTemporaryDirectory(): void
public function writeWritesRenderedTemplateFileToGivenTargetFile(): void
{
$instructions = new Src\Builder\BuildInstructions(
- self::$container->get('app.config'),
+ $this->container->get('app.config'),
'foo',
);
$instructions->addTemplateVariable('foo', 'foo');
diff --git a/tests/src/Builder/Writer/WriterFactoryTest.php b/tests/src/Builder/Writer/WriterFactoryTest.php
index 4d2a833a..2bc5e37a 100644
--- a/tests/src/Builder/Writer/WriterFactoryTest.php
+++ b/tests/src/Builder/Writer/WriterFactoryTest.php
@@ -39,7 +39,9 @@ final class WriterFactoryTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\Builder\Writer\WriterFactory::class);
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\Builder\Writer\WriterFactory::class);
}
#[Framework\Attributes\Test]
diff --git a/tests/src/ClearableBufferIO.php b/tests/src/ClearableBufferIO.php
index b2a8e117..3ccc1f56 100644
--- a/tests/src/ClearableBufferIO.php
+++ b/tests/src/ClearableBufferIO.php
@@ -26,9 +26,6 @@
use Composer\IO;
use Symfony\Component\Console;
-use function fseek;
-use function ftruncate;
-
/**
* ClearableBufferIO.
*
@@ -39,42 +36,6 @@
*/
final class ClearableBufferIO extends IO\BufferIO
{
- /**
- * @var callable
- */
- private $restoreInitialState;
-
- /**
- * @phpstan-param Console\Output\OutputInterface::VERBOSITY_* $verbosity
- */
- public function __construct(
- string $input = '',
- int $verbosity = Console\Output\OutputInterface::VERBOSITY_NORMAL,
- ?Console\Formatter\OutputFormatterInterface $formatter = null,
- ) {
- parent::__construct($input, $verbosity, $formatter);
-
- $this->restoreInitialState = function () use ($input, $verbosity, $formatter) {
- $this->input = new Console\Input\StringInput($input);
- $this->input->setInteractive(false);
-
- $this->clear();
- $this->output->setVerbosity($verbosity);
- $this->output->setDecorated(null !== $formatter && $formatter->isDecorated());
- };
- }
-
- public function reset(): void
- {
- ($this->restoreInitialState)();
- }
-
- public function clear(): void
- {
- ftruncate($this->output->getStream(), 0);
- fseek($this->output->getStream(), 0);
- }
-
public function makeInteractive(bool $interactive = true): self
{
$this->input->setInteractive($interactive);
diff --git a/tests/src/Console/Command/CreateProjectCommandTest.php b/tests/src/Console/Command/CreateProjectCommandTest.php
index f8eb13df..68c98964 100644
--- a/tests/src/Console/Command/CreateProjectCommandTest.php
+++ b/tests/src/Console/Command/CreateProjectCommandTest.php
@@ -53,11 +53,13 @@ final class CreateProjectCommandTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
+ parent::setUp();
+
$configReader = Src\Builder\Config\ConfigReader::create(dirname(__DIR__, 2).'/Fixtures/Templates');
- $this->messenger = self::$container->get('app.messenger');
+ $this->messenger = $this->container->get('app.messenger');
$this->targetDirectory = Src\Helper\FilesystemHelper::getNewTemporaryDirectory();
- $this->filesystem = self::$container->get(Filesystem\Filesystem::class);
+ $this->filesystem = $this->container->get(Filesystem\Filesystem::class);
$this->templateProvider = new Tests\Fixtures\DummyProvider();
$this->cacheableTemplateProvider = new Tests\Fixtures\DummyCacheableProvider($this->messenger, $this->filesystem);
@@ -71,13 +73,13 @@ protected function setUp(): void
$this->commandTester = new SymfonyConsole\Tester\CommandTester($command);
- self::$io->makeInteractive();
+ $this->io->makeInteractive();
}
#[Framework\Attributes\Test]
public function createReturnsInstanceWithGivenMessenger(): void
{
- self::$io->makeInteractive(false);
+ $this->io->makeInteractive(false);
$input = new SymfonyConsole\Input\ArrayInput([
'target-directory' => 'foo',
@@ -89,20 +91,20 @@ public function createReturnsInstanceWithGivenMessenger(): void
self::assertStringContainsString(
'This command cannot be run in non-interactive mode.',
- self::$io->getOutput(),
+ $this->io->getOutput(),
);
}
#[Framework\Attributes\Test]
public function executeThrowsExceptionIfInputIsNonInteractive(): void
{
- self::$io->makeInteractive(false);
+ $this->io->makeInteractive(false);
self::assertSame(1, $this->commandTester->execute([
'target-directory' => $this->targetDirectory,
]));
- $output = self::$io->getOutput();
+ $output = $this->io->getOutput();
self::assertStringContainsString('This command cannot be run in non-interactive mode.', $output);
}
@@ -110,7 +112,7 @@ public function executeThrowsExceptionIfInputIsNonInteractive(): void
#[Framework\Attributes\Test]
public function executeShowsWelcomeScreen(): void
{
- self::$io->setUserInputs(['no']);
+ $this->io->setUserInputs(['no']);
try {
$this->commandTester->execute([
@@ -120,7 +122,7 @@ public function executeShowsWelcomeScreen(): void
// Intended fallthrough.
}
- $output = self::$io->getOutput();
+ $output = $this->io->getOutput();
self::assertStringContainsString('Welcome to the Project Builder', $output);
}
@@ -128,7 +130,7 @@ public function executeShowsWelcomeScreen(): void
#[Framework\Attributes\Test]
public function executeAllowsSelectingADifferentTemplateProviderIfTheSelectedProviderProvidesNoTemplates(): void
{
- self::$io->setUserInputs(['yes', '', 'no']);
+ $this->io->setUserInputs(['yes', '', 'no']);
try {
$this->commandTester->execute([
@@ -138,7 +140,7 @@ public function executeAllowsSelectingADifferentTemplateProviderIfTheSelectedPro
// Intended fallthrough.
}
- $output = self::$io->getOutput();
+ $output = $this->io->getOutput();
self::assertStringContainsStringMultipleTimes('Fetching templates from https://www.example.com ...', $output);
self::assertStringContainsString('Where can we find the project template?', $output);
@@ -151,7 +153,7 @@ public function executeAllowsSelectingADifferentTemplateProviderIfTheSelectedPro
$this->createTemplateSource(),
];
- self::$io->setUserInputs(['1', '']);
+ $this->io->setUserInputs(['1', '']);
try {
$this->commandTester->execute([
@@ -161,7 +163,7 @@ public function executeAllowsSelectingADifferentTemplateProviderIfTheSelectedPro
// Intended fallthrough.
}
- $output = self::$io->getOutput();
+ $output = $this->io->getOutput();
self::assertStringContainsStringMultipleTimes('Fetching templates from https://www.example.com ...', $output);
self::assertStringContainsStringMultipleTimes('Try a different provider (e.g. Satis or GitHub)', $output);
@@ -172,7 +174,7 @@ public function executeFailsIfProjectGenerationIsAborted(): void
{
$this->filesystem->dumpFile($this->targetDirectory.'/foo', 'baz');
- self::$io->setUserInputs(['no']);
+ $this->io->setUserInputs(['no']);
self::assertSame(2, $this->commandTester->execute([
'target-directory' => $this->targetDirectory,
@@ -187,14 +189,14 @@ public function executeHandlesErrorDuringProjectGeneration(): void
$this->createTemplateSource(),
];
- self::$io->setUserInputs(['', '', '', '', 'no']);
+ $this->io->setUserInputs(['', '', '', '', 'no']);
self::assertSame(1, $this->commandTester->execute([
'target-directory' => $this->targetDirectory,
]));
self::assertStringContainsString(
'Running step "collectBuildInstructions" failed. All applied steps were reverted. [1652954290]',
- self::$io->getOutput(),
+ $this->io->getOutput(),
);
}
@@ -203,7 +205,7 @@ public function executeSkipsOverwriteConfirmationIfForceOptionIsGiven(): void
{
$this->filesystem->dumpFile($this->targetDirectory.'/foo', 'baz');
- self::$io->setUserInputs(['no']);
+ $this->io->setUserInputs(['no']);
try {
$this->commandTester->execute([
@@ -214,7 +216,7 @@ public function executeSkipsOverwriteConfirmationIfForceOptionIsGiven(): void
// Intended fallthrough.
}
- $output = self::$io->getOutput();
+ $output = $this->io->getOutput();
self::assertStringNotContainsString(
sprintf('The target directory "%s" is not empty.', $this->targetDirectory),
@@ -230,7 +232,7 @@ public function executeDisablesTemplateSourceCacheIfNoCacheOptionIsGiven(): void
$this->createTemplateSource(),
];
- self::$io->setUserInputs(['yes', '1']);
+ $this->io->setUserInputs(['yes', '1']);
try {
$this->commandTester->execute([
@@ -252,13 +254,13 @@ public function executeGeneratesNewProjectFromSelectedTemplateAndShowsNumberOfPr
$this->createTemplateSource(),
];
- self::$io->setUserInputs(['', '', 'foo', 'yes']);
+ $this->io->setUserInputs(['', '', 'foo', 'yes']);
$this->commandTester->execute([
'target-directory' => $this->targetDirectory,
]);
- $output = self::$io->getOutput();
+ $output = $this->io->getOutput();
self::assertSame(0, $this->commandTester->getStatusCode());
self::assertStringContainsString(
@@ -276,14 +278,14 @@ public function executeGeneratesNewProjectFromSelectedTemplateAndShowsAllProcess
$this->createTemplateSource(),
];
- self::$io->setVerbosity(SymfonyConsole\Output\OutputInterface::VERBOSITY_VERBOSE);
- self::$io->setUserInputs(['', '', 'foo', 'yes']);
+ $this->io->setVerbosity(SymfonyConsole\Output\OutputInterface::VERBOSITY_VERBOSE);
+ $this->io->setUserInputs(['', '', 'foo', 'yes']);
$this->commandTester->execute([
'target-directory' => $this->targetDirectory,
]);
- $output = self::$io->getOutput();
+ $output = $this->io->getOutput();
self::assertSame(0, $this->commandTester->getStatusCode());
self::assertStringContainsString('* dummy.json', $output);
diff --git a/tests/src/Console/Command/ProxyCommandTest.php b/tests/src/Console/Command/ProxyCommandTest.php
index f5a7c743..644a48f1 100644
--- a/tests/src/Console/Command/ProxyCommandTest.php
+++ b/tests/src/Console/Command/ProxyCommandTest.php
@@ -43,6 +43,8 @@ final class ProxyCommandTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
+ parent::setUp();
+
$this->command = new Tests\Fixtures\DummyCommand();
$this->subject = new Src\Console\Command\ProxyCommand(
fn (Src\IO\Messenger $messenger) => $this->command->setMessenger($messenger),
diff --git a/tests/src/Console/IO/AccessibleConsoleIOTest.php b/tests/src/Console/IO/AccessibleConsoleIOTest.php
index 735c99d9..086708db 100644
--- a/tests/src/Console/IO/AccessibleConsoleIOTest.php
+++ b/tests/src/Console/IO/AccessibleConsoleIOTest.php
@@ -41,7 +41,9 @@ final class AccessibleConsoleIOTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = Src\Console\IO\AccessibleConsoleIO::fromIO(self::$io);
+ parent::setUp();
+
+ $this->subject = Src\Console\IO\AccessibleConsoleIO::fromIO($this->io);
}
#[Framework\Attributes\Test]
@@ -70,17 +72,17 @@ public function fromIOConstructsInputAndOutputIfIOIsNotConsoleIO(): void
#[Framework\Attributes\Test]
public function getInputReturnsInput(): void
{
- self::$io->makeInteractive();
+ $this->io->makeInteractive();
$input = $this->subject->getInput();
self::assertTrue($input->isInteractive());
- self::assertTrue(self::$io->isInteractive());
+ self::assertTrue($this->io->isInteractive());
$input->setInteractive(false);
self::assertFalse($input->isInteractive());
- self::assertFalse(self::$io->isInteractive());
+ self::assertFalse($this->io->isInteractive());
}
#[Framework\Attributes\Test]
@@ -89,6 +91,6 @@ public function getOutputReturnsOutput(): void
$output = $this->subject->getOutput();
$output->write('hello world');
- self::assertSame('hello world', self::$io->getOutput());
+ self::assertSame('hello world', $this->io->getOutput());
}
}
diff --git a/tests/src/ContainerAwareTestCase.php b/tests/src/ContainerAwareTestCase.php
index f4a1ddf5..80573694 100644
--- a/tests/src/ContainerAwareTestCase.php
+++ b/tests/src/ContainerAwareTestCase.php
@@ -42,23 +42,23 @@
*/
abstract class ContainerAwareTestCase extends Framework\TestCase
{
- protected static DependencyInjection\ContainerInterface $container;
- protected static ClearableBufferIO $io;
- protected static Handler\MockHandler $mockHandler;
- protected static Src\Builder\Config\Config $config;
+ protected DependencyInjection\ContainerInterface $container;
+ protected ClearableBufferIO $io;
+ protected Handler\MockHandler $mockHandler;
+ protected Src\Builder\Config\Config $config;
- public static function setUpBeforeClass(): void
+ protected function setUp(): void
{
- self::$io = static::createIO();
- self::$config = static::createConfig();
+ $this->io = $this->createIO();
+ $this->config = $this->createConfig();
- self::$container = Src\DependencyInjection\ContainerFactory::createForTesting()->get();
- self::$container->set('app.messenger', Src\IO\Messenger::create(self::$io));
- self::$container->set('app.config', self::$config);
- self::$container->set(Client\ClientInterface::class, static::createClient());
+ $this->container = Src\DependencyInjection\ContainerFactory::createForTesting()->get();
+ $this->container->set('app.messenger', Src\IO\Messenger::create($this->io));
+ $this->container->set('app.config', $this->config);
+ $this->container->set(Client\ClientInterface::class, $this->createClient());
}
- protected static function createConfig(): Src\Builder\Config\Config
+ protected function createConfig(): Src\Builder\Config\Config
{
$config = new Src\Builder\Config\Config(
'test',
@@ -94,16 +94,16 @@ protected static function createConfig(): Src\Builder\Config\Config
return $config;
}
- protected static function createIO(): ClearableBufferIO
+ protected function createIO(): ClearableBufferIO
{
return new ClearableBufferIO();
}
- protected static function createClient(): Client\ClientInterface
+ protected function createClient(): Client\ClientInterface
{
- self::$mockHandler = new Handler\MockHandler();
+ $this->mockHandler = new Handler\MockHandler();
- $handler = new HandlerStack(self::$mockHandler);
+ $handler = new HandlerStack($this->mockHandler);
return new \GuzzleHttp\Client(['handler' => $handler]);
}
@@ -124,10 +124,4 @@ protected static function createErroneousResponse(int $statusCode = 500): Messag
{
return new Psr7\Response($statusCode, [], 'Something went wrong.');
}
-
- protected function tearDown(): void
- {
- self::$io->reset();
- self::$mockHandler->reset();
- }
}
diff --git a/tests/src/Error/ErrorHandlerTest.php b/tests/src/Error/ErrorHandlerTest.php
index 7c9a165c..ae1e56dd 100644
--- a/tests/src/Error/ErrorHandlerTest.php
+++ b/tests/src/Error/ErrorHandlerTest.php
@@ -46,7 +46,9 @@ final class ErrorHandlerTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = new Src\Error\ErrorHandler(self::$container->get('app.messenger'));
+ parent::setUp();
+
+ $this->subject = new Src\Error\ErrorHandler($this->container->get('app.messenger'));
}
/**
@@ -58,7 +60,7 @@ public function handleExceptionWritesFormattedErrorMessage(Throwable $exception,
{
$this->subject->handleException($exception);
- $output = self::$io->getOutput();
+ $output = $this->io->getOutput();
foreach ($expectedOutput as $expected) {
self::assertStringContainsString($expected, $output);
diff --git a/tests/src/Event/BeforeTemplateRenderedEventTest.php b/tests/src/Event/BeforeTemplateRenderedEventTest.php
index ea8d185d..d926a5cc 100644
--- a/tests/src/Event/BeforeTemplateRenderedEventTest.php
+++ b/tests/src/Event/BeforeTemplateRenderedEventTest.php
@@ -41,9 +41,11 @@ final class BeforeTemplateRenderedEventTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->buildInstructions = new Src\Builder\BuildInstructions(self::$config, 'foo');
+ parent::setUp();
+
+ $this->buildInstructions = new Src\Builder\BuildInstructions($this->config, 'foo');
$this->subject = new Src\Event\BeforeTemplateRenderedEvent(
- self::$container->get(Environment::class),
+ $this->container->get(Environment::class),
$this->buildInstructions,
[
'foo' => true,
@@ -56,7 +58,7 @@ protected function setUp(): void
public function getTwigReturnsTwigEnvironment(): void
{
self::assertSame(
- self::$container->get(Environment::class),
+ $this->container->get(Environment::class),
$this->subject->getTwig(),
);
}
diff --git a/tests/src/Event/BuildInstructionCollectedEventTest.php b/tests/src/Event/BuildInstructionCollectedEventTest.php
index ed611059..13451080 100644
--- a/tests/src/Event/BuildInstructionCollectedEventTest.php
+++ b/tests/src/Event/BuildInstructionCollectedEventTest.php
@@ -42,6 +42,8 @@ final class BuildInstructionCollectedEventTest extends Tests\ContainerAwareTestC
protected function setUp(): void
{
+ parent::setUp();
+
$this->subProperty = new Src\Builder\Config\ValueObject\SubProperty(
'bar',
'Bar',
@@ -60,7 +62,7 @@ protected function setUp(): void
],
);
$this->buildResult = new Src\Builder\BuildResult(
- new Src\Builder\BuildInstructions(self::$config, 'foo'),
+ new Src\Builder\BuildInstructions($this->config, 'foo'),
);
$this->subject = new Src\Event\BuildInstructionCollectedEvent(
$this->property,
diff --git a/tests/src/Event/BuildStepProcessedEventTest.php b/tests/src/Event/BuildStepProcessedEventTest.php
index bc6c96d7..dd3836f8 100644
--- a/tests/src/Event/BuildStepProcessedEventTest.php
+++ b/tests/src/Event/BuildStepProcessedEventTest.php
@@ -41,9 +41,11 @@ final class BuildStepProcessedEventTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
+ parent::setUp();
+
$this->step = new Tests\Fixtures\DummyStep();
$this->buildResult = new Src\Builder\BuildResult(
- new Src\Builder\BuildInstructions(self::$config, 'foo'),
+ new Src\Builder\BuildInstructions($this->config, 'foo'),
);
$this->subject = new Src\Event\BuildStepProcessedEvent(
$this->step,
diff --git a/tests/src/Event/BuildStepRevertedEventTest.php b/tests/src/Event/BuildStepRevertedEventTest.php
index f72d6fda..72f6345a 100644
--- a/tests/src/Event/BuildStepRevertedEventTest.php
+++ b/tests/src/Event/BuildStepRevertedEventTest.php
@@ -41,9 +41,11 @@ final class BuildStepRevertedEventTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
+ parent::setUp();
+
$this->step = new Tests\Fixtures\DummyStep();
$this->buildResult = new Src\Builder\BuildResult(
- new Src\Builder\BuildInstructions(self::$config, 'foo'),
+ new Src\Builder\BuildInstructions($this->config, 'foo'),
);
$this->subject = new Src\Event\BuildStepRevertedEvent(
$this->step,
diff --git a/tests/src/Event/ProjectBuildFinishedEventTest.php b/tests/src/Event/ProjectBuildFinishedEventTest.php
index 36fe3441..9a35de1b 100644
--- a/tests/src/Event/ProjectBuildFinishedEventTest.php
+++ b/tests/src/Event/ProjectBuildFinishedEventTest.php
@@ -40,8 +40,10 @@ final class ProjectBuildFinishedEventTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
+ parent::setUp();
+
$this->buildResult = new Src\Builder\BuildResult(
- new Src\Builder\BuildInstructions(self::$config, 'foo'),
+ new Src\Builder\BuildInstructions($this->config, 'foo'),
);
$this->subject = new Src\Event\ProjectBuildFinishedEvent(
$this->buildResult,
diff --git a/tests/src/Event/ProjectBuildStartedEventTest.php b/tests/src/Event/ProjectBuildStartedEventTest.php
index d16b8afd..d2c07fb4 100644
--- a/tests/src/Event/ProjectBuildStartedEventTest.php
+++ b/tests/src/Event/ProjectBuildStartedEventTest.php
@@ -40,7 +40,9 @@ final class ProjectBuildStartedEventTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->buildInstructions = new Src\Builder\BuildInstructions(self::$config, 'foo');
+ parent::setUp();
+
+ $this->buildInstructions = new Src\Builder\BuildInstructions($this->config, 'foo');
$this->subject = new Src\Event\ProjectBuildStartedEvent(
$this->buildInstructions,
);
diff --git a/tests/src/Fixtures/Templates/json-template/composer.json b/tests/src/Fixtures/Templates/json-template/composer.json
index 7249fe12..1d885276 100644
--- a/tests/src/Fixtures/Templates/json-template/composer.json
+++ b/tests/src/Fixtures/Templates/json-template/composer.json
@@ -2,7 +2,7 @@
"name": "cpsit/project-builder-template-json",
"type": "project-builder-template",
"require": {
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0"
+ "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
},
"require-dev": {
"phpunit/phpunit": "^9.5"
diff --git a/tests/src/Fixtures/Templates/yaml-template/composer.json b/tests/src/Fixtures/Templates/yaml-template/composer.json
index aad054f1..2d269265 100644
--- a/tests/src/Fixtures/Templates/yaml-template/composer.json
+++ b/tests/src/Fixtures/Templates/yaml-template/composer.json
@@ -2,7 +2,7 @@
"name": "cpsit/project-builder-template-yaml",
"type": "project-builder-template",
"require": {
- "php": "~8.1.0 || ~8.2.0 || ~8.3.0"
+ "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
},
"require-dev": {
"phpunit/phpunit": "^9.5"
diff --git a/tests/src/IO/InputReaderTest.php b/tests/src/IO/InputReaderTest.php
index aeb8b7a2..24b42daf 100644
--- a/tests/src/IO/InputReaderTest.php
+++ b/tests/src/IO/InputReaderTest.php
@@ -39,16 +39,18 @@ final class InputReaderTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = new Src\IO\InputReader(self::$io);
+ parent::setUp();
+
+ $this->subject = new Src\IO\InputReader($this->io);
}
#[Framework\Attributes\Test]
public function staticValueReturnsUserInput(): void
{
- self::$io->setUserInputs(['Bob']);
+ $this->io->setUserInputs(['Bob']);
self::assertSame('Bob', $this->subject->staticValue('What\'s your name?', 'Alice'));
- self::assertStringContainsString('What\'s your name? (optional) [Alice]', self::$io->getOutput());
+ self::assertStringContainsString('What\'s your name? (optional) [Alice]', $this->io->getOutput());
}
#[Framework\Attributes\Test]
@@ -60,25 +62,25 @@ public function staticValueReturnsDefaultValue(): void
#[Framework\Attributes\Test]
public function staticValueReturnsTrimmedAnswerValue(): void
{
- self::$io->setUserInputs([' Bob ']);
+ $this->io->setUserInputs([' Bob ']);
self::assertSame('Bob', $this->subject->staticValue('What\'s your name?'));
}
#[Framework\Attributes\Test]
public function staticValueReturnsNullForEmptyAnswerValue(): void
{
- self::$io->setUserInputs([' ']);
+ $this->io->setUserInputs([' ']);
self::assertNull($this->subject->staticValue('What\'s your name?'));
}
#[Framework\Attributes\Test]
public function hiddenValueHidesUserInput(): void
{
- self::$io->setUserInputs(['s3cr3t']);
+ $this->io->setUserInputs(['s3cr3t']);
self::assertSame('s3cr3t', $this->subject->hiddenValue('What\'s your password?'));
- $output = self::$io->getOutput();
+ $output = $this->io->getOutput();
self::assertStringContainsString('What\'s your password?', $output);
self::assertStringNotContainsString('s3cr3t', $output);
@@ -87,7 +89,7 @@ public function hiddenValueHidesUserInput(): void
#[Framework\Attributes\Test]
public function choicesReturnsEmptyArrayIfNoSelectionWasMade(): void
{
- self::$io->setUserInputs(['']);
+ $this->io->setUserInputs(['']);
self::assertSame(
[],
diff --git a/tests/src/IO/MessengerTest.php b/tests/src/IO/MessengerTest.php
index 4922185b..eff19196 100644
--- a/tests/src/IO/MessengerTest.php
+++ b/tests/src/IO/MessengerTest.php
@@ -46,7 +46,9 @@ final class MessengerTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = self::$container->get('app.messenger');
+ parent::setUp();
+
+ $this->subject = $this->container->get('app.messenger');
}
#[Framework\Attributes\Test]
@@ -54,10 +56,10 @@ public function selectProviderCanHandlePackagistProvider(): void
{
$packagistProvider = new Src\Template\Provider\PackagistProvider(
$this->subject,
- self::$container->get(Filesystem\Filesystem::class),
+ $this->container->get(Filesystem\Filesystem::class),
);
- self::$io->setUserInputs(['']);
+ $this->io->setUserInputs(['']);
self::assertSame($packagistProvider, $this->subject->selectProvider([$packagistProvider]));
}
@@ -67,10 +69,10 @@ public function selectProviderCanHandleCustomComposerProvider(): void
{
$customProvider = new Src\Template\Provider\ComposerProvider(
$this->subject,
- self::$container->get(Filesystem\Filesystem::class),
+ $this->container->get(Filesystem\Filesystem::class),
);
- self::$io->setUserInputs(['', 'https://www.example.com']);
+ $this->io->setUserInputs(['', 'https://www.example.com']);
self::assertSame($customProvider, $this->subject->selectProvider([$customProvider]));
self::assertSame('https://www.example.com', $customProvider->getUrl());
@@ -96,10 +98,10 @@ public function selectTemplateSourceReturnsSelectedTemplateSource(
$templateSource = new Src\Template\TemplateSource($provider, $package);
$provider->templateSources = [$templateSource];
- self::$io->setUserInputs(['']);
+ $this->io->setUserInputs(['']);
self::assertSame($templateSource, $this->subject->selectTemplateSource($provider));
- self::assertStringContainsString($expected, self::$io->getOutput());
+ self::assertStringContainsString($expected, $this->io->getOutput());
}
#[Framework\Attributes\Test]
@@ -108,7 +110,7 @@ public function confirmTemplateSourceRetryAsksForConfirmationAndReturnsResult(st
{
$exception = new Exception('Something went wrong.');
- self::$io->setUserInputs([$input]);
+ $this->io->setUserInputs([$input]);
self::assertSame($expected, $this->subject->confirmTemplateSourceRetry($exception));
self::assertStringContainsString(
@@ -119,14 +121,14 @@ public function confirmTemplateSourceRetryAsksForConfirmationAndReturnsResult(st
'',
'Continue? [Y/n]',
]),
- self::$io->getOutput(),
+ $this->io->getOutput(),
);
}
#[Framework\Attributes\Test]
public function confirmProjectRegenerationAsksForConfirmationAndReturnsResult(): void
{
- self::$io->setUserInputs(['yes']);
+ $this->io->setUserInputs(['yes']);
self::assertTrue($this->subject->confirmProjectRegeneration());
self::assertStringContainsString(
@@ -134,14 +136,14 @@ public function confirmProjectRegenerationAsksForConfirmationAndReturnsResult():
'If you want, you can restart project generation now.',
'Restart? [Y/n]',
]),
- self::$io->getOutput(),
+ $this->io->getOutput(),
);
}
#[Framework\Attributes\Test]
public function confirmProjectGenerationAsksForRunCommandAndReturnsResult(): void
{
- self::$io->setUserInputs(['yes']);
+ $this->io->setUserInputs(['yes']);
$dummyCommand = 'foo --bar';
@@ -154,7 +156,7 @@ public function confirmProjectGenerationAsksForRunCommandAndReturnsResult(): voi
),
'Do you wish to run this command? [Y/n]',
]),
- self::$io->getOutput(),
+ $this->io->getOutput(),
);
}
@@ -163,7 +165,7 @@ public function isVerboseReturnsTrueIfVerbosityLevelIsVerbose(): void
{
self::assertFalse($this->subject->isVerbose());
- self::$io->setVerbosity(Console\Output\OutputInterface::VERBOSITY_VERBOSE);
+ $this->io->setVerbosity(Console\Output\OutputInterface::VERBOSITY_VERBOSE);
self::assertTrue($this->subject->isVerbose());
}
@@ -173,7 +175,7 @@ public function isVeryVerboseReturnsTrueIfVerbosityLevelIsVeryVerbose(): void
{
self::assertFalse($this->subject->isVeryVerbose());
- self::$io->setVerbosity(Console\Output\OutputInterface::VERBOSITY_VERY_VERBOSE);
+ $this->io->setVerbosity(Console\Output\OutputInterface::VERBOSITY_VERY_VERBOSE);
self::assertTrue($this->subject->isVeryVerbose());
}
@@ -183,7 +185,7 @@ public function isDebugReturnsTrueIfVerbosityLevelIsDebug(): void
{
self::assertFalse($this->subject->isDebug());
- self::$io->setVerbosity(Console\Output\OutputInterface::VERBOSITY_DEBUG);
+ $this->io->setVerbosity(Console\Output\OutputInterface::VERBOSITY_DEBUG);
self::assertTrue($this->subject->isDebug());
}
diff --git a/tests/src/IO/Validator/ValidatorFactoryTest.php b/tests/src/IO/Validator/ValidatorFactoryTest.php
index d6ee8f88..92d287e5 100644
--- a/tests/src/IO/Validator/ValidatorFactoryTest.php
+++ b/tests/src/IO/Validator/ValidatorFactoryTest.php
@@ -40,7 +40,9 @@ final class ValidatorFactoryTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\IO\Validator\ValidatorFactory::class);
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\IO\Validator\ValidatorFactory::class);
}
#[Framework\Attributes\Test]
diff --git a/tests/src/Json/SchemaValidatorTest.php b/tests/src/Json/SchemaValidatorTest.php
index dbbe7956..74e49060 100644
--- a/tests/src/Json/SchemaValidatorTest.php
+++ b/tests/src/Json/SchemaValidatorTest.php
@@ -42,7 +42,9 @@ final class SchemaValidatorTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\Json\SchemaValidator::class);
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\Json\SchemaValidator::class);
}
#[Framework\Attributes\Test]
diff --git a/tests/src/Naming/NameVariantBuilderTest.php b/tests/src/Naming/NameVariantBuilderTest.php
index 37d84313..541a504c 100644
--- a/tests/src/Naming/NameVariantBuilderTest.php
+++ b/tests/src/Naming/NameVariantBuilderTest.php
@@ -43,8 +43,10 @@ final class NameVariantBuilderTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
+ parent::setUp();
+
$this->instructions = new Src\Builder\BuildInstructions(
- self::$container->get('app.config'),
+ $this->container->get('app.config'),
'foo',
);
$this->subject = new Src\Naming\NameVariantBuilder($this->instructions);
diff --git a/tests/src/Resource/Http/PhpApiClientTest.php b/tests/src/Resource/Http/PhpApiClientTest.php
index 40390c5d..2e81ed29 100644
--- a/tests/src/Resource/Http/PhpApiClientTest.php
+++ b/tests/src/Resource/Http/PhpApiClientTest.php
@@ -39,13 +39,15 @@ final class PhpApiClientTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\Resource\Http\PhpApiClient::class);
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\Resource\Http\PhpApiClient::class);
}
#[Framework\Attributes\Test]
public function getLatestStableVersionThrowsExceptionOnInvalidResponse(): void
{
- self::$mockHandler->append(self::createErroneousResponse());
+ $this->mockHandler->append(self::createErroneousResponse());
$this->expectException(Src\Exception\HttpException::class);
$this->expectExceptionCode(1652861804);
@@ -57,7 +59,7 @@ public function getLatestStableVersionThrowsExceptionOnInvalidResponse(): void
#[Framework\Attributes\Test]
public function getLatestStableVersionReturnsLatestStableVersionOfGivenBranch(): void
{
- self::$mockHandler->append(self::createJsonResponse(['version' => '8.0.10']));
+ $this->mockHandler->append(self::createJsonResponse(['version' => '8.0.10']));
self::assertSame('8.0.10', $this->subject->getLatestStableVersion('8.0'));
}
@@ -65,7 +67,7 @@ public function getLatestStableVersionReturnsLatestStableVersionOfGivenBranch():
#[Framework\Attributes\Test]
public function getLatestStableVersionFallsBackToDotZeroReleaseIfResponseIsErroneous(): void
{
- self::$mockHandler->append(self::createJsonResponse(['error' => 'Unknown version']));
+ $this->mockHandler->append(self::createJsonResponse(['error' => 'Unknown version']));
self::assertSame('8.2.0', $this->subject->getLatestStableVersion('8.2'));
}
diff --git a/tests/src/Resource/Local/ComposerTest.php b/tests/src/Resource/Local/ComposerTest.php
index 04ae8a1e..200bb57a 100644
--- a/tests/src/Resource/Local/ComposerTest.php
+++ b/tests/src/Resource/Local/ComposerTest.php
@@ -45,7 +45,9 @@ final class ComposerTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\Resource\Local\Composer::class);
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\Resource\Local\Composer::class);
$this->composerJson = dirname(__DIR__, 2).'/Fixtures/Templates/yaml-template/composer.json';
}
diff --git a/tests/src/Template/Provider/BaseProviderTest.php b/tests/src/Template/Provider/BaseProviderTest.php
index d8d3e9d9..58b8502c 100644
--- a/tests/src/Template/Provider/BaseProviderTest.php
+++ b/tests/src/Template/Provider/BaseProviderTest.php
@@ -56,9 +56,11 @@ final class BaseProviderTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
+ parent::setUp();
+
$this->subject = new Tests\Fixtures\DummyComposerProvider(
- self::$container->get('app.messenger'),
- self::$container->get(Filesystem\Filesystem::class),
+ $this->container->get('app.messenger'),
+ $this->container->get(Filesystem\Filesystem::class),
);
$this->server = new MockWebServer\MockWebServer();
$this->server->start();
@@ -140,7 +142,7 @@ public function installTemplateSourceThrowsExceptionIfInstallationFailsWithGiven
$package = self::createPackage('foo/baz');
$templateSource = new Src\Template\TemplateSource($this->subject, $package);
- self::$io->setUserInputs(['']);
+ $this->io->setUserInputs(['']);
$this->expectExceptionObject(Src\Exception\InvalidTemplateSourceException::forFailedInstallation($templateSource));
@@ -157,13 +159,13 @@ public function installTemplateSourceFailsSoftlyIfGivenConstraintIsInvalid(): vo
$this->mockPackagesServerResponse([$package]);
- self::$io->setUserInputs(['foo', '']);
+ $this->io->setUserInputs(['foo', '']);
$this->subject->installTemplateSource($templateSource);
self::assertStringContainsString(
'Could not parse version constraint foo: Invalid version string "foo"',
- self::$io->getOutput(),
+ $this->io->getOutput(),
);
}
@@ -177,7 +179,7 @@ public function installTemplateSourceFailsIfGivenConstraintCannotBeResolved(): v
$this->mockPackagesServerResponse([$package]);
- self::$io->setUserInputs(['^2.0', 'no']);
+ $this->io->setUserInputs(['^2.0', 'no']);
$this->expectExceptionObject(
Src\Exception\InvalidTemplateSourceException::forInvalidPackageVersionConstraint($templateSource, '^2.0'),
@@ -196,13 +198,13 @@ public function installTemplateSourceAllowsSpecifyingOtherConstraintIfInstallati
$this->mockPackagesServerResponse([$package]);
- self::$io->setUserInputs(['^2.0', 'yes', '']);
+ $this->io->setUserInputs(['^2.0', 'yes', '']);
self::assertFalse($templateSource->shouldUseDynamicVersionConstraint());
$this->subject->installTemplateSource($templateSource);
- $output = self::$io->getOutput();
+ $output = $this->io->getOutput();
self::assertStringContainsString('Installing project template (1.0.0)... Done', $output);
self::assertTrue($templateSource->shouldUseDynamicVersionConstraint());
@@ -224,11 +226,11 @@ public function installTemplateSourceInstallsComposerPackage(
$this->mockPackagesServerResponse($packages);
- self::$io->setUserInputs([$constraint]);
+ $this->io->setUserInputs([$constraint]);
$this->subject->installTemplateSource($templateSource);
- self::assertStringContainsString($expected, self::$io->getOutput());
+ self::assertStringContainsString($expected, $this->io->getOutput());
}
#[Framework\Attributes\Test]
@@ -402,8 +404,6 @@ function (array $carry, Package\PackageInterface $package) use ($dumper): array
protected function tearDown(): void
{
- parent::tearDown();
-
$this->server->stop();
}
}
diff --git a/tests/src/Template/Provider/ComposerProviderTest.php b/tests/src/Template/Provider/ComposerProviderTest.php
index aac06dfc..993fd28e 100644
--- a/tests/src/Template/Provider/ComposerProviderTest.php
+++ b/tests/src/Template/Provider/ComposerProviderTest.php
@@ -44,9 +44,11 @@ final class ComposerProviderTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
+ parent::setUp();
+
$this->subject = new Src\Template\Provider\ComposerProvider(
- self::$container->get('app.messenger'),
- self::$container->get(Filesystem\Filesystem::class),
+ $this->container->get('app.messenger'),
+ $this->container->get(Filesystem\Filesystem::class),
);
$this->server = new MockWebServer\MockWebServer();
$this->server->start();
@@ -59,9 +61,9 @@ public function requestCustomOptionsAsksAndAppliesBaseUrl(): void
{
$this->overwriteIO();
- self::$io->setUserInputs(['https://example.com']);
+ $this->io->setUserInputs(['https://example.com']);
- $this->subject->requestCustomOptions(self::$container->get('app.messenger'));
+ $this->subject->requestCustomOptions($this->container->get('app.messenger'));
self::assertSame('https://example.com', $this->subject->getUrl());
}
@@ -96,7 +98,7 @@ public function listTemplateSourcesAddsAdditionalEmptyLineOnWrittenOutput(): voi
$this->subject->listTemplateSources();
self::assertTrue($io->isOutputWritten());
- self::assertSame(PHP_EOL, self::$io->getOutput());
+ self::assertSame(PHP_EOL, $this->io->getOutput());
}
#[Framework\Attributes\Test]
@@ -118,7 +120,7 @@ public function listTemplateSourcesConnectsToComposerHostToFetchAvailablePackage
private function overwriteIO(): void
{
- $this->setPropertyValueOnObject($this->subject, 'io', self::$io);
+ $this->setPropertyValueOnObject($this->subject, 'io', $this->io);
}
private function acceptInsecureConnections(): void
@@ -151,8 +153,6 @@ private function getReflectionProperty(object $object, string $propertyName): Re
protected function tearDown(): void
{
- parent::tearDown();
-
$this->server->stop();
}
}
diff --git a/tests/src/Template/Provider/ProviderFactoryTest.php b/tests/src/Template/Provider/ProviderFactoryTest.php
index cfc81ec5..c52934f2 100644
--- a/tests/src/Template/Provider/ProviderFactoryTest.php
+++ b/tests/src/Template/Provider/ProviderFactoryTest.php
@@ -39,7 +39,9 @@ final class ProviderFactoryTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\Template\Provider\ProviderFactory::class);
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\Template\Provider\ProviderFactory::class);
}
#[Framework\Attributes\Test]
diff --git a/tests/src/Template/Provider/VcsProviderTest.php b/tests/src/Template/Provider/VcsProviderTest.php
index d32571df..b16e7bbd 100644
--- a/tests/src/Template/Provider/VcsProviderTest.php
+++ b/tests/src/Template/Provider/VcsProviderTest.php
@@ -52,9 +52,11 @@ final class VcsProviderTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->filesystem = self::$container->get(Filesystem\Filesystem::class);
+ parent::setUp();
+
+ $this->filesystem = $this->container->get(Filesystem\Filesystem::class);
$this->subject = new Src\Template\Provider\VcsProvider(
- self::$container->get('app.messenger'),
+ $this->container->get('app.messenger'),
$this->filesystem,
);
$this->rootPath = Src\Helper\FilesystemHelper::getPackageDirectory();
@@ -65,9 +67,9 @@ protected function setUp(): void
#[Framework\Attributes\Test]
public function requestCustomOptionsAsksAndAppliesBaseUrl(): void
{
- self::$io->setUserInputs(['https://example.com']);
+ $this->io->setUserInputs(['https://example.com']);
- $this->subject->requestCustomOptions(self::$container->get('app.messenger'));
+ $this->subject->requestCustomOptions($this->container->get('app.messenger'));
self::assertSame('https://example.com', $this->subject->getUrl());
}
@@ -101,14 +103,14 @@ public function listTemplateSourcesAddsAdditionalEmptyLineOnWrittenOutput(): voi
new Console\Output\BufferedOutput(Console\Output\OutputInterface::VERBOSITY_VERY_VERBOSE),
);
- self::$io->setUserInputs([$repoA]);
+ $this->io->setUserInputs([$repoA]);
- $this->subject->requestCustomOptions(self::$container->get('app.messenger'));
+ $this->subject->requestCustomOptions($this->container->get('app.messenger'));
$this->subject->listTemplateSources();
self::assertTrue($io->isOutputWritten());
- self::assertStringContainsString(PHP_EOL, self::$io->getOutput());
+ self::assertStringContainsString(PHP_EOL, $this->io->getOutput());
$this->filesystem->remove($repoA);
}
@@ -120,9 +122,9 @@ public function listTemplateSourcesListsTemplatesFromConfiguredRepository(): voi
$repoA = $this->initializeGitRepository('test/repo-a', ['test/repo-b' => '*']);
- self::$io->setUserInputs([$repoA]);
+ $this->io->setUserInputs([$repoA]);
- $this->subject->requestCustomOptions(self::$container->get('app.messenger'));
+ $this->subject->requestCustomOptions($this->container->get('app.messenger'));
$actual = $this->subject->listTemplateSources();
@@ -144,9 +146,9 @@ public function listTemplateSourcesListsExcludedPackages(): void
],
]);
- self::$io->setUserInputs([$repoA]);
+ $this->io->setUserInputs([$repoA]);
- $this->subject->requestCustomOptions(self::$container->get('app.messenger'));
+ $this->subject->requestCustomOptions($this->container->get('app.messenger'));
$expected = [
'cpsit/project-builder' => [
@@ -170,7 +172,7 @@ public function installTemplateSourceAsksForAdditionalRepositories(): void
$repoA = $this->initializeGitRepository('test/repo-a', ['test/repo-b' => '*']);
$repoB = $this->initializeGitRepository('test/repo-b');
- self::$io->setUserInputs([
+ $this->io->setUserInputs([
$repoA,
'',
'yes',
@@ -180,7 +182,7 @@ public function installTemplateSourceAsksForAdditionalRepositories(): void
'',
]);
- $this->subject->requestCustomOptions(self::$container->get('app.messenger'));
+ $this->subject->requestCustomOptions($this->container->get('app.messenger'));
[$templateSource] = $this->subject->listTemplateSources();
@@ -192,7 +194,7 @@ public function installTemplateSourceAsksForAdditionalRepositories(): void
self::assertDirectoryExists($this->rootPath.'/.build/templates/repo-a');
self::assertDirectoryExists($this->rootPath.'/.build/templates/repo-b');
- $output = self::$io->getOutput();
+ $output = $this->io->getOutput();
$repositories = $this->fetchConfiguredRepositoriesViaReflection();
self::assertSame(
@@ -213,7 +215,7 @@ public function installTemplateSourceAsksForAdditionalRepositories(): void
private function overwriteIO(): void
{
- $this->setPropertyValueOnObject($this->subject, 'io', self::$io);
+ $this->setPropertyValueOnObject($this->subject, 'io', $this->io);
}
private function acceptInsecureConnections(): void
@@ -270,7 +272,7 @@ private function initializeGitRepository(string $composerName, array $requiremen
// Initialize repository
self::executeInDirectory($repoDir, function (string $repoDir) use ($composerName, $requirements, $extra) {
- $runner = self::$container->get(Cli\Command\Runner::class);
+ $runner = $this->container->get(Cli\Command\Runner::class);
// Initialize repository
$initCommand = (new Cli\Command\Executable('git'))
diff --git a/tests/src/Twig/Filter/SlugifyFilterTest.php b/tests/src/Twig/Filter/SlugifyFilterTest.php
index 72beef00..09f4b3b9 100644
--- a/tests/src/Twig/Filter/SlugifyFilterTest.php
+++ b/tests/src/Twig/Filter/SlugifyFilterTest.php
@@ -43,7 +43,9 @@ final class SlugifyFilterTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\Twig\Filter\SlugifyFilter::class);
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\Twig\Filter\SlugifyFilter::class);
error_reporting(E_WARNING);
}
diff --git a/tests/src/Twig/Func/NameVariantFunctionTest.php b/tests/src/Twig/Func/NameVariantFunctionTest.php
index 0be69b9f..ab89a6bf 100644
--- a/tests/src/Twig/Func/NameVariantFunctionTest.php
+++ b/tests/src/Twig/Func/NameVariantFunctionTest.php
@@ -41,6 +41,8 @@ final class NameVariantFunctionTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
+ parent::setUp();
+
$this->subject = new Src\Twig\Func\NameVariantFunction();
}
@@ -72,7 +74,7 @@ public function invokeThrowsExceptionIfGivenContextDoesNotContainBuildInstructio
public function invokeReturnsNameVariant(string $variant, ?string $case, ?string $expected): void
{
$instructions = new Src\Builder\BuildInstructions(
- self::$container->get('app.config'),
+ $this->container->get('app.config'),
'foo',
);
$instructions->addTemplateVariable('project', [
diff --git a/tests/src/Twig/Func/PhpVersionFunctionTest.php b/tests/src/Twig/Func/PhpVersionFunctionTest.php
index ccc29914..e4f71a00 100644
--- a/tests/src/Twig/Func/PhpVersionFunctionTest.php
+++ b/tests/src/Twig/Func/PhpVersionFunctionTest.php
@@ -40,7 +40,9 @@ final class PhpVersionFunctionTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\Twig\Func\PhpVersionFunction::class);
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\Twig\Func\PhpVersionFunction::class);
}
#[Framework\Attributes\Test]
@@ -55,24 +57,24 @@ public function invokeThrowsExceptionIfGivenBranchIsNull(): void
#[Framework\Attributes\Test]
public function invokeReturnsAndCachesLatestStableVersionOfGivenBranch(): void
{
- self::$mockHandler->append(self::createJsonResponse(['version' => '8.0.10']));
- self::$mockHandler->append(self::createJsonResponse(['version' => '8.1.4']));
+ $this->mockHandler->append(self::createJsonResponse(['version' => '8.0.10']));
+ $this->mockHandler->append(self::createJsonResponse(['version' => '8.1.4']));
- self::assertCount(2, self::$mockHandler);
+ self::assertCount(2, $this->mockHandler);
$actual = ($this->subject)('8.0');
self::assertSame('8.0.10', $actual);
- self::assertCount(1, self::$mockHandler);
+ self::assertCount(1, $this->mockHandler);
$actual = ($this->subject)('8.0');
self::assertSame('8.0.10', $actual);
- self::assertCount(1, self::$mockHandler);
+ self::assertCount(1, $this->mockHandler);
$actual = ($this->subject)('8.1');
self::assertSame('8.1.4', $actual);
- self::assertCount(0, self::$mockHandler);
+ self::assertCount(0, $this->mockHandler);
}
}
diff --git a/tests/src/Twig/RendererTest.php b/tests/src/Twig/RendererTest.php
index f0dd4a99..c15aa374 100644
--- a/tests/src/Twig/RendererTest.php
+++ b/tests/src/Twig/RendererTest.php
@@ -45,14 +45,16 @@ final class RendererTest extends Tests\ContainerAwareTestCase
protected function setUp(): void
{
- $this->subject = self::$container->get(Src\Twig\Renderer::class)
+ parent::setUp();
+
+ $this->subject = $this->container->get(Src\Twig\Renderer::class)
->withRootPath(dirname(__DIR__, 2).'/templates')
;
$this->instructions = new Src\Builder\BuildInstructions(
- self::$container->get('app.config'),
+ $this->container->get('app.config'),
'foo',
);
- $this->eventListener = self::$container->get(Tests\Fixtures\DummyTemplateRenderingEventListener::class);
+ $this->eventListener = $this->container->get(Tests\Fixtures\DummyTemplateRenderingEventListener::class);
}
#[Framework\Attributes\Test]
@@ -145,8 +147,6 @@ public function canRenderReturnsChecksWhetherGivenTemplateCanBeRendered(): void
protected function tearDown(): void
{
- parent::tearDown();
-
$this->eventListener->dispatched = false;
$this->eventListener->variables = [];
}
diff --git a/version-bumper.yaml b/version-bumper.yaml
new file mode 100644
index 00000000..655f16bf
--- /dev/null
+++ b/version-bumper.yaml
@@ -0,0 +1,6 @@
+filesToModify:
+ - path: docs/conf.py
+ patterns:
+ - release = "{%version%}"
+releaseOptions:
+ commitMessage: '[RELEASE] Release of project-builder {%version%}'