From 7e5ff0b118bef21fefa543a6fd976daf6a5b3d17 Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Tue, 14 Oct 2025 13:20:35 +0200
Subject: [PATCH 01/31] 5564: Update composer dependencies
---
composer.json | 2 +-
composer.lock | 1755 ++++++++++++++++++++++++++++---------------------
2 files changed, 1023 insertions(+), 734 deletions(-)
diff --git a/composer.json b/composer.json
index abe2133..bdd1081 100644
--- a/composer.json
+++ b/composer.json
@@ -10,7 +10,7 @@
"api-platform/core": "^4.0",
"composer/semver": "^3.4",
"doctrine/dbal": "^4.0",
- "doctrine/doctrine-bundle": "^2.13",
+ "doctrine/doctrine-bundle": "^3.0",
"doctrine/doctrine-migrations-bundle": "^3.4",
"doctrine/orm": "^3.0",
"easycorp/easyadmin-bundle": "^4.0",
diff --git a/composer.lock b/composer.lock
index cbd5d07..32697ce 100644
--- a/composer.lock
+++ b/composer.lock
@@ -8,16 +8,16 @@
"packages": [
{
"name": "api-platform/core",
- "version": "v4.1.17",
+ "version": "v4.2.2",
"source": {
"type": "git",
"url": "https://github.com/api-platform/core.git",
- "reference": "e1191ca86e548d7610251bba2d8498b440cfd631"
+ "reference": "eb6396b0a2db169665d87af8883c69c1e6fd7d4b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/api-platform/core/zipball/e1191ca86e548d7610251bba2d8498b440cfd631",
- "reference": "e1191ca86e548d7610251bba2d8498b440cfd631",
+ "url": "https://api.github.com/repos/api-platform/core/zipball/eb6396b0a2db169665d87af8883c69c1e6fd7d4b",
+ "reference": "eb6396b0a2db169665d87af8883c69c1e6fd7d4b",
"shasum": ""
},
"require": {
@@ -32,7 +32,8 @@
"symfony/property-info": "^6.4 || ^7.1",
"symfony/serializer": "^6.4 || ^7.0",
"symfony/translation-contracts": "^3.3",
- "symfony/type-info": "^7.2",
+ "symfony/type-info": "^7.3 || 7.4.x-dev",
+ "symfony/validator": "^6.4 || ^7.1",
"symfony/web-link": "^6.4 || ^7.1",
"willdurand/negotiation": "^3.1"
},
@@ -81,6 +82,7 @@
"doctrine/mongodb-odm-bundle": "^5.0",
"doctrine/orm": "^2.17 || ^3.0",
"elasticsearch/elasticsearch": "^7.17 || ^8.4 || ^9.0",
+ "ext-mongodb": "^1.21 || ^2.0",
"friends-of-behat/mink-browserkit-driver": "^1.3.1",
"friends-of-behat/mink-extension": "^2.2",
"friends-of-behat/symfony-extension": "^2.1",
@@ -92,17 +94,17 @@
"illuminate/pagination": "^11.0 || ^12.0",
"illuminate/routing": "^11.0 || ^12.0",
"illuminate/support": "^11.0 || ^12.0",
- "jangregor/phpstan-prophecy": "^1.0",
+ "jangregor/phpstan-prophecy": "^2.1.11",
"justinrainbow/json-schema": "^5.2.11",
"laravel/framework": "^11.0 || ^12.0",
"orchestra/testbench": "^9.1",
"phpspec/prophecy-phpunit": "^2.2",
"phpstan/extension-installer": "^1.1",
"phpstan/phpdoc-parser": "^1.29 || ^2.0",
- "phpstan/phpstan": "^1.10",
- "phpstan/phpstan-doctrine": "^1.0",
- "phpstan/phpstan-phpunit": "^1.0",
- "phpstan/phpstan-symfony": "^1.0",
+ "phpstan/phpstan": "^2.1",
+ "phpstan/phpstan-doctrine": "^2.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpstan/phpstan-symfony": "^2.0",
"phpunit/phpunit": "11.5.x-dev",
"psr/log": "^1.0 || ^2.0 || ^3.0",
"ramsey/uuid": "^4.7",
@@ -117,19 +119,21 @@
"symfony/console": "^6.4 || ^7.0",
"symfony/css-selector": "^6.4 || ^7.0",
"symfony/dependency-injection": "^6.4 || ^7.0",
- "symfony/doctrine-bridge": "^6.4.2 || ^7.0.2",
+ "symfony/doctrine-bridge": "^6.4.2 || ^7.1",
"symfony/dom-crawler": "^6.4 || ^7.0",
"symfony/error-handler": "^6.4 || ^7.0",
"symfony/event-dispatcher": "^6.4 || ^7.0",
"symfony/expression-language": "^6.4 || ^7.0",
"symfony/finder": "^6.4 || ^7.0",
"symfony/form": "^6.4 || ^7.0",
- "symfony/framework-bundle": "^6.4 || ^7.0",
+ "symfony/framework-bundle": "^6.4 || ^7.0 || 7.4.x-dev",
"symfony/http-client": "^6.4 || ^7.0",
"symfony/intl": "^6.4 || ^7.0",
+ "symfony/json-streamer": "7.4.x-dev",
"symfony/maker-bundle": "^1.24",
"symfony/mercure-bundle": "*",
"symfony/messenger": "^6.4 || ^7.0",
+ "symfony/object-mapper": "7.4.x-dev",
"symfony/routing": "^6.4 || ^7.0",
"symfony/security-bundle": "^6.4 || ^7.0",
"symfony/security-core": "^6.4 || ^7.0",
@@ -146,7 +150,6 @@
"suggest": {
"doctrine/mongodb-odm-bundle": "To support MongoDB. Only versions 4.0 and later are supported.",
"elasticsearch/elasticsearch": "To support Elasticsearch.",
- "ocramius/package-versions": "To display the API Platform's version in the debug bar.",
"phpstan/phpdoc-parser": "To support extracting metadata from PHPDoc.",
"psr/cache-implementation": "To use metadata caching.",
"ramsey/uuid": "To support Ramsey's UUID identifiers.",
@@ -154,6 +157,7 @@
"symfony/config": "To load XML configuration files.",
"symfony/expression-language": "To use authorization features.",
"symfony/http-client": "To use the HTTP cache invalidation system.",
+ "symfony/json-streamer": "To use the JSON Streamer component.",
"symfony/messenger": "To support messenger integration.",
"symfony/security": "To use authorization features.",
"symfony/twig-bundle": "To use the Swagger UI integration.",
@@ -179,7 +183,8 @@
"branch-alias": {
"dev-3.4": "3.4.x-dev",
"dev-4.1": "4.1.x-dev",
- "dev-main": "4.2.x-dev"
+ "dev-4.2": "4.2.x-dev",
+ "dev-main": "4.3.x-dev"
}
},
"autoload": {
@@ -218,22 +223,22 @@
],
"support": {
"issues": "https://github.com/api-platform/core/issues",
- "source": "https://github.com/api-platform/core/tree/v4.1.17"
+ "source": "https://github.com/api-platform/core/tree/v4.2.2"
},
- "time": "2025-06-19T10:14:20+00:00"
+ "time": "2025-10-09T08:35:20+00:00"
},
{
"name": "composer/semver",
- "version": "3.4.3",
+ "version": "3.4.4",
"source": {
"type": "git",
"url": "https://github.com/composer/semver.git",
- "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12"
+ "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
- "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
+ "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95",
+ "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95",
"shasum": ""
},
"require": {
@@ -285,7 +290,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.3"
+ "source": "https://github.com/composer/semver/tree/3.4.4"
},
"funding": [
{
@@ -295,13 +300,9 @@
{
"url": "https://github.com/composer",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
}
],
- "time": "2024-09-19T14:15:21+00:00"
+ "time": "2025-08-20T19:15:30+00:00"
},
{
"name": "doctrine/collections",
@@ -391,34 +392,34 @@
},
{
"name": "doctrine/dbal",
- "version": "4.2.4",
+ "version": "4.3.4",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
- "reference": "b37d160498ea91a2382a2ebe825c4ea6254fc0ec"
+ "reference": "1a2fbd0e93b8dec7c3d1ac2b6396a7b929b130dc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/dbal/zipball/b37d160498ea91a2382a2ebe825c4ea6254fc0ec",
- "reference": "b37d160498ea91a2382a2ebe825c4ea6254fc0ec",
+ "url": "https://api.github.com/repos/doctrine/dbal/zipball/1a2fbd0e93b8dec7c3d1ac2b6396a7b929b130dc",
+ "reference": "1a2fbd0e93b8dec7c3d1ac2b6396a7b929b130dc",
"shasum": ""
},
"require": {
- "doctrine/deprecations": "^0.5.3|^1",
- "php": "^8.1",
+ "doctrine/deprecations": "^1.1.5",
+ "php": "^8.2",
"psr/cache": "^1|^2|^3",
"psr/log": "^1|^2|^3"
},
"require-dev": {
- "doctrine/coding-standard": "13.0.0",
+ "doctrine/coding-standard": "14.0.0",
"fig/log-test": "^1",
"jetbrains/phpstorm-stubs": "2023.2",
- "phpstan/phpstan": "2.1.17",
- "phpstan/phpstan-phpunit": "2.0.6",
+ "phpstan/phpstan": "2.1.30",
+ "phpstan/phpstan-phpunit": "2.0.7",
"phpstan/phpstan-strict-rules": "^2",
- "phpunit/phpunit": "10.5.46",
- "slevomat/coding-standard": "8.16.2",
- "squizlabs/php_codesniffer": "3.13.1",
+ "phpunit/phpunit": "11.5.23",
+ "slevomat/coding-standard": "8.24.0",
+ "squizlabs/php_codesniffer": "4.0.0",
"symfony/cache": "^6.3.8|^7.0",
"symfony/console": "^5.4|^6.3|^7.0"
},
@@ -477,7 +478,7 @@
],
"support": {
"issues": "https://github.com/doctrine/dbal/issues",
- "source": "https://github.com/doctrine/dbal/tree/4.2.4"
+ "source": "https://github.com/doctrine/dbal/tree/4.3.4"
},
"funding": [
{
@@ -493,7 +494,7 @@
"type": "tidelift"
}
],
- "time": "2025-06-15T23:15:01+00:00"
+ "time": "2025-10-09T09:11:36+00:00"
},
{
"name": "doctrine/deprecations",
@@ -545,20 +546,21 @@
},
{
"name": "doctrine/doctrine-bundle",
- "version": "2.15.0",
+ "version": "2.18.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/DoctrineBundle.git",
- "reference": "d88294521a1bca943240adca65fa19ca8a7288c6"
+ "reference": "cd5d4da6a5f7cf3d8708e17211234657b5eb4e95"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/d88294521a1bca943240adca65fa19ca8a7288c6",
- "reference": "d88294521a1bca943240adca65fa19ca8a7288c6",
+ "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/cd5d4da6a5f7cf3d8708e17211234657b5eb4e95",
+ "reference": "cd5d4da6a5f7cf3d8708e17211234657b5eb4e95",
"shasum": ""
},
"require": {
"doctrine/dbal": "^3.7.0 || ^4.0",
+ "doctrine/deprecations": "^1.0",
"doctrine/persistence": "^3.1 || ^4",
"doctrine/sql-formatter": "^1.0.1",
"php": "^8.1",
@@ -566,7 +568,6 @@
"symfony/config": "^6.4 || ^7.0",
"symfony/console": "^6.4 || ^7.0",
"symfony/dependency-injection": "^6.4 || ^7.0",
- "symfony/deprecation-contracts": "^2.1 || ^3",
"symfony/doctrine-bridge": "^6.4.3 || ^7.0.3",
"symfony/framework-bundle": "^6.4 || ^7.0",
"symfony/service-contracts": "^2.5 || ^3"
@@ -581,18 +582,17 @@
"require-dev": {
"doctrine/annotations": "^1 || ^2",
"doctrine/cache": "^1.11 || ^2.0",
- "doctrine/coding-standard": "^13",
- "doctrine/deprecations": "^1.0",
+ "doctrine/coding-standard": "^14",
"doctrine/orm": "^2.17 || ^3.1",
"friendsofphp/proxy-manager-lts": "^1.0",
"phpstan/phpstan": "2.1.1",
"phpstan/phpstan-phpunit": "2.0.3",
"phpstan/phpstan-strict-rules": "^2",
- "phpunit/phpunit": "^9.6.22",
+ "phpunit/phpunit": "^10.5.53 || ^12.3.10",
"psr/log": "^1.1.4 || ^2.0 || ^3.0",
"symfony/doctrine-messenger": "^6.4 || ^7.0",
+ "symfony/expression-language": "^6.4 || ^7.0",
"symfony/messenger": "^6.4 || ^7.0",
- "symfony/phpunit-bridge": "^7.2",
"symfony/property-info": "^6.4 || ^7.0",
"symfony/security-bundle": "^6.4 || ^7.0",
"symfony/stopwatch": "^6.4 || ^7.0",
@@ -602,7 +602,7 @@
"symfony/var-exporter": "^6.4.1 || ^7.0.1",
"symfony/web-profiler-bundle": "^6.4 || ^7.0",
"symfony/yaml": "^6.4 || ^7.0",
- "twig/twig": "^2.13 || ^3.0.4"
+ "twig/twig": "^2.14.7 || ^3.0.4"
},
"suggest": {
"doctrine/orm": "The Doctrine ORM integration is optional in the bundle.",
@@ -647,7 +647,7 @@
],
"support": {
"issues": "https://github.com/doctrine/DoctrineBundle/issues",
- "source": "https://github.com/doctrine/DoctrineBundle/tree/2.15.0"
+ "source": "https://github.com/doctrine/DoctrineBundle/tree/2.18.0"
},
"funding": [
{
@@ -663,24 +663,24 @@
"type": "tidelift"
}
],
- "time": "2025-06-16T19:53:58+00:00"
+ "time": "2025-10-11T04:43:27+00:00"
},
{
"name": "doctrine/doctrine-migrations-bundle",
- "version": "3.4.2",
+ "version": "3.5.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/DoctrineMigrationsBundle.git",
- "reference": "5a6ac7120c2924c4c070a869d08b11ccf9e277b9"
+ "reference": "71c81279ca0e907c3edc718418b93fd63074856c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/5a6ac7120c2924c4c070a869d08b11ccf9e277b9",
- "reference": "5a6ac7120c2924c4c070a869d08b11ccf9e277b9",
+ "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/71c81279ca0e907c3edc718418b93fd63074856c",
+ "reference": "71c81279ca0e907c3edc718418b93fd63074856c",
"shasum": ""
},
"require": {
- "doctrine/doctrine-bundle": "^2.4",
+ "doctrine/doctrine-bundle": "^2.4 || ^3.0",
"doctrine/migrations": "^3.2",
"php": "^7.2 || ^8.0",
"symfony/deprecation-contracts": "^2.1 || ^3",
@@ -688,7 +688,7 @@
},
"require-dev": {
"composer/semver": "^3.0",
- "doctrine/coding-standard": "^12",
+ "doctrine/coding-standard": "^12 || ^14",
"doctrine/orm": "^2.6 || ^3",
"phpstan/phpstan": "^1.4 || ^2",
"phpstan/phpstan-deprecation-rules": "^1 || ^2",
@@ -732,7 +732,7 @@
],
"support": {
"issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues",
- "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.4.2"
+ "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.5.0"
},
"funding": [
{
@@ -748,7 +748,7 @@
"type": "tidelift"
}
],
- "time": "2025-03-11T17:36:26+00:00"
+ "time": "2025-10-12T17:06:40+00:00"
},
{
"name": "doctrine/event-manager",
@@ -843,33 +843,32 @@
},
{
"name": "doctrine/inflector",
- "version": "2.0.10",
+ "version": "2.1.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
- "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc"
+ "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc",
- "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc",
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b",
+ "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"require-dev": {
- "doctrine/coding-standard": "^11.0",
- "phpstan/phpstan": "^1.8",
- "phpstan/phpstan-phpunit": "^1.1",
- "phpstan/phpstan-strict-rules": "^1.3",
- "phpunit/phpunit": "^8.5 || ^9.5",
- "vimeo/psalm": "^4.25 || ^5.4"
+ "doctrine/coding-standard": "^12.0 || ^13.0",
+ "phpstan/phpstan": "^1.12 || ^2.0",
+ "phpstan/phpstan-phpunit": "^1.4 || ^2.0",
+ "phpstan/phpstan-strict-rules": "^1.6 || ^2.0",
+ "phpunit/phpunit": "^8.5 || ^12.2"
},
"type": "library",
"autoload": {
"psr-4": {
- "Doctrine\\Inflector\\": "lib/Doctrine/Inflector"
+ "Doctrine\\Inflector\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -914,7 +913,7 @@
],
"support": {
"issues": "https://github.com/doctrine/inflector/issues",
- "source": "https://github.com/doctrine/inflector/tree/2.0.10"
+ "source": "https://github.com/doctrine/inflector/tree/2.1.0"
},
"funding": [
{
@@ -930,7 +929,7 @@
"type": "tidelift"
}
],
- "time": "2024-02-18T20:23:39+00:00"
+ "time": "2025-08-10T19:31:58+00:00"
},
{
"name": "doctrine/instantiator",
@@ -1081,16 +1080,16 @@
},
{
"name": "doctrine/migrations",
- "version": "3.9.1",
+ "version": "3.9.4",
"source": {
"type": "git",
"url": "https://github.com/doctrine/migrations.git",
- "reference": "0f1e0c960ac29866d648a4f50142a74fe1cb6999"
+ "reference": "1b88fcb812f2cd6e77c83d16db60e3cf1e35c66c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/migrations/zipball/0f1e0c960ac29866d648a4f50142a74fe1cb6999",
- "reference": "0f1e0c960ac29866d648a4f50142a74fe1cb6999",
+ "url": "https://api.github.com/repos/doctrine/migrations/zipball/1b88fcb812f2cd6e77c83d16db60e3cf1e35c66c",
+ "reference": "1b88fcb812f2cd6e77c83d16db60e3cf1e35c66c",
"shasum": ""
},
"require": {
@@ -1108,18 +1107,18 @@
"doctrine/orm": "<2.12 || >=4"
},
"require-dev": {
- "doctrine/coding-standard": "^12",
+ "doctrine/coding-standard": "^13",
"doctrine/orm": "^2.13 || ^3",
"doctrine/persistence": "^2 || ^3 || ^4",
"doctrine/sql-formatter": "^1.0",
"ext-pdo_sqlite": "*",
"fig/log-test": "^1",
- "phpstan/phpstan": "^1.10",
- "phpstan/phpstan-deprecation-rules": "^1.1",
- "phpstan/phpstan-phpunit": "^1.3",
- "phpstan/phpstan-strict-rules": "^1.4",
- "phpstan/phpstan-symfony": "^1.3",
- "phpunit/phpunit": "^10.3",
+ "phpstan/phpstan": "^2",
+ "phpstan/phpstan-deprecation-rules": "^2",
+ "phpstan/phpstan-phpunit": "^2",
+ "phpstan/phpstan-strict-rules": "^2",
+ "phpstan/phpstan-symfony": "^2",
+ "phpunit/phpunit": "^10.3 || ^11.0 || ^12.0",
"symfony/cache": "^5.4 || ^6.0 || ^7.0",
"symfony/process": "^5.4 || ^6.0 || ^7.0",
"symfony/yaml": "^5.4 || ^6.0 || ^7.0"
@@ -1164,7 +1163,7 @@
],
"support": {
"issues": "https://github.com/doctrine/migrations/issues",
- "source": "https://github.com/doctrine/migrations/tree/3.9.1"
+ "source": "https://github.com/doctrine/migrations/tree/3.9.4"
},
"funding": [
{
@@ -1180,20 +1179,20 @@
"type": "tidelift"
}
],
- "time": "2025-06-27T07:19:23+00:00"
+ "time": "2025-08-19T06:41:07+00:00"
},
{
"name": "doctrine/orm",
- "version": "3.4.3",
+ "version": "3.5.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/orm.git",
- "reference": "ef607f26c2965fe460c55733cc7c031fb7e1f2fa"
+ "reference": "5a541b8b3a327ab1ea5f93b1615b4ff67a34e109"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/orm/zipball/ef607f26c2965fe460c55733cc7c031fb7e1f2fa",
- "reference": "ef607f26c2965fe460c55733cc7c031fb7e1f2fa",
+ "url": "https://api.github.com/repos/doctrine/orm/zipball/5a541b8b3a327ab1ea5f93b1615b4ff67a34e109",
+ "reference": "5a541b8b3a327ab1ea5f93b1615b4ff67a34e109",
"shasum": ""
},
"require": {
@@ -1268,22 +1267,22 @@
],
"support": {
"issues": "https://github.com/doctrine/orm/issues",
- "source": "https://github.com/doctrine/orm/tree/3.4.3"
+ "source": "https://github.com/doctrine/orm/tree/3.5.2"
},
- "time": "2025-06-27T12:14:15+00:00"
+ "time": "2025-08-08T17:00:40+00:00"
},
{
"name": "doctrine/persistence",
- "version": "4.0.0",
+ "version": "4.1.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/persistence.git",
- "reference": "45004aca79189474f113cbe3a53847c2115a55fa"
+ "reference": "dcbdfe4b211ae09478e192289cae7ab0987b29a4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/persistence/zipball/45004aca79189474f113cbe3a53847c2115a55fa",
- "reference": "45004aca79189474f113cbe3a53847c2115a55fa",
+ "url": "https://api.github.com/repos/doctrine/persistence/zipball/dcbdfe4b211ae09478e192289cae7ab0987b29a4",
+ "reference": "dcbdfe4b211ae09478e192289cae7ab0987b29a4",
"shasum": ""
},
"require": {
@@ -1291,16 +1290,14 @@
"php": "^8.1",
"psr/cache": "^1.0 || ^2.0 || ^3.0"
},
- "conflict": {
- "doctrine/common": "<2.10"
- },
"require-dev": {
"doctrine/coding-standard": "^12",
"phpstan/phpstan": "1.12.7",
"phpstan/phpstan-phpunit": "^1",
- "phpstan/phpstan-strict-rules": "^1.1",
+ "phpstan/phpstan-strict-rules": "^1.6",
"phpunit/phpunit": "^9.6",
- "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0"
+ "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0",
+ "symfony/finder": "^4.4 || ^5.4 || ^6.0 || ^7.0"
},
"type": "library",
"autoload": {
@@ -1349,7 +1346,7 @@
],
"support": {
"issues": "https://github.com/doctrine/persistence/issues",
- "source": "https://github.com/doctrine/persistence/tree/4.0.0"
+ "source": "https://github.com/doctrine/persistence/tree/4.1.0"
},
"funding": [
{
@@ -1365,7 +1362,7 @@
"type": "tidelift"
}
],
- "time": "2024-11-01T21:49:07+00:00"
+ "time": "2025-08-21T16:00:31+00:00"
},
{
"name": "doctrine/sql-formatter",
@@ -1424,16 +1421,16 @@
},
{
"name": "easycorp/easyadmin-bundle",
- "version": "v4.24.9",
+ "version": "v4.26.3",
"source": {
"type": "git",
"url": "https://github.com/EasyCorp/EasyAdminBundle.git",
- "reference": "1f1ab3a897107e5c62657a8cb04790e297b95a21"
+ "reference": "fed89754c7532ce5592fda43921d810b59e24c4c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/EasyCorp/EasyAdminBundle/zipball/1f1ab3a897107e5c62657a8cb04790e297b95a21",
- "reference": "1f1ab3a897107e5c62657a8cb04790e297b95a21",
+ "url": "https://api.github.com/repos/EasyCorp/EasyAdminBundle/zipball/fed89754c7532ce5592fda43921d810b59e24c4c",
+ "reference": "fed89754c7532ce5592fda43921d810b59e24c4c",
"shasum": ""
},
"require": {
@@ -1514,7 +1511,7 @@
],
"support": {
"issues": "https://github.com/EasyCorp/EasyAdminBundle/issues",
- "source": "https://github.com/EasyCorp/EasyAdminBundle/tree/v4.24.9"
+ "source": "https://github.com/EasyCorp/EasyAdminBundle/tree/v4.26.3"
},
"funding": [
{
@@ -1522,7 +1519,7 @@
"type": "github"
}
],
- "time": "2025-06-17T18:10:27+00:00"
+ "time": "2025-10-08T18:21:48+00:00"
},
{
"name": "firebase/php-jwt",
@@ -1589,22 +1586,22 @@
},
{
"name": "guzzlehttp/guzzle",
- "version": "7.9.3",
+ "version": "7.10.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
- "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77"
+ "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77",
- "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
+ "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
"shasum": ""
},
"require": {
"ext-json": "*",
- "guzzlehttp/promises": "^1.5.3 || ^2.0.3",
- "guzzlehttp/psr7": "^2.7.0",
+ "guzzlehttp/promises": "^2.3",
+ "guzzlehttp/psr7": "^2.8",
"php": "^7.2.5 || ^8.0",
"psr/http-client": "^1.0",
"symfony/deprecation-contracts": "^2.2 || ^3.0"
@@ -1695,7 +1692,7 @@
],
"support": {
"issues": "https://github.com/guzzle/guzzle/issues",
- "source": "https://github.com/guzzle/guzzle/tree/7.9.3"
+ "source": "https://github.com/guzzle/guzzle/tree/7.10.0"
},
"funding": [
{
@@ -1711,20 +1708,20 @@
"type": "tidelift"
}
],
- "time": "2025-03-27T13:37:11+00:00"
+ "time": "2025-08-23T22:36:01+00:00"
},
{
"name": "guzzlehttp/promises",
- "version": "2.2.0",
+ "version": "2.3.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
- "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c"
+ "reference": "481557b130ef3790cf82b713667b43030dc9c957"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c",
- "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957",
+ "reference": "481557b130ef3790cf82b713667b43030dc9c957",
"shasum": ""
},
"require": {
@@ -1732,7 +1729,7 @@
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
- "phpunit/phpunit": "^8.5.39 || ^9.6.20"
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25"
},
"type": "library",
"extra": {
@@ -1778,7 +1775,7 @@
],
"support": {
"issues": "https://github.com/guzzle/promises/issues",
- "source": "https://github.com/guzzle/promises/tree/2.2.0"
+ "source": "https://github.com/guzzle/promises/tree/2.3.0"
},
"funding": [
{
@@ -1794,20 +1791,20 @@
"type": "tidelift"
}
],
- "time": "2025-03-27T13:27:01+00:00"
+ "time": "2025-08-22T14:34:08+00:00"
},
{
"name": "guzzlehttp/psr7",
- "version": "2.7.1",
+ "version": "2.8.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16"
+ "reference": "21dc724a0583619cd1652f673303492272778051"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16",
- "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051",
+ "reference": "21dc724a0583619cd1652f673303492272778051",
"shasum": ""
},
"require": {
@@ -1823,7 +1820,7 @@
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"http-interop/http-factory-tests": "0.9.0",
- "phpunit/phpunit": "^8.5.39 || ^9.6.20"
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25"
},
"suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
@@ -1894,7 +1891,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/2.7.1"
+ "source": "https://github.com/guzzle/psr7/tree/2.8.0"
},
"funding": [
{
@@ -1910,20 +1907,20 @@
"type": "tidelift"
}
],
- "time": "2025-03-27T12:30:47+00:00"
+ "time": "2025-08-23T21:21:41+00:00"
},
{
"name": "itk-dev/openid-connect",
- "version": "4.0.1",
+ "version": "4.0.2",
"source": {
"type": "git",
"url": "https://github.com/itk-dev/openid-connect.git",
- "reference": "8f3b8c0cc4abc7e91c1ee0f3e978deee6806da6d"
+ "reference": "65951585ef2680432b33391fadffb1f87d210d27"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/itk-dev/openid-connect/zipball/8f3b8c0cc4abc7e91c1ee0f3e978deee6806da6d",
- "reference": "8f3b8c0cc4abc7e91c1ee0f3e978deee6806da6d",
+ "url": "https://api.github.com/repos/itk-dev/openid-connect/zipball/65951585ef2680432b33391fadffb1f87d210d27",
+ "reference": "65951585ef2680432b33391fadffb1f87d210d27",
"shasum": ""
},
"require": {
@@ -1971,9 +1968,9 @@
"description": "OpenID connect configuration package",
"support": {
"issues": "https://github.com/itk-dev/openid-connect/issues",
- "source": "https://github.com/itk-dev/openid-connect/tree/4.0.1"
+ "source": "https://github.com/itk-dev/openid-connect/tree/4.0.2"
},
- "time": "2025-01-13T09:01:13+00:00"
+ "time": "2025-10-06T07:25:31+00:00"
},
{
"name": "itk-dev/openid-connect-bundle",
@@ -2212,16 +2209,16 @@
},
{
"name": "masterminds/html5",
- "version": "2.9.0",
+ "version": "2.10.0",
"source": {
"type": "git",
"url": "https://github.com/Masterminds/html5-php.git",
- "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6"
+ "reference": "fcf91eb64359852f00d921887b219479b4f21251"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6",
- "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6",
+ "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251",
+ "reference": "fcf91eb64359852f00d921887b219479b4f21251",
"shasum": ""
},
"require": {
@@ -2273,9 +2270,9 @@
],
"support": {
"issues": "https://github.com/Masterminds/html5-php/issues",
- "source": "https://github.com/Masterminds/html5-php/tree/2.9.0"
+ "source": "https://github.com/Masterminds/html5-php/tree/2.10.0"
},
- "time": "2024-03-31T07:05:07+00:00"
+ "time": "2025-07-25T09:04:22+00:00"
},
{
"name": "monolog/monolog",
@@ -2639,16 +2636,16 @@
},
{
"name": "phpdocumentor/reflection-docblock",
- "version": "5.6.2",
+ "version": "5.6.3",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62"
+ "reference": "94f8051919d1b0369a6bcc7931d679a511c03fe9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/92dde6a5919e34835c506ac8c523ef095a95ed62",
- "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94f8051919d1b0369a6bcc7931d679a511c03fe9",
+ "reference": "94f8051919d1b0369a6bcc7931d679a511c03fe9",
"shasum": ""
},
"require": {
@@ -2697,9 +2694,9 @@
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
"support": {
"issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
- "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.2"
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.3"
},
- "time": "2025-04-13T19:20:35+00:00"
+ "time": "2025-08-01T19:43:32+00:00"
},
{
"name": "phpdocumentor/type-resolver",
@@ -2761,16 +2758,16 @@
},
{
"name": "phpstan/phpdoc-parser",
- "version": "2.1.0",
+ "version": "2.3.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68"
+ "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68",
- "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/1e0cd5370df5dd2e556a36b9c62f62e555870495",
+ "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495",
"shasum": ""
},
"require": {
@@ -2802,9 +2799,9 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.0"
},
- "time": "2025-02-19T13:28:12+00:00"
+ "time": "2025-08-30T15:50:23+00:00"
},
{
"name": "psr/cache",
@@ -3411,16 +3408,16 @@
},
{
"name": "symfony/amqp-messenger",
- "version": "v7.3.0",
+ "version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/amqp-messenger.git",
- "reference": "635c859743bb8166d1b294e7c63a142a5a0ffc16"
+ "reference": "0ed5f72c1d9bbfcfc751b3832939a00a3246fe98"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/amqp-messenger/zipball/635c859743bb8166d1b294e7c63a142a5a0ffc16",
- "reference": "635c859743bb8166d1b294e7c63a142a5a0ffc16",
+ "url": "https://api.github.com/repos/symfony/amqp-messenger/zipball/0ed5f72c1d9bbfcfc751b3832939a00a3246fe98",
+ "reference": "0ed5f72c1d9bbfcfc751b3832939a00a3246fe98",
"shasum": ""
},
"require": {
@@ -3460,7 +3457,7 @@
"description": "Symfony AMQP extension Messenger Bridge",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/amqp-messenger/tree/v7.3.0"
+ "source": "https://github.com/symfony/amqp-messenger/tree/v7.3.2"
},
"funding": [
{
@@ -3471,12 +3468,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-05-25T10:45:43+00:00"
+ "time": "2025-07-15T11:36:08+00:00"
},
{
"name": "symfony/asset",
@@ -3549,16 +3550,16 @@
},
{
"name": "symfony/browser-kit",
- "version": "v7.3.0",
+ "version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/browser-kit.git",
- "reference": "5384291845e74fd7d54f3d925c4a86ce12336593"
+ "reference": "f0b889b73a845cddef1d25fe207b37fd04cb5419"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/browser-kit/zipball/5384291845e74fd7d54f3d925c4a86ce12336593",
- "reference": "5384291845e74fd7d54f3d925c4a86ce12336593",
+ "url": "https://api.github.com/repos/symfony/browser-kit/zipball/f0b889b73a845cddef1d25fe207b37fd04cb5419",
+ "reference": "f0b889b73a845cddef1d25fe207b37fd04cb5419",
"shasum": ""
},
"require": {
@@ -3597,7 +3598,7 @@
"description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/browser-kit/tree/v7.3.0"
+ "source": "https://github.com/symfony/browser-kit/tree/v7.3.2"
},
"funding": [
{
@@ -3608,25 +3609,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-03-05T10:15:41+00:00"
+ "time": "2025-07-10T08:47:49+00:00"
},
{
"name": "symfony/cache",
- "version": "v7.3.1",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache.git",
- "reference": "a7c6caa9d6113cebfb3020b427bcb021ebfdfc9e"
+ "reference": "bf8afc8ffd4bfd3d9c373e417f041d9f1e5b863f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/cache/zipball/a7c6caa9d6113cebfb3020b427bcb021ebfdfc9e",
- "reference": "a7c6caa9d6113cebfb3020b427bcb021ebfdfc9e",
+ "url": "https://api.github.com/repos/symfony/cache/zipball/bf8afc8ffd4bfd3d9c373e417f041d9f1e5b863f",
+ "reference": "bf8afc8ffd4bfd3d9c373e417f041d9f1e5b863f",
"shasum": ""
},
"require": {
@@ -3695,7 +3700,7 @@
"psr6"
],
"support": {
- "source": "https://github.com/symfony/cache/tree/v7.3.1"
+ "source": "https://github.com/symfony/cache/tree/v7.3.4"
},
"funding": [
{
@@ -3706,12 +3711,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-27T19:55:54+00:00"
+ "time": "2025-09-11T10:12:26+00:00"
},
{
"name": "symfony/cache-contracts",
@@ -3865,16 +3874,16 @@
},
{
"name": "symfony/config",
- "version": "v7.3.0",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
- "reference": "ba62ae565f1327c2f6366726312ed828c85853bc"
+ "reference": "8a09223170046d2cfda3d2e11af01df2c641e961"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/config/zipball/ba62ae565f1327c2f6366726312ed828c85853bc",
- "reference": "ba62ae565f1327c2f6366726312ed828c85853bc",
+ "url": "https://api.github.com/repos/symfony/config/zipball/8a09223170046d2cfda3d2e11af01df2c641e961",
+ "reference": "8a09223170046d2cfda3d2e11af01df2c641e961",
"shasum": ""
},
"require": {
@@ -3920,7 +3929,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/v7.3.0"
+ "source": "https://github.com/symfony/config/tree/v7.3.4"
},
"funding": [
{
@@ -3931,25 +3940,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-05-15T09:04:05+00:00"
+ "time": "2025-09-22T12:46:16+00:00"
},
{
"name": "symfony/console",
- "version": "v7.3.1",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "9e27aecde8f506ba0fd1d9989620c04a87697101"
+ "reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/9e27aecde8f506ba0fd1d9989620c04a87697101",
- "reference": "9e27aecde8f506ba0fd1d9989620c04a87697101",
+ "url": "https://api.github.com/repos/symfony/console/zipball/2b9c5fafbac0399a20a2e82429e2bd735dcfb7db",
+ "reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db",
"shasum": ""
},
"require": {
@@ -4014,7 +4027,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v7.3.1"
+ "source": "https://github.com/symfony/console/tree/v7.3.4"
},
"funding": [
{
@@ -4025,25 +4038,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-27T19:55:54+00:00"
+ "time": "2025-09-22T15:31:00+00:00"
},
{
"name": "symfony/dependency-injection",
- "version": "v7.3.1",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
- "reference": "8656c4848b48784c4bb8c4ae50d2b43f832cead8"
+ "reference": "82119812ab0bf3425c1234d413efd1b19bb92ae4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/8656c4848b48784c4bb8c4ae50d2b43f832cead8",
- "reference": "8656c4848b48784c4bb8c4ae50d2b43f832cead8",
+ "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/82119812ab0bf3425c1234d413efd1b19bb92ae4",
+ "reference": "82119812ab0bf3425c1234d413efd1b19bb92ae4",
"shasum": ""
},
"require": {
@@ -4094,7 +4111,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/v7.3.1"
+ "source": "https://github.com/symfony/dependency-injection/tree/v7.3.4"
},
"funding": [
{
@@ -4105,12 +4122,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-24T04:04:43+00:00"
+ "time": "2025-09-11T10:12:26+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -4181,16 +4202,16 @@
},
{
"name": "symfony/doctrine-bridge",
- "version": "v7.3.1",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/doctrine-bridge.git",
- "reference": "6c0acb248c46452ae2c15752dc71e72f3335403f"
+ "reference": "21cd48c34a47a0d0e303a590a67c3450fde55888"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/6c0acb248c46452ae2c15752dc71e72f3335403f",
- "reference": "6c0acb248c46452ae2c15752dc71e72f3335403f",
+ "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/21cd48c34a47a0d0e303a590a67c3450fde55888",
+ "reference": "21cd48c34a47a0d0e303a590a67c3450fde55888",
"shasum": ""
},
"require": {
@@ -4239,7 +4260,7 @@
"symfony/security-core": "^6.4|^7.0",
"symfony/stopwatch": "^6.4|^7.0",
"symfony/translation": "^6.4|^7.0",
- "symfony/type-info": "^7.1",
+ "symfony/type-info": "^7.1.8",
"symfony/uid": "^6.4|^7.0",
"symfony/validator": "^6.4|^7.0",
"symfony/var-dumper": "^6.4|^7.0"
@@ -4270,7 +4291,7 @@
"description": "Provides integration for Doctrine with various Symfony components",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/doctrine-bridge/tree/v7.3.1"
+ "source": "https://github.com/symfony/doctrine-bridge/tree/v7.3.4"
},
"funding": [
{
@@ -4281,25 +4302,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-26T13:02:59+00:00"
+ "time": "2025-09-24T09:56:23+00:00"
},
{
"name": "symfony/doctrine-messenger",
- "version": "v7.3.0",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/doctrine-messenger.git",
- "reference": "099d9cd03f889c31c90d406fed07f25dc3732487"
+ "reference": "064159484ab330590b7b477f6c8835812f2e340f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/099d9cd03f889c31c90d406fed07f25dc3732487",
- "reference": "099d9cd03f889c31c90d406fed07f25dc3732487",
+ "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/064159484ab330590b7b477f6c8835812f2e340f",
+ "reference": "064159484ab330590b7b477f6c8835812f2e340f",
"shasum": ""
},
"require": {
@@ -4342,7 +4367,7 @@
"description": "Symfony Doctrine Messenger Bridge",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/doctrine-messenger/tree/v7.3.0"
+ "source": "https://github.com/symfony/doctrine-messenger/tree/v7.3.4"
},
"funding": [
{
@@ -4353,25 +4378,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-03-26T11:30:13+00:00"
+ "time": "2025-09-11T10:12:26+00:00"
},
{
"name": "symfony/dom-crawler",
- "version": "v7.3.1",
+ "version": "v7.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/dom-crawler.git",
- "reference": "8b2ee2e06ab99fa5f067b6699296d4e35c156bb9"
+ "reference": "efa076ea0eeff504383ff0dcf827ea5ce15690ba"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/8b2ee2e06ab99fa5f067b6699296d4e35c156bb9",
- "reference": "8b2ee2e06ab99fa5f067b6699296d4e35c156bb9",
+ "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/efa076ea0eeff504383ff0dcf827ea5ce15690ba",
+ "reference": "efa076ea0eeff504383ff0dcf827ea5ce15690ba",
"shasum": ""
},
"require": {
@@ -4409,7 +4438,7 @@
"description": "Eases DOM navigation for HTML and XML documents",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/dom-crawler/tree/v7.3.1"
+ "source": "https://github.com/symfony/dom-crawler/tree/v7.3.3"
},
"funding": [
{
@@ -4420,25 +4449,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-15T10:07:06+00:00"
+ "time": "2025-08-06T20:13:54+00:00"
},
{
"name": "symfony/dotenv",
- "version": "v7.3.0",
+ "version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/dotenv.git",
- "reference": "28347a897771d0c28e99b75166dd2689099f3045"
+ "reference": "2192790a11f9e22cbcf9dc705a3ff22a5503923a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dotenv/zipball/28347a897771d0c28e99b75166dd2689099f3045",
- "reference": "28347a897771d0c28e99b75166dd2689099f3045",
+ "url": "https://api.github.com/repos/symfony/dotenv/zipball/2192790a11f9e22cbcf9dc705a3ff22a5503923a",
+ "reference": "2192790a11f9e22cbcf9dc705a3ff22a5503923a",
"shasum": ""
},
"require": {
@@ -4483,7 +4516,7 @@
"environment"
],
"support": {
- "source": "https://github.com/symfony/dotenv/tree/v7.3.0"
+ "source": "https://github.com/symfony/dotenv/tree/v7.3.2"
},
"funding": [
{
@@ -4494,25 +4527,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-11-27T11:18:42+00:00"
+ "time": "2025-07-10T08:29:33+00:00"
},
{
"name": "symfony/error-handler",
- "version": "v7.3.1",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
- "reference": "35b55b166f6752d6aaf21aa042fc5ed280fce235"
+ "reference": "99f81bc944ab8e5dae4f21b4ca9972698bbad0e4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/error-handler/zipball/35b55b166f6752d6aaf21aa042fc5ed280fce235",
- "reference": "35b55b166f6752d6aaf21aa042fc5ed280fce235",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/99f81bc944ab8e5dae4f21b4ca9972698bbad0e4",
+ "reference": "99f81bc944ab8e5dae4f21b4ca9972698bbad0e4",
"shasum": ""
},
"require": {
@@ -4560,7 +4597,7 @@
"description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/error-handler/tree/v7.3.1"
+ "source": "https://github.com/symfony/error-handler/tree/v7.3.4"
},
"funding": [
{
@@ -4571,25 +4608,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-13T07:48:40+00:00"
+ "time": "2025-09-11T10:12:26+00:00"
},
{
"name": "symfony/event-dispatcher",
- "version": "v7.3.0",
+ "version": "v7.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "497f73ac996a598c92409b44ac43b6690c4f666d"
+ "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/497f73ac996a598c92409b44ac43b6690c4f666d",
- "reference": "497f73ac996a598c92409b44ac43b6690c4f666d",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b7dc69e71de420ac04bc9ab830cf3ffebba48191",
+ "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191",
"shasum": ""
},
"require": {
@@ -4640,7 +4681,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/v7.3.0"
+ "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.3"
},
"funding": [
{
@@ -4651,12 +4692,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-04-22T09:11:45+00:00"
+ "time": "2025-08-13T11:49:31+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
@@ -4736,16 +4781,16 @@
},
{
"name": "symfony/expression-language",
- "version": "v7.3.0",
+ "version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/expression-language.git",
- "reference": "26f4884a455e755e630a5fc372df124a3578da2e"
+ "reference": "32d2d19c62e58767e6552166c32fb259975d2b23"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/expression-language/zipball/26f4884a455e755e630a5fc372df124a3578da2e",
- "reference": "26f4884a455e755e630a5fc372df124a3578da2e",
+ "url": "https://api.github.com/repos/symfony/expression-language/zipball/32d2d19c62e58767e6552166c32fb259975d2b23",
+ "reference": "32d2d19c62e58767e6552166c32fb259975d2b23",
"shasum": ""
},
"require": {
@@ -4780,7 +4825,7 @@
"description": "Provides an engine that can compile and evaluate expressions",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/expression-language/tree/v7.3.0"
+ "source": "https://github.com/symfony/expression-language/tree/v7.3.2"
},
"funding": [
{
@@ -4791,25 +4836,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-10-15T11:52:45+00:00"
+ "time": "2025-07-10T08:29:33+00:00"
},
{
"name": "symfony/filesystem",
- "version": "v7.3.0",
+ "version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb"
+ "reference": "edcbb768a186b5c3f25d0643159a787d3e63b7fd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb",
- "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/edcbb768a186b5c3f25d0643159a787d3e63b7fd",
+ "reference": "edcbb768a186b5c3f25d0643159a787d3e63b7fd",
"shasum": ""
},
"require": {
@@ -4846,7 +4895,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v7.3.0"
+ "source": "https://github.com/symfony/filesystem/tree/v7.3.2"
},
"funding": [
{
@@ -4857,25 +4906,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-10-25T15:15:23+00:00"
+ "time": "2025-07-07T08:17:47+00:00"
},
{
"name": "symfony/finder",
- "version": "v7.3.0",
+ "version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d"
+ "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/ec2344cf77a48253bbca6939aa3d2477773ea63d",
- "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/2a6614966ba1074fa93dae0bc804227422df4dfe",
+ "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe",
"shasum": ""
},
"require": {
@@ -4910,7 +4963,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/finder/tree/v7.3.0"
+ "source": "https://github.com/symfony/finder/tree/v7.3.2"
},
"funding": [
{
@@ -4921,25 +4974,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-12-30T19:00:26+00:00"
+ "time": "2025-07-15T13:41:35+00:00"
},
{
"name": "symfony/flex",
- "version": "v2.7.1",
+ "version": "v2.8.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/flex.git",
- "reference": "4ae50d368415a06820739e54d38a4a29d6df9155"
+ "reference": "f356aa35f3cf3d2f46c31d344c1098eb2d260426"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/flex/zipball/4ae50d368415a06820739e54d38a4a29d6df9155",
- "reference": "4ae50d368415a06820739e54d38a4a29d6df9155",
+ "url": "https://api.github.com/repos/symfony/flex/zipball/f356aa35f3cf3d2f46c31d344c1098eb2d260426",
+ "reference": "f356aa35f3cf3d2f46c31d344c1098eb2d260426",
"shasum": ""
},
"require": {
@@ -4978,7 +5035,7 @@
"description": "Composer plugin for Symfony",
"support": {
"issues": "https://github.com/symfony/flex/issues",
- "source": "https://github.com/symfony/flex/tree/v2.7.1"
+ "source": "https://github.com/symfony/flex/tree/v2.8.2"
},
"funding": [
{
@@ -4989,25 +5046,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-05-28T14:22:54+00:00"
+ "time": "2025-08-22T07:17:23+00:00"
},
{
"name": "symfony/form",
- "version": "v7.3.1",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/form.git",
- "reference": "e06b02dd21b33b0cd7bb942c7e446ef7b22a2a5a"
+ "reference": "7b3eee0f4d4dfd1ff1be70a27474197330c61736"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/form/zipball/e06b02dd21b33b0cd7bb942c7e446ef7b22a2a5a",
- "reference": "e06b02dd21b33b0cd7bb942c7e446ef7b22a2a5a",
+ "url": "https://api.github.com/repos/symfony/form/zipball/7b3eee0f4d4dfd1ff1be70a27474197330c61736",
+ "reference": "7b3eee0f4d4dfd1ff1be70a27474197330c61736",
"shasum": ""
},
"require": {
@@ -5075,7 +5136,7 @@
"description": "Allows to easily create, process and reuse HTML forms",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/form/tree/v7.3.1"
+ "source": "https://github.com/symfony/form/tree/v7.3.4"
},
"funding": [
{
@@ -5086,25 +5147,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-13T07:48:40+00:00"
+ "time": "2025-09-22T15:31:00+00:00"
},
{
"name": "symfony/framework-bundle",
- "version": "v7.3.1",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/framework-bundle.git",
- "reference": "91905f22f26aa350a33b3b9690bdf94976b0d0ab"
+ "reference": "b13e7cec5a144c8dba6f4233a2c53c00bc29e140"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/91905f22f26aa350a33b3b9690bdf94976b0d0ab",
- "reference": "91905f22f26aa350a33b3b9690bdf94976b0d0ab",
+ "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/b13e7cec5a144c8dba6f4233a2c53c00bc29e140",
+ "reference": "b13e7cec5a144c8dba6f4233a2c53c00bc29e140",
"shasum": ""
},
"require": {
@@ -5194,7 +5259,7 @@
"symfony/string": "^6.4|^7.0",
"symfony/translation": "^7.3",
"symfony/twig-bundle": "^6.4|^7.0",
- "symfony/type-info": "^7.1",
+ "symfony/type-info": "^7.1.8",
"symfony/uid": "^6.4|^7.0",
"symfony/validator": "^6.4|^7.0",
"symfony/web-link": "^6.4|^7.0",
@@ -5229,7 +5294,7 @@
"description": "Provides a tight integration between Symfony components and the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/framework-bundle/tree/v7.3.1"
+ "source": "https://github.com/symfony/framework-bundle/tree/v7.3.4"
},
"funding": [
{
@@ -5240,25 +5305,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-27T19:55:54+00:00"
+ "time": "2025-09-17T05:51:54+00:00"
},
{
"name": "symfony/http-client",
- "version": "v7.3.1",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
- "reference": "4403d87a2c16f33345dca93407a8714ee8c05a64"
+ "reference": "4b62871a01c49457cf2a8e560af7ee8a94b87a62"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-client/zipball/4403d87a2c16f33345dca93407a8714ee8c05a64",
- "reference": "4403d87a2c16f33345dca93407a8714ee8c05a64",
+ "url": "https://api.github.com/repos/symfony/http-client/zipball/4b62871a01c49457cf2a8e560af7ee8a94b87a62",
+ "reference": "4b62871a01c49457cf2a8e560af7ee8a94b87a62",
"shasum": ""
},
"require": {
@@ -5266,6 +5335,7 @@
"psr/log": "^1|^2|^3",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/http-client-contracts": "~3.4.4|^3.5.2",
+ "symfony/polyfill-php83": "^1.29",
"symfony/service-contracts": "^2.5|^3"
},
"conflict": {
@@ -5324,7 +5394,7 @@
"http"
],
"support": {
- "source": "https://github.com/symfony/http-client/tree/v7.3.1"
+ "source": "https://github.com/symfony/http-client/tree/v7.3.4"
},
"funding": [
{
@@ -5335,12 +5405,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-28T07:58:39+00:00"
+ "time": "2025-09-11T10:12:26+00:00"
},
{
"name": "symfony/http-client-contracts",
@@ -5422,16 +5496,16 @@
},
{
"name": "symfony/http-foundation",
- "version": "v7.3.1",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "23dd60256610c86a3414575b70c596e5deff6ed9"
+ "reference": "c061c7c18918b1b64268771aad04b40be41dd2e6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/23dd60256610c86a3414575b70c596e5deff6ed9",
- "reference": "23dd60256610c86a3414575b70c596e5deff6ed9",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/c061c7c18918b1b64268771aad04b40be41dd2e6",
+ "reference": "c061c7c18918b1b64268771aad04b40be41dd2e6",
"shasum": ""
},
"require": {
@@ -5481,7 +5555,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-foundation/tree/v7.3.1"
+ "source": "https://github.com/symfony/http-foundation/tree/v7.3.4"
},
"funding": [
{
@@ -5492,25 +5566,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-23T15:07:14+00:00"
+ "time": "2025-09-16T08:38:17+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v7.3.1",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "1644879a66e4aa29c36fe33dfa6c54b450ce1831"
+ "reference": "b796dffea7821f035047235e076b60ca2446e3cf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/1644879a66e4aa29c36fe33dfa6c54b450ce1831",
- "reference": "1644879a66e4aa29c36fe33dfa6c54b450ce1831",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/b796dffea7821f035047235e076b60ca2446e3cf",
+ "reference": "b796dffea7821f035047235e076b60ca2446e3cf",
"shasum": ""
},
"require": {
@@ -5595,7 +5673,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-kernel/tree/v7.3.1"
+ "source": "https://github.com/symfony/http-kernel/tree/v7.3.4"
},
"funding": [
{
@@ -5606,25 +5684,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-28T08:24:55+00:00"
+ "time": "2025-09-27T12:32:17+00:00"
},
{
"name": "symfony/intl",
- "version": "v7.3.1",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/intl.git",
- "reference": "bd50940329ac1cfc4af0491cc4468f477d967e45"
+ "reference": "e6db84864655885d9dac676a9d7dde0d904fda54"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/intl/zipball/bd50940329ac1cfc4af0491cc4468f477d967e45",
- "reference": "bd50940329ac1cfc4af0491cc4468f477d967e45",
+ "url": "https://api.github.com/repos/symfony/intl/zipball/e6db84864655885d9dac676a9d7dde0d904fda54",
+ "reference": "e6db84864655885d9dac676a9d7dde0d904fda54",
"shasum": ""
},
"require": {
@@ -5681,7 +5763,7 @@
"localization"
],
"support": {
- "source": "https://github.com/symfony/intl/tree/v7.3.1"
+ "source": "https://github.com/symfony/intl/tree/v7.3.4"
},
"funding": [
{
@@ -5692,25 +5774,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-06T16:10:07+00:00"
+ "time": "2025-09-08T14:11:30+00:00"
},
{
"name": "symfony/messenger",
- "version": "v7.3.1",
+ "version": "v7.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/messenger.git",
- "reference": "716c89b86ce58c4946d436d862694971c999d1aa"
+ "reference": "d9e04339404ba2dcd04c24172125516dc0e06c35"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/messenger/zipball/716c89b86ce58c4946d436d862694971c999d1aa",
- "reference": "716c89b86ce58c4946d436d862694971c999d1aa",
+ "url": "https://api.github.com/repos/symfony/messenger/zipball/d9e04339404ba2dcd04c24172125516dc0e06c35",
+ "reference": "d9e04339404ba2dcd04c24172125516dc0e06c35",
"shasum": ""
},
"require": {
@@ -5770,7 +5856,7 @@
"description": "Helps applications send and receive messages to/from other applications or via message queues",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/messenger/tree/v7.3.1"
+ "source": "https://github.com/symfony/messenger/tree/v7.3.3"
},
"funding": [
{
@@ -5781,25 +5867,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-27T19:55:54+00:00"
+ "time": "2025-08-13T11:49:31+00:00"
},
{
"name": "symfony/mime",
- "version": "v7.3.0",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
- "reference": "0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9"
+ "reference": "b1b828f69cbaf887fa835a091869e55df91d0e35"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mime/zipball/0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9",
- "reference": "0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/b1b828f69cbaf887fa835a091869e55df91d0e35",
+ "reference": "b1b828f69cbaf887fa835a091869e55df91d0e35",
"shasum": ""
},
"require": {
@@ -5854,7 +5944,7 @@
"mime-type"
],
"support": {
- "source": "https://github.com/symfony/mime/tree/v7.3.0"
+ "source": "https://github.com/symfony/mime/tree/v7.3.4"
},
"funding": [
{
@@ -5865,25 +5955,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-02-19T08:51:26+00:00"
+ "time": "2025-09-16T08:38:17+00:00"
},
{
"name": "symfony/monolog-bridge",
- "version": "v7.3.0",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/monolog-bridge.git",
- "reference": "1b188c8abbbef25b111da878797514b7a8d33990"
+ "reference": "7acf2abe23e5019451399ba69fc8ed3d61d4d8f0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/1b188c8abbbef25b111da878797514b7a8d33990",
- "reference": "1b188c8abbbef25b111da878797514b7a8d33990",
+ "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/7acf2abe23e5019451399ba69fc8ed3d61d4d8f0",
+ "reference": "7acf2abe23e5019451399ba69fc8ed3d61d4d8f0",
"shasum": ""
},
"require": {
@@ -5932,7 +6026,7 @@
"description": "Provides integration for Monolog with various Symfony components",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/monolog-bridge/tree/v7.3.0"
+ "source": "https://github.com/symfony/monolog-bridge/tree/v7.3.4"
},
"funding": [
{
@@ -5943,12 +6037,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-03-21T12:17:46+00:00"
+ "time": "2025-09-24T16:45:39+00:00"
},
{
"name": "symfony/monolog-bundle",
@@ -6033,16 +6131,16 @@
},
{
"name": "symfony/options-resolver",
- "version": "v7.3.0",
+ "version": "v7.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/options-resolver.git",
- "reference": "afb9a8038025e5dbc657378bfab9198d75f10fca"
+ "reference": "0ff2f5c3df08a395232bbc3c2eb7e84912df911d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/options-resolver/zipball/afb9a8038025e5dbc657378bfab9198d75f10fca",
- "reference": "afb9a8038025e5dbc657378bfab9198d75f10fca",
+ "url": "https://api.github.com/repos/symfony/options-resolver/zipball/0ff2f5c3df08a395232bbc3c2eb7e84912df911d",
+ "reference": "0ff2f5c3df08a395232bbc3c2eb7e84912df911d",
"shasum": ""
},
"require": {
@@ -6080,7 +6178,7 @@
"options"
],
"support": {
- "source": "https://github.com/symfony/options-resolver/tree/v7.3.0"
+ "source": "https://github.com/symfony/options-resolver/tree/v7.3.3"
},
"funding": [
{
@@ -6091,12 +6189,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-04-04T13:12:05+00:00"
+ "time": "2025-08-05T10:16:07+00:00"
},
{
"name": "symfony/password-hasher",
@@ -6172,16 +6274,16 @@
},
{
"name": "symfony/polyfill-intl-grapheme",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe"
+ "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
- "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70",
+ "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70",
"shasum": ""
},
"require": {
@@ -6230,7 +6332,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0"
},
"funding": [
{
@@ -6241,25 +6343,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2025-06-27T09:58:17+00:00"
},
{
"name": "symfony/polyfill-intl-icu",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-icu.git",
- "reference": "763d2a91fea5681509ca01acbc1c5e450d127811"
+ "reference": "bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/763d2a91fea5681509ca01acbc1c5e450d127811",
- "reference": "763d2a91fea5681509ca01acbc1c5e450d127811",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c",
+ "reference": "bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c",
"shasum": ""
},
"require": {
@@ -6314,7 +6420,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.33.0"
},
"funding": [
{
@@ -6325,16 +6431,20 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-12-21T18:38:29+00:00"
+ "time": "2025-06-20T22:24:30+00:00"
},
{
"name": "symfony/polyfill-intl-idn",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
@@ -6397,7 +6507,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0"
},
"funding": [
{
@@ -6408,6 +6518,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -6417,7 +6531,7 @@
},
{
"name": "symfony/polyfill-intl-normalizer",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
@@ -6478,7 +6592,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0"
},
"funding": [
{
@@ -6489,6 +6603,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -6498,7 +6616,7 @@
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
@@ -6559,7 +6677,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0"
},
"funding": [
{
@@ -6570,6 +6688,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -6579,16 +6701,16 @@
},
{
"name": "symfony/polyfill-php83",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php83.git",
- "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491"
+ "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491",
- "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491",
+ "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5",
+ "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5",
"shasum": ""
},
"require": {
@@ -6635,7 +6757,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php83/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0"
},
"funding": [
{
@@ -6646,25 +6768,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2025-07-08T02:45:35+00:00"
},
{
"name": "symfony/polyfill-php84",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php84.git",
- "reference": "000df7860439609837bbe28670b0be15783b7fbf"
+ "reference": "d8ced4d875142b6a7426000426b8abc631d6b191"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/000df7860439609837bbe28670b0be15783b7fbf",
- "reference": "000df7860439609837bbe28670b0be15783b7fbf",
+ "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191",
+ "reference": "d8ced4d875142b6a7426000426b8abc631d6b191",
"shasum": ""
},
"require": {
@@ -6711,7 +6837,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php84/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0"
},
"funding": [
{
@@ -6722,16 +6848,20 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-02-20T12:04:08+00:00"
+ "time": "2025-06-24T13:30:11+00:00"
},
{
"name": "symfony/polyfill-uuid",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-uuid.git",
@@ -6790,7 +6920,7 @@
"uuid"
],
"support": {
- "source": "https://github.com/symfony/polyfill-uuid/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-uuid/tree/v1.33.0"
},
"funding": [
{
@@ -6801,6 +6931,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -6810,16 +6944,16 @@
},
{
"name": "symfony/property-access",
- "version": "v7.3.1",
+ "version": "v7.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-access.git",
- "reference": "518d15c8cca726ebe665dcd7154074584cf862e8"
+ "reference": "4a4389e5c8bd1d0320d80a23caa6a1ac71cb81a7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/property-access/zipball/518d15c8cca726ebe665dcd7154074584cf862e8",
- "reference": "518d15c8cca726ebe665dcd7154074584cf862e8",
+ "url": "https://api.github.com/repos/symfony/property-access/zipball/4a4389e5c8bd1d0320d80a23caa6a1ac71cb81a7",
+ "reference": "4a4389e5c8bd1d0320d80a23caa6a1ac71cb81a7",
"shasum": ""
},
"require": {
@@ -6866,7 +7000,7 @@
"reflection"
],
"support": {
- "source": "https://github.com/symfony/property-access/tree/v7.3.1"
+ "source": "https://github.com/symfony/property-access/tree/v7.3.3"
},
"funding": [
{
@@ -6877,25 +7011,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-24T04:04:43+00:00"
+ "time": "2025-08-04T15:15:28+00:00"
},
{
"name": "symfony/property-info",
- "version": "v7.3.1",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-info.git",
- "reference": "90586acbf2a6dd13bee4f09f09111c8bd4773970"
+ "reference": "7b6db23f23d13ada41e1cb484748a8ec028fbace"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/property-info/zipball/90586acbf2a6dd13bee4f09f09111c8bd4773970",
- "reference": "90586acbf2a6dd13bee4f09f09111c8bd4773970",
+ "url": "https://api.github.com/repos/symfony/property-info/zipball/7b6db23f23d13ada41e1cb484748a8ec028fbace",
+ "reference": "7b6db23f23d13ada41e1cb484748a8ec028fbace",
"shasum": ""
},
"require": {
@@ -6952,7 +7090,7 @@
"validator"
],
"support": {
- "source": "https://github.com/symfony/property-info/tree/v7.3.1"
+ "source": "https://github.com/symfony/property-info/tree/v7.3.4"
},
"funding": [
{
@@ -6963,25 +7101,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-27T19:55:54+00:00"
+ "time": "2025-09-15T13:55:54+00:00"
},
{
"name": "symfony/routing",
- "version": "v7.3.0",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "8e213820c5fea844ecea29203d2a308019007c15"
+ "reference": "8dc648e159e9bac02b703b9fbd937f19ba13d07c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/8e213820c5fea844ecea29203d2a308019007c15",
- "reference": "8e213820c5fea844ecea29203d2a308019007c15",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/8dc648e159e9bac02b703b9fbd937f19ba13d07c",
+ "reference": "8dc648e159e9bac02b703b9fbd937f19ba13d07c",
"shasum": ""
},
"require": {
@@ -7033,7 +7175,7 @@
"url"
],
"support": {
- "source": "https://github.com/symfony/routing/tree/v7.3.0"
+ "source": "https://github.com/symfony/routing/tree/v7.3.4"
},
"funding": [
{
@@ -7044,25 +7186,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-05-24T20:43:28+00:00"
+ "time": "2025-09-11T10:12:26+00:00"
},
{
"name": "symfony/runtime",
- "version": "v7.3.1",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/runtime.git",
- "reference": "9516056d432f8acdac9458eb41b80097da7a05c9"
+ "reference": "3550e2711e30bfa5d808514781cd52d1cc1d9e9f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/runtime/zipball/9516056d432f8acdac9458eb41b80097da7a05c9",
- "reference": "9516056d432f8acdac9458eb41b80097da7a05c9",
+ "url": "https://api.github.com/repos/symfony/runtime/zipball/3550e2711e30bfa5d808514781cd52d1cc1d9e9f",
+ "reference": "3550e2711e30bfa5d808514781cd52d1cc1d9e9f",
"shasum": ""
},
"require": {
@@ -7112,7 +7258,7 @@
"runtime"
],
"support": {
- "source": "https://github.com/symfony/runtime/tree/v7.3.1"
+ "source": "https://github.com/symfony/runtime/tree/v7.3.4"
},
"funding": [
{
@@ -7123,25 +7269,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-13T07:48:40+00:00"
+ "time": "2025-09-11T15:31:28+00:00"
},
{
"name": "symfony/security-bundle",
- "version": "v7.3.1",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-bundle.git",
- "reference": "428a281fd66c8358adc2259c8578e6d81fbb7079"
+ "reference": "f750d9abccbeaa433c56f6a4eb2073166476a75a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/security-bundle/zipball/428a281fd66c8358adc2259c8578e6d81fbb7079",
- "reference": "428a281fd66c8358adc2259c8578e6d81fbb7079",
+ "url": "https://api.github.com/repos/symfony/security-bundle/zipball/f750d9abccbeaa433c56f6a4eb2073166476a75a",
+ "reference": "f750d9abccbeaa433c56f6a4eb2073166476a75a",
"shasum": ""
},
"require": {
@@ -7218,7 +7368,7 @@
"description": "Provides a tight integration of the Security component into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/security-bundle/tree/v7.3.1"
+ "source": "https://github.com/symfony/security-bundle/tree/v7.3.4"
},
"funding": [
{
@@ -7229,25 +7379,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-24T04:04:43+00:00"
+ "time": "2025-09-22T15:31:00+00:00"
},
{
"name": "symfony/security-core",
- "version": "v7.3.1",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-core.git",
- "reference": "fafab1003a31e51506e1a0a83e81c072211d81ba"
+ "reference": "68b9d3ca57615afde6152a1e1441fa035bea43f8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/security-core/zipball/fafab1003a31e51506e1a0a83e81c072211d81ba",
- "reference": "fafab1003a31e51506e1a0a83e81c072211d81ba",
+ "url": "https://api.github.com/repos/symfony/security-core/zipball/68b9d3ca57615afde6152a1e1441fa035bea43f8",
+ "reference": "68b9d3ca57615afde6152a1e1441fa035bea43f8",
"shasum": ""
},
"require": {
@@ -7305,7 +7459,7 @@
"description": "Symfony Security Component - Core Library",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/security-core/tree/v7.3.1"
+ "source": "https://github.com/symfony/security-core/tree/v7.3.4"
},
"funding": [
{
@@ -7316,12 +7470,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-23T07:28:50+00:00"
+ "time": "2025-09-24T14:32:13+00:00"
},
{
"name": "symfony/security-csrf",
@@ -7395,16 +7553,16 @@
},
{
"name": "symfony/security-http",
- "version": "v7.3.1",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-http.git",
- "reference": "b7182ed0fd2359297f78ff6d407265168255ea84"
+ "reference": "1cf54d0648ebab23bf9b8972617b79f1995e13a9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/security-http/zipball/b7182ed0fd2359297f78ff6d407265168255ea84",
- "reference": "b7182ed0fd2359297f78ff6d407265168255ea84",
+ "url": "https://api.github.com/repos/symfony/security-http/zipball/1cf54d0648ebab23bf9b8972617b79f1995e13a9",
+ "reference": "1cf54d0648ebab23bf9b8972617b79f1995e13a9",
"shasum": ""
},
"require": {
@@ -7463,7 +7621,7 @@
"description": "Symfony Security Component - HTTP Integration",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/security-http/tree/v7.3.1"
+ "source": "https://github.com/symfony/security-http/tree/v7.3.4"
},
"funding": [
{
@@ -7474,31 +7632,36 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-24T04:04:43+00:00"
+ "time": "2025-09-09T17:06:44+00:00"
},
{
"name": "symfony/serializer",
- "version": "v7.3.1",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/serializer.git",
- "reference": "feaf837cedbbc8287986602223175d3fd639922d"
+ "reference": "0df5af266c6fe9a855af7db4fea86e13b9ca3ab1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/serializer/zipball/feaf837cedbbc8287986602223175d3fd639922d",
- "reference": "feaf837cedbbc8287986602223175d3fd639922d",
+ "url": "https://api.github.com/repos/symfony/serializer/zipball/0df5af266c6fe9a855af7db4fea86e13b9ca3ab1",
+ "reference": "0df5af266c6fe9a855af7db4fea86e13b9ca3ab1",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3",
- "symfony/polyfill-ctype": "~1.8"
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-php84": "^1.30"
},
"conflict": {
"phpdocumentor/reflection-docblock": "<3.2.2",
@@ -7528,7 +7691,7 @@
"symfony/property-access": "^6.4|^7.0",
"symfony/property-info": "^6.4|^7.0",
"symfony/translation-contracts": "^2.5|^3",
- "symfony/type-info": "^7.1",
+ "symfony/type-info": "^7.1.8",
"symfony/uid": "^6.4|^7.0",
"symfony/validator": "^6.4|^7.0",
"symfony/var-dumper": "^6.4|^7.0",
@@ -7561,7 +7724,7 @@
"description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/serializer/tree/v7.3.1"
+ "source": "https://github.com/symfony/serializer/tree/v7.3.4"
},
"funding": [
{
@@ -7572,12 +7735,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-27T19:55:54+00:00"
+ "time": "2025-09-15T13:39:02+00:00"
},
{
"name": "symfony/service-contracts",
@@ -7726,16 +7893,16 @@
},
{
"name": "symfony/string",
- "version": "v7.3.0",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125"
+ "reference": "f96476035142921000338bad71e5247fbc138872"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/f3570b8c61ca887a9e2938e85cb6458515d2b125",
- "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125",
+ "url": "https://api.github.com/repos/symfony/string/zipball/f96476035142921000338bad71e5247fbc138872",
+ "reference": "f96476035142921000338bad71e5247fbc138872",
"shasum": ""
},
"require": {
@@ -7750,7 +7917,6 @@
},
"require-dev": {
"symfony/emoji": "^7.1",
- "symfony/error-handler": "^6.4|^7.0",
"symfony/http-client": "^6.4|^7.0",
"symfony/intl": "^6.4|^7.0",
"symfony/translation-contracts": "^2.5|^3.0",
@@ -7793,7 +7959,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v7.3.0"
+ "source": "https://github.com/symfony/string/tree/v7.3.4"
},
"funding": [
{
@@ -7804,25 +7970,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-04-20T20:19:01+00:00"
+ "time": "2025-09-11T14:36:48+00:00"
},
{
"name": "symfony/translation",
- "version": "v7.3.1",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "241d5ac4910d256660238a7ecf250deba4c73063"
+ "reference": "ec25870502d0c7072d086e8ffba1420c85965174"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/241d5ac4910d256660238a7ecf250deba4c73063",
- "reference": "241d5ac4910d256660238a7ecf250deba4c73063",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/ec25870502d0c7072d086e8ffba1420c85965174",
+ "reference": "ec25870502d0c7072d086e8ffba1420c85965174",
"shasum": ""
},
"require": {
@@ -7889,7 +8059,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/translation/tree/v7.3.1"
+ "source": "https://github.com/symfony/translation/tree/v7.3.4"
},
"funding": [
{
@@ -7900,12 +8070,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-27T19:55:54+00:00"
+ "time": "2025-09-07T11:39:36+00:00"
},
{
"name": "symfony/translation-contracts",
@@ -7987,16 +8161,16 @@
},
{
"name": "symfony/twig-bridge",
- "version": "v7.3.0",
+ "version": "v7.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bridge.git",
- "reference": "082eb15d8a4f9afee0acc4709fbe3aaf26d48891"
+ "reference": "33558f013b7f6ed72805527c8405cae0062e47c5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/082eb15d8a4f9afee0acc4709fbe3aaf26d48891",
- "reference": "082eb15d8a4f9afee0acc4709fbe3aaf26d48891",
+ "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/33558f013b7f6ed72805527c8405cae0062e47c5",
+ "reference": "33558f013b7f6ed72805527c8405cae0062e47c5",
"shasum": ""
},
"require": {
@@ -8078,7 +8252,7 @@
"description": "Provides integration for Twig with various Symfony components",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/twig-bridge/tree/v7.3.0"
+ "source": "https://github.com/symfony/twig-bridge/tree/v7.3.3"
},
"funding": [
{
@@ -8089,25 +8263,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-05-19T13:28:56+00:00"
+ "time": "2025-08-18T13:10:53+00:00"
},
{
"name": "symfony/twig-bundle",
- "version": "v7.3.1",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/twig-bundle.git",
- "reference": "bc23c11d9716fc2261ee26a32e654b0e8b1b1896"
+ "reference": "da5c778a8416fcce5318737c4d944f6fa2bb3f81"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/bc23c11d9716fc2261ee26a32e654b0e8b1b1896",
- "reference": "bc23c11d9716fc2261ee26a32e654b0e8b1b1896",
+ "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/da5c778a8416fcce5318737c4d944f6fa2bb3f81",
+ "reference": "da5c778a8416fcce5318737c4d944f6fa2bb3f81",
"shasum": ""
},
"require": {
@@ -8162,7 +8340,7 @@
"description": "Provides a tight integration of Twig into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/twig-bundle/tree/v7.3.1"
+ "source": "https://github.com/symfony/twig-bundle/tree/v7.3.4"
},
"funding": [
{
@@ -8173,25 +8351,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-24T04:04:43+00:00"
+ "time": "2025-09-10T12:00:31+00:00"
},
{
"name": "symfony/type-info",
- "version": "v7.3.1",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/type-info.git",
- "reference": "5fa6e25e4195e73ce9e457b521ac5e61ec271150"
+ "reference": "d34eaeb57f39c8a9c97eb72a977c423207dfa35b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/type-info/zipball/5fa6e25e4195e73ce9e457b521ac5e61ec271150",
- "reference": "5fa6e25e4195e73ce9e457b521ac5e61ec271150",
+ "url": "https://api.github.com/repos/symfony/type-info/zipball/d34eaeb57f39c8a9c97eb72a977c423207dfa35b",
+ "reference": "d34eaeb57f39c8a9c97eb72a977c423207dfa35b",
"shasum": ""
},
"require": {
@@ -8241,7 +8423,7 @@
"type"
],
"support": {
- "source": "https://github.com/symfony/type-info/tree/v7.3.1"
+ "source": "https://github.com/symfony/type-info/tree/v7.3.4"
},
"funding": [
{
@@ -8252,12 +8434,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-27T19:55:54+00:00"
+ "time": "2025-09-11T15:33:27+00:00"
},
{
"name": "symfony/uid",
@@ -8335,38 +8521,38 @@
},
{
"name": "symfony/ux-twig-component",
- "version": "v2.27.0",
+ "version": "v2.30.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/ux-twig-component.git",
- "reference": "0879cd53812b79e8b6a20e104b6e785a2ac2c013"
+ "reference": "2f445efda4d4400d4d1911ddf9710c366f339614"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/ux-twig-component/zipball/0879cd53812b79e8b6a20e104b6e785a2ac2c013",
- "reference": "0879cd53812b79e8b6a20e104b6e785a2ac2c013",
+ "url": "https://api.github.com/repos/symfony/ux-twig-component/zipball/2f445efda4d4400d4d1911ddf9710c366f339614",
+ "reference": "2f445efda4d4400d4d1911ddf9710c366f339614",
"shasum": ""
},
"require": {
"php": ">=8.1",
- "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+ "symfony/dependency-injection": "^5.4|^6.0|^7.0|^8.0",
"symfony/deprecation-contracts": "^2.2|^3.0",
- "symfony/event-dispatcher": "^5.4|^6.0|^7.0",
- "symfony/property-access": "^5.4|^6.0|^7.0",
+ "symfony/event-dispatcher": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/property-access": "^5.4|^6.0|^7.0|^8.0",
"twig/twig": "^3.10.3"
},
"conflict": {
"symfony/config": "<5.4.0"
},
"require-dev": {
- "symfony/console": "^5.4|^6.0|^7.0",
- "symfony/css-selector": "^5.4|^6.0|^7.0",
- "symfony/dom-crawler": "^5.4|^6.0|^7.0",
- "symfony/framework-bundle": "^5.4|^6.0|^7.0",
- "symfony/phpunit-bridge": "^6.0|^7.0",
+ "symfony/console": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/css-selector": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/dom-crawler": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/framework-bundle": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/phpunit-bridge": "^6.0|^7.0|^8.0",
"symfony/stimulus-bundle": "^2.9.1",
- "symfony/twig-bundle": "^5.4|^6.0|^7.0",
- "symfony/webpack-encore-bundle": "^1.15"
+ "symfony/twig-bundle": "^5.4|^6.0|^7.0|^8.0",
+ "symfony/webpack-encore-bundle": "^1.15|^2.3.0"
},
"type": "symfony-bundle",
"extra": {
@@ -8398,7 +8584,7 @@
"twig"
],
"support": {
- "source": "https://github.com/symfony/ux-twig-component/tree/v2.27.0"
+ "source": "https://github.com/symfony/ux-twig-component/tree/v2.30.0"
},
"funding": [
{
@@ -8409,25 +8595,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-21T16:41:28+00:00"
+ "time": "2025-08-27T15:25:48+00:00"
},
{
"name": "symfony/validator",
- "version": "v7.3.1",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/validator.git",
- "reference": "e2f2497c869fc57446f735fbf00cff4de32ae8c3"
+ "reference": "5e29a348b5fac2227b6938a54db006d673bb813a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/validator/zipball/e2f2497c869fc57446f735fbf00cff4de32ae8c3",
- "reference": "e2f2497c869fc57446f735fbf00cff4de32ae8c3",
+ "url": "https://api.github.com/repos/symfony/validator/zipball/5e29a348b5fac2227b6938a54db006d673bb813a",
+ "reference": "5e29a348b5fac2227b6938a54db006d673bb813a",
"shasum": ""
},
"require": {
@@ -8466,7 +8656,7 @@
"symfony/property-info": "^6.4|^7.0",
"symfony/string": "^6.4|^7.0",
"symfony/translation": "^6.4.3|^7.0.3",
- "symfony/type-info": "^7.1",
+ "symfony/type-info": "^7.1.8",
"symfony/yaml": "^6.4|^7.0"
},
"type": "library",
@@ -8496,7 +8686,7 @@
"description": "Provides tools to validate values",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/validator/tree/v7.3.1"
+ "source": "https://github.com/symfony/validator/tree/v7.3.4"
},
"funding": [
{
@@ -8507,25 +8697,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-26T13:22:23+00:00"
+ "time": "2025-09-24T06:32:27+00:00"
},
{
"name": "symfony/var-dumper",
- "version": "v7.3.1",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "6e209fbe5f5a7b6043baba46fe5735a4b85d0d42"
+ "reference": "b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6e209fbe5f5a7b6043baba46fe5735a4b85d0d42",
- "reference": "6e209fbe5f5a7b6043baba46fe5735a4b85d0d42",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb",
+ "reference": "b8abe7daf2730d07dfd4b2ee1cecbf0dd2fbdabb",
"shasum": ""
},
"require": {
@@ -8537,7 +8731,6 @@
"symfony/console": "<6.4"
},
"require-dev": {
- "ext-iconv": "*",
"symfony/console": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/process": "^6.4|^7.0",
@@ -8580,7 +8773,7 @@
"dump"
],
"support": {
- "source": "https://github.com/symfony/var-dumper/tree/v7.3.1"
+ "source": "https://github.com/symfony/var-dumper/tree/v7.3.4"
},
"funding": [
{
@@ -8591,25 +8784,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-27T19:55:54+00:00"
+ "time": "2025-09-11T10:12:26+00:00"
},
{
"name": "symfony/var-exporter",
- "version": "v7.3.0",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-exporter.git",
- "reference": "c9a1168891b5aaadfd6332ef44393330b3498c4c"
+ "reference": "0f020b544a30a7fe8ba972e53ee48a74c0bc87f4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-exporter/zipball/c9a1168891b5aaadfd6332ef44393330b3498c4c",
- "reference": "c9a1168891b5aaadfd6332ef44393330b3498c4c",
+ "url": "https://api.github.com/repos/symfony/var-exporter/zipball/0f020b544a30a7fe8ba972e53ee48a74c0bc87f4",
+ "reference": "0f020b544a30a7fe8ba972e53ee48a74c0bc87f4",
"shasum": ""
},
"require": {
@@ -8657,7 +8854,7 @@
"serialize"
],
"support": {
- "source": "https://github.com/symfony/var-exporter/tree/v7.3.0"
+ "source": "https://github.com/symfony/var-exporter/tree/v7.3.4"
},
"funding": [
{
@@ -8668,12 +8865,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-05-15T09:04:05+00:00"
+ "time": "2025-09-11T10:12:26+00:00"
},
{
"name": "symfony/web-link",
@@ -8760,32 +8961,32 @@
},
{
"name": "symfony/webpack-encore-bundle",
- "version": "v2.2.0",
+ "version": "v2.3.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/webpack-encore-bundle.git",
- "reference": "e335394b68a775a9b2bd173a8ba4fd2001f3870c"
+ "reference": "7ae70d44c24c3b913f308af8396169b5c6d9e0f5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/e335394b68a775a9b2bd173a8ba4fd2001f3870c",
- "reference": "e335394b68a775a9b2bd173a8ba4fd2001f3870c",
+ "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/7ae70d44c24c3b913f308af8396169b5c6d9e0f5",
+ "reference": "7ae70d44c24c3b913f308af8396169b5c6d9e0f5",
"shasum": ""
},
"require": {
"php": ">=8.1.0",
- "symfony/asset": "^5.4 || ^6.2 || ^7.0",
- "symfony/config": "^5.4 || ^6.2 || ^7.0",
- "symfony/dependency-injection": "^5.4 || ^6.2 || ^7.0",
- "symfony/http-kernel": "^5.4 || ^6.2 || ^7.0",
+ "symfony/asset": "^5.4 || ^6.2 || ^7.0 || ^8.0",
+ "symfony/config": "^5.4 || ^6.2 || ^7.0 || ^8.0",
+ "symfony/dependency-injection": "^5.4 || ^6.2 || ^7.0 || ^8.0",
+ "symfony/http-kernel": "^5.4 || ^6.2 || ^7.0 || ^8.0",
"symfony/service-contracts": "^1.1.9 || ^2.1.3 || ^3.0"
},
"require-dev": {
- "symfony/framework-bundle": "^5.4 || ^6.2 || ^7.0",
- "symfony/http-client": "^5.4 || ^6.2 || ^7.0",
- "symfony/phpunit-bridge": "^5.4 || ^6.2 || ^7.0",
- "symfony/twig-bundle": "^5.4 || ^6.2 || ^7.0",
- "symfony/web-link": "^5.4 || ^6.2 || ^7.0"
+ "symfony/framework-bundle": "^5.4 || ^6.2 || ^7.0 || ^8.0",
+ "symfony/http-client": "^5.4 || ^6.2 || ^7.0 || ^8.0",
+ "symfony/phpunit-bridge": "^5.4 || ^6.2 || ^7.0 || ^8.0",
+ "symfony/twig-bundle": "^5.4 || ^6.2 || ^7.0 || ^8.0",
+ "symfony/web-link": "^5.4 || ^6.2 || ^7.0 || ^8.0"
},
"type": "symfony-bundle",
"extra": {
@@ -8812,7 +9013,7 @@
"description": "Integration of your Symfony app with Webpack Encore",
"support": {
"issues": "https://github.com/symfony/webpack-encore-bundle/issues",
- "source": "https://github.com/symfony/webpack-encore-bundle/tree/v2.2.0"
+ "source": "https://github.com/symfony/webpack-encore-bundle/tree/v2.3.0"
},
"funding": [
{
@@ -8823,25 +9024,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-10-02T07:27:19+00:00"
+ "time": "2025-08-05T11:43:32+00:00"
},
{
"name": "symfony/yaml",
- "version": "v7.3.1",
+ "version": "v7.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "0c3555045a46ab3cd4cc5a69d161225195230edb"
+ "reference": "d4f4a66866fe2451f61296924767280ab5732d9d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/0c3555045a46ab3cd4cc5a69d161225195230edb",
- "reference": "0c3555045a46ab3cd4cc5a69d161225195230edb",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/d4f4a66866fe2451f61296924767280ab5732d9d",
+ "reference": "d4f4a66866fe2451f61296924767280ab5732d9d",
"shasum": ""
},
"require": {
@@ -8884,7 +9089,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v7.3.1"
+ "source": "https://github.com/symfony/yaml/tree/v7.3.3"
},
"funding": [
{
@@ -8895,12 +9100,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-03T06:57:57+00:00"
+ "time": "2025-08-27T11:34:33+00:00"
},
{
"name": "twig/extra-bundle",
@@ -9450,16 +9659,16 @@
},
{
"name": "doctrine/data-fixtures",
- "version": "2.0.3",
+ "version": "2.1.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/data-fixtures.git",
- "reference": "f65b353922b7ac48f360428e19b22fcce5aba134"
+ "reference": "f161e20f04ba5440a09330e156b40f04dd70d47f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/f65b353922b7ac48f360428e19b22fcce5aba134",
- "reference": "f65b353922b7ac48f360428e19b22fcce5aba134",
+ "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/f161e20f04ba5440a09330e156b40f04dd70d47f",
+ "reference": "f161e20f04ba5440a09330e156b40f04dd70d47f",
"shasum": ""
},
"require": {
@@ -9513,7 +9722,7 @@
],
"support": {
"issues": "https://github.com/doctrine/data-fixtures/issues",
- "source": "https://github.com/doctrine/data-fixtures/tree/2.0.3"
+ "source": "https://github.com/doctrine/data-fixtures/tree/2.1.0"
},
"funding": [
{
@@ -9529,20 +9738,20 @@
"type": "tidelift"
}
],
- "time": "2025-06-27T19:59:58+00:00"
+ "time": "2025-07-08T17:48:20+00:00"
},
{
"name": "ergebnis/composer-normalize",
- "version": "2.47.0",
+ "version": "2.48.2",
"source": {
"type": "git",
"url": "https://github.com/ergebnis/composer-normalize.git",
- "reference": "ed24b9f8901f8fbafeca98f662eaca39427f0544"
+ "reference": "86dc9731b8320f49e9be9ad6d8e4de9b8b0e9b8b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/composer-normalize/zipball/ed24b9f8901f8fbafeca98f662eaca39427f0544",
- "reference": "ed24b9f8901f8fbafeca98f662eaca39427f0544",
+ "url": "https://api.github.com/repos/ergebnis/composer-normalize/zipball/86dc9731b8320f49e9be9ad6d8e4de9b8b0e9b8b",
+ "reference": "86dc9731b8320f49e9be9ad6d8e4de9b8b0e9b8b",
"shasum": ""
},
"require": {
@@ -9552,30 +9761,31 @@
"ergebnis/json-printer": "^3.7.0",
"ext-json": "*",
"justinrainbow/json-schema": "^5.2.12 || ^6.0.0",
- "localheinz/diff": "^1.2.0",
- "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
+ "localheinz/diff": "^1.3.0",
+ "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
},
"require-dev": {
"composer/composer": "^2.8.3",
- "ergebnis/license": "^2.6.0",
- "ergebnis/php-cs-fixer-config": "^6.46.0",
- "ergebnis/phpunit-slow-test-detector": "^2.19.1",
+ "ergebnis/license": "^2.7.0",
+ "ergebnis/php-cs-fixer-config": "^6.53.0",
+ "ergebnis/phpstan-rules": "^2.11.0",
+ "ergebnis/phpunit-slow-test-detector": "^2.20.0",
"fakerphp/faker": "^1.24.1",
"infection/infection": "~0.26.6",
"phpstan/extension-installer": "^1.4.3",
- "phpstan/phpstan": "^2.1.11",
- "phpstan/phpstan-deprecation-rules": "^2.0.1",
- "phpstan/phpstan-phpunit": "^2.0.6",
- "phpstan/phpstan-strict-rules": "^2.0.4",
+ "phpstan/phpstan": "^2.1.17",
+ "phpstan/phpstan-deprecation-rules": "^2.0.3",
+ "phpstan/phpstan-phpunit": "^2.0.7",
+ "phpstan/phpstan-strict-rules": "^2.0.6",
"phpunit/phpunit": "^9.6.20",
- "rector/rector": "^2.0.11",
+ "rector/rector": "^2.1.4",
"symfony/filesystem": "^5.4.41"
},
"type": "composer-plugin",
"extra": {
"class": "Ergebnis\\Composer\\Normalize\\NormalizePlugin",
"branch-alias": {
- "dev-main": "2.44-dev"
+ "dev-main": "2.49-dev"
},
"plugin-optional": true,
"composer-normalize": {
@@ -9612,43 +9822,48 @@
"security": "https://github.com/ergebnis/composer-normalize/blob/main/.github/SECURITY.md",
"source": "https://github.com/ergebnis/composer-normalize"
},
- "time": "2025-04-15T11:09:27+00:00"
+ "time": "2025-09-06T11:42:34+00:00"
},
{
"name": "ergebnis/json",
- "version": "1.4.0",
+ "version": "1.6.0",
"source": {
"type": "git",
"url": "https://github.com/ergebnis/json.git",
- "reference": "7656ac2aa6c2ca4408f96f599e9a17a22c464f69"
+ "reference": "7b56d2b5d9e897e75b43e2e753075a0904c921b1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/json/zipball/7656ac2aa6c2ca4408f96f599e9a17a22c464f69",
- "reference": "7656ac2aa6c2ca4408f96f599e9a17a22c464f69",
+ "url": "https://api.github.com/repos/ergebnis/json/zipball/7b56d2b5d9e897e75b43e2e753075a0904c921b1",
+ "reference": "7b56d2b5d9e897e75b43e2e753075a0904c921b1",
"shasum": ""
},
"require": {
"ext-json": "*",
- "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
+ "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
},
"require-dev": {
+ "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/phpstan-rules": "^2.11.0",
"ergebnis/phpunit-slow-test-detector": "^2.16.1",
"fakerphp/faker": "^1.24.0",
"infection/infection": "~0.26.6",
"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"
+ "phpstan/phpstan": "^2.1.22",
+ "phpstan/phpstan-deprecation-rules": "^2.0.3",
+ "phpstan/phpstan-phpunit": "^2.0.7",
+ "phpstan/phpstan-strict-rules": "^2.0.6",
+ "phpunit/phpunit": "^9.6.24",
+ "rector/rector": "^2.1.4"
},
"type": "library",
"extra": {
+ "branch-alias": {
+ "dev-main": "1.7-dev"
+ },
"composer-normalize": {
"indent-size": 2,
"indent-style": "space"
@@ -9680,20 +9895,20 @@
"security": "https://github.com/ergebnis/json/blob/main/.github/SECURITY.md",
"source": "https://github.com/ergebnis/json"
},
- "time": "2024-11-17T11:51:22+00:00"
+ "time": "2025-09-06T09:08:45+00:00"
},
{
"name": "ergebnis/json-normalizer",
- "version": "4.9.0",
+ "version": "4.10.1",
"source": {
"type": "git",
"url": "https://github.com/ergebnis/json-normalizer.git",
- "reference": "cc4dcf3890448572a2d9bea97133c4d860e59fb1"
+ "reference": "77961faf2c651c3f05977b53c6c68e8434febf62"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/json-normalizer/zipball/cc4dcf3890448572a2d9bea97133c4d860e59fb1",
- "reference": "cc4dcf3890448572a2d9bea97133c4d860e59fb1",
+ "url": "https://api.github.com/repos/ergebnis/json-normalizer/zipball/77961faf2c651c3f05977b53c6c68e8434febf62",
+ "reference": "77961faf2c651c3f05977b53c6c68e8434febf62",
"shasum": ""
},
"require": {
@@ -9703,7 +9918,7 @@
"ergebnis/json-schema-validator": "^4.2.0",
"ext-json": "*",
"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"
+ "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
},
"require-dev": {
"composer/semver": "^3.4.3",
@@ -9728,7 +9943,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "4.8-dev"
+ "dev-main": "4.11-dev"
},
"composer-normalize": {
"indent-size": 2,
@@ -9762,24 +9977,24 @@
"security": "https://github.com/ergebnis/json-normalizer/blob/main/.github/SECURITY.md",
"source": "https://github.com/ergebnis/json-normalizer"
},
- "time": "2025-04-10T13:13:04+00:00"
+ "time": "2025-09-06T09:18:13+00:00"
},
{
"name": "ergebnis/json-pointer",
- "version": "3.6.0",
+ "version": "3.7.1",
"source": {
"type": "git",
"url": "https://github.com/ergebnis/json-pointer.git",
- "reference": "4fc85d8edb74466d282119d8d9541ec7cffc0798"
+ "reference": "43bef355184e9542635e35dd2705910a3df4c236"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/json-pointer/zipball/4fc85d8edb74466d282119d8d9541ec7cffc0798",
- "reference": "4fc85d8edb74466d282119d8d9541ec7cffc0798",
+ "url": "https://api.github.com/repos/ergebnis/json-pointer/zipball/43bef355184e9542635e35dd2705910a3df4c236",
+ "reference": "43bef355184e9542635e35dd2705910a3df4c236",
"shasum": ""
},
"require": {
- "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
+ "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
},
"require-dev": {
"ergebnis/composer-normalize": "^2.43.0",
@@ -9800,7 +10015,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "3.6-dev"
+ "dev-main": "3.8-dev"
},
"composer-normalize": {
"indent-size": 2,
@@ -9835,28 +10050,29 @@
"security": "https://github.com/ergebnis/json-pointer/blob/main/.github/SECURITY.md",
"source": "https://github.com/ergebnis/json-pointer"
},
- "time": "2024-11-17T12:37:06+00:00"
+ "time": "2025-09-06T09:28:19+00:00"
},
{
"name": "ergebnis/json-printer",
- "version": "3.7.0",
+ "version": "3.8.1",
"source": {
"type": "git",
"url": "https://github.com/ergebnis/json-printer.git",
- "reference": "ced41fce7854152f0e8f38793c2ffe59513cdd82"
+ "reference": "211d73fc7ec6daf98568ee6ed6e6d133dee8503e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/json-printer/zipball/ced41fce7854152f0e8f38793c2ffe59513cdd82",
- "reference": "ced41fce7854152f0e8f38793c2ffe59513cdd82",
+ "url": "https://api.github.com/repos/ergebnis/json-printer/zipball/211d73fc7ec6daf98568ee6ed6e6d133dee8503e",
+ "reference": "211d73fc7ec6daf98568ee6ed6e6d133dee8503e",
"shasum": ""
},
"require": {
"ext-json": "*",
"ext-mbstring": "*",
- "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
+ "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
},
"require-dev": {
+ "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",
@@ -9872,6 +10088,15 @@
"rector/rector": "^1.2.10"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.9-dev"
+ },
+ "composer-normalize": {
+ "indent-size": 2,
+ "indent-style": "space"
+ }
+ },
"autoload": {
"psr-4": {
"Ergebnis\\Json\\Printer\\": "src/"
@@ -9900,20 +10125,20 @@
"security": "https://github.com/ergebnis/json-printer/blob/main/.github/SECURITY.md",
"source": "https://github.com/ergebnis/json-printer"
},
- "time": "2024-11-17T11:20:51+00:00"
+ "time": "2025-09-06T09:59:26+00:00"
},
{
"name": "ergebnis/json-schema-validator",
- "version": "4.4.0",
+ "version": "4.5.1",
"source": {
"type": "git",
"url": "https://github.com/ergebnis/json-schema-validator.git",
- "reference": "85f90c81f718aebba1d738800af83eeb447dc7ec"
+ "reference": "b739527a480a9e3651360ad351ea77e7e9019df2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/json-schema-validator/zipball/85f90c81f718aebba1d738800af83eeb447dc7ec",
- "reference": "85f90c81f718aebba1d738800af83eeb447dc7ec",
+ "url": "https://api.github.com/repos/ergebnis/json-schema-validator/zipball/b739527a480a9e3651360ad351ea77e7e9019df2",
+ "reference": "b739527a480a9e3651360ad351ea77e7e9019df2",
"shasum": ""
},
"require": {
@@ -9921,7 +10146,7 @@
"ergebnis/json-pointer": "^3.4.0",
"ext-json": "*",
"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"
+ "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
},
"require-dev": {
"ergebnis/composer-normalize": "^2.44.0",
@@ -9942,7 +10167,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "4.4-dev"
+ "dev-main": "4.6-dev"
},
"composer-normalize": {
"indent-size": 2,
@@ -9977,7 +10202,7 @@
"security": "https://github.com/ergebnis/json-schema-validator/blob/main/.github/SECURITY.md",
"source": "https://github.com/ergebnis/json-schema-validator"
},
- "time": "2024-11-18T06:32:28+00:00"
+ "time": "2025-09-06T11:37:35+00:00"
},
{
"name": "evenement/evenement",
@@ -10091,16 +10316,16 @@
},
{
"name": "fidry/cpu-core-counter",
- "version": "1.2.0",
+ "version": "1.3.0",
"source": {
"type": "git",
"url": "https://github.com/theofidry/cpu-core-counter.git",
- "reference": "8520451a140d3f46ac33042715115e290cf5785f"
+ "reference": "db9508f7b1474469d9d3c53b86f817e344732678"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f",
- "reference": "8520451a140d3f46ac33042715115e290cf5785f",
+ "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678",
+ "reference": "db9508f7b1474469d9d3c53b86f817e344732678",
"shasum": ""
},
"require": {
@@ -10110,10 +10335,10 @@
"fidry/makefile": "^0.2.0",
"fidry/php-cs-fixer-config": "^1.1.2",
"phpstan/extension-installer": "^1.2.0",
- "phpstan/phpstan": "^1.9.2",
- "phpstan/phpstan-deprecation-rules": "^1.0.0",
- "phpstan/phpstan-phpunit": "^1.2.2",
- "phpstan/phpstan-strict-rules": "^1.4.4",
+ "phpstan/phpstan": "^2.0",
+ "phpstan/phpstan-deprecation-rules": "^2.0.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpstan/phpstan-strict-rules": "^2.0",
"phpunit/phpunit": "^8.5.31 || ^9.5.26",
"webmozarts/strict-phpunit": "^7.5"
},
@@ -10140,7 +10365,7 @@
],
"support": {
"issues": "https://github.com/theofidry/cpu-core-counter/issues",
- "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0"
+ "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0"
},
"funding": [
{
@@ -10148,63 +10373,62 @@
"type": "github"
}
],
- "time": "2024-08-06T10:04:20+00:00"
+ "time": "2025-08-14T07:29:31+00:00"
},
{
"name": "friendsofphp/php-cs-fixer",
- "version": "v3.76.0",
+ "version": "v3.88.2",
"source": {
"type": "git",
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
- "reference": "0e3c484cef0ae9314b0f85986a36296087432c40"
+ "reference": "a8d15584bafb0f0d9d938827840060fd4a3ebc99"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/0e3c484cef0ae9314b0f85986a36296087432c40",
- "reference": "0e3c484cef0ae9314b0f85986a36296087432c40",
+ "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/a8d15584bafb0f0d9d938827840060fd4a3ebc99",
+ "reference": "a8d15584bafb0f0d9d938827840060fd4a3ebc99",
"shasum": ""
},
"require": {
- "clue/ndjson-react": "^1.0",
+ "clue/ndjson-react": "^1.3",
"composer/semver": "^3.4",
"composer/xdebug-handler": "^3.0.5",
"ext-filter": "*",
"ext-hash": "*",
"ext-json": "*",
"ext-tokenizer": "*",
- "fidry/cpu-core-counter": "^1.2",
+ "fidry/cpu-core-counter": "^1.3",
"php": "^7.4 || ^8.0",
"react/child-process": "^0.6.6",
- "react/event-loop": "^1.0",
- "react/promise": "^2.11 || ^3.0",
- "react/socket": "^1.0",
- "react/stream": "^1.0",
+ "react/event-loop": "^1.5",
+ "react/promise": "^3.3",
+ "react/socket": "^1.16",
+ "react/stream": "^1.4",
"sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0",
- "symfony/console": "^5.4.45 || ^6.4.13 || ^7.0",
- "symfony/event-dispatcher": "^5.4.45 || ^6.4.13 || ^7.0",
- "symfony/filesystem": "^5.4.45 || ^6.4.13 || ^7.0",
- "symfony/finder": "^5.4.45 || ^6.4.17 || ^7.0",
- "symfony/options-resolver": "^5.4.45 || ^6.4.16 || ^7.0",
- "symfony/polyfill-mbstring": "^1.32",
- "symfony/polyfill-php80": "^1.32",
- "symfony/polyfill-php81": "^1.32",
- "symfony/process": "^5.4.47 || ^6.4.20 || ^7.2",
- "symfony/stopwatch": "^5.4.45 || ^6.4.19 || ^7.0"
- },
- "require-dev": {
- "facile-it/paraunit": "^1.3.1 || ^2.6",
- "infection/infection": "^0.29.14",
- "justinrainbow/json-schema": "^5.3 || ^6.4",
+ "symfony/console": "^5.4.47 || ^6.4.24 || ^7.0",
+ "symfony/event-dispatcher": "^5.4.45 || ^6.4.24 || ^7.0",
+ "symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.0",
+ "symfony/finder": "^5.4.45 || ^6.4.24 || ^7.0",
+ "symfony/options-resolver": "^5.4.45 || ^6.4.24 || ^7.0",
+ "symfony/polyfill-mbstring": "^1.33",
+ "symfony/polyfill-php80": "^1.33",
+ "symfony/polyfill-php81": "^1.33",
+ "symfony/polyfill-php84": "^1.33",
+ "symfony/process": "^5.4.47 || ^6.4.24 || ^7.2",
+ "symfony/stopwatch": "^5.4.45 || ^6.4.24 || ^7.0"
+ },
+ "require-dev": {
+ "facile-it/paraunit": "^1.3.1 || ^2.7",
+ "infection/infection": "^0.31.0",
+ "justinrainbow/json-schema": "^6.5",
"keradus/cli-executor": "^2.2",
"mikey179/vfsstream": "^1.6.12",
"php-coveralls/php-coveralls": "^2.8",
- "php-cs-fixer/accessible-object": "^1.1",
"php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6",
"php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6",
- "phpunit/phpunit": "^9.6.23 || ^10.5.47 || ^11.5.25",
- "symfony/polyfill-php84": "^1.32",
- "symfony/var-dumper": "^5.4.48 || ^6.4.23 || ^7.3.1",
- "symfony/yaml": "^5.4.45 || ^6.4.23 || ^7.3.1"
+ "phpunit/phpunit": "^9.6.25 || ^10.5.53 || ^11.5.34",
+ "symfony/var-dumper": "^5.4.48 || ^6.4.24 || ^7.3.2",
+ "symfony/yaml": "^5.4.45 || ^6.4.24 || ^7.3.2"
},
"suggest": {
"ext-dom": "For handling output formats in XML",
@@ -10245,7 +10469,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.76.0"
+ "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.88.2"
},
"funding": [
{
@@ -10253,7 +10477,7 @@
"type": "github"
}
],
- "time": "2025-06-30T14:15:06+00:00"
+ "time": "2025-09-27T00:24:15+00:00"
},
{
"name": "hautelook/alice-bundle",
@@ -10331,16 +10555,16 @@
},
{
"name": "justinrainbow/json-schema",
- "version": "6.4.2",
+ "version": "6.6.0",
"source": {
"type": "git",
"url": "https://github.com/jsonrainbow/json-schema.git",
- "reference": "ce1fd2d47799bb60668643bc6220f6278a4c1d02"
+ "reference": "68ba7677532803cc0c5900dd5a4d730537f2b2f3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/ce1fd2d47799bb60668643bc6220f6278a4c1d02",
- "reference": "ce1fd2d47799bb60668643bc6220f6278a4c1d02",
+ "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/68ba7677532803cc0c5900dd5a4d730537f2b2f3",
+ "reference": "68ba7677532803cc0c5900dd5a4d730537f2b2f3",
"shasum": ""
},
"require": {
@@ -10350,7 +10574,7 @@
},
"require-dev": {
"friendsofphp/php-cs-fixer": "3.3.0",
- "json-schema/json-schema-test-suite": "1.2.0",
+ "json-schema/json-schema-test-suite": "^23.2",
"marc-mabe/php-enum-phpstan": "^2.0",
"phpspec/prophecy": "^1.19",
"phpstan/phpstan": "^1.12",
@@ -10400,26 +10624,26 @@
],
"support": {
"issues": "https://github.com/jsonrainbow/json-schema/issues",
- "source": "https://github.com/jsonrainbow/json-schema/tree/6.4.2"
+ "source": "https://github.com/jsonrainbow/json-schema/tree/6.6.0"
},
- "time": "2025-06-03T18:27:04+00:00"
+ "time": "2025-10-10T11:34:09+00:00"
},
{
"name": "localheinz/diff",
- "version": "1.2.0",
+ "version": "1.3.0",
"source": {
"type": "git",
"url": "https://github.com/localheinz/diff.git",
- "reference": "ec413943c2b518464865673fd5b38f7df867a010"
+ "reference": "33bd840935970cda6691c23fc7d94ae764c0734c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/localheinz/diff/zipball/ec413943c2b518464865673fd5b38f7df867a010",
- "reference": "ec413943c2b518464865673fd5b38f7df867a010",
+ "url": "https://api.github.com/repos/localheinz/diff/zipball/33bd840935970cda6691c23fc7d94ae764c0734c",
+ "reference": "33bd840935970cda6691c23fc7d94ae764c0734c",
"shasum": ""
},
"require": {
- "php": "~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
+ "php": "~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
},
"require-dev": {
"phpunit/phpunit": "^7.5.0 || ^8.5.23",
@@ -10455,22 +10679,22 @@
],
"support": {
"issues": "https://github.com/localheinz/diff/issues",
- "source": "https://github.com/localheinz/diff/tree/1.2.0"
+ "source": "https://github.com/localheinz/diff/tree/1.3.0"
},
- "time": "2024-12-04T14:16:01+00:00"
+ "time": "2025-08-30T09:44:18+00:00"
},
{
"name": "marc-mabe/php-enum",
- "version": "v4.7.1",
+ "version": "v4.7.2",
"source": {
"type": "git",
"url": "https://github.com/marc-mabe/php-enum.git",
- "reference": "7159809e5cfa041dca28e61f7f7ae58063aae8ed"
+ "reference": "bb426fcdd65c60fb3638ef741e8782508fda7eef"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/marc-mabe/php-enum/zipball/7159809e5cfa041dca28e61f7f7ae58063aae8ed",
- "reference": "7159809e5cfa041dca28e61f7f7ae58063aae8ed",
+ "url": "https://api.github.com/repos/marc-mabe/php-enum/zipball/bb426fcdd65c60fb3638ef741e8782508fda7eef",
+ "reference": "bb426fcdd65c60fb3638ef741e8782508fda7eef",
"shasum": ""
},
"require": {
@@ -10528,22 +10752,22 @@
],
"support": {
"issues": "https://github.com/marc-mabe/php-enum/issues",
- "source": "https://github.com/marc-mabe/php-enum/tree/v4.7.1"
+ "source": "https://github.com/marc-mabe/php-enum/tree/v4.7.2"
},
- "time": "2024-11-28T04:54:44+00:00"
+ "time": "2025-09-14T11:18:39+00:00"
},
{
"name": "myclabs/deep-copy",
- "version": "1.13.1",
+ "version": "1.13.4",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c"
+ "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/1720ddd719e16cf0db4eb1c6eca108031636d46c",
- "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a",
+ "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a",
"shasum": ""
},
"require": {
@@ -10582,7 +10806,7 @@
],
"support": {
"issues": "https://github.com/myclabs/DeepCopy/issues",
- "source": "https://github.com/myclabs/DeepCopy/tree/1.13.1"
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4"
},
"funding": [
{
@@ -10590,7 +10814,7 @@
"type": "tidelift"
}
],
- "time": "2025-04-29T12:36:36+00:00"
+ "time": "2025-08-01T08:46:24+00:00"
},
{
"name": "nelmio/alice",
@@ -10690,16 +10914,16 @@
},
{
"name": "nikic/php-parser",
- "version": "v5.5.0",
+ "version": "v5.6.1",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "ae59794362fe85e051a58ad36b289443f57be7a9"
+ "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ae59794362fe85e051a58ad36b289443f57be7a9",
- "reference": "ae59794362fe85e051a58ad36b289443f57be7a9",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2",
+ "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2",
"shasum": ""
},
"require": {
@@ -10718,7 +10942,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-master": "5.x-dev"
}
},
"autoload": {
@@ -10742,9 +10966,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v5.5.0"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.1"
},
- "time": "2025-05-31T08:24:38+00:00"
+ "time": "2025-08-13T20:13:15+00:00"
},
{
"name": "phar-io/manifest",
@@ -10914,16 +11138,11 @@
},
{
"name": "phpstan/phpstan",
- "version": "2.1.17",
- "source": {
- "type": "git",
- "url": "https://github.com/phpstan/phpstan.git",
- "reference": "89b5ef665716fa2a52ecd2633f21007a6a349053"
- },
+ "version": "2.1.31",
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/89b5ef665716fa2a52ecd2633f21007a6a349053",
- "reference": "89b5ef665716fa2a52ecd2633f21007a6a349053",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ead89849d879fe203ce9292c6ef5e7e76f867b96",
+ "reference": "ead89849d879fe203ce9292c6ef5e7e76f867b96",
"shasum": ""
},
"require": {
@@ -10968,20 +11187,20 @@
"type": "github"
}
],
- "time": "2025-05-21T20:55:28+00:00"
+ "time": "2025-10-10T14:14:11+00:00"
},
{
"name": "phpstan/phpstan-doctrine",
- "version": "2.0.3",
+ "version": "2.0.10",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-doctrine.git",
- "reference": "4497663eb17b9d29211830df5aceaa3a4d256a35"
+ "reference": "5eaf37b87288474051469aee9f937fc9d862f330"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/4497663eb17b9d29211830df5aceaa3a4d256a35",
- "reference": "4497663eb17b9d29211830df5aceaa3a4d256a35",
+ "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/5eaf37b87288474051469aee9f937fc9d862f330",
+ "reference": "5eaf37b87288474051469aee9f937fc9d862f330",
"shasum": ""
},
"require": {
@@ -11015,7 +11234,8 @@
"phpstan/phpstan-strict-rules": "^2.0",
"phpunit/phpunit": "^9.6.20",
"ramsey/uuid": "^4.2",
- "symfony/cache": "^5.4"
+ "symfony/cache": "^5.4",
+ "symfony/uid": "^5.4 || ^6.4 || ^7.3"
},
"type": "phpstan-extension",
"extra": {
@@ -11038,27 +11258,27 @@
"description": "Doctrine extensions for PHPStan",
"support": {
"issues": "https://github.com/phpstan/phpstan-doctrine/issues",
- "source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.3"
+ "source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.10"
},
- "time": "2025-05-05T15:28:52+00:00"
+ "time": "2025-10-06T10:01:02+00:00"
},
{
"name": "phpstan/phpstan-phpunit",
- "version": "2.0.6",
+ "version": "2.0.7",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-phpunit.git",
- "reference": "6b92469f8a7995e626da3aa487099617b8dfa260"
+ "reference": "9a9b161baee88a5f5c58d816943cff354ff233dc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/6b92469f8a7995e626da3aa487099617b8dfa260",
- "reference": "6b92469f8a7995e626da3aa487099617b8dfa260",
+ "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/9a9b161baee88a5f5c58d816943cff354ff233dc",
+ "reference": "9a9b161baee88a5f5c58d816943cff354ff233dc",
"shasum": ""
},
"require": {
"php": "^7.4 || ^8.0",
- "phpstan/phpstan": "^2.0.4"
+ "phpstan/phpstan": "^2.1.18"
},
"conflict": {
"phpunit/phpunit": "<7.0"
@@ -11091,22 +11311,22 @@
"description": "PHPUnit extensions and rules for PHPStan",
"support": {
"issues": "https://github.com/phpstan/phpstan-phpunit/issues",
- "source": "https://github.com/phpstan/phpstan-phpunit/tree/2.0.6"
+ "source": "https://github.com/phpstan/phpstan-phpunit/tree/2.0.7"
},
- "time": "2025-03-26T12:47:06+00:00"
+ "time": "2025-07-13T11:31:46+00:00"
},
{
"name": "phpstan/phpstan-symfony",
- "version": "2.0.6",
+ "version": "2.0.8",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-symfony.git",
- "reference": "5005288e07583546ea00b52de4a9ac412eb869d7"
+ "reference": "8820c22d785c235f69bb48da3d41e688bc8a1796"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/5005288e07583546ea00b52de4a9ac412eb869d7",
- "reference": "5005288e07583546ea00b52de4a9ac412eb869d7",
+ "url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/8820c22d785c235f69bb48da3d41e688bc8a1796",
+ "reference": "8820c22d785c235f69bb48da3d41e688bc8a1796",
"shasum": ""
},
"require": {
@@ -11162,22 +11382,22 @@
"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/2.0.6"
+ "source": "https://github.com/phpstan/phpstan-symfony/tree/2.0.8"
},
- "time": "2025-05-14T07:00:05+00:00"
+ "time": "2025-09-07T06:55:50+00:00"
},
{
"name": "phpunit/php-code-coverage",
- "version": "11.0.10",
+ "version": "11.0.11",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "1a800a7446add2d79cc6b3c01c45381810367d76"
+ "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/1a800a7446add2d79cc6b3c01c45381810367d76",
- "reference": "1a800a7446add2d79cc6b3c01c45381810367d76",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4",
+ "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4",
"shasum": ""
},
"require": {
@@ -11234,7 +11454,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/show"
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.11"
},
"funding": [
{
@@ -11254,7 +11474,7 @@
"type": "tidelift"
}
],
- "time": "2025-06-18T08:56:18+00:00"
+ "time": "2025-08-27T14:37:49+00:00"
},
{
"name": "phpunit/php-file-iterator",
@@ -11503,16 +11723,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "11.5.25",
+ "version": "11.5.42",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "864ab32b3ff52058f917c5b19b3cef821e4a4f1b"
+ "reference": "1c6cb5dfe412af3d0dfd414cfd110e3b9cfdbc3c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/864ab32b3ff52058f917c5b19b3cef821e4a4f1b",
- "reference": "864ab32b3ff52058f917c5b19b3cef821e4a4f1b",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1c6cb5dfe412af3d0dfd414cfd110e3b9cfdbc3c",
+ "reference": "1c6cb5dfe412af3d0dfd414cfd110e3b9cfdbc3c",
"shasum": ""
},
"require": {
@@ -11522,24 +11742,24 @@
"ext-mbstring": "*",
"ext-xml": "*",
"ext-xmlwriter": "*",
- "myclabs/deep-copy": "^1.13.1",
+ "myclabs/deep-copy": "^1.13.4",
"phar-io/manifest": "^2.0.4",
"phar-io/version": "^3.2.1",
"php": ">=8.2",
- "phpunit/php-code-coverage": "^11.0.10",
+ "phpunit/php-code-coverage": "^11.0.11",
"phpunit/php-file-iterator": "^5.1.0",
"phpunit/php-invoker": "^5.0.1",
"phpunit/php-text-template": "^4.0.1",
"phpunit/php-timer": "^7.0.1",
"sebastian/cli-parser": "^3.0.2",
"sebastian/code-unit": "^3.0.3",
- "sebastian/comparator": "^6.3.1",
+ "sebastian/comparator": "^6.3.2",
"sebastian/diff": "^6.0.2",
"sebastian/environment": "^7.2.1",
- "sebastian/exporter": "^6.3.0",
+ "sebastian/exporter": "^6.3.2",
"sebastian/global-state": "^7.0.2",
"sebastian/object-enumerator": "^6.0.1",
- "sebastian/type": "^5.1.2",
+ "sebastian/type": "^5.1.3",
"sebastian/version": "^5.0.2",
"staabm/side-effects-detector": "^1.0.5"
},
@@ -11584,7 +11804,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.25"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.42"
},
"funding": [
{
@@ -11608,7 +11828,7 @@
"type": "tidelift"
}
],
- "time": "2025-06-27T04:36:07+00:00"
+ "time": "2025-09-28T12:09:13+00:00"
},
{
"name": "react/cache",
@@ -11907,23 +12127,23 @@
},
{
"name": "react/promise",
- "version": "v3.2.0",
+ "version": "v3.3.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/promise.git",
- "reference": "8a164643313c71354582dc850b42b33fa12a4b63"
+ "reference": "23444f53a813a3296c1368bb104793ce8d88f04a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63",
- "reference": "8a164643313c71354582dc850b42b33fa12a4b63",
+ "url": "https://api.github.com/repos/reactphp/promise/zipball/23444f53a813a3296c1368bb104793ce8d88f04a",
+ "reference": "23444f53a813a3296c1368bb104793ce8d88f04a",
"shasum": ""
},
"require": {
"php": ">=7.1.0"
},
"require-dev": {
- "phpstan/phpstan": "1.10.39 || 1.4.10",
+ "phpstan/phpstan": "1.12.28 || 1.4.10",
"phpunit/phpunit": "^9.6 || ^7.5"
},
"type": "library",
@@ -11968,7 +12188,7 @@
],
"support": {
"issues": "https://github.com/reactphp/promise/issues",
- "source": "https://github.com/reactphp/promise/tree/v3.2.0"
+ "source": "https://github.com/reactphp/promise/tree/v3.3.0"
},
"funding": [
{
@@ -11976,7 +12196,7 @@
"type": "open_collective"
}
],
- "time": "2024-05-24T10:39:05+00:00"
+ "time": "2025-08-19T18:57:03+00:00"
},
{
"name": "react/socket",
@@ -12138,21 +12358,21 @@
},
{
"name": "rector/rector",
- "version": "2.1.0",
+ "version": "2.2.3",
"source": {
"type": "git",
"url": "https://github.com/rectorphp/rector.git",
- "reference": "d513dea45a94394b660e15c155d1fa27826f8e30"
+ "reference": "d27f976a332a87b5d03553c2e6f04adbe5da034f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/rectorphp/rector/zipball/d513dea45a94394b660e15c155d1fa27826f8e30",
- "reference": "d513dea45a94394b660e15c155d1fa27826f8e30",
+ "url": "https://api.github.com/repos/rectorphp/rector/zipball/d27f976a332a87b5d03553c2e6f04adbe5da034f",
+ "reference": "d27f976a332a87b5d03553c2e6f04adbe5da034f",
"shasum": ""
},
"require": {
"php": "^7.4|^8.0",
- "phpstan/phpstan": "^2.1.17"
+ "phpstan/phpstan": "^2.1.26"
},
"conflict": {
"rector/rector-doctrine": "*",
@@ -12186,7 +12406,7 @@
],
"support": {
"issues": "https://github.com/rectorphp/rector/issues",
- "source": "https://github.com/rectorphp/rector/tree/2.1.0"
+ "source": "https://github.com/rectorphp/rector/tree/2.2.3"
},
"funding": [
{
@@ -12194,7 +12414,7 @@
"type": "github"
}
],
- "time": "2025-06-24T20:26:57+00:00"
+ "time": "2025-10-11T21:50:23+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -12368,16 +12588,16 @@
},
{
"name": "sebastian/comparator",
- "version": "6.3.1",
+ "version": "6.3.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959"
+ "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/24b8fbc2c8e201bb1308e7b05148d6ab393b6959",
- "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/85c77556683e6eee4323e4c5468641ca0237e2e8",
+ "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8",
"shasum": ""
},
"require": {
@@ -12436,15 +12656,27 @@
"support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues",
"security": "https://github.com/sebastianbergmann/comparator/security/policy",
- "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.1"
+ "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.2"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator",
+ "type": "tidelift"
}
],
- "time": "2025-03-07T06:57:01+00:00"
+ "time": "2025-08-10T08:07:46+00:00"
},
{
"name": "sebastian/complexity",
@@ -12649,16 +12881,16 @@
},
{
"name": "sebastian/exporter",
- "version": "6.3.0",
+ "version": "6.3.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3"
+ "reference": "70a298763b40b213ec087c51c739efcaa90bcd74"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3",
- "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74",
+ "reference": "70a298763b40b213ec087c51c739efcaa90bcd74",
"shasum": ""
},
"require": {
@@ -12672,7 +12904,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "6.1-dev"
+ "dev-main": "6.3-dev"
}
},
"autoload": {
@@ -12715,15 +12947,27 @@
"support": {
"issues": "https://github.com/sebastianbergmann/exporter/issues",
"security": "https://github.com/sebastianbergmann/exporter/security/policy",
- "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.0"
+ "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter",
+ "type": "tidelift"
}
],
- "time": "2024-12-05T09:17:50+00:00"
+ "time": "2025-09-24T06:12:51+00:00"
},
{
"name": "sebastian/global-state",
@@ -12961,23 +13205,23 @@
},
{
"name": "sebastian/recursion-context",
- "version": "6.0.2",
+ "version": "6.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "694d156164372abbd149a4b85ccda2e4670c0e16"
+ "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/694d156164372abbd149a4b85ccda2e4670c0e16",
- "reference": "694d156164372abbd149a4b85ccda2e4670c0e16",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc",
+ "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc",
"shasum": ""
},
"require": {
"php": ">=8.2"
},
"require-dev": {
- "phpunit/phpunit": "^11.0"
+ "phpunit/phpunit": "^11.3"
},
"type": "library",
"extra": {
@@ -13013,28 +13257,40 @@
"support": {
"issues": "https://github.com/sebastianbergmann/recursion-context/issues",
"security": "https://github.com/sebastianbergmann/recursion-context/security/policy",
- "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.2"
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context",
+ "type": "tidelift"
}
],
- "time": "2024-07-03T05:10:34+00:00"
+ "time": "2025-08-13T04:42:22+00:00"
},
{
"name": "sebastian/type",
- "version": "5.1.2",
+ "version": "5.1.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/type.git",
- "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e"
+ "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/a8a7e30534b0eb0c77cd9d07e82de1a114389f5e",
- "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449",
+ "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449",
"shasum": ""
},
"require": {
@@ -13070,15 +13326,27 @@
"support": {
"issues": "https://github.com/sebastianbergmann/type/issues",
"security": "https://github.com/sebastianbergmann/type/security/policy",
- "source": "https://github.com/sebastianbergmann/type/tree/5.1.2"
+ "source": "https://github.com/sebastianbergmann/type/tree/5.1.3"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/type",
+ "type": "tidelift"
}
],
- "time": "2025-03-18T13:35:50+00:00"
+ "time": "2025-08-09T06:55:48+00:00"
},
{
"name": "sebastian/version",
@@ -13253,16 +13521,16 @@
},
{
"name": "symfony/debug-bundle",
- "version": "v7.3.0",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug-bundle.git",
- "reference": "781acc90f31f5fe18915f9276890864ebbbe3da8"
+ "reference": "30f922edd53dd85238f1f26dbb68a044109f8f0e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/781acc90f31f5fe18915f9276890864ebbbe3da8",
- "reference": "781acc90f31f5fe18915f9276890864ebbbe3da8",
+ "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/30f922edd53dd85238f1f26dbb68a044109f8f0e",
+ "reference": "30f922edd53dd85238f1f26dbb68a044109f8f0e",
"shasum": ""
},
"require": {
@@ -13304,7 +13572,7 @@
"description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/debug-bundle/tree/v7.3.0"
+ "source": "https://github.com/symfony/debug-bundle/tree/v7.3.4"
},
"funding": [
{
@@ -13315,25 +13583,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-05-04T13:21:13+00:00"
+ "time": "2025-09-10T12:00:31+00:00"
},
{
"name": "symfony/maker-bundle",
- "version": "v1.63.0",
+ "version": "v1.64.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/maker-bundle.git",
- "reference": "69478ab39bc303abfbe3293006a78b09a8512425"
+ "reference": "c86da84640b0586e92aee2b276ee3638ef2f425a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/69478ab39bc303abfbe3293006a78b09a8512425",
- "reference": "69478ab39bc303abfbe3293006a78b09a8512425",
+ "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/c86da84640b0586e92aee2b276ee3638ef2f425a",
+ "reference": "c86da84640b0586e92aee2b276ee3638ef2f425a",
"shasum": ""
},
"require": {
@@ -13361,6 +13633,7 @@
"symfony/http-client": "^6.4|^7.0",
"symfony/phpunit-bridge": "^6.4.1|^7.0",
"symfony/security-core": "^6.4|^7.0",
+ "symfony/security-http": "^6.4|^7.0",
"symfony/yaml": "^6.4|^7.0",
"twig/twig": "^3.0|^4.x-dev"
},
@@ -13396,7 +13669,7 @@
],
"support": {
"issues": "https://github.com/symfony/maker-bundle/issues",
- "source": "https://github.com/symfony/maker-bundle/tree/v1.63.0"
+ "source": "https://github.com/symfony/maker-bundle/tree/v1.64.0"
},
"funding": [
{
@@ -13412,11 +13685,11 @@
"type": "tidelift"
}
],
- "time": "2025-04-26T01:41:37+00:00"
+ "time": "2025-06-23T16:12:08+00:00"
},
{
"name": "symfony/polyfill-php80",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
@@ -13476,7 +13749,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0"
},
"funding": [
{
@@ -13487,6 +13760,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -13496,7 +13773,7 @@
},
{
"name": "symfony/polyfill-php81",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php81.git",
@@ -13552,7 +13829,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php81/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-php81/tree/v1.33.0"
},
"funding": [
{
@@ -13563,6 +13840,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -13572,16 +13853,16 @@
},
{
"name": "symfony/process",
- "version": "v7.3.0",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af"
+ "reference": "f24f8f316367b30810810d4eb30c543d7003ff3b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/40c295f2deb408d5e9d2d32b8ba1dd61e36f05af",
- "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af",
+ "url": "https://api.github.com/repos/symfony/process/zipball/f24f8f316367b30810810d4eb30c543d7003ff3b",
+ "reference": "f24f8f316367b30810810d4eb30c543d7003ff3b",
"shasum": ""
},
"require": {
@@ -13613,7 +13894,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v7.3.0"
+ "source": "https://github.com/symfony/process/tree/v7.3.4"
},
"funding": [
{
@@ -13624,25 +13905,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-04-17T09:11:12+00:00"
+ "time": "2025-09-11T10:12:26+00:00"
},
{
"name": "symfony/web-profiler-bundle",
- "version": "v7.3.1",
+ "version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/web-profiler-bundle.git",
- "reference": "47c994d8f08817122ffb48bf2ea4fb97b7e00d51"
+ "reference": "f305fa4add690bb7d6b14ab61f37c3bd061a3dd7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/47c994d8f08817122ffb48bf2ea4fb97b7e00d51",
- "reference": "47c994d8f08817122ffb48bf2ea4fb97b7e00d51",
+ "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/f305fa4add690bb7d6b14ab61f37c3bd061a3dd7",
+ "reference": "f305fa4add690bb7d6b14ab61f37c3bd061a3dd7",
"shasum": ""
},
"require": {
@@ -13698,7 +13983,7 @@
"dev"
],
"support": {
- "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.3.1"
+ "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.3.4"
},
"funding": [
{
@@ -13709,12 +13994,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-06-05T09:30:41+00:00"
+ "time": "2025-09-25T08:03:55+00:00"
},
{
"name": "theofidry/alice-data-fixtures",
From aa24a1adc6f02385dd23291000ca642e8fb8684b Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Tue, 14 Oct 2025 13:25:11 +0200
Subject: [PATCH 02/31] 5564: Update to phpunit 12
---
composer.json | 4 +-
composer.lock | 534 +++++++++++++++++++++-----------------------------
symfony.lock | 6 -
3 files changed, 222 insertions(+), 322 deletions(-)
diff --git a/composer.json b/composer.json
index bdd1081..8cbf299 100644
--- a/composer.json
+++ b/composer.json
@@ -10,7 +10,7 @@
"api-platform/core": "^4.0",
"composer/semver": "^3.4",
"doctrine/dbal": "^4.0",
- "doctrine/doctrine-bundle": "^3.0",
+ "doctrine/doctrine-bundle": "^2.13",
"doctrine/doctrine-migrations-bundle": "^3.4",
"doctrine/orm": "^3.0",
"easycorp/easyadmin-bundle": "^4.0",
@@ -53,7 +53,7 @@
"phpstan/phpstan-doctrine": "^2.0",
"phpstan/phpstan-phpunit": "^2.0",
"phpstan/phpstan-symfony": "^2.0",
- "phpunit/phpunit": "^11.3",
+ "phpunit/phpunit": "^12.0",
"rector/rector": "^2.0",
"symfony/css-selector": "^7.2",
"symfony/debug-bundle": "^7.2",
diff --git a/composer.lock b/composer.lock
index 32697ce..01d397c 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "d347cd87a3a3926f9844ee4768154429",
+ "content-hash": "2dbe013a397c0321b36acd5b037eac54",
"packages": [
{
"name": "api-platform/core",
@@ -11388,35 +11388,34 @@
},
{
"name": "phpunit/php-code-coverage",
- "version": "11.0.11",
+ "version": "12.4.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4"
+ "reference": "67e8aed88f93d0e6e1cb7effe1a2dfc2fee6022c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4",
- "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/67e8aed88f93d0e6e1cb7effe1a2dfc2fee6022c",
+ "reference": "67e8aed88f93d0e6e1cb7effe1a2dfc2fee6022c",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-libxml": "*",
"ext-xmlwriter": "*",
- "nikic/php-parser": "^5.4.0",
- "php": ">=8.2",
- "phpunit/php-file-iterator": "^5.1.0",
- "phpunit/php-text-template": "^4.0.1",
- "sebastian/code-unit-reverse-lookup": "^4.0.1",
- "sebastian/complexity": "^4.0.1",
- "sebastian/environment": "^7.2.0",
- "sebastian/lines-of-code": "^3.0.1",
- "sebastian/version": "^5.0.2",
+ "nikic/php-parser": "^5.6.1",
+ "php": ">=8.3",
+ "phpunit/php-file-iterator": "^6.0",
+ "phpunit/php-text-template": "^5.0",
+ "sebastian/complexity": "^5.0",
+ "sebastian/environment": "^8.0.3",
+ "sebastian/lines-of-code": "^4.0",
+ "sebastian/version": "^6.0",
"theseer/tokenizer": "^1.2.3"
},
"require-dev": {
- "phpunit/phpunit": "^11.5.2"
+ "phpunit/phpunit": "^12.3.7"
},
"suggest": {
"ext-pcov": "PHP extension that provides line coverage",
@@ -11425,7 +11424,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "11.0.x-dev"
+ "dev-main": "12.4.x-dev"
}
},
"autoload": {
@@ -11454,7 +11453,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/11.0.11"
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.4.0"
},
"funding": [
{
@@ -11474,32 +11473,32 @@
"type": "tidelift"
}
],
- "time": "2025-08-27T14:37:49+00:00"
+ "time": "2025-09-24T13:44:41+00:00"
},
{
"name": "phpunit/php-file-iterator",
- "version": "5.1.0",
+ "version": "6.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6"
+ "reference": "961bc913d42fe24a257bfff826a5068079ac7782"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/118cfaaa8bc5aef3287bf315b6060b1174754af6",
- "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/961bc913d42fe24a257bfff826a5068079ac7782",
+ "reference": "961bc913d42fe24a257bfff826a5068079ac7782",
"shasum": ""
},
"require": {
- "php": ">=8.2"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^11.0"
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "5.0-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
@@ -11527,7 +11526,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
"security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy",
- "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.0"
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/6.0.0"
},
"funding": [
{
@@ -11535,28 +11534,28 @@
"type": "github"
}
],
- "time": "2024-08-27T05:02:59+00:00"
+ "time": "2025-02-07T04:58:37+00:00"
},
{
"name": "phpunit/php-invoker",
- "version": "5.0.1",
+ "version": "6.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-invoker.git",
- "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2"
+ "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2",
- "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/12b54e689b07a25a9b41e57736dfab6ec9ae5406",
+ "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406",
"shasum": ""
},
"require": {
- "php": ">=8.2"
+ "php": ">=8.3"
},
"require-dev": {
"ext-pcntl": "*",
- "phpunit/phpunit": "^11.0"
+ "phpunit/phpunit": "^12.0"
},
"suggest": {
"ext-pcntl": "*"
@@ -11564,7 +11563,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "5.0-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
@@ -11591,7 +11590,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-invoker/issues",
"security": "https://github.com/sebastianbergmann/php-invoker/security/policy",
- "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1"
+ "source": "https://github.com/sebastianbergmann/php-invoker/tree/6.0.0"
},
"funding": [
{
@@ -11599,32 +11598,32 @@
"type": "github"
}
],
- "time": "2024-07-03T05:07:44+00:00"
+ "time": "2025-02-07T04:58:58+00:00"
},
{
"name": "phpunit/php-text-template",
- "version": "4.0.1",
+ "version": "5.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-text-template.git",
- "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964"
+ "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964",
- "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/e1367a453f0eda562eedb4f659e13aa900d66c53",
+ "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53",
"shasum": ""
},
"require": {
- "php": ">=8.2"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^11.0"
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "4.0-dev"
+ "dev-main": "5.0-dev"
}
},
"autoload": {
@@ -11651,7 +11650,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-text-template/issues",
"security": "https://github.com/sebastianbergmann/php-text-template/security/policy",
- "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1"
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/5.0.0"
},
"funding": [
{
@@ -11659,32 +11658,32 @@
"type": "github"
}
],
- "time": "2024-07-03T05:08:43+00:00"
+ "time": "2025-02-07T04:59:16+00:00"
},
{
"name": "phpunit/php-timer",
- "version": "7.0.1",
+ "version": "8.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3"
+ "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3",
- "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc",
+ "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc",
"shasum": ""
},
"require": {
- "php": ">=8.2"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^11.0"
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "7.0-dev"
+ "dev-main": "8.0-dev"
}
},
"autoload": {
@@ -11711,7 +11710,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-timer/issues",
"security": "https://github.com/sebastianbergmann/php-timer/security/policy",
- "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1"
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/8.0.0"
},
"funding": [
{
@@ -11719,20 +11718,20 @@
"type": "github"
}
],
- "time": "2024-07-03T05:09:35+00:00"
+ "time": "2025-02-07T04:59:38+00:00"
},
{
"name": "phpunit/phpunit",
- "version": "11.5.42",
+ "version": "12.4.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "1c6cb5dfe412af3d0dfd414cfd110e3b9cfdbc3c"
+ "reference": "fc5413a2e6d240d2f6d9317bdf7f0a24e73de194"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1c6cb5dfe412af3d0dfd414cfd110e3b9cfdbc3c",
- "reference": "1c6cb5dfe412af3d0dfd414cfd110e3b9cfdbc3c",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fc5413a2e6d240d2f6d9317bdf7f0a24e73de194",
+ "reference": "fc5413a2e6d240d2f6d9317bdf7f0a24e73de194",
"shasum": ""
},
"require": {
@@ -11745,34 +11744,30 @@
"myclabs/deep-copy": "^1.13.4",
"phar-io/manifest": "^2.0.4",
"phar-io/version": "^3.2.1",
- "php": ">=8.2",
- "phpunit/php-code-coverage": "^11.0.11",
- "phpunit/php-file-iterator": "^5.1.0",
- "phpunit/php-invoker": "^5.0.1",
- "phpunit/php-text-template": "^4.0.1",
- "phpunit/php-timer": "^7.0.1",
- "sebastian/cli-parser": "^3.0.2",
- "sebastian/code-unit": "^3.0.3",
- "sebastian/comparator": "^6.3.2",
- "sebastian/diff": "^6.0.2",
- "sebastian/environment": "^7.2.1",
- "sebastian/exporter": "^6.3.2",
- "sebastian/global-state": "^7.0.2",
- "sebastian/object-enumerator": "^6.0.1",
- "sebastian/type": "^5.1.3",
- "sebastian/version": "^5.0.2",
+ "php": ">=8.3",
+ "phpunit/php-code-coverage": "^12.4.0",
+ "phpunit/php-file-iterator": "^6.0.0",
+ "phpunit/php-invoker": "^6.0.0",
+ "phpunit/php-text-template": "^5.0.0",
+ "phpunit/php-timer": "^8.0.0",
+ "sebastian/cli-parser": "^4.2.0",
+ "sebastian/comparator": "^7.1.3",
+ "sebastian/diff": "^7.0.0",
+ "sebastian/environment": "^8.0.3",
+ "sebastian/exporter": "^7.0.2",
+ "sebastian/global-state": "^8.0.2",
+ "sebastian/object-enumerator": "^7.0.0",
+ "sebastian/type": "^6.0.3",
+ "sebastian/version": "^6.0.0",
"staabm/side-effects-detector": "^1.0.5"
},
- "suggest": {
- "ext-soap": "To be able to generate mocks based on WSDL files"
- },
"bin": [
"phpunit"
],
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "11.5-dev"
+ "dev-main": "12.4-dev"
}
},
"autoload": {
@@ -11804,7 +11799,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.42"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/12.4.1"
},
"funding": [
{
@@ -11828,7 +11823,7 @@
"type": "tidelift"
}
],
- "time": "2025-09-28T12:09:13+00:00"
+ "time": "2025-10-09T14:08:29+00:00"
},
{
"name": "react/cache",
@@ -12418,28 +12413,28 @@
},
{
"name": "sebastian/cli-parser",
- "version": "3.0.2",
+ "version": "4.2.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/cli-parser.git",
- "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180"
+ "reference": "90f41072d220e5c40df6e8635f5dafba2d9d4d04"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180",
- "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/90f41072d220e5c40df6e8635f5dafba2d9d4d04",
+ "reference": "90f41072d220e5c40df6e8635f5dafba2d9d4d04",
"shasum": ""
},
"require": {
- "php": ">=8.2"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^11.0"
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "3.0-dev"
+ "dev-main": "4.2-dev"
}
},
"autoload": {
@@ -12463,152 +12458,51 @@
"support": {
"issues": "https://github.com/sebastianbergmann/cli-parser/issues",
"security": "https://github.com/sebastianbergmann/cli-parser/security/policy",
- "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2"
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/4.2.0"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
- }
- ],
- "time": "2024-07-03T04:41:36+00:00"
- },
- {
- "name": "sebastian/code-unit",
- "version": "3.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit.git",
- "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64",
- "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64",
- "shasum": ""
- },
- "require": {
- "php": ">=8.2"
- },
- "require-dev": {
- "phpunit/phpunit": "^11.5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Collection of value objects that represent the PHP code units",
- "homepage": "https://github.com/sebastianbergmann/code-unit",
- "support": {
- "issues": "https://github.com/sebastianbergmann/code-unit/issues",
- "security": "https://github.com/sebastianbergmann/code-unit/security/policy",
- "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3"
- },
- "funding": [
+ },
{
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2025-03-19T07:56:08+00:00"
- },
- {
- "name": "sebastian/code-unit-reverse-lookup",
- "version": "4.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
- "reference": "183a9b2632194febd219bb9246eee421dad8d45e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e",
- "reference": "183a9b2632194febd219bb9246eee421dad8d45e",
- "shasum": ""
- },
- "require": {
- "php": ">=8.2"
- },
- "require-dev": {
- "phpunit/phpunit": "^11.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Looks up which function or method a line of code belongs to",
- "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
- "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy",
- "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1"
- },
- "funding": [
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
{
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/cli-parser",
+ "type": "tidelift"
}
],
- "time": "2024-07-03T04:45:54+00:00"
+ "time": "2025-09-14T09:36:45+00:00"
},
{
"name": "sebastian/comparator",
- "version": "6.3.2",
+ "version": "7.1.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8"
+ "reference": "dc904b4bb3ab070865fa4068cd84f3da8b945148"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/85c77556683e6eee4323e4c5468641ca0237e2e8",
- "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/dc904b4bb3ab070865fa4068cd84f3da8b945148",
+ "reference": "dc904b4bb3ab070865fa4068cd84f3da8b945148",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-mbstring": "*",
- "php": ">=8.2",
- "sebastian/diff": "^6.0",
- "sebastian/exporter": "^6.0"
+ "php": ">=8.3",
+ "sebastian/diff": "^7.0",
+ "sebastian/exporter": "^7.0"
},
"require-dev": {
- "phpunit/phpunit": "^11.4"
+ "phpunit/phpunit": "^12.2"
},
"suggest": {
"ext-bcmath": "For comparing BcMath\\Number objects"
@@ -12616,7 +12510,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "6.3-dev"
+ "dev-main": "7.1-dev"
}
},
"autoload": {
@@ -12656,7 +12550,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues",
"security": "https://github.com/sebastianbergmann/comparator/security/policy",
- "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.2"
+ "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.3"
},
"funding": [
{
@@ -12676,33 +12570,33 @@
"type": "tidelift"
}
],
- "time": "2025-08-10T08:07:46+00:00"
+ "time": "2025-08-20T11:27:00+00:00"
},
{
"name": "sebastian/complexity",
- "version": "4.0.1",
+ "version": "5.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/complexity.git",
- "reference": "ee41d384ab1906c68852636b6de493846e13e5a0"
+ "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0",
- "reference": "ee41d384ab1906c68852636b6de493846e13e5a0",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/bad4316aba5303d0221f43f8cee37eb58d384bbb",
+ "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb",
"shasum": ""
},
"require": {
"nikic/php-parser": "^5.0",
- "php": ">=8.2"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^11.0"
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "4.0-dev"
+ "dev-main": "5.0-dev"
}
},
"autoload": {
@@ -12726,7 +12620,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/complexity/issues",
"security": "https://github.com/sebastianbergmann/complexity/security/policy",
- "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1"
+ "source": "https://github.com/sebastianbergmann/complexity/tree/5.0.0"
},
"funding": [
{
@@ -12734,33 +12628,33 @@
"type": "github"
}
],
- "time": "2024-07-03T04:49:50+00:00"
+ "time": "2025-02-07T04:55:25+00:00"
},
{
"name": "sebastian/diff",
- "version": "6.0.2",
+ "version": "7.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544"
+ "reference": "7ab1ea946c012266ca32390913653d844ecd085f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544",
- "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7ab1ea946c012266ca32390913653d844ecd085f",
+ "reference": "7ab1ea946c012266ca32390913653d844ecd085f",
"shasum": ""
},
"require": {
- "php": ">=8.2"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^11.0",
- "symfony/process": "^4.2 || ^5"
+ "phpunit/phpunit": "^12.0",
+ "symfony/process": "^7.2"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "6.0-dev"
+ "dev-main": "7.0-dev"
}
},
"autoload": {
@@ -12793,7 +12687,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/diff/issues",
"security": "https://github.com/sebastianbergmann/diff/security/policy",
- "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2"
+ "source": "https://github.com/sebastianbergmann/diff/tree/7.0.0"
},
"funding": [
{
@@ -12801,27 +12695,27 @@
"type": "github"
}
],
- "time": "2024-07-03T04:53:05+00:00"
+ "time": "2025-02-07T04:55:46+00:00"
},
{
"name": "sebastian/environment",
- "version": "7.2.1",
+ "version": "8.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4"
+ "reference": "24a711b5c916efc6d6e62aa65aa2ec98fef77f68"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4",
- "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/24a711b5c916efc6d6e62aa65aa2ec98fef77f68",
+ "reference": "24a711b5c916efc6d6e62aa65aa2ec98fef77f68",
"shasum": ""
},
"require": {
- "php": ">=8.2"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^11.3"
+ "phpunit/phpunit": "^12.0"
},
"suggest": {
"ext-posix": "*"
@@ -12829,7 +12723,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "7.2-dev"
+ "dev-main": "8.0-dev"
}
},
"autoload": {
@@ -12857,7 +12751,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/environment/issues",
"security": "https://github.com/sebastianbergmann/environment/security/policy",
- "source": "https://github.com/sebastianbergmann/environment/tree/7.2.1"
+ "source": "https://github.com/sebastianbergmann/environment/tree/8.0.3"
},
"funding": [
{
@@ -12877,34 +12771,34 @@
"type": "tidelift"
}
],
- "time": "2025-05-21T11:55:47+00:00"
+ "time": "2025-08-12T14:11:56+00:00"
},
{
"name": "sebastian/exporter",
- "version": "6.3.2",
+ "version": "7.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "70a298763b40b213ec087c51c739efcaa90bcd74"
+ "reference": "016951ae10980765e4e7aee491eb288c64e505b7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74",
- "reference": "70a298763b40b213ec087c51c739efcaa90bcd74",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/016951ae10980765e4e7aee491eb288c64e505b7",
+ "reference": "016951ae10980765e4e7aee491eb288c64e505b7",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
- "php": ">=8.2",
- "sebastian/recursion-context": "^6.0"
+ "php": ">=8.3",
+ "sebastian/recursion-context": "^7.0"
},
"require-dev": {
- "phpunit/phpunit": "^11.3"
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "6.3-dev"
+ "dev-main": "7.0-dev"
}
},
"autoload": {
@@ -12947,7 +12841,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/exporter/issues",
"security": "https://github.com/sebastianbergmann/exporter/security/policy",
- "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2"
+ "source": "https://github.com/sebastianbergmann/exporter/tree/7.0.2"
},
"funding": [
{
@@ -12967,35 +12861,35 @@
"type": "tidelift"
}
],
- "time": "2025-09-24T06:12:51+00:00"
+ "time": "2025-09-24T06:16:11+00:00"
},
{
"name": "sebastian/global-state",
- "version": "7.0.2",
+ "version": "8.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "3be331570a721f9a4b5917f4209773de17f747d7"
+ "reference": "ef1377171613d09edd25b7816f05be8313f9115d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7",
- "reference": "3be331570a721f9a4b5917f4209773de17f747d7",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/ef1377171613d09edd25b7816f05be8313f9115d",
+ "reference": "ef1377171613d09edd25b7816f05be8313f9115d",
"shasum": ""
},
"require": {
- "php": ">=8.2",
- "sebastian/object-reflector": "^4.0",
- "sebastian/recursion-context": "^6.0"
+ "php": ">=8.3",
+ "sebastian/object-reflector": "^5.0",
+ "sebastian/recursion-context": "^7.0"
},
"require-dev": {
"ext-dom": "*",
- "phpunit/phpunit": "^11.0"
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "7.0-dev"
+ "dev-main": "8.0-dev"
}
},
"autoload": {
@@ -13021,41 +12915,53 @@
"support": {
"issues": "https://github.com/sebastianbergmann/global-state/issues",
"security": "https://github.com/sebastianbergmann/global-state/security/policy",
- "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2"
+ "source": "https://github.com/sebastianbergmann/global-state/tree/8.0.2"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/global-state",
+ "type": "tidelift"
}
],
- "time": "2024-07-03T04:57:36+00:00"
+ "time": "2025-08-29T11:29:25+00:00"
},
{
"name": "sebastian/lines-of-code",
- "version": "3.0.1",
+ "version": "4.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/lines-of-code.git",
- "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a"
+ "reference": "97ffee3bcfb5805568d6af7f0f893678fc076d2f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a",
- "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/97ffee3bcfb5805568d6af7f0f893678fc076d2f",
+ "reference": "97ffee3bcfb5805568d6af7f0f893678fc076d2f",
"shasum": ""
},
"require": {
"nikic/php-parser": "^5.0",
- "php": ">=8.2"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^11.0"
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "3.0-dev"
+ "dev-main": "4.0-dev"
}
},
"autoload": {
@@ -13079,7 +12985,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
"security": "https://github.com/sebastianbergmann/lines-of-code/security/policy",
- "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1"
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/4.0.0"
},
"funding": [
{
@@ -13087,34 +12993,34 @@
"type": "github"
}
],
- "time": "2024-07-03T04:58:38+00:00"
+ "time": "2025-02-07T04:57:28+00:00"
},
{
"name": "sebastian/object-enumerator",
- "version": "6.0.1",
+ "version": "7.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/object-enumerator.git",
- "reference": "f5b498e631a74204185071eb41f33f38d64608aa"
+ "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa",
- "reference": "f5b498e631a74204185071eb41f33f38d64608aa",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1effe8e9b8e068e9ae228e542d5d11b5d16db894",
+ "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894",
"shasum": ""
},
"require": {
- "php": ">=8.2",
- "sebastian/object-reflector": "^4.0",
- "sebastian/recursion-context": "^6.0"
+ "php": ">=8.3",
+ "sebastian/object-reflector": "^5.0",
+ "sebastian/recursion-context": "^7.0"
},
"require-dev": {
- "phpunit/phpunit": "^11.0"
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "6.0-dev"
+ "dev-main": "7.0-dev"
}
},
"autoload": {
@@ -13137,7 +13043,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
"security": "https://github.com/sebastianbergmann/object-enumerator/security/policy",
- "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1"
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/7.0.0"
},
"funding": [
{
@@ -13145,32 +13051,32 @@
"type": "github"
}
],
- "time": "2024-07-03T05:00:13+00:00"
+ "time": "2025-02-07T04:57:48+00:00"
},
{
"name": "sebastian/object-reflector",
- "version": "4.0.1",
+ "version": "5.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/object-reflector.git",
- "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9"
+ "reference": "4bfa827c969c98be1e527abd576533293c634f6a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9",
- "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/4bfa827c969c98be1e527abd576533293c634f6a",
+ "reference": "4bfa827c969c98be1e527abd576533293c634f6a",
"shasum": ""
},
"require": {
- "php": ">=8.2"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^11.0"
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "4.0-dev"
+ "dev-main": "5.0-dev"
}
},
"autoload": {
@@ -13193,7 +13099,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/object-reflector/issues",
"security": "https://github.com/sebastianbergmann/object-reflector/security/policy",
- "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1"
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/5.0.0"
},
"funding": [
{
@@ -13201,32 +13107,32 @@
"type": "github"
}
],
- "time": "2024-07-03T05:01:32+00:00"
+ "time": "2025-02-07T04:58:17+00:00"
},
{
"name": "sebastian/recursion-context",
- "version": "6.0.3",
+ "version": "7.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc"
+ "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc",
- "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/0b01998a7d5b1f122911a66bebcb8d46f0c82d8c",
+ "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c",
"shasum": ""
},
"require": {
- "php": ">=8.2"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^11.3"
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "6.0-dev"
+ "dev-main": "7.0-dev"
}
},
"autoload": {
@@ -13257,7 +13163,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/recursion-context/issues",
"security": "https://github.com/sebastianbergmann/recursion-context/security/policy",
- "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3"
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/7.0.1"
},
"funding": [
{
@@ -13277,32 +13183,32 @@
"type": "tidelift"
}
],
- "time": "2025-08-13T04:42:22+00:00"
+ "time": "2025-08-13T04:44:59+00:00"
},
{
"name": "sebastian/type",
- "version": "5.1.3",
+ "version": "6.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/type.git",
- "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449"
+ "reference": "e549163b9760b8f71f191651d22acf32d56d6d4d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449",
- "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/e549163b9760b8f71f191651d22acf32d56d6d4d",
+ "reference": "e549163b9760b8f71f191651d22acf32d56d6d4d",
"shasum": ""
},
"require": {
- "php": ">=8.2"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^11.3"
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "5.1-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
@@ -13326,7 +13232,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/type/issues",
"security": "https://github.com/sebastianbergmann/type/security/policy",
- "source": "https://github.com/sebastianbergmann/type/tree/5.1.3"
+ "source": "https://github.com/sebastianbergmann/type/tree/6.0.3"
},
"funding": [
{
@@ -13346,29 +13252,29 @@
"type": "tidelift"
}
],
- "time": "2025-08-09T06:55:48+00:00"
+ "time": "2025-08-09T06:57:12+00:00"
},
{
"name": "sebastian/version",
- "version": "5.0.2",
+ "version": "6.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/version.git",
- "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874"
+ "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874",
- "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/3e6ccf7657d4f0a59200564b08cead899313b53c",
+ "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c",
"shasum": ""
},
"require": {
- "php": ">=8.2"
+ "php": ">=8.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "5.0-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
@@ -13392,7 +13298,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/version/issues",
"security": "https://github.com/sebastianbergmann/version/security/policy",
- "source": "https://github.com/sebastianbergmann/version/tree/5.0.2"
+ "source": "https://github.com/sebastianbergmann/version/tree/6.0.0"
},
"funding": [
{
@@ -13400,7 +13306,7 @@
"type": "github"
}
],
- "time": "2024-10-09T05:16:32+00:00"
+ "time": "2025-02-07T05:00:38+00:00"
},
{
"name": "staabm/side-effects-detector",
diff --git a/symfony.lock b/symfony.lock
index 9cdfe30..e419996 100644
--- a/symfony.lock
+++ b/symfony.lock
@@ -277,12 +277,6 @@
"sebastian/cli-parser": {
"version": "1.0.1"
},
- "sebastian/code-unit": {
- "version": "1.0.8"
- },
- "sebastian/code-unit-reverse-lookup": {
- "version": "2.0.3"
- },
"sebastian/comparator": {
"version": "4.0.6"
},
From e83bf18b20d6786d54e64581f770115785a89932 Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Tue, 14 Oct 2025 14:32:07 +0200
Subject: [PATCH 03/31] 5564: Update itk docker template, update github actions
setup
---
.env | 2 +
.github/workflows/apispec.yaml | 115 +++++++++
.github/workflows/changelog.yaml | 29 +++
.github/workflows/composer.yaml | 80 +++++++
.github/workflows/doctrine.yaml | 41 ++++
.github/workflows/github_build_release.yml | 2 +-
.github/workflows/javascript.yaml | 37 +++
.github/workflows/markdown.yaml | 44 ++++
.github/workflows/php.yaml | 60 +++++
.github/workflows/pr.yaml | 263 ++-------------------
.github/workflows/styles.yaml | 37 +++
.github/workflows/twig.yaml | 51 ++++
.github/workflows/yaml.yaml | 41 ++++
.markdownlint.jsonc | 22 ++
.markdownlintignore | 12 +
.php-cs-fixer.dist.php | 33 +--
.prettierrc.yaml | 11 +
.twig-cs-fixer.dist.php | 16 ++
docker-compose.dev.yml | 2 +-
docker-compose.redirect.yml | 2 +-
docker-compose.server.yml | 3 +-
docker-compose.yml | 42 +++-
22 files changed, 673 insertions(+), 272 deletions(-)
create mode 100644 .github/workflows/apispec.yaml
create mode 100644 .github/workflows/changelog.yaml
create mode 100644 .github/workflows/composer.yaml
create mode 100644 .github/workflows/doctrine.yaml
create mode 100644 .github/workflows/javascript.yaml
create mode 100644 .github/workflows/markdown.yaml
create mode 100644 .github/workflows/php.yaml
create mode 100644 .github/workflows/styles.yaml
create mode 100644 .github/workflows/twig.yaml
create mode 100644 .github/workflows/yaml.yaml
create mode 100644 .markdownlint.jsonc
create mode 100644 .markdownlintignore
create mode 100644 .prettierrc.yaml
create mode 100644 .twig-cs-fixer.dist.php
diff --git a/.env b/.env
index 0a1d819..79e2667 100644
--- a/.env
+++ b/.env
@@ -2,6 +2,8 @@ COMPOSE_PROJECT_NAME=itksites
#COMPOSE_DOMAIN=itksites.local.itkdev.dk
COMPOSE_DOMAIN=sites.itkdev.dk
+ITKDEV_TEMPLATE=symfony-6
+
# In all environments, the following files are loaded if they exist,
# the latter taking precedence over the former:
#
diff --git a/.github/workflows/apispec.yaml b/.github/workflows/apispec.yaml
new file mode 100644
index 0000000..8487438
--- /dev/null
+++ b/.github/workflows/apispec.yaml
@@ -0,0 +1,115 @@
+name: API Spec review
+
+env:
+ COMPOSE_USER: root
+
+on:
+ pull_request:
+
+jobs:
+ api-spec-updated:
+ name: Ensure committed API specification is up to date
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
+ with:
+ fetch-depth: 2
+
+ - name: Create docker network
+ run: |
+ docker network create frontend
+
+ - name: Composer install
+ run: |
+ docker compose run --rm phpfpm composer install
+
+ - name: Export API specification
+ run: |
+ docker compose run --rm phpfpm bin/console api:openapi:export --yaml --output=public/api-spec-v1.yaml --no-interaction
+
+ - name: Check for changes in specification
+ id: git-diff-spec
+ continue-on-error: true
+ run: git diff --diff-filter=ACMRT --exit-code public/api-spec-v1.yaml
+
+ - name: Comment PR
+ if: steps.git-diff-spec.outcome == 'failure'
+ env:
+ GH_TOKEN: ${{ github.token }}
+ run: |
+ echo '## 🛑 Exported API specification file not up to date' > var/comment.md
+ echo '' >> var/comment.md
+ echo 'Please run `task api:spec:export` to export the API specification. Then commit and push the changes.' >> var/comment.md
+ gh pr comment ${{ github.event.pull_request.number }} --body-file var/comment.md --create-if-none --edit-last
+
+ - name: Fail job, api spec is not up to date
+ if: steps.git-diff-spec.outcome == 'failure'
+ run: |
+ exit 1
+
+ detect-breaking-changes:
+ name: Detect breaking changes in API specification
+ runs-on: ubuntu-latest
+ needs: [api-spec-updated]
+ steps:
+ - name: Check out BASE rev
+ uses: actions/checkout@v5
+ with:
+ ref: ${{ github.base_ref }}
+ path: base
+
+ - name: Check out HEAD rev
+ uses: actions/checkout@v5
+ with:
+ ref: ${{ github.head_ref }}
+ path: head
+
+ - name: Run OpenAPI Changed (from HEAD rev)
+ id: api-changed
+ continue-on-error: true
+ uses: docker://openapitools/openapi-diff:latest
+ with:
+ args: --fail-on-changed base/public/api-spec-v1.yaml head/public/api-spec-v1.yaml --markdown api-spec-changed.md
+
+ - name: Run OpenAPI Incompatible (from HEAD rev)
+ id: api-incompatible
+ continue-on-error: true
+ uses: docker://openapitools/openapi-diff:latest
+ with:
+ args: --fail-on-incompatible base/public/api-spec-v1.yaml head/public/api-spec-v1.yaml --markdown api-spec-incompatible.md
+
+ - name: Comment PR with no changes
+ if: steps.api-changed.outcome == 'success' && steps.api-incompatible.outcome == 'success'
+ working-directory: head
+ env:
+ GH_TOKEN: ${{ github.token }}
+ run: |
+ gh pr comment ${{ github.event.pull_request.number }} --body "✅ **No changes detected in API specification**" --create-if-none --edit-last
+
+ - name: Comment PR with non-breaking changes
+ if: steps.api-changed.outcome == 'failure' && steps.api-incompatible.outcome == 'success'
+ working-directory: head
+ env:
+ GH_TOKEN: ${{ github.token }}
+ run: |
+ echo "## ⚠️ Non-Breaking changes detected in API specification" > ../comment.md
+ echo "" >> ../comment.md
+ cat ../api-spec-changed.md >> ../comment.md
+ gh pr comment ${{ github.event.pull_request.number }} --body-file ../comment.md --create-if-none --edit-last
+
+ - name: Comment PR with breaking changes
+ if: steps.api-incompatible.outcome == 'failure'
+ working-directory: head
+ env:
+ GH_TOKEN: ${{ github.token }}
+ run: |
+ echo "## 🛑 Breaking changes detected in API specification" > ../comment.md
+ echo "" >> ../comment.md
+ cat ../api-spec-incompatible.md >> ../comment.md
+ gh pr comment ${{ github.event.pull_request.number }} --body-file ../comment.md --create-if-none --edit-last
+
+ - name: Fail if breaking changes detected
+ if: steps.api-incompatible.outcome == 'failure'
+ run: |
+ exit 1
\ No newline at end of file
diff --git a/.github/workflows/changelog.yaml b/.github/workflows/changelog.yaml
new file mode 100644
index 0000000..fead572
--- /dev/null
+++ b/.github/workflows/changelog.yaml
@@ -0,0 +1,29 @@
+# Do not edit this file! Make a pull request on changing
+# github/workflows/changelog.yaml in
+# https://github.com/itk-dev/devops_itkdev-docker if need be.
+
+### ### Changelog
+###
+### Checks that changelog has been updated
+
+name: Changelog
+
+on:
+ pull_request:
+
+jobs:
+ changelog:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
+ with:
+ fetch-depth: 2
+
+ - name: Git fetch
+ run: git fetch
+
+ - name: Check that changelog has been updated.
+ run: git diff --exit-code origin/${{ github.base_ref }} -- CHANGELOG.md && exit 1 || exit 0
diff --git a/.github/workflows/composer.yaml b/.github/workflows/composer.yaml
new file mode 100644
index 0000000..a0e5a94
--- /dev/null
+++ b/.github/workflows/composer.yaml
@@ -0,0 +1,80 @@
+# Do not edit this file! Make a pull request on changing
+# github/workflows/composer.yaml in
+# https://github.com/itk-dev/devops_itkdev-docker if need be.
+
+### ### Composer
+###
+### Validates composer.json and checks that it's normalized.
+###
+### #### Assumptions
+###
+### 1. A docker compose service named `phpfpm` can be run and `composer` can be
+### run inside the `phpfpm` service.
+### 2. [ergebnis/composer-normalize](https://github.com/ergebnis/composer-normalize)
+### is a dev requirement in `composer.json`:
+###
+### ``` shell
+### docker compose run --rm phpfpm composer require --dev ergebnis/composer-normalize
+### ```
+###
+### Normalize `composer.json` by running
+###
+### ``` shell
+### docker compose run --rm phpfpm composer normalize
+### ```
+
+name: Composer
+
+env:
+ COMPOSE_USER: root
+
+on:
+ pull_request:
+ push:
+ branches:
+ - main
+ - develop
+
+jobs:
+ composer-validate:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ steps:
+ - uses: actions/checkout@v5
+
+ - name: Create docker network
+ run: |
+ docker network create frontend
+
+ - run: |
+ docker compose run --rm phpfpm composer validate --strict
+
+ composer-normalized:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ steps:
+ - uses: actions/checkout@v5
+
+ - name: Create docker network
+ run: |
+ docker network create frontend
+
+ - run: |
+ docker compose run --rm phpfpm composer install
+ docker compose run --rm phpfpm composer normalize --dry-run
+
+ composer-audit:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ steps:
+ - uses: actions/checkout@v5
+
+ - name: Create docker network
+ run: |
+ docker network create frontend
+
+ - run: |
+ docker compose run --rm phpfpm composer audit
diff --git a/.github/workflows/doctrine.yaml b/.github/workflows/doctrine.yaml
new file mode 100644
index 0000000..823c375
--- /dev/null
+++ b/.github/workflows/doctrine.yaml
@@ -0,0 +1,41 @@
+name: Doctrine
+
+env:
+ COMPOSE_USER: root
+
+on:
+ pull_request:
+ push:
+ branches:
+ - main
+ - develop
+
+jobs:
+ coding-standards:
+ name: Validate Schema
+ runs-on: ubuntu-latest
+ env:
+ APP_ENV: prod
+
+ steps:
+ - uses: actions/checkout@v5
+
+ - name: Create docker network
+ run: |
+ docker network create frontend
+
+ - name: Run Composer Install
+ run: |
+ docker compose run --rm phpfpm composer install
+
+ - name: Run Doctrine Migrations
+ run: |
+ docker compose run --rm phpfpm bin/console doctrine:migrations:migrate --no-interaction
+
+ - name: Setup messenger "failed" doctrine transport to ensure db schema is updated
+ run: |
+ docker compose run --rm phpfpm bin/console messenger:setup-transports failed
+
+ - name: Validate Doctrine schema
+ run: |
+ docker compose run --rm phpfpm bin/console doctrine:schema:validate
\ No newline at end of file
diff --git a/.github/workflows/github_build_release.yml b/.github/workflows/github_build_release.yml
index 28f350e..3817c60 100644
--- a/.github/workflows/github_build_release.yml
+++ b/.github/workflows/github_build_release.yml
@@ -16,7 +16,7 @@ jobs:
APP_ENV: prod
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v5
- name: Composer install
run: |
diff --git a/.github/workflows/javascript.yaml b/.github/workflows/javascript.yaml
new file mode 100644
index 0000000..44b976e
--- /dev/null
+++ b/.github/workflows/javascript.yaml
@@ -0,0 +1,37 @@
+# Do not edit this file! Make a pull request on changing
+# github/workflows/symfony/javascript.yaml in
+# https://github.com/itk-dev/devops_itkdev-docker if need be.
+
+### ### Symfony JavaScript (and TypeScript)
+###
+### Validates JavaScript files.
+###
+### #### Assumptions
+###
+### 1. A docker compose service named `prettier` for running
+### [Prettier](https://prettier.io/) exists.
+
+name: JavaScript
+
+on:
+ pull_request:
+ push:
+ branches:
+ - main
+ - develop
+
+jobs:
+ javascript-lint:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
+
+ - name: Create docker network
+ run: |
+ docker network create frontend
+
+ - run: |
+ docker compose run --rm prettier 'assets/**/*.js' --check
diff --git a/.github/workflows/markdown.yaml b/.github/workflows/markdown.yaml
new file mode 100644
index 0000000..ae83163
--- /dev/null
+++ b/.github/workflows/markdown.yaml
@@ -0,0 +1,44 @@
+# Do not edit this file! Make a pull request on changing
+# github/workflows/markdown.yaml in
+# https://github.com/itk-dev/devops_itkdev-docker if need be.
+
+### ### Markdown
+###
+### Lints Markdown files (`**/*.md`) in the project.
+###
+### [markdownlint-cli configuration
+### files](https://github.com/igorshubovych/markdownlint-cli?tab=readme-ov-file#configuration),
+### `.markdownlint.jsonc` and `.markdownlintignore`, control what is actually
+### linted and how.
+###
+### #### Assumptions
+###
+### 1. A docker compose service named `markdownlint` for running `markdownlint`
+### (from
+### [markdownlint-cli](https://github.com/igorshubovych/markdownlint-cli))
+### exists.
+
+name: Markdown
+
+on:
+ pull_request:
+ push:
+ branches:
+ - main
+ - develop
+
+jobs:
+ markdown-lint:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
+
+ - name: Create docker network
+ run: |
+ docker network create frontend
+
+ - run: |
+ docker compose run --rm markdownlint markdownlint '**/*.md'
diff --git a/.github/workflows/php.yaml b/.github/workflows/php.yaml
new file mode 100644
index 0000000..b7a68dd
--- /dev/null
+++ b/.github/workflows/php.yaml
@@ -0,0 +1,60 @@
+# Do not edit this file! Make a pull request on changing
+# github/workflows/symfony/php.yaml in
+# https://github.com/itk-dev/devops_itkdev-docker if need be.
+
+### ### Symfony PHP
+###
+### Checks that PHP code adheres to the [Symfony coding
+### standards](https://symfony.com/doc/current/contributing/code/standards.html).
+###
+### #### Assumptions
+###
+### 1. A docker compose service named `phpfpm` can be run and `composer` can be
+### run inside the `phpfpm` service. 2.
+### [friendsofphp/php-cs-fixer](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer)
+### is a dev requirement in `composer.json`:
+###
+### ``` shell
+### docker compose run --rm phpfpm composer require --dev friendsofphp/php-cs-fixer
+### ```
+###
+### Clean up and check code by running
+###
+### ``` shell
+### docker compose run --rm phpfpm vendor/bin/php-cs-fixer fix
+### docker compose run --rm phpfpm vendor/bin/php-cs-fixer fix --dry-run --diff
+### ```
+###
+### > [!NOTE] The template adds `.php-cs-fixer.dist.php` as [a configuration
+### > file for PHP CS
+### > Fixer](https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/master/doc/config.rst)
+### > and this makes it possible to override the actual configuration used in a
+### > project by adding a more important configuration file, `.php-cs-fixer.php`.
+
+name: Symfony PHP
+
+env:
+ COMPOSE_USER: root
+
+on:
+ pull_request:
+ push:
+ branches:
+ - main
+ - develop
+
+jobs:
+ coding-standards:
+ name: PHP - Check Coding Standards
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v5
+
+ - name: Create docker network
+ run: |
+ docker network create frontend
+
+ - run: |
+ docker compose run --rm phpfpm composer install
+ # https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/master/doc/usage.rst#the-check-command
+ docker compose run --rm phpfpm vendor/bin/php-cs-fixer fix --dry-run --diff
diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml
index eca4339..9119f5f 100644
--- a/.github/workflows/pr.yaml
+++ b/.github/workflows/pr.yaml
@@ -1,241 +1,36 @@
-on: pull_request
-name: Review
-jobs:
- test-composer-install:
- runs-on: ubuntu-latest
- strategy:
- fail-fast: false
- matrix:
- php: ["8.4"]
- name: Validate composer (PHP ${{ matrix.php}})
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Setup PHP, with composer and extensions
- uses: shivammathur/setup-php@v2
- with:
- php-version: ${{ matrix.php}}
- extensions: apcu, ctype, iconv, imagick, json, redis, soap, xmlreader, zip
- coverage: none
-
- - name: Get composer cache directory
- id: composer-cache
- run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
-
- - name: Cache dependencies
- uses: actions/cache@v3
- with:
- path: ${{ steps.composer-cache.outputs.dir }}
- key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
- restore-keys: ${{ runner.os }}-composer-
-
- - name: Validate composer files
- run: composer validate composer.json --strict
-
- - name: '[prod] Composer install with exported .env variables'
- run: |
- set -a && source .env && set +a
- APP_ENV=prod composer install --no-dev -o
-
- - name: Reset composer install
- run: rm -rf ./vendor
-
- - name: '[dev] Composer install with exported .env variables'
- run: |
- set -a && source .env && set +a
- APP_ENV=dev composer install
-
- - name: Normalize composer files
- run: composer normalize --dry-run
-
- validate-doctrine-schema:
- runs-on: ubuntu-latest
- env:
- DATABASE_URL: mysql://db:db@127.0.0.1:3306/db?serverVersion=10.11.0-mariadb
- strategy:
- fail-fast: false
- matrix:
- php: ["8.4"]
- name: Validate Doctrine Schema (PHP ${{ matrix.php}})
- services:
- mariadb:
- image: mariadb:10.11
- env:
- MYSQL_USER: db
- MYSQL_PASSWORD: db
- MYSQL_DATABASE: db
- MYSQL_ROOT_PASSWORD: db
- ports:
- - 3306:3306
- options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Setup PHP, with composer and extensions
- uses: shivammathur/setup-php@v2
- with:
- php-version: ${{ matrix.php}}
- extensions: apcu, ctype, iconv, imagick, json, redis, soap, xmlreader, zip
- coverage: none
-
- - name: Get composer cache directory
- id: composer-cache
- run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
-
- - name: Cache dependencies
- uses: actions/cache@v3
- with:
- path: ${{ steps.composer-cache.outputs.dir }}
- key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
- restore-keys: ${{ runner.os }}-composer
-
- - name: 'Composer install with exported .env variables'
- run: |
- set -a && source .env && set +a
- APP_ENV=prod composer install --no-dev -o
-
- - name: Run Doctrine Migrations
- run: APP_ENV=prod php bin/console doctrine:migrations:migrate --no-interaction
-
- - name: Setup messenger "failed" doctrine transport to ensure db schema is updated
- run: APP_ENV=prod php bin/console messenger:setup-transports failed
-
- - name: Validate Doctrine schema
- run: APP_ENV=prod php bin/console doctrine:schema:validate
-
- php-cs-fixer:
- runs-on: ubuntu-latest
- strategy:
- fail-fast: false
- matrix:
- php: ["8.4"]
- name: PHP Coding Standards Fixer (PHP ${{ matrix.php }})
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Setup PHP, with composer and extensions
- uses: shivammathur/setup-php@v2
- with:
- php-version: ${{ matrix.php}}
- extensions: apcu, ctype, iconv, imagick, json, redis, soap, xmlreader, zip
- coverage: none
-
- - name: Get composer cache directory
- id: composer-cache
- run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
-
- - name: Cache dependencies
- uses: actions/cache@v3
- with:
- path: ${{ steps.composer-cache.outputs.dir }}
- key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
- restore-keys: ${{ runner.os }}-composer
+name: PR Review
- - name: Install Dependencies
- run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
+env:
+ COMPOSE_USER: root
- - name: php-cs-fixer
- run: composer coding-standards-check
+on: pull_request
+jobs:
phpunit:
+ name: PHP Unit tests
runs-on: ubuntu-latest
- services:
- mariadb:
- image: mariadb:10.5
- ports:
- - 3306
- env:
- MYSQL_USER: db
- MYSQL_PASSWORD: db
- MYSQL_DATABASE: db_test
- MYSQL_ROOT_PASSWORD: password
- options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
- strategy:
- fail-fast: false
- matrix:
- php: ["8.4"]
- name: PHP Unit tests (PHP ${{ matrix.php }})
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Setup PHP, with composer and extensions
- uses: shivammathur/setup-php@v2
- with:
- php-version: ${{ matrix.php}}
- extensions: apcu, ctype, iconv, imagick, json, redis, soap, xmlreader, zip
- coverage: none
-
- - name: Get composer cache directory
- id: composer-cache
- run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
-
- - name: Cache dependencies
- uses: actions/cache@v3
- with:
- path: ${{ steps.composer-cache.outputs.dir }}
- key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
- restore-keys: ${{ runner.os }}-composer
-
- - name: Install Dependencies
- run: composer install -q --no-ansi --no-interaction --no-scripts --no-suggest --no-progress --prefer-dist
-
- - name: PHP Unit
- env:
- PORT: ${{ job.services.mariadb.ports[3306] }}
- run: DATABASE_URL="mysql://db:db@127.0.0.1:$PORT/db?serverVersion=mariadb-10.5.13" composer run tests
-
- apispec:
- runs-on: ubuntu-latest
- name: API Specification validation
- strategy:
- fail-fast: false
- matrix:
- php: ["8.4"]
steps:
- name: Checkout
- uses: actions/checkout@v4
- with:
- fetch-depth: 2
-
- - name: Setup PHP, with composer and extensions
- uses: shivammathur/setup-php@v2
- with:
- php-version: ${{ matrix.php}}
- extensions: apcu, ctype, iconv, imagick, json, redis, soap, xmlreader, zip
- coverage: none
-
- - name: Get composer cache directory
- id: composer-cache
- run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
-
- - name: Cache dependencies
- uses: actions/cache@v3
- with:
- path: ${{ steps.composer-cache.outputs.dir }}
- key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
- restore-keys: ${{ runner.os }}-composer
+ uses: actions/checkout@v5
- - name: Install Dependencies
- run: composer install -q --no-ansi --no-interaction --no-scripts --no-suggest --no-progress --prefer-dist
-
- - name: Export specifications (yaml)
- run: bin/console api:openapi:export --yaml --output=public/api-spec-v1.yaml --no-interaction
+ - name: Install site
+ run: |
+ docker network create frontend
+ docker compose pull
+ docker compose up --detach
+ docker compose exec --user=root phpfpm composer install
+ docker compose exec phpfpm bin/console doctrine:migrations:migrate --no-interaction
- - name: Check for changes in specifications (yaml)
- run: git diff --diff-filter=ACMRT --exit-code public/api-spec-v1.yaml
+ - name: Run tests
+ run: |
+ docker compose exec phpfpm composer run tests
fixtures:
- runs-on: ubuntu-latest
name: Load fixtures
- strategy:
- fail-fast: false
+ runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v5
with:
fetch-depth: 2
@@ -252,10 +47,8 @@ jobs:
docker compose exec phpfpm composer fixtures
build-assets:
- runs-on: ubuntu-latest
name: Build assets
- strategy:
- fail-fast: false
+ runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
@@ -268,19 +61,3 @@ jobs:
docker compose run --rm node yarn install
docker compose run --rm node yarn build
- changelog:
- runs-on: ubuntu-latest
- name: Changelog should be updated
- strategy:
- fail-fast: false
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- with:
- fetch-depth: 2
-
- - name: Git fetch
- run: git fetch
-
- - name: Check that changelog has been updated.
- run: git diff --exit-code origin/develop -- CHANGELOG.md && exit 1 || exit 0
diff --git a/.github/workflows/styles.yaml b/.github/workflows/styles.yaml
new file mode 100644
index 0000000..4c39d78
--- /dev/null
+++ b/.github/workflows/styles.yaml
@@ -0,0 +1,37 @@
+# Do not edit this file! Make a pull request on changing
+# github/workflows/symfony/styles.yaml in
+# https://github.com/itk-dev/devops_itkdev-docker if need be.
+
+### ### Symfony Styles (CSS and SCSS)
+###
+### Validates styles files.
+###
+### #### Assumptions
+###
+### 1. A docker compose service named `prettier` for running
+### [Prettier](https://prettier.io/) exists.
+
+name: Styles
+
+on:
+ pull_request:
+ push:
+ branches:
+ - main
+ - develop
+
+jobs:
+ styles-lint:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
+
+ - name: Create docker network
+ run: |
+ docker network create frontend
+
+ - run: |
+ docker compose run --rm prettier 'assets/**/*.{css,scss}' --check
diff --git a/.github/workflows/twig.yaml b/.github/workflows/twig.yaml
new file mode 100644
index 0000000..5909841
--- /dev/null
+++ b/.github/workflows/twig.yaml
@@ -0,0 +1,51 @@
+# Do not edit this file! Make a pull request on changing
+# github/workflows/twig.yaml in
+# https://github.com/itk-dev/devops_itkdev-docker if need be.
+
+### ### Twig
+###
+### Validates Twig files
+###
+### #### Assumptions
+###
+### 1. A docker compose service named `phpfpm` can be run and `composer` can be
+### run inside the `phpfpm` service.
+### 2. [vincentlanglet/twig-cs-fixer](https://github.com/VincentLanglet/Twig-CS-Fixer)
+### is a dev requirement in `composer.json`:
+###
+### ``` shell
+### docker compose run --rm phpfpm composer require --dev vincentlanglet/twig-cs-fixer
+### ```
+###
+### 3. A [Configuration
+### file](https://github.com/VincentLanglet/Twig-CS-Fixer/blob/main/docs/configuration.md#configuration-file)
+### in the root of the project defines which files to check and rules to use.
+
+name: Twig
+
+env:
+ COMPOSE_USER: root
+
+on:
+ pull_request:
+ push:
+ branches:
+ - main
+ - develop
+
+jobs:
+ twig-lint:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
+
+ - name: Create docker network
+ run: |
+ docker network create frontend
+
+ - run: |
+ docker compose run --rm phpfpm composer install
+ docker compose run --rm phpfpm vendor/bin/twig-cs-fixer lint
diff --git a/.github/workflows/yaml.yaml b/.github/workflows/yaml.yaml
new file mode 100644
index 0000000..631e525
--- /dev/null
+++ b/.github/workflows/yaml.yaml
@@ -0,0 +1,41 @@
+# Do not edit this file! Make a pull request on changing
+# github/workflows/yaml.yaml in
+# https://github.com/itk-dev/devops_itkdev-docker if need be.
+
+### ### YAML
+###
+### Validates YAML files.
+###
+### #### Assumptions
+###
+### 1. A docker compose service named `prettier` for running
+### [Prettier](https://prettier.io/) exists.
+###
+### #### Symfony YAML
+###
+### Symfony's YAML config files use 4 spaces for indentation and single quotes.
+### Therefore we use a [Prettier configuration
+### file](https://prettier.io/docs/configuration), `.prettierrc.yaml`, to make
+### Prettier format YAML files in the `config/` folder like Symfony expects.
+
+name: YAML
+
+on:
+ pull_request:
+ push:
+ branches:
+ - main
+ - develop
+
+jobs:
+ yaml-lint:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v5
+
+ - name: Create docker network
+ run: |
+ docker network create frontend
+
+ - run: |
+ docker compose run --rm prettier '**/*.{yml,yaml}' --check
diff --git a/.markdownlint.jsonc b/.markdownlint.jsonc
new file mode 100644
index 0000000..0253096
--- /dev/null
+++ b/.markdownlint.jsonc
@@ -0,0 +1,22 @@
+// This file is copied from config/markdown/.markdownlint.jsonc in https://github.com/itk-dev/devops_itkdev-docker.
+// Feel free to edit the file, but consider making a pull request if you find a general issue with the file.
+
+// markdownlint-cli configuration file (cf. https://github.com/igorshubovych/markdownlint-cli?tab=readme-ov-file#configuration)
+{
+ "default": true,
+ // https://github.com/DavidAnson/markdownlint/blob/main/doc/md013.md
+ "line-length": {
+ "line_length": 120,
+ "code_blocks": false,
+ "tables": false
+ },
+ // https://github.com/DavidAnson/markdownlint/blob/main/doc/md024.md
+ "no-duplicate-heading": {
+ "siblings_only": true
+ },
+ // https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/organizing-information-with-collapsed-sections#creating-a-collapsed-section
+ // https://github.com/DavidAnson/markdownlint/blob/main/doc/md033.md
+ "no-inline-html": {
+ "allowed_elements": ["details", "summary"]
+ }
+}
diff --git a/.markdownlintignore b/.markdownlintignore
new file mode 100644
index 0000000..d143ace
--- /dev/null
+++ b/.markdownlintignore
@@ -0,0 +1,12 @@
+# This file is copied from config/markdown/.markdownlintignore in https://github.com/itk-dev/devops_itkdev-docker.
+# Feel free to edit the file, but consider making a pull request if you find a general issue with the file.
+
+# https://github.com/igorshubovych/markdownlint-cli?tab=readme-ov-file#ignoring-files
+vendor/
+node_modules/
+LICENSE.md
+# Drupal
+web/*.md
+web/core/
+web/libraries/
+web/*/contrib/
diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php
index bb6c6e9..c23b927 100644
--- a/.php-cs-fixer.dist.php
+++ b/.php-cs-fixer.dist.php
@@ -1,19 +1,20 @@
in(__DIR__)
- ->exclude('var')
-;
+// https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/master/doc/config.rst
-return (new PhpCsFixer\Config())
- ->setRiskyAllowed(true)
- ->setRules([
- '@Symfony' => true,
- '@Symfony:risky' => false,
- 'phpdoc_align' => false,
- 'no_superfluous_phpdoc_tags' => false,
- 'array_syntax' => ['syntax' => 'short'],
- 'declare_strict_types' => true
- ])
- ->setFinder($finder)
-;
+$finder = new PhpCsFixer\Finder();
+// Check all files …
+$finder->in(__DIR__);
+// … that are not ignored by VCS
+$finder->ignoreVCSIgnored(true);
+
+$config = new PhpCsFixer\Config();
+$config->setFinder($finder);
+
+$config->setRules([
+ '@Symfony' => true,
+]);
+
+return $config;
diff --git a/.prettierrc.yaml b/.prettierrc.yaml
new file mode 100644
index 0000000..12e0898
--- /dev/null
+++ b/.prettierrc.yaml
@@ -0,0 +1,11 @@
+# This file is copied from config/symfony/yaml/.prettierrc.yaml in https://github.com/itk-dev/devops_itkdev-docker.
+# Feel free to edit the file, but consider making a pull request if you find a general issue with the file.
+
+# https://prettier.io/docs/configuration
+overrides:
+ # Symfony config
+ - files:
+ - "config/**/*.{yml,yaml}"
+ options:
+ tabWidth: 4
+ singleQuote: true
diff --git a/.twig-cs-fixer.dist.php b/.twig-cs-fixer.dist.php
new file mode 100644
index 0000000..8242555
--- /dev/null
+++ b/.twig-cs-fixer.dist.php
@@ -0,0 +1,16 @@
+in(__DIR__);
+// … that are not ignored by VCS
+$finder->ignoreVCSIgnored(true);
+
+$config = new TwigCsFixer\Config\Config();
+$config->setFinder($finder);
+
+return $config;
diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml
index 4ac6fe3..ca2f4d1 100644
--- a/docker-compose.dev.yml
+++ b/docker-compose.dev.yml
@@ -1,4 +1,4 @@
-# itk-version: 3.2.1
+# itk-version: 3.2.4
services:
phpfpm:
environment:
diff --git a/docker-compose.redirect.yml b/docker-compose.redirect.yml
index 66f26e9..e9ba157 100644
--- a/docker-compose.redirect.yml
+++ b/docker-compose.redirect.yml
@@ -1,4 +1,4 @@
-# itk-version: 3.2.1
+# itk-version: 3.2.4
services:
nginx:
labels:
diff --git a/docker-compose.server.yml b/docker-compose.server.yml
index f93d840..44c75cd 100644
--- a/docker-compose.server.yml
+++ b/docker-compose.server.yml
@@ -1,4 +1,4 @@
-# itk-version: 3.2.1
+# itk-version: 3.2.4
networks:
frontend:
external: true
@@ -17,7 +17,6 @@ services:
environment:
- PHP_MAX_EXECUTION_TIME=30
- PHP_MEMORY_LIMIT=128M
- - COMPOSER_VERSION=2
volumes:
- .:/app
diff --git a/docker-compose.yml b/docker-compose.yml
index 88d602c..dc2ef97 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,4 +1,4 @@
-# itk-version: 3.2.1
+# itk-version: 3.2.4
networks:
frontend:
external: true
@@ -12,7 +12,13 @@ services:
networks:
- app
ports:
- - '3306'
+ - "3306"
+ healthcheck:
+ test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
+ start_period: 10s
+ interval: 10s
+ timeout: 5s
+ retries: 3
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_USER=db
@@ -22,6 +28,7 @@ services:
phpfpm:
image: itkdev/php8.4-fpm:latest
+ user: ${COMPOSE_USER:-deploy}
networks:
- app
extra_hosts:
@@ -33,10 +40,10 @@ services:
# Depending on the setup, you may have to remove --read-envelope-from from msmtp (cf. https://marlam.de/msmtp/msmtp.html) or use SMTP to send mail
- PHP_SENDMAIL_PATH=/usr/bin/msmtp --host=mail --port=1025 --read-recipients --read-envelope-from
- DOCKER_HOST_DOMAIN=${COMPOSE_DOMAIN}
- - COMPOSER_VERSION=2
- PHP_IDE_CONFIG=serverName=localhost
depends_on:
- - mariadb
+ mariadb:
+ condition: service_healthy
volumes:
- .:/app
@@ -48,7 +55,7 @@ services:
depends_on:
- phpfpm
ports:
- - '8080'
+ - "8080"
volumes:
- ./.docker/templates:/etc/nginx/templates:ro
- .:/app
@@ -61,9 +68,9 @@ services:
- "traefik.enable=true"
- "traefik.docker.network=frontend"
- "traefik.http.routers.${COMPOSE_PROJECT_NAME}.rule=Host(`${COMPOSE_DOMAIN}`)"
-# HTTPS config - uncomment to enable redirect from :80 to :443
-# - "traefik.http.routers.${COMPOSE_PROJECT_NAME}.middlewares=redirect-to-https"
-# - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
+ # HTTPS config - uncomment to enable redirect from :80 to :443
+ # - "traefik.http.routers.${COMPOSE_PROJECT_NAME}.middlewares=redirect-to-https"
+ # - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
mail:
image: axllent/mailpit
@@ -78,3 +85,22 @@ services:
- "traefik.docker.network=frontend"
- "traefik.http.routers.${COMPOSE_PROJECT_NAME}mail.rule=Host(`mail-${COMPOSE_DOMAIN}`)"
- "traefik.http.services.${COMPOSE_PROJECT_NAME}mail.loadbalancer.server.port=8025"
+
+ # Code checks tools
+ markdownlint:
+ image: itkdev/markdownlint
+ profiles:
+ - dev
+ volumes:
+ - ./:/md
+
+ prettier:
+ # Prettier does not (yet, fcf.
+ # https://github.com/prettier/prettier/issues/15206) have an official
+ # docker image.
+ # https://hub.docker.com/r/jauderho/prettier is good candidate (cf. https://hub.docker.com/search?q=prettier&sort=updated_at&order=desc)
+ image: jauderho/prettier
+ profiles:
+ - dev
+ volumes:
+ - ./:/work
From 060d7e46d4b9cf87d519b9c6b5acf1f79aff83a5 Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Tue, 14 Oct 2025 14:45:53 +0200
Subject: [PATCH 04/31] 5564: Update Changelog
---
CHANGELOG.md | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index cf0a0af..d25da1f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
+- [#60](https://github.com/itk-dev/devops_itksites/pull/60) 5564: Dependency updates
+ - Update dependencies
+ - Update phpunit from 11 to 12
+ - Update ITK docker template
+ - Update github actions workflows
+
- [#58](https://github.com/itk-dev/devops_itksites/pull/58)
5002: Added export to everything
@@ -133,6 +139,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [1.0.0] - 2022-09-15
[Unreleased]: https://github.com/itk-dev/devops_itksites/compare/1.6.0...HEAD
+[1.8.10]: https://github.com/itk-dev/devops_itksites/compare/1.8.9...1.8.10
+[1.8.9]: https://github.com/itk-dev/devops_itksites/compare/1.8.8...1.8.9
+[1.8.8]: https://github.com/itk-dev/devops_itksites/compare/1.8.7...1.8.8
+[1.8.7]: https://github.com/itk-dev/devops_itksites/compare/1.8.6...1.8.7
+[1.8.6]: https://github.com/itk-dev/devops_itksites/compare/1.8.5...1.8.6
+[1.8.5]: https://github.com/itk-dev/devops_itksites/compare/1.8.4...1.8.5
+[1.8.4]: https://github.com/itk-dev/devops_itksites/compare/1.8.3...1.8.4
+[1.8.3]: https://github.com/itk-dev/devops_itksites/compare/1.8.2...1.8.3
+[1.8.2]: https://github.com/itk-dev/devops_itksites/compare/1.8.1...1.8.2
+[1.8.1]: https://github.com/itk-dev/devops_itksites/compare/1.8.0...1.8.1
+[1.8.0]: https://github.com/itk-dev/devops_itksites/compare/1.7.1...1.8.0
+[1.7.1]: https://github.com/itk-dev/devops_itksites/compare/1.7.0...1.7.1
+[1.7.0]: https://github.com/itk-dev/devops_itksites/compare/1.6.1...1.7.0
+[1.6.1]: https://github.com/itk-dev/devops_itksites/compare/1.6.0...1.6.1
[1.6.0]: https://github.com/itk-dev/devops_itksites/compare/1.5.0...1.6.0
[1.5.0]: https://github.com/itk-dev/devops_itksites/compare/1.4.1...1.5.0
[1.4.1]: https://github.com/itk-dev/devops_itksites/compare/1.4.0...1.4.1
From a647b3d92bd5a4dace90163f72d5d77cc52b5284 Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Tue, 14 Oct 2025 14:46:09 +0200
Subject: [PATCH 05/31] 5564: Update exported api spec
---
.github/workflows/apispec.yaml | 2 +-
public/api-spec-v1.json | 63 +++-------------------------------
public/api-spec-v1.yaml | 42 ++---------------------
3 files changed, 9 insertions(+), 98 deletions(-)
diff --git a/.github/workflows/apispec.yaml b/.github/workflows/apispec.yaml
index 8487438..31627de 100644
--- a/.github/workflows/apispec.yaml
+++ b/.github/workflows/apispec.yaml
@@ -40,7 +40,7 @@ jobs:
run: |
echo '## 🛑 Exported API specification file not up to date' > var/comment.md
echo '' >> var/comment.md
- echo 'Please run `task api:spec:export` to export the API specification. Then commit and push the changes.' >> var/comment.md
+ echo 'Please run `composer update-api-spec` to export the API specification. Then commit and push the changes.' >> var/comment.md
gh pr comment ${{ github.event.pull_request.number }} --body-file var/comment.md --create-if-none --edit-last
- name: Fail job, api spec is not up to date
diff --git a/public/api-spec-v1.json b/public/api-spec-v1.json
index 1639d4b..34114b0 100644
--- a/public/api-spec-v1.json
+++ b/public/api-spec-v1.json
@@ -21,56 +21,14 @@
"responses": {
"202": {
"description": "DetectionResult resource created",
- "content": {
- "application/json": {
- "schema": {}
- },
- "application/ld+json": {
- "schema": {}
- }
- },
"links": {}
},
"400": {
"description": "Invalid input",
- "content": {
- "application/ld+json": {
- "schema": {
- "$ref": "#/components/schemas/Error.jsonld"
- }
- },
- "application/problem+json": {
- "schema": {
- "$ref": "#/components/schemas/Error"
- }
- },
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/Error"
- }
- }
- },
"links": {}
},
"422": {
"description": "An error occurred",
- "content": {
- "application/ld+json": {
- "schema": {
- "$ref": "#/components/schemas/ConstraintViolation.jsonld-jsonld"
- }
- },
- "application/problem+json": {
- "schema": {
- "$ref": "#/components/schemas/ConstraintViolation-json"
- }
- },
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ConstraintViolation-json"
- }
- }
- },
"links": {}
}
},
@@ -92,21 +50,18 @@
}
},
"required": true
- },
- "deprecated": false
+ }
}
}
},
"components": {
"schemas": {
- "ConstraintViolation-json": {
+ "ConstraintViolation": {
"type": "object",
"description": "Unprocessable entity",
- "deprecated": false,
"properties": {
"status": {
"default": 422,
- "example": 422,
"type": "integer"
},
"violations": {
@@ -149,14 +104,12 @@
}
}
},
- "ConstraintViolation.jsonld-jsonld": {
+ "ConstraintViolation.jsonld": {
"type": "object",
"description": "Unprocessable entity",
- "deprecated": false,
"properties": {
"status": {
"default": 422,
- "example": 422,
"type": "integer"
},
"violations": {
@@ -205,22 +158,17 @@
},
"DetectionResult-write": {
"type": "object",
- "description": "",
- "deprecated": false,
"properties": {
"type": {
"default": "",
- "example": "",
"type": "string"
},
"rootDir": {
"default": "",
- "example": "",
"type": "string"
},
"data": {
"default": "",
- "example": "",
"type": "string"
}
}
@@ -228,7 +176,6 @@
"Error": {
"type": "object",
"description": "A representation of common errors.",
- "deprecated": false,
"properties": {
"title": {
"readOnly": true,
@@ -271,7 +218,6 @@
"Error.jsonld": {
"type": "object",
"description": "A representation of common errors.",
- "deprecated": false,
"properties": {
"title": {
"readOnly": true,
@@ -340,7 +286,8 @@
],
"tags": [
{
- "name": "DetectionResult"
+ "name": "DetectionResult",
+ "description": "Resource 'DetectionResult' operations."
}
],
"webhooks": {}
diff --git a/public/api-spec-v1.yaml b/public/api-spec-v1.yaml
index c8a4009..e90525c 100755
--- a/public/api-spec-v1.yaml
+++ b/public/api-spec-v1.yaml
@@ -16,37 +16,12 @@ paths:
responses:
'202':
description: 'DetectionResult resource created'
- content:
- application/json:
- schema: { }
- application/ld+json:
- schema: { }
links: { }
'400':
description: 'Invalid input'
- content:
- application/ld+json:
- schema:
- $ref: '#/components/schemas/Error.jsonld'
- application/problem+json:
- schema:
- $ref: '#/components/schemas/Error'
- application/json:
- schema:
- $ref: '#/components/schemas/Error'
links: { }
'422':
description: 'An error occurred'
- content:
- application/ld+json:
- schema:
- $ref: '#/components/schemas/ConstraintViolation.jsonld-jsonld'
- application/problem+json:
- schema:
- $ref: '#/components/schemas/ConstraintViolation-json'
- application/json:
- schema:
- $ref: '#/components/schemas/ConstraintViolation-json'
links: { }
summary: 'Creates a DetectionResult resource.'
description: 'Creates a DetectionResult resource.'
@@ -61,17 +36,14 @@ paths:
schema:
$ref: '#/components/schemas/DetectionResult-write'
required: true
- deprecated: false
components:
schemas:
- ConstraintViolation-json:
+ ConstraintViolation:
type: object
description: 'Unprocessable entity'
- deprecated: false
properties:
status:
default: 422
- example: 422
type: integer
violations:
type: array
@@ -100,14 +72,12 @@ components:
type:
- string
- 'null'
- ConstraintViolation.jsonld-jsonld:
+ ConstraintViolation.jsonld:
type: object
description: 'Unprocessable entity'
- deprecated: false
properties:
status:
default: 422
- example: 422
type: integer
violations:
type: array
@@ -141,25 +111,19 @@ components:
- 'null'
DetectionResult-write:
type: object
- description: ''
- deprecated: false
properties:
type:
default: ''
- example: ''
type: string
rootDir:
default: ''
- example: ''
type: string
data:
default: ''
- example: ''
type: string
Error:
type: object
description: 'A representation of common errors.'
- deprecated: false
properties:
title:
readOnly: true
@@ -191,7 +155,6 @@ components:
Error.jsonld:
type: object
description: 'A representation of common errors.'
- deprecated: false
properties:
title:
readOnly: true
@@ -242,4 +205,5 @@ security:
tags:
-
name: DetectionResult
+ description: "Resource 'DetectionResult' operations."
webhooks: { }
From 5efc33ae92c3d87856b470a76f5118ec0dc71e28 Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Tue, 14 Oct 2025 15:06:06 +0200
Subject: [PATCH 06/31] 5564: Lock api-platform to 4.1, bump composer
dependencies
---
composer.json | 106 ++++++++++++++++++++--------------------
composer.lock | 40 +++++++--------
public/api-spec-v1.json | 63 ++++++++++++++++++++++--
public/api-spec-v1.yaml | 42 ++++++++++++++--
4 files changed, 168 insertions(+), 83 deletions(-)
diff --git a/composer.json b/composer.json
index 8cbf299..4807946 100644
--- a/composer.json
+++ b/composer.json
@@ -4,63 +4,63 @@
"license": "MIT",
"type": "project",
"require": {
- "php": ">=8.3",
+ "php": ">=8.4",
"ext-ctype": "*",
"ext-iconv": "*",
- "api-platform/core": "^4.0",
- "composer/semver": "^3.4",
- "doctrine/dbal": "^4.0",
- "doctrine/doctrine-bundle": "^2.13",
- "doctrine/doctrine-migrations-bundle": "^3.4",
- "doctrine/orm": "^3.0",
- "easycorp/easyadmin-bundle": "^4.0",
- "itk-dev/openid-connect-bundle": "^4.0",
- "itk-dev/vault-bundle": "^0.1.0",
- "nelmio/cors-bundle": "^2.2",
- "ocramius/doctrine-batch-utils": "^2.8",
- "phpdocumentor/reflection-docblock": "^5.3",
- "phpstan/phpdoc-parser": "^2.0",
- "symfony/amqp-messenger": "^7.2",
- "symfony/asset": "^7.2",
- "symfony/browser-kit": "^7.2",
- "symfony/console": "^7.2",
- "symfony/doctrine-messenger": "^7.2",
- "symfony/dotenv": "^7.2",
- "symfony/expression-language": "^7.2",
- "symfony/flex": "^2",
- "symfony/framework-bundle": "^7.2",
- "symfony/http-client": "^7.2",
- "symfony/messenger": "^7.2",
- "symfony/monolog-bundle": "^3.0",
- "symfony/property-access": "^7.2",
- "symfony/property-info": "^7.2",
- "symfony/runtime": "^7.2",
- "symfony/security-bundle": "^7.2",
- "symfony/serializer": "^7.2",
- "symfony/twig-bundle": "^7.2",
- "symfony/uid": "^7.2",
- "symfony/validator": "^7.2",
- "symfony/webpack-encore-bundle": "^2.0",
- "symfony/yaml": "^7.2"
+ "api-platform/core": "~4.1.25",
+ "composer/semver": "^3.4.4",
+ "doctrine/dbal": "^4.3.4",
+ "doctrine/doctrine-bundle": "^2.18",
+ "doctrine/doctrine-migrations-bundle": "^3.5",
+ "doctrine/orm": "^3.5.2",
+ "easycorp/easyadmin-bundle": "^4.26.3",
+ "itk-dev/openid-connect-bundle": "^4.0.1",
+ "itk-dev/vault-bundle": "^0.1.2",
+ "nelmio/cors-bundle": "^2.5",
+ "ocramius/doctrine-batch-utils": "^2.11",
+ "phpdocumentor/reflection-docblock": "^5.6.3",
+ "phpstan/phpdoc-parser": "^2.3",
+ "symfony/amqp-messenger": "^7.3.2",
+ "symfony/asset": "^7.3",
+ "symfony/browser-kit": "^7.3.2",
+ "symfony/console": "^7.3.4",
+ "symfony/doctrine-messenger": "^7.3.4",
+ "symfony/dotenv": "^7.3.2",
+ "symfony/expression-language": "^7.3.2",
+ "symfony/flex": "^2.8.2",
+ "symfony/framework-bundle": "^7.3.4",
+ "symfony/http-client": "^7.3.4",
+ "symfony/messenger": "^7.3.3",
+ "symfony/monolog-bundle": "^3.10",
+ "symfony/property-access": "^7.3.3",
+ "symfony/property-info": "^7.3.4",
+ "symfony/runtime": "^7.3.4",
+ "symfony/security-bundle": "^7.3.4",
+ "symfony/serializer": "^7.3.4",
+ "symfony/twig-bundle": "^7.3.4",
+ "symfony/uid": "^7.3.1",
+ "symfony/validator": "^7.3.4",
+ "symfony/webpack-encore-bundle": "^2.3",
+ "symfony/yaml": "^7.3.3"
},
"require-dev": {
- "ergebnis/composer-normalize": "^2.23",
- "friendsofphp/php-cs-fixer": "^3.6",
- "hautelook/alice-bundle": "^2.14",
- "justinrainbow/json-schema": "^6.0",
- "phpstan/extension-installer": "^1.4",
- "phpstan/phpstan": "^2.1",
- "phpstan/phpstan-doctrine": "^2.0",
- "phpstan/phpstan-phpunit": "^2.0",
- "phpstan/phpstan-symfony": "^2.0",
- "phpunit/phpunit": "^12.0",
- "rector/rector": "^2.0",
- "symfony/css-selector": "^7.2",
- "symfony/debug-bundle": "^7.2",
- "symfony/maker-bundle": "^1.37",
- "symfony/stopwatch": "^7.2",
- "symfony/var-dumper": "^7.2",
- "symfony/web-profiler-bundle": "^7.2"
+ "ergebnis/composer-normalize": "^2.48.2",
+ "friendsofphp/php-cs-fixer": "^3.88.2",
+ "hautelook/alice-bundle": "^2.15.1",
+ "justinrainbow/json-schema": "^6.6",
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^2.1.31",
+ "phpstan/phpstan-doctrine": "^2.0.10",
+ "phpstan/phpstan-phpunit": "^2.0.7",
+ "phpstan/phpstan-symfony": "^2.0.8",
+ "phpunit/phpunit": "^12.4.1",
+ "rector/rector": "^2.2.3",
+ "symfony/css-selector": "^7.3",
+ "symfony/debug-bundle": "^7.3.4",
+ "symfony/maker-bundle": "^1.64",
+ "symfony/stopwatch": "^7.3",
+ "symfony/var-dumper": "^7.3.4",
+ "symfony/web-profiler-bundle": "^7.3.4"
},
"replace": {
"symfony/polyfill-ctype": "*",
diff --git a/composer.lock b/composer.lock
index 01d397c..e69c996 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,20 +4,20 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "2dbe013a397c0321b36acd5b037eac54",
+ "content-hash": "6c30a7903f7732d356dec62a8b9b5f24",
"packages": [
{
"name": "api-platform/core",
- "version": "v4.2.2",
+ "version": "v4.1.25",
"source": {
"type": "git",
"url": "https://github.com/api-platform/core.git",
- "reference": "eb6396b0a2db169665d87af8883c69c1e6fd7d4b"
+ "reference": "5c25cd2876740cd25e24efdbbb349359d5c98fc1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/api-platform/core/zipball/eb6396b0a2db169665d87af8883c69c1e6fd7d4b",
- "reference": "eb6396b0a2db169665d87af8883c69c1e6fd7d4b",
+ "url": "https://api.github.com/repos/api-platform/core/zipball/5c25cd2876740cd25e24efdbbb349359d5c98fc1",
+ "reference": "5c25cd2876740cd25e24efdbbb349359d5c98fc1",
"shasum": ""
},
"require": {
@@ -32,7 +32,7 @@
"symfony/property-info": "^6.4 || ^7.1",
"symfony/serializer": "^6.4 || ^7.0",
"symfony/translation-contracts": "^3.3",
- "symfony/type-info": "^7.3 || 7.4.x-dev",
+ "symfony/type-info": "^7.2",
"symfony/validator": "^6.4 || ^7.1",
"symfony/web-link": "^6.4 || ^7.1",
"willdurand/negotiation": "^3.1"
@@ -82,7 +82,6 @@
"doctrine/mongodb-odm-bundle": "^5.0",
"doctrine/orm": "^2.17 || ^3.0",
"elasticsearch/elasticsearch": "^7.17 || ^8.4 || ^9.0",
- "ext-mongodb": "^1.21 || ^2.0",
"friends-of-behat/mink-browserkit-driver": "^1.3.1",
"friends-of-behat/mink-extension": "^2.2",
"friends-of-behat/symfony-extension": "^2.1",
@@ -94,17 +93,17 @@
"illuminate/pagination": "^11.0 || ^12.0",
"illuminate/routing": "^11.0 || ^12.0",
"illuminate/support": "^11.0 || ^12.0",
- "jangregor/phpstan-prophecy": "^2.1.11",
+ "jangregor/phpstan-prophecy": "^1.0",
"justinrainbow/json-schema": "^5.2.11",
"laravel/framework": "^11.0 || ^12.0",
"orchestra/testbench": "^9.1",
"phpspec/prophecy-phpunit": "^2.2",
"phpstan/extension-installer": "^1.1",
"phpstan/phpdoc-parser": "^1.29 || ^2.0",
- "phpstan/phpstan": "^2.1",
- "phpstan/phpstan-doctrine": "^2.0",
- "phpstan/phpstan-phpunit": "^2.0",
- "phpstan/phpstan-symfony": "^2.0",
+ "phpstan/phpstan": "^1.10",
+ "phpstan/phpstan-doctrine": "^1.0",
+ "phpstan/phpstan-phpunit": "^1.0",
+ "phpstan/phpstan-symfony": "^1.0",
"phpunit/phpunit": "11.5.x-dev",
"psr/log": "^1.0 || ^2.0 || ^3.0",
"ramsey/uuid": "^4.7",
@@ -119,21 +118,19 @@
"symfony/console": "^6.4 || ^7.0",
"symfony/css-selector": "^6.4 || ^7.0",
"symfony/dependency-injection": "^6.4 || ^7.0",
- "symfony/doctrine-bridge": "^6.4.2 || ^7.1",
+ "symfony/doctrine-bridge": "^6.4.2 || ^7.0.2",
"symfony/dom-crawler": "^6.4 || ^7.0",
"symfony/error-handler": "^6.4 || ^7.0",
"symfony/event-dispatcher": "^6.4 || ^7.0",
"symfony/expression-language": "^6.4 || ^7.0",
"symfony/finder": "^6.4 || ^7.0",
"symfony/form": "^6.4 || ^7.0",
- "symfony/framework-bundle": "^6.4 || ^7.0 || 7.4.x-dev",
+ "symfony/framework-bundle": "^6.4 || ^7.0",
"symfony/http-client": "^6.4 || ^7.0",
"symfony/intl": "^6.4 || ^7.0",
- "symfony/json-streamer": "7.4.x-dev",
"symfony/maker-bundle": "^1.24",
"symfony/mercure-bundle": "*",
"symfony/messenger": "^6.4 || ^7.0",
- "symfony/object-mapper": "7.4.x-dev",
"symfony/routing": "^6.4 || ^7.0",
"symfony/security-bundle": "^6.4 || ^7.0",
"symfony/security-core": "^6.4 || ^7.0",
@@ -150,6 +147,7 @@
"suggest": {
"doctrine/mongodb-odm-bundle": "To support MongoDB. Only versions 4.0 and later are supported.",
"elasticsearch/elasticsearch": "To support Elasticsearch.",
+ "ocramius/package-versions": "To display the API Platform's version in the debug bar.",
"phpstan/phpdoc-parser": "To support extracting metadata from PHPDoc.",
"psr/cache-implementation": "To use metadata caching.",
"ramsey/uuid": "To support Ramsey's UUID identifiers.",
@@ -157,7 +155,6 @@
"symfony/config": "To load XML configuration files.",
"symfony/expression-language": "To use authorization features.",
"symfony/http-client": "To use the HTTP cache invalidation system.",
- "symfony/json-streamer": "To use the JSON Streamer component.",
"symfony/messenger": "To support messenger integration.",
"symfony/security": "To use authorization features.",
"symfony/twig-bundle": "To use the Swagger UI integration.",
@@ -183,8 +180,7 @@
"branch-alias": {
"dev-3.4": "3.4.x-dev",
"dev-4.1": "4.1.x-dev",
- "dev-4.2": "4.2.x-dev",
- "dev-main": "4.3.x-dev"
+ "dev-main": "4.2.x-dev"
}
},
"autoload": {
@@ -223,9 +219,9 @@
],
"support": {
"issues": "https://github.com/api-platform/core/issues",
- "source": "https://github.com/api-platform/core/tree/v4.2.2"
+ "source": "https://github.com/api-platform/core/tree/v4.1.25"
},
- "time": "2025-10-09T08:35:20+00:00"
+ "time": "2025-09-26T15:30:38+00:00"
},
{
"name": "composer/semver",
@@ -14069,7 +14065,7 @@
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
- "php": ">=8.3",
+ "php": ">=8.4",
"ext-ctype": "*",
"ext-iconv": "*"
},
diff --git a/public/api-spec-v1.json b/public/api-spec-v1.json
index 34114b0..1639d4b 100644
--- a/public/api-spec-v1.json
+++ b/public/api-spec-v1.json
@@ -21,14 +21,56 @@
"responses": {
"202": {
"description": "DetectionResult resource created",
+ "content": {
+ "application/json": {
+ "schema": {}
+ },
+ "application/ld+json": {
+ "schema": {}
+ }
+ },
"links": {}
},
"400": {
"description": "Invalid input",
+ "content": {
+ "application/ld+json": {
+ "schema": {
+ "$ref": "#/components/schemas/Error.jsonld"
+ }
+ },
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/Error"
+ }
+ },
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Error"
+ }
+ }
+ },
"links": {}
},
"422": {
"description": "An error occurred",
+ "content": {
+ "application/ld+json": {
+ "schema": {
+ "$ref": "#/components/schemas/ConstraintViolation.jsonld-jsonld"
+ }
+ },
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/ConstraintViolation-json"
+ }
+ },
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ConstraintViolation-json"
+ }
+ }
+ },
"links": {}
}
},
@@ -50,18 +92,21 @@
}
},
"required": true
- }
+ },
+ "deprecated": false
}
}
},
"components": {
"schemas": {
- "ConstraintViolation": {
+ "ConstraintViolation-json": {
"type": "object",
"description": "Unprocessable entity",
+ "deprecated": false,
"properties": {
"status": {
"default": 422,
+ "example": 422,
"type": "integer"
},
"violations": {
@@ -104,12 +149,14 @@
}
}
},
- "ConstraintViolation.jsonld": {
+ "ConstraintViolation.jsonld-jsonld": {
"type": "object",
"description": "Unprocessable entity",
+ "deprecated": false,
"properties": {
"status": {
"default": 422,
+ "example": 422,
"type": "integer"
},
"violations": {
@@ -158,17 +205,22 @@
},
"DetectionResult-write": {
"type": "object",
+ "description": "",
+ "deprecated": false,
"properties": {
"type": {
"default": "",
+ "example": "",
"type": "string"
},
"rootDir": {
"default": "",
+ "example": "",
"type": "string"
},
"data": {
"default": "",
+ "example": "",
"type": "string"
}
}
@@ -176,6 +228,7 @@
"Error": {
"type": "object",
"description": "A representation of common errors.",
+ "deprecated": false,
"properties": {
"title": {
"readOnly": true,
@@ -218,6 +271,7 @@
"Error.jsonld": {
"type": "object",
"description": "A representation of common errors.",
+ "deprecated": false,
"properties": {
"title": {
"readOnly": true,
@@ -286,8 +340,7 @@
],
"tags": [
{
- "name": "DetectionResult",
- "description": "Resource 'DetectionResult' operations."
+ "name": "DetectionResult"
}
],
"webhooks": {}
diff --git a/public/api-spec-v1.yaml b/public/api-spec-v1.yaml
index e90525c..c8a4009 100755
--- a/public/api-spec-v1.yaml
+++ b/public/api-spec-v1.yaml
@@ -16,12 +16,37 @@ paths:
responses:
'202':
description: 'DetectionResult resource created'
+ content:
+ application/json:
+ schema: { }
+ application/ld+json:
+ schema: { }
links: { }
'400':
description: 'Invalid input'
+ content:
+ application/ld+json:
+ schema:
+ $ref: '#/components/schemas/Error.jsonld'
+ application/problem+json:
+ schema:
+ $ref: '#/components/schemas/Error'
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Error'
links: { }
'422':
description: 'An error occurred'
+ content:
+ application/ld+json:
+ schema:
+ $ref: '#/components/schemas/ConstraintViolation.jsonld-jsonld'
+ application/problem+json:
+ schema:
+ $ref: '#/components/schemas/ConstraintViolation-json'
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ConstraintViolation-json'
links: { }
summary: 'Creates a DetectionResult resource.'
description: 'Creates a DetectionResult resource.'
@@ -36,14 +61,17 @@ paths:
schema:
$ref: '#/components/schemas/DetectionResult-write'
required: true
+ deprecated: false
components:
schemas:
- ConstraintViolation:
+ ConstraintViolation-json:
type: object
description: 'Unprocessable entity'
+ deprecated: false
properties:
status:
default: 422
+ example: 422
type: integer
violations:
type: array
@@ -72,12 +100,14 @@ components:
type:
- string
- 'null'
- ConstraintViolation.jsonld:
+ ConstraintViolation.jsonld-jsonld:
type: object
description: 'Unprocessable entity'
+ deprecated: false
properties:
status:
default: 422
+ example: 422
type: integer
violations:
type: array
@@ -111,19 +141,25 @@ components:
- 'null'
DetectionResult-write:
type: object
+ description: ''
+ deprecated: false
properties:
type:
default: ''
+ example: ''
type: string
rootDir:
default: ''
+ example: ''
type: string
data:
default: ''
+ example: ''
type: string
Error:
type: object
description: 'A representation of common errors.'
+ deprecated: false
properties:
title:
readOnly: true
@@ -155,6 +191,7 @@ components:
Error.jsonld:
type: object
description: 'A representation of common errors.'
+ deprecated: false
properties:
title:
readOnly: true
@@ -205,5 +242,4 @@ security:
tags:
-
name: DetectionResult
- description: "Resource 'DetectionResult' operations."
webhooks: { }
From 338ccabd614271cf8f30b72da18477ca5a05a108 Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Tue, 14 Oct 2025 15:07:37 +0200
Subject: [PATCH 07/31] 5564: PHP code style fixes
---
src/Command/ReplayDetectionResultsCommand.php | 12 ------------
src/Entity/Site.php | 2 --
src/Handler/DetectionResultHandlerInterface.php | 2 +-
src/Handler/DirectoryHandler.php | 9 ---------
src/Handler/DockerImageHandler.php | 11 -----------
src/Handler/DrupalHandler.php | 8 --------
src/Handler/GitHandler.php | 13 -------------
src/Handler/NginxHandler.php | 8 --------
src/Handler/SymfonyHandler.php | 7 -------
src/MessageHandler/DetectionResultHandler.php | 3 ---
src/Repository/DetectionResultRepository.php | 14 ++------------
.../ServiceCertificate/ServiceRepository.php | 2 --
src/Repository/SiteRepository.php | 2 --
src/Security/ApiKeyAuthenticator.php | 9 ---------
src/Security/AzureOIDCAuthenticator.php | 7 -------
src/Service/DomainFactory.php | 4 ----
src/Service/InstallationFactory.php | 2 --
17 files changed, 3 insertions(+), 112 deletions(-)
diff --git a/src/Command/ReplayDetectionResultsCommand.php b/src/Command/ReplayDetectionResultsCommand.php
index 020ecb1..a17c05d 100644
--- a/src/Command/ReplayDetectionResultsCommand.php
+++ b/src/Command/ReplayDetectionResultsCommand.php
@@ -30,9 +30,6 @@ class ReplayDetectionResultsCommand extends Command
{
/**
* ReplayDetectionResultsCommand constructor.
- *
- * @param EntityManagerInterface $entityManager
- * @param MessageBusInterface $messageBus
*/
public function __construct(
private readonly EntityManagerInterface $entityManager,
@@ -68,7 +65,6 @@ protected function configure(): void
;
}
- /** {@inheritDoc} */
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
@@ -147,10 +143,6 @@ protected function execute(InputInterface $input, OutputInterface $output): int
/**
* Dispatch message to the message bus.
*
- * @param Ulid $detectionResultID
- *
- * @return Envelope
- *
* @throws \Throwable
*/
private function dispatch(Ulid $detectionResultID): Envelope
@@ -172,10 +164,6 @@ private function dispatch(Ulid $detectionResultID): Envelope
/**
* Get a Ulid from a string with/without dashes.
- *
- * @param string $ulid
- *
- * @return Ulid
*/
private static function fromString(string $ulid): Ulid
{
diff --git a/src/Entity/Site.php b/src/Entity/Site.php
index e02fb94..08d606a 100644
--- a/src/Entity/Site.php
+++ b/src/Entity/Site.php
@@ -167,8 +167,6 @@ public function getPrimaryDomain(): ?string
* these domains the first is the primary:
* - 360.aarhuskommune.dk
* - 360.aarhuskommune.dk.srvitkphp74.itkdev.dk
- *
- * @return void
*/
private function updatePrimaryDomain(): void
{
diff --git a/src/Handler/DetectionResultHandlerInterface.php b/src/Handler/DetectionResultHandlerInterface.php
index 31d4013..ee241f6 100644
--- a/src/Handler/DetectionResultHandlerInterface.php
+++ b/src/Handler/DetectionResultHandlerInterface.php
@@ -23,7 +23,7 @@ public function handleResult(DetectionResult $detectionResult): void;
* Does the handler support the give detection result type.
*
* @param string $type
- * The result type
+ * The result type
*/
public function supportsType(string $type): bool;
}
diff --git a/src/Handler/DirectoryHandler.php b/src/Handler/DirectoryHandler.php
index 934e3cc..073d42e 100644
--- a/src/Handler/DirectoryHandler.php
+++ b/src/Handler/DirectoryHandler.php
@@ -20,9 +20,6 @@
{
/**
* DirectoryHandler constructor.
- *
- * @param SiteRepository $siteRepository
- * @param InstallationFactory $installationFactory
*/
public function __construct(
private SiteRepository $siteRepository,
@@ -31,9 +28,6 @@ public function __construct(
) {
}
- /**
- * {@inheritDoc}
- */
public function handleResult(DetectionResult $detectionResult): void
{
$server = $detectionResult->getServer();
@@ -63,9 +57,6 @@ public function handleResult(DetectionResult $detectionResult): void
}
}
- /**
- * {@inheritDoc}
- */
public function supportsType(string $type): bool
{
return DetectionType::DIRECTORY === $type;
diff --git a/src/Handler/DockerImageHandler.php b/src/Handler/DockerImageHandler.php
index 195714a..0f4cc27 100644
--- a/src/Handler/DockerImageHandler.php
+++ b/src/Handler/DockerImageHandler.php
@@ -25,13 +25,6 @@
/**
* DirectoryHandler constructor.
- *
- * @param DockerImageTagFactory $dockerImageTagFactory
- * @param ModuleVersionFactory $moduleVersionFactory
- * @param PackageVersionFactory $packageVersionFactory
- * @param AdvisoryFactory $advisoryFactory
- * @param SiteFactory $siteFactory
- * @param DomainFactory $domainFactory
*/
public function __construct(
private DockerImageTagFactory $dockerImageTagFactory,
@@ -43,9 +36,6 @@ public function __construct(
) {
}
- /**
- * {@inheritDoc}
- */
public function handleResult(DetectionResult $detectionResult): void
{
if (empty($detectionResult->getData())) {
@@ -86,7 +76,6 @@ public function handleResult(DetectionResult $detectionResult): void
}
}
- /** {@inheritDoc} */
public function supportsType(string $type): bool
{
return DetectionType::DOCKER === $type;
diff --git a/src/Handler/DrupalHandler.php b/src/Handler/DrupalHandler.php
index b789a48..33f1c14 100644
--- a/src/Handler/DrupalHandler.php
+++ b/src/Handler/DrupalHandler.php
@@ -18,10 +18,6 @@
{
/**
* DirectoryHandler constructor.
- *
- * @param InstallationFactory $installationFactory
- * @param PackageVersionFactory $packageVersionFactory
- * @param ModuleVersionFactory $moduleVersionFactory
*/
public function __construct(
private InstallationFactory $installationFactory,
@@ -30,9 +26,6 @@ public function __construct(
) {
}
- /**
- * {@inheritDoc}
- */
public function handleResult(DetectionResult $detectionResult): void
{
try {
@@ -56,7 +49,6 @@ public function handleResult(DetectionResult $detectionResult): void
}
}
- /** {@inheritDoc} */
public function supportsType(string $type): bool
{
return DetectionType::DRUPAL === $type;
diff --git a/src/Handler/GitHandler.php b/src/Handler/GitHandler.php
index 2915558..da6bdd9 100644
--- a/src/Handler/GitHandler.php
+++ b/src/Handler/GitHandler.php
@@ -16,9 +16,6 @@
{
/**
* DirectoryHandler constructor.
- *
- * @param InstallationFactory $installationFactory
- * @param GitTagFactory $gitCloneFactory
*/
public function __construct(
private InstallationFactory $installationFactory,
@@ -26,9 +23,6 @@ public function __construct(
) {
}
- /**
- * {@inheritDoc}
- */
public function handleResult(DetectionResult $detectionResult): void
{
try {
@@ -47,9 +41,6 @@ public function handleResult(DetectionResult $detectionResult): void
}
}
- /**
- * {@inheritDoc}
- */
public function supportsType(string $type): bool
{
return DetectionType::GIT === $type;
@@ -61,10 +52,6 @@ public function supportsType(string $type): bool
* The git harvester will send an empty result even for
* "fatal: not a git repository (or any parent up to mount point /)"
*
- * @param DetectionResult $result
- *
- * @return object|null
- *
* @throws \JsonException
*/
private function getData(DetectionResult $result): ?object
diff --git a/src/Handler/NginxHandler.php b/src/Handler/NginxHandler.php
index ac3c957..214c19a 100644
--- a/src/Handler/NginxHandler.php
+++ b/src/Handler/NginxHandler.php
@@ -20,10 +20,6 @@
/**
* DirectoryHandler constructor.
- *
- * @param SiteFactory $siteFactory
- * @param DomainFactory $domainFactory
- * @param ValidatorInterface $validator
*/
public function __construct(
private SiteFactory $siteFactory,
@@ -32,9 +28,6 @@ public function __construct(
) {
}
- /**
- * {@inheritDoc}
- */
public function handleResult(DetectionResult $detectionResult): void
{
try {
@@ -63,7 +56,6 @@ public function handleResult(DetectionResult $detectionResult): void
}
}
- /** {@inheritDoc} */
public function supportsType(string $type): bool
{
return DetectionType::NGINX === $type;
diff --git a/src/Handler/SymfonyHandler.php b/src/Handler/SymfonyHandler.php
index b92de3b..e33ccfc 100644
--- a/src/Handler/SymfonyHandler.php
+++ b/src/Handler/SymfonyHandler.php
@@ -17,9 +17,6 @@
{
/**
* DirectoryHandler constructor.
- *
- * @param PackageVersionFactory $packageVersionFactory
- * @param InstallationFactory $installationFactory
*/
public function __construct(
private PackageVersionFactory $packageVersionFactory,
@@ -27,9 +24,6 @@ public function __construct(
) {
}
- /**
- * {@inheritDoc}
- */
public function handleResult(DetectionResult $detectionResult): void
{
try {
@@ -57,7 +51,6 @@ public function handleResult(DetectionResult $detectionResult): void
}
}
- /** {@inheritDoc} */
public function supportsType(string $type): bool
{
return DetectionType::SYMFONY === $type;
diff --git a/src/MessageHandler/DetectionResultHandler.php b/src/MessageHandler/DetectionResultHandler.php
index c162fa7..996e79f 100644
--- a/src/MessageHandler/DetectionResultHandler.php
+++ b/src/MessageHandler/DetectionResultHandler.php
@@ -16,9 +16,6 @@
{
/**
* DetectionResultHandler constructor.
- *
- * @param Security $security
- * @param MessageBusInterface $messageBus
*/
public function __construct(
private Security $security,
diff --git a/src/Repository/DetectionResultRepository.php b/src/Repository/DetectionResultRepository.php
index a4e9b15..beaa237 100644
--- a/src/Repository/DetectionResultRepository.php
+++ b/src/Repository/DetectionResultRepository.php
@@ -26,10 +26,10 @@ public function __construct(ManagerRegistry $registry)
* Remove detection results base on last contact.
*
* @param \dateTime $date
- * The date to delete before
+ * The date to delete before
*
* @return mixed
- * Number of records removed or false
+ * Number of records removed or false
*/
public function remove(\DateTime $date): mixed
{
@@ -43,12 +43,6 @@ public function remove(\DateTime $date): mixed
/**
* Delete all except X similar detection results.
- *
- * @param DetectionResult $detectionResult
- * @param int $keep
- * @param bool $flush
- *
- * @return void
*/
public function cleanup(DetectionResult $detectionResult, int $keep = 5, bool $flush = false): void
{
@@ -78,10 +72,6 @@ public function cleanup(DetectionResult $detectionResult, int $keep = 5, bool $f
/**
* Delete all detection results for a given installation.
- *
- * @param Installation $installation
- *
- * @return void
*/
public function deleteByInstallation(Installation $installation): void
{
diff --git a/src/Repository/ServiceCertificate/ServiceRepository.php b/src/Repository/ServiceCertificate/ServiceRepository.php
index cdff2e7..bfd5391 100644
--- a/src/Repository/ServiceCertificate/ServiceRepository.php
+++ b/src/Repository/ServiceCertificate/ServiceRepository.php
@@ -44,8 +44,6 @@ public function remove(Service $entity, bool $flush = false): void
/**
* Get unique types from existing services.
- *
- * @return array
*/
public function getTypes(): array
{
diff --git a/src/Repository/SiteRepository.php b/src/Repository/SiteRepository.php
index 9a1ec09..5b7f841 100644
--- a/src/Repository/SiteRepository.php
+++ b/src/Repository/SiteRepository.php
@@ -37,8 +37,6 @@ public function findByRootDirAndServer(string $rootDir, Server $server): mixed
/**
* Get unique primary domains from existing sites.
- *
- * @return array
*/
public function getPrimaryDomains(): array
{
diff --git a/src/Security/ApiKeyAuthenticator.php b/src/Security/ApiKeyAuthenticator.php
index d77b9a7..8232e27 100644
--- a/src/Security/ApiKeyAuthenticator.php
+++ b/src/Security/ApiKeyAuthenticator.php
@@ -31,9 +31,6 @@ public function supports(Request $request): ?bool
&& str_starts_with((string) $request->headers->get(self::AUTH_HEADER), self::AUTH_HEADER_PREFIX);
}
- /**
- * {@inheritdoc}
- */
public function authenticate(Request $request): Passport
{
$apiKey = substr((string) $request->headers->get(self::AUTH_HEADER), strlen(self::AUTH_HEADER_PREFIX));
@@ -46,18 +43,12 @@ public function authenticate(Request $request): Passport
return new SelfValidatingPassport(new UserBadge($apiKey));
}
- /**
- * {@inheritdoc}
- */
public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response
{
// on success, let the request continue
return null;
}
- /**
- * {@inheritdoc}
- */
public function onAuthenticationFailure(Request $request, AuthenticationException $exception): ?Response
{
$data = [
diff --git a/src/Security/AzureOIDCAuthenticator.php b/src/Security/AzureOIDCAuthenticator.php
index c118bdc..459757d 100644
--- a/src/Security/AzureOIDCAuthenticator.php
+++ b/src/Security/AzureOIDCAuthenticator.php
@@ -28,10 +28,6 @@ class AzureOIDCAuthenticator extends OpenIdLoginAuthenticator
/**
* AzureOIDCAuthenticator constructor.
- *
- * @param EntityManagerInterface $entityManager
- * @param UrlGeneratorInterface $router
- * @param OpenIdConfigurationProviderManager $providerManager
*/
public function __construct(
private readonly EntityManagerInterface $entityManager,
@@ -41,7 +37,6 @@ public function __construct(
parent::__construct($providerManager);
}
- /** {@inheritDoc} */
public function authenticate(Request $request): Passport
{
try {
@@ -73,7 +68,6 @@ public function authenticate(Request $request): Passport
}
}
- /** {@inheritDoc} */
public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response
{
$targetUrl = $this->getTargetPath($request->getSession(), $firewallName) ?? $this->router->generate('admin');
@@ -81,7 +75,6 @@ public function onAuthenticationSuccess(Request $request, TokenInterface $token,
return new RedirectResponse($targetUrl);
}
- /** {@inheritDoc} */
public function start(Request $request, ?AuthenticationException $authException = null): Response
{
return new RedirectResponse($this->router->generate('itkdev_openid_connect_login', [
diff --git a/src/Service/DomainFactory.php b/src/Service/DomainFactory.php
index 341d2d3..6c06e12 100644
--- a/src/Service/DomainFactory.php
+++ b/src/Service/DomainFactory.php
@@ -23,10 +23,6 @@ public function __construct(
}
/**
- * @param string $addressList
- * @param Site $site
- * @param DetectionResult $detectionResult
- *
* @return Collection
*/
public function getDomains(string $addressList, Site $site, DetectionResult $detectionResult): Collection
diff --git a/src/Service/InstallationFactory.php b/src/Service/InstallationFactory.php
index 51a02a0..b94f57c 100644
--- a/src/Service/InstallationFactory.php
+++ b/src/Service/InstallationFactory.php
@@ -23,8 +23,6 @@ public function __construct(
/**
* Get Installations from detection result.
*
- * @param DetectionResult $detectionResult
- *
* @return Collection
*/
public function getInstallations(DetectionResult $detectionResult): Collection
From 0d207f91300f3d8025bc40a90bdd37946d8a4e5c Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Tue, 14 Oct 2025 15:11:06 +0200
Subject: [PATCH 08/31] 5564: Add vincentlanglet/twig-cs-fixer
---
.gitignore | 4 +++
composer.json | 5 ++--
composer.lock | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++-
symfony.lock | 9 ++++++
4 files changed, 94 insertions(+), 3 deletions(-)
diff --git a/.gitignore b/.gitignore
index 2bf29f0..397042c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,3 +30,7 @@ yarn-error.log
phpstan.neon
###< phpstan/phpstan ###
.phpunit.cache
+
+###> vincentlanglet/twig-cs-fixer ###
+/.twig-cs-fixer.cache
+###< vincentlanglet/twig-cs-fixer ###
diff --git a/composer.json b/composer.json
index 4807946..a6dd8c9 100644
--- a/composer.json
+++ b/composer.json
@@ -60,7 +60,8 @@
"symfony/maker-bundle": "^1.64",
"symfony/stopwatch": "^7.3",
"symfony/var-dumper": "^7.3.4",
- "symfony/web-profiler-bundle": "^7.3.4"
+ "symfony/web-profiler-bundle": "^7.3.4",
+ "vincentlanglet/twig-cs-fixer": "^3.10"
},
"replace": {
"symfony/polyfill-ctype": "*",
@@ -98,7 +99,7 @@
},
"extra": {
"symfony": {
- "allow-contrib": false,
+ "allow-contrib": true,
"require": "7.3.*"
}
},
diff --git a/composer.lock b/composer.lock
index e69c996..454da30 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "6c30a7903f7732d356dec62a8b9b5f24",
+ "content-hash": "1a4ccfa6b381e151c19b48ed226e0b54",
"packages": [
{
"name": "api-platform/core",
@@ -14057,6 +14057,83 @@
}
],
"time": "2024-03-03T12:36:25+00:00"
+ },
+ {
+ "name": "vincentlanglet/twig-cs-fixer",
+ "version": "3.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/VincentLanglet/Twig-CS-Fixer.git",
+ "reference": "ee9b6a31d2c2522b2773ecf31f5d29c2e26311a6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/VincentLanglet/Twig-CS-Fixer/zipball/ee9b6a31d2c2522b2773ecf31f5d29c2e26311a6",
+ "reference": "ee9b6a31d2c2522b2773ecf31f5d29c2e26311a6",
+ "shasum": ""
+ },
+ "require": {
+ "composer-runtime-api": "^2.0.0",
+ "ext-ctype": "*",
+ "ext-json": "*",
+ "php": ">=8.0",
+ "symfony/console": "^5.4.9 || ^6.4 || ^7.0 || ^8.0",
+ "symfony/filesystem": "^5.4 || ^6.4 || ^7.0 || ^8.0",
+ "symfony/finder": "^5.4 || ^6.4 || ^7.0 || ^8.0",
+ "symfony/string": "^5.4.42 || ^6.4.10 || ~7.0.10 || ^7.1.3 || ^8.0",
+ "twig/twig": "^3.4",
+ "webmozart/assert": "^1.10"
+ },
+ "require-dev": {
+ "composer/semver": "^3.2.0",
+ "dereuromark/composer-prefer-lowest": "^0.1.10",
+ "ergebnis/composer-normalize": "^2.29",
+ "friendsofphp/php-cs-fixer": "^3.13.0",
+ "infection/infection": "^0.26.16 || ^0.29.14",
+ "phpstan/phpstan": "^2.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpstan/phpstan-strict-rules": "^2.0",
+ "phpstan/phpstan-symfony": "^2.0",
+ "phpstan/phpstan-webmozart-assert": "^2.0",
+ "phpunit/phpunit": "^9.5.26 || ^11.5.18 || ^12.1.3",
+ "rector/rector": "^2.0.0",
+ "shipmonk/composer-dependency-analyser": "^1.6",
+ "symfony/process": "^5.4 || ^6.4 || ^7.0 || ^8.0",
+ "symfony/twig-bridge": "^5.4 || ^6.4 || ^7.0 || ^8.0",
+ "symfony/ux-twig-component": "^2.2.0",
+ "twig/cache-extra": "^3.2"
+ },
+ "bin": [
+ "bin/twig-cs-fixer"
+ ],
+ "type": "coding-standard",
+ "autoload": {
+ "psr-4": {
+ "TwigCsFixer\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Vincent Langlet"
+ }
+ ],
+ "description": "A tool to automatically fix Twig code style",
+ "homepage": "https://github.com/VincentLanglet/Twig-CS-Fixer",
+ "support": {
+ "issues": "https://github.com/VincentLanglet/Twig-CS-Fixer/issues",
+ "source": "https://github.com/VincentLanglet/Twig-CS-Fixer/tree/3.10.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/VincentLanglet",
+ "type": "github"
+ }
+ ],
+ "time": "2025-09-15T11:28:55+00:00"
}
],
"aliases": [],
diff --git a/symfony.lock b/symfony.lock
index e419996..cf36f78 100644
--- a/symfony.lock
+++ b/symfony.lock
@@ -678,6 +678,15 @@
"twig/twig": {
"version": "v3.3.8"
},
+ "vincentlanglet/twig-cs-fixer": {
+ "version": "3.10",
+ "recipe": {
+ "repo": "github.com/symfony/recipes-contrib",
+ "branch": "main",
+ "version": "3.0",
+ "ref": "d42582ae1bce86fd43491d6264c738b0867f8ffe"
+ }
+ },
"webmozart/assert": {
"version": "1.10.0"
},
From 16211acd73e561d4eaa264b05d84e9b352df547c Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Tue, 14 Oct 2025 15:11:42 +0200
Subject: [PATCH 09/31] 5564: Lint twig files
---
templates/EasyAdminBundle/Fields/code.html.twig | 4 ++--
templates/EasyAdminBundle/Fields/config_file_path.html.twig | 4 ++--
templates/EasyAdminBundle/Fields/db_version.html.twig | 4 ++--
templates/EasyAdminBundle/Fields/domain.html.twig | 2 +-
templates/EasyAdminBundle/Fields/eol.html.twig | 2 +-
templates/EasyAdminBundle/Fields/hosting_provider.html.twig | 6 +++---
templates/EasyAdminBundle/Fields/root_dir.html.twig | 4 ++--
templates/EasyAdminBundle/Fields/server_type.html.twig | 2 +-
templates/EasyAdminBundle/Fields/site.html.twig | 4 ++--
templates/EasyAdminBundle/Fields/sources.html.twig | 2 +-
templates/EasyAdminBundle/Fields/ssh_link.html.twig | 2 +-
templates/EasyAdminBundle/Fields/text_mono.html.twig | 4 ++--
templates/admin/domain.html.twig | 4 ++--
.../EasyAdminBundle/crud/field/association.html.twig | 4 ++--
14 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/templates/EasyAdminBundle/Fields/code.html.twig b/templates/EasyAdminBundle/Fields/code.html.twig
index c4fb385..28a08e7 100644
--- a/templates/EasyAdminBundle/Fields/code.html.twig
+++ b/templates/EasyAdminBundle/Fields/code.html.twig
@@ -2,7 +2,7 @@
{# @var field \EasyCorp\Bundle\EasyAdminBundle\Dto\FieldDto #}
{# @var entity \EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto #}
{% if field.formattedValue is null %}
- {{ 'label.null'|trans(domain = 'EasyAdminBundle') }}
+ {{ 'label.null'|trans(domain: 'EasyAdminBundle') }}
{% else %}
{{ field.formattedValue }}
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/templates/EasyAdminBundle/Fields/config_file_path.html.twig b/templates/EasyAdminBundle/Fields/config_file_path.html.twig
index 2639f2c..da9307a 100644
--- a/templates/EasyAdminBundle/Fields/config_file_path.html.twig
+++ b/templates/EasyAdminBundle/Fields/config_file_path.html.twig
@@ -4,5 +4,5 @@
{% if ea.crud.currentAction == 'detail' %}
{{ field.formattedValue }}
{% else %}
- {{ field.formattedValue | replace({'/etc/nginx/sites-enabled/': './'}) }}
-{% endif %}
\ No newline at end of file
+ {{ field.formattedValue|replace({'/etc/nginx/sites-enabled/': './'}) }}
+{% endif %}
diff --git a/templates/EasyAdminBundle/Fields/db_version.html.twig b/templates/EasyAdminBundle/Fields/db_version.html.twig
index 567ae8a..c192aeb 100644
--- a/templates/EasyAdminBundle/Fields/db_version.html.twig
+++ b/templates/EasyAdminBundle/Fields/db_version.html.twig
@@ -2,7 +2,7 @@
{# @var field \EasyCorp\Bundle\EasyAdminBundle\Dto\FieldDto #}
{# @var entity \EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto #}
{% if field.formattedValue is null %}
- {{ 'label.null'|trans(domain = 'EasyAdminBundle') }}
+ {{ 'label.null'|trans(domain: 'EasyAdminBundle') }}
{% else %}
{{ field.formattedValue }}
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/templates/EasyAdminBundle/Fields/domain.html.twig b/templates/EasyAdminBundle/Fields/domain.html.twig
index eba0e51..3dc99f1 100644
--- a/templates/EasyAdminBundle/Fields/domain.html.twig
+++ b/templates/EasyAdminBundle/Fields/domain.html.twig
@@ -9,4 +9,4 @@
{{ field.value }}
{% else %}
{{ field.formattedValue }}
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/templates/EasyAdminBundle/Fields/eol.html.twig b/templates/EasyAdminBundle/Fields/eol.html.twig
index 6e1f433..9acd5bd 100644
--- a/templates/EasyAdminBundle/Fields/eol.html.twig
+++ b/templates/EasyAdminBundle/Fields/eol.html.twig
@@ -2,7 +2,7 @@
{# @var field \EasyCorp\Bundle\EasyAdminBundle\Dto\FieldDto #}
{# @var entity \EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto #}
-{% set slicedDate = field.formattedValue | slice(0, 7) %}
+{% set slicedDate = field.formattedValue|slice(0, 7) %}
{% if ea.crud.currentAction == 'detail' %}
{% set outputValue = field.formattedValue %}
{% else %}
diff --git a/templates/EasyAdminBundle/Fields/hosting_provider.html.twig b/templates/EasyAdminBundle/Fields/hosting_provider.html.twig
index ad1e247..cc1d7ab 100644
--- a/templates/EasyAdminBundle/Fields/hosting_provider.html.twig
+++ b/templates/EasyAdminBundle/Fields/hosting_provider.html.twig
@@ -3,11 +3,11 @@
{# @var entity \EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto #}
{% if field.formattedValue is empty %}
?
-{% elseif field.formattedValue == constant('App\\Types\\HostingProviderType::AZURE') %}
+{% elseif field.formattedValue == constant('App\\Types\\HostingProviderType::AZURE') %}
{{ field.formattedValue }}
-{% elseif field.formattedValue == constant('App\\Types\\HostingProviderType::IT_RELATION') %}
+{% elseif field.formattedValue == constant('App\\Types\\HostingProviderType::IT_RELATION') %}
{{ field.formattedValue }}
-{% elseif field.formattedValue == constant('App\\Types\\HostingProviderType::DBC') %}
+{% elseif field.formattedValue == constant('App\\Types\\HostingProviderType::DBC') %}
{{ field.formattedValue }}
{% else %}
{{ field.formattedValue }}
diff --git a/templates/EasyAdminBundle/Fields/root_dir.html.twig b/templates/EasyAdminBundle/Fields/root_dir.html.twig
index 93d3677..c31765c 100644
--- a/templates/EasyAdminBundle/Fields/root_dir.html.twig
+++ b/templates/EasyAdminBundle/Fields/root_dir.html.twig
@@ -7,9 +7,9 @@
{% if field.formattedValue starts with '/data/www/' %}
- {{ field.formattedValue | replace({'/data/www/': './'}) }}
+ {{ field.formattedValue|replace({'/data/www/': './'}) }}
{% elseif field.formattedValue starts with '/home/www/' %}
- {{ field.formattedValue | replace({'/home/www/': './'}) }}
+ {{ field.formattedValue|replace({'/home/www/': './'}) }}
{% else %}
{{ field.formattedValue }}
{% endif %}
diff --git a/templates/EasyAdminBundle/Fields/server_type.html.twig b/templates/EasyAdminBundle/Fields/server_type.html.twig
index a6eb2ee..52369c6 100644
--- a/templates/EasyAdminBundle/Fields/server_type.html.twig
+++ b/templates/EasyAdminBundle/Fields/server_type.html.twig
@@ -11,4 +11,4 @@
{{ field.formattedValue }}
{% else %}
{{ field.formattedValue }}
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/templates/EasyAdminBundle/Fields/site.html.twig b/templates/EasyAdminBundle/Fields/site.html.twig
index 2c2fc21..6bc1a58 100644
--- a/templates/EasyAdminBundle/Fields/site.html.twig
+++ b/templates/EasyAdminBundle/Fields/site.html.twig
@@ -1,9 +1,9 @@
{# @var ea \EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext #}
{# @var field \EasyCorp\Bundle\EasyAdminBundle\Dto\FieldDto #}
{# @var entity \EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto #}
-{% if field.formattedValue == constant('App\\Types\\SiteType::NGINX') %}
+{% if field.formattedValue == constant('App\\Types\\SiteType::NGINX') %}
{{ field.formattedValue }}
-{% elseif field.formattedValue == constant('App\\Types\\SiteType::DOCKER') %}
+{% elseif field.formattedValue == constant('App\\Types\\SiteType::DOCKER') %}
{{ field.formattedValue }}
{% else %}
{{ field.formattedValue }}
diff --git a/templates/EasyAdminBundle/Fields/sources.html.twig b/templates/EasyAdminBundle/Fields/sources.html.twig
index 5ae9bec..a4ba5ad 100644
--- a/templates/EasyAdminBundle/Fields/sources.html.twig
+++ b/templates/EasyAdminBundle/Fields/sources.html.twig
@@ -4,7 +4,7 @@
{% if ea.crud.currentAction == 'detail' %}
{% for item in field.value %}
-{# - {{ item }}
#}
+{# - {{ item }}
#}
- {{ item }}
{% endfor %}
diff --git a/templates/EasyAdminBundle/Fields/ssh_link.html.twig b/templates/EasyAdminBundle/Fields/ssh_link.html.twig
index 0aaf499..11e692b 100644
--- a/templates/EasyAdminBundle/Fields/ssh_link.html.twig
+++ b/templates/EasyAdminBundle/Fields/ssh_link.html.twig
@@ -10,4 +10,4 @@
-
\ No newline at end of file
+
diff --git a/templates/EasyAdminBundle/Fields/text_mono.html.twig b/templates/EasyAdminBundle/Fields/text_mono.html.twig
index 20ddb24..dab826d 100644
--- a/templates/EasyAdminBundle/Fields/text_mono.html.twig
+++ b/templates/EasyAdminBundle/Fields/text_mono.html.twig
@@ -2,7 +2,7 @@
{# @var field \EasyCorp\Bundle\EasyAdminBundle\Dto\FieldDto #}
{# @var entity \EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto #}
{% if field.formattedValue is null %}
- {{ 'label.null'|trans(domain = 'EasyAdminBundle') }}
+ {{ 'label.null'|trans(domain: 'EasyAdminBundle') }}
{% else %}
{{ field.formattedValue }}
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/templates/admin/domain.html.twig b/templates/admin/domain.html.twig
index 1e63970..e9cc5a4 100644
--- a/templates/admin/domain.html.twig
+++ b/templates/admin/domain.html.twig
@@ -6,7 +6,7 @@
.set('filters', {
primaryDomain: {
comparison: '=',
- value: field.value
- }
+ value: field.value,
+ },
}) %}
{{ field.value }}
diff --git a/templates/bundles/EasyAdminBundle/crud/field/association.html.twig b/templates/bundles/EasyAdminBundle/crud/field/association.html.twig
index 4ec629d..8bd21aa 100644
--- a/templates/bundles/EasyAdminBundle/crud/field/association.html.twig
+++ b/templates/bundles/EasyAdminBundle/crud/field/association.html.twig
@@ -4,8 +4,8 @@
{% if 'toMany' == field.customOptions.get('associationType') %}
{% if field.value.count == 0 %}
None
- {% elseif not has_display(field.value[0]) and ea.crud.currentAction != 'detail'%}
- {{ field.value | length }}
+ {% elseif not has_display(field.value[0]) and ea.crud.currentAction != 'detail' %}
+ {{ field.value|length }}
{% else %}
{% for value in field.value %}
{% if ea.crud.currentAction == 'detail' %}
From ac2a23af70541863a90ebff737651f36b28ff675 Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Tue, 14 Oct 2025 16:01:20 +0200
Subject: [PATCH 10/31] 5564: Use assets mapper for CSS
---
.env | 3 +-
.gitignore | 5 ++
assets/app.js | 9 ++
public/css/admin.css => assets/styles/app.css | 0
composer.json | 10 ++-
composer.lock | 90 ++++++++++++++++++-
config/packages/asset_mapper.yaml | 11 +++
importmap.php | 19 ++++
src/Controller/Admin/DashboardController.php | 4 +-
symfony.lock | 15 ++++
templates/base.html.twig | 1 +
11 files changed, 157 insertions(+), 10 deletions(-)
create mode 100644 assets/app.js
rename public/css/admin.css => assets/styles/app.css (100%)
create mode 100644 config/packages/asset_mapper.yaml
create mode 100644 importmap.php
diff --git a/.env b/.env
index 79e2667..a2f0c5a 100644
--- a/.env
+++ b/.env
@@ -1,6 +1,5 @@
COMPOSE_PROJECT_NAME=itksites
-#COMPOSE_DOMAIN=itksites.local.itkdev.dk
-COMPOSE_DOMAIN=sites.itkdev.dk
+COMPOSE_DOMAIN=itksites.local.itkdev.dk
ITKDEV_TEMPLATE=symfony-6
diff --git a/.gitignore b/.gitignore
index 397042c..80f8c4d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -34,3 +34,8 @@ phpstan.neon
###> vincentlanglet/twig-cs-fixer ###
/.twig-cs-fixer.cache
###< vincentlanglet/twig-cs-fixer ###
+
+###> symfony/asset-mapper ###
+/public/assets/
+/assets/vendor/
+###< symfony/asset-mapper ###
diff --git a/assets/app.js b/assets/app.js
new file mode 100644
index 0000000..6174cc6
--- /dev/null
+++ b/assets/app.js
@@ -0,0 +1,9 @@
+/*
+ * Welcome to your app's main JavaScript file!
+ *
+ * This file will be included onto the page via the importmap() Twig function,
+ * which should already be in your base.html.twig.
+ */
+import './styles/app.css';
+
+console.log('This log comes from assets/app.js - welcome to AssetMapper! 🎉');
diff --git a/public/css/admin.css b/assets/styles/app.css
similarity index 100%
rename from public/css/admin.css
rename to assets/styles/app.css
diff --git a/composer.json b/composer.json
index a6dd8c9..689d484 100644
--- a/composer.json
+++ b/composer.json
@@ -21,7 +21,8 @@
"phpdocumentor/reflection-docblock": "^5.6.3",
"phpstan/phpdoc-parser": "^2.3",
"symfony/amqp-messenger": "^7.3.2",
- "symfony/asset": "^7.3",
+ "symfony/asset": "7.3.*",
+ "symfony/asset-mapper": "7.3.*",
"symfony/browser-kit": "^7.3.2",
"symfony/console": "^7.3.4",
"symfony/doctrine-messenger": "^7.3.4",
@@ -41,7 +42,9 @@
"symfony/uid": "^7.3.1",
"symfony/validator": "^7.3.4",
"symfony/webpack-encore-bundle": "^2.3",
- "symfony/yaml": "^7.3.3"
+ "symfony/yaml": "^7.3.3",
+ "twig/extra-bundle": "^2.12|^3.0",
+ "twig/twig": "^2.12|^3.0"
},
"require-dev": {
"ergebnis/composer-normalize": "^2.48.2",
@@ -112,7 +115,8 @@
],
"auto-scripts": {
"cache:clear": "symfony-cmd",
- "assets:install %PUBLIC_DIR%": "symfony-cmd"
+ "assets:install %PUBLIC_DIR%": "symfony-cmd",
+ "importmap:install": "symfony-cmd"
},
"coding-standards-apply": [
"PHP_CS_FIXER_IGNORE_ENV=1 vendor/bin/php-cs-fixer fix"
diff --git a/composer.lock b/composer.lock
index 454da30..c7af645 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "1a4ccfa6b381e151c19b48ed226e0b54",
+ "content-hash": "27b62ec66b20f82b1b953f9b698bd714",
"packages": [
{
"name": "api-platform/core",
@@ -3544,6 +3544,90 @@
],
"time": "2025-03-05T10:15:41+00:00"
},
+ {
+ "name": "symfony/asset-mapper",
+ "version": "v7.3.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/asset-mapper.git",
+ "reference": "0c40c579e27244616cf0fe4d1759aab2ceb99a9a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/asset-mapper/zipball/0c40c579e27244616cf0fe4d1759aab2ceb99a9a",
+ "reference": "0c40c579e27244616cf0fe4d1759aab2ceb99a9a",
+ "shasum": ""
+ },
+ "require": {
+ "composer/semver": "^3.0",
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/filesystem": "^7.1",
+ "symfony/http-client": "^6.4|^7.0"
+ },
+ "conflict": {
+ "symfony/framework-bundle": "<6.4"
+ },
+ "require-dev": {
+ "symfony/asset": "^6.4|^7.0",
+ "symfony/browser-kit": "^6.4|^7.0",
+ "symfony/console": "^6.4|^7.0",
+ "symfony/event-dispatcher-contracts": "^3.0",
+ "symfony/finder": "^6.4|^7.0",
+ "symfony/framework-bundle": "^6.4|^7.0",
+ "symfony/http-foundation": "^6.4|^7.0",
+ "symfony/http-kernel": "^6.4|^7.0",
+ "symfony/process": "^6.4|^7.0",
+ "symfony/web-link": "^6.4|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\AssetMapper\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Maps directories of assets & makes them available in a public directory with versioned filenames.",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/asset-mapper/tree/v7.3.4"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-09-22T15:31:00+00:00"
+ },
{
"name": "symfony/browser-kit",
"version": "v7.3.2",
@@ -14138,7 +14222,7 @@
],
"aliases": [],
"minimum-stability": "dev",
- "stability-flags": {},
+ "stability-flags": [],
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
@@ -14146,6 +14230,6 @@
"ext-ctype": "*",
"ext-iconv": "*"
},
- "platform-dev": {},
+ "platform-dev": [],
"plugin-api-version": "2.6.0"
}
diff --git a/config/packages/asset_mapper.yaml b/config/packages/asset_mapper.yaml
new file mode 100644
index 0000000..f7653e9
--- /dev/null
+++ b/config/packages/asset_mapper.yaml
@@ -0,0 +1,11 @@
+framework:
+ asset_mapper:
+ # The paths to make available to the asset mapper.
+ paths:
+ - assets/
+ missing_import_mode: strict
+
+when@prod:
+ framework:
+ asset_mapper:
+ missing_import_mode: warn
diff --git a/importmap.php b/importmap.php
new file mode 100644
index 0000000..70ebf14
--- /dev/null
+++ b/importmap.php
@@ -0,0 +1,19 @@
+ [
+ 'path' => './assets/app.js',
+ 'entrypoint' => true,
+ ],
+];
diff --git a/src/Controller/Admin/DashboardController.php b/src/Controller/Admin/DashboardController.php
index e63ed4f..bccf631 100644
--- a/src/Controller/Admin/DashboardController.php
+++ b/src/Controller/Admin/DashboardController.php
@@ -52,7 +52,7 @@ public function index(): Response
public function configureDashboard(): Dashboard
{
return Dashboard::new()
- ->setTitle('
')
+ ->setTitle('
')
->setFaviconPath('img/favicon.ico')
->renderContentMaximized();
}
@@ -95,6 +95,6 @@ public function configureCrud(): Crud
#[\Override]
public function configureAssets(): Assets
{
- return Assets::new()->addCssFile('css/admin.css');
+ return parent::configureAssets()->addAssetMapperEntry('app');
}
}
diff --git a/symfony.lock b/symfony.lock
index cf36f78..68d5966 100644
--- a/symfony.lock
+++ b/symfony.lock
@@ -316,6 +316,21 @@
"symfony/asset": {
"version": "v6.0.3"
},
+ "symfony/asset-mapper": {
+ "version": "7.3",
+ "recipe": {
+ "repo": "github.com/symfony/recipes",
+ "branch": "main",
+ "version": "6.4",
+ "ref": "5ad1308aa756d58f999ffbe1540d1189f5d7d14a"
+ },
+ "files": [
+ "assets/app.js",
+ "assets/styles/app.css",
+ "config/packages/asset_mapper.yaml",
+ "importmap.php"
+ ]
+ },
"symfony/browser-kit": {
"version": "v6.0.3"
},
diff --git a/templates/base.html.twig b/templates/base.html.twig
index d4f83f7..a4f2bfe 100644
--- a/templates/base.html.twig
+++ b/templates/base.html.twig
@@ -10,6 +10,7 @@
{% endblock %}
{% block javascripts %}
+ {% block importmap %}{{ importmap('app') }}{% endblock %}
{{ encore_entry_script_tags('app') }}
{% endblock %}
From 193ade332161843d33e7704805230ae45704896e Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Tue, 14 Oct 2025 16:06:23 +0200
Subject: [PATCH 11/31] 5564: Lint yml files
---
.github/workflows/apispec.yaml | 216 +++++-----
.github/workflows/changelog.yaml | 28 +-
.github/workflows/composer.yaml | 80 ++--
.github/workflows/doctrine.yaml | 68 +--
.github/workflows/github_build_release.yml | 74 ++--
.github/workflows/javascript.yaml | 34 +-
.github/workflows/markdown.yaml | 34 +-
.github/workflows/php.yaml | 36 +-
.github/workflows/pr.yaml | 111 +++--
.github/workflows/styles.yaml | 34 +-
.github/workflows/twig.yaml | 38 +-
.github/workflows/yaml.yaml | 28 +-
.prettierrc.yaml | 12 +-
.woodpecker/prod.yml | 74 ++--
.woodpecker/stg.yml | 60 +--
composer.json | 6 +-
config/packages/api_platform.yaml | 2 +-
config/packages/cache.yaml | 2 +-
config/packages/debug.yaml | 2 +-
config/packages/itkdev_openid_connect.yaml | 56 +--
config/packages/messenger.yaml | 2 +-
config/packages/monolog.yaml | 12 +-
config/packages/security.yaml | 2 +-
config/packages/webpack_encore.yaml | 11 +-
config/routes.yaml | 10 +-
config/routes/easyadmin.yaml | 4 +-
config/routes/itkdev_openid_connect.yaml | 4 +-
config/services.yaml | 9 +-
docker-compose.override.yml | 4 +-
fixtures/oidc.yaml | 12 +-
fixtures/server.yaml | 32 +-
fixtures/service_certificates.yaml | 48 +--
fixtures/site.yaml | 144 +++----
fixtures/user.yaml | 6 +-
public/api-spec-v1.yaml | 465 ++++++++++-----------
35 files changed, 877 insertions(+), 883 deletions(-)
diff --git a/.github/workflows/apispec.yaml b/.github/workflows/apispec.yaml
index 31627de..7d11a53 100644
--- a/.github/workflows/apispec.yaml
+++ b/.github/workflows/apispec.yaml
@@ -1,115 +1,115 @@
name: API Spec review
env:
- COMPOSE_USER: root
+ COMPOSE_USER: root
on:
- pull_request:
+ pull_request:
jobs:
- api-spec-updated:
- name: Ensure committed API specification is up to date
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v5
- with:
- fetch-depth: 2
-
- - name: Create docker network
- run: |
- docker network create frontend
-
- - name: Composer install
- run: |
- docker compose run --rm phpfpm composer install
-
- - name: Export API specification
- run: |
- docker compose run --rm phpfpm bin/console api:openapi:export --yaml --output=public/api-spec-v1.yaml --no-interaction
-
- - name: Check for changes in specification
- id: git-diff-spec
- continue-on-error: true
- run: git diff --diff-filter=ACMRT --exit-code public/api-spec-v1.yaml
-
- - name: Comment PR
- if: steps.git-diff-spec.outcome == 'failure'
- env:
- GH_TOKEN: ${{ github.token }}
- run: |
- echo '## 🛑 Exported API specification file not up to date' > var/comment.md
- echo '' >> var/comment.md
- echo 'Please run `composer update-api-spec` to export the API specification. Then commit and push the changes.' >> var/comment.md
- gh pr comment ${{ github.event.pull_request.number }} --body-file var/comment.md --create-if-none --edit-last
-
- - name: Fail job, api spec is not up to date
- if: steps.git-diff-spec.outcome == 'failure'
- run: |
- exit 1
-
- detect-breaking-changes:
- name: Detect breaking changes in API specification
- runs-on: ubuntu-latest
- needs: [api-spec-updated]
- steps:
- - name: Check out BASE rev
- uses: actions/checkout@v5
- with:
- ref: ${{ github.base_ref }}
- path: base
-
- - name: Check out HEAD rev
- uses: actions/checkout@v5
- with:
- ref: ${{ github.head_ref }}
- path: head
-
- - name: Run OpenAPI Changed (from HEAD rev)
- id: api-changed
- continue-on-error: true
- uses: docker://openapitools/openapi-diff:latest
- with:
- args: --fail-on-changed base/public/api-spec-v1.yaml head/public/api-spec-v1.yaml --markdown api-spec-changed.md
-
- - name: Run OpenAPI Incompatible (from HEAD rev)
- id: api-incompatible
- continue-on-error: true
- uses: docker://openapitools/openapi-diff:latest
- with:
- args: --fail-on-incompatible base/public/api-spec-v1.yaml head/public/api-spec-v1.yaml --markdown api-spec-incompatible.md
-
- - name: Comment PR with no changes
- if: steps.api-changed.outcome == 'success' && steps.api-incompatible.outcome == 'success'
- working-directory: head
- env:
- GH_TOKEN: ${{ github.token }}
- run: |
- gh pr comment ${{ github.event.pull_request.number }} --body "✅ **No changes detected in API specification**" --create-if-none --edit-last
-
- - name: Comment PR with non-breaking changes
- if: steps.api-changed.outcome == 'failure' && steps.api-incompatible.outcome == 'success'
- working-directory: head
- env:
- GH_TOKEN: ${{ github.token }}
- run: |
- echo "## ⚠️ Non-Breaking changes detected in API specification" > ../comment.md
- echo "" >> ../comment.md
- cat ../api-spec-changed.md >> ../comment.md
- gh pr comment ${{ github.event.pull_request.number }} --body-file ../comment.md --create-if-none --edit-last
-
- - name: Comment PR with breaking changes
- if: steps.api-incompatible.outcome == 'failure'
- working-directory: head
- env:
- GH_TOKEN: ${{ github.token }}
- run: |
- echo "## 🛑 Breaking changes detected in API specification" > ../comment.md
- echo "" >> ../comment.md
- cat ../api-spec-incompatible.md >> ../comment.md
- gh pr comment ${{ github.event.pull_request.number }} --body-file ../comment.md --create-if-none --edit-last
-
- - name: Fail if breaking changes detected
- if: steps.api-incompatible.outcome == 'failure'
- run: |
- exit 1
\ No newline at end of file
+ api-spec-updated:
+ name: Ensure committed API specification is up to date
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
+ with:
+ fetch-depth: 2
+
+ - name: Create docker network
+ run: |
+ docker network create frontend
+
+ - name: Composer install
+ run: |
+ docker compose run --rm phpfpm composer install
+
+ - name: Export API specification
+ run: |
+ docker compose run --rm phpfpm bin/console api:openapi:export --yaml --output=public/api-spec-v1.yaml --no-interaction
+
+ - name: Check for changes in specification
+ id: git-diff-spec
+ continue-on-error: true
+ run: git diff --diff-filter=ACMRT --exit-code public/api-spec-v1.yaml
+
+ - name: Comment PR
+ if: steps.git-diff-spec.outcome == 'failure'
+ env:
+ GH_TOKEN: ${{ github.token }}
+ run: |
+ echo '## 🛑 Exported API specification file not up to date' > var/comment.md
+ echo '' >> var/comment.md
+ echo 'Please run `composer update-api-spec` to export the API specification. Then commit and push the changes.' >> var/comment.md
+ gh pr comment ${{ github.event.pull_request.number }} --body-file var/comment.md --create-if-none --edit-last
+
+ - name: Fail job, api spec is not up to date
+ if: steps.git-diff-spec.outcome == 'failure'
+ run: |
+ exit 1
+
+ detect-breaking-changes:
+ name: Detect breaking changes in API specification
+ runs-on: ubuntu-latest
+ needs: [api-spec-updated]
+ steps:
+ - name: Check out BASE rev
+ uses: actions/checkout@v5
+ with:
+ ref: ${{ github.base_ref }}
+ path: base
+
+ - name: Check out HEAD rev
+ uses: actions/checkout@v5
+ with:
+ ref: ${{ github.head_ref }}
+ path: head
+
+ - name: Run OpenAPI Changed (from HEAD rev)
+ id: api-changed
+ continue-on-error: true
+ uses: docker://openapitools/openapi-diff:latest
+ with:
+ args: --fail-on-changed base/public/api-spec-v1.yaml head/public/api-spec-v1.yaml --markdown api-spec-changed.md
+
+ - name: Run OpenAPI Incompatible (from HEAD rev)
+ id: api-incompatible
+ continue-on-error: true
+ uses: docker://openapitools/openapi-diff:latest
+ with:
+ args: --fail-on-incompatible base/public/api-spec-v1.yaml head/public/api-spec-v1.yaml --markdown api-spec-incompatible.md
+
+ - name: Comment PR with no changes
+ if: steps.api-changed.outcome == 'success' && steps.api-incompatible.outcome == 'success'
+ working-directory: head
+ env:
+ GH_TOKEN: ${{ github.token }}
+ run: |
+ gh pr comment ${{ github.event.pull_request.number }} --body "✅ **No changes detected in API specification**" --create-if-none --edit-last
+
+ - name: Comment PR with non-breaking changes
+ if: steps.api-changed.outcome == 'failure' && steps.api-incompatible.outcome == 'success'
+ working-directory: head
+ env:
+ GH_TOKEN: ${{ github.token }}
+ run: |
+ echo "## ⚠️ Non-Breaking changes detected in API specification" > ../comment.md
+ echo "" >> ../comment.md
+ cat ../api-spec-changed.md >> ../comment.md
+ gh pr comment ${{ github.event.pull_request.number }} --body-file ../comment.md --create-if-none --edit-last
+
+ - name: Comment PR with breaking changes
+ if: steps.api-incompatible.outcome == 'failure'
+ working-directory: head
+ env:
+ GH_TOKEN: ${{ github.token }}
+ run: |
+ echo "## 🛑 Breaking changes detected in API specification" > ../comment.md
+ echo "" >> ../comment.md
+ cat ../api-spec-incompatible.md >> ../comment.md
+ gh pr comment ${{ github.event.pull_request.number }} --body-file ../comment.md --create-if-none --edit-last
+
+ - name: Fail if breaking changes detected
+ if: steps.api-incompatible.outcome == 'failure'
+ run: |
+ exit 1
diff --git a/.github/workflows/changelog.yaml b/.github/workflows/changelog.yaml
index fead572..15297e3 100644
--- a/.github/workflows/changelog.yaml
+++ b/.github/workflows/changelog.yaml
@@ -9,21 +9,21 @@
name: Changelog
on:
- pull_request:
+ pull_request:
jobs:
- changelog:
- runs-on: ubuntu-latest
- strategy:
- fail-fast: false
- steps:
- - name: Checkout
- uses: actions/checkout@v5
- with:
- fetch-depth: 2
+ changelog:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
+ with:
+ fetch-depth: 2
- - name: Git fetch
- run: git fetch
+ - name: Git fetch
+ run: git fetch
- - name: Check that changelog has been updated.
- run: git diff --exit-code origin/${{ github.base_ref }} -- CHANGELOG.md && exit 1 || exit 0
+ - name: Check that changelog has been updated.
+ run: git diff --exit-code origin/${{ github.base_ref }} -- CHANGELOG.md && exit 1 || exit 0
diff --git a/.github/workflows/composer.yaml b/.github/workflows/composer.yaml
index a0e5a94..9a56bd6 100644
--- a/.github/workflows/composer.yaml
+++ b/.github/workflows/composer.yaml
@@ -26,55 +26,55 @@
name: Composer
env:
- COMPOSE_USER: root
+ COMPOSE_USER: root
on:
- pull_request:
- push:
- branches:
- - main
- - develop
+ pull_request:
+ push:
+ branches:
+ - main
+ - develop
jobs:
- composer-validate:
- runs-on: ubuntu-latest
- strategy:
- fail-fast: false
- steps:
- - uses: actions/checkout@v5
+ composer-validate:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ steps:
+ - uses: actions/checkout@v5
- - name: Create docker network
- run: |
- docker network create frontend
+ - name: Create docker network
+ run: |
+ docker network create frontend
- - run: |
- docker compose run --rm phpfpm composer validate --strict
+ - run: |
+ docker compose run --rm phpfpm composer validate --strict
- composer-normalized:
- runs-on: ubuntu-latest
- strategy:
- fail-fast: false
- steps:
- - uses: actions/checkout@v5
+ composer-normalized:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ steps:
+ - uses: actions/checkout@v5
- - name: Create docker network
- run: |
- docker network create frontend
+ - name: Create docker network
+ run: |
+ docker network create frontend
- - run: |
- docker compose run --rm phpfpm composer install
- docker compose run --rm phpfpm composer normalize --dry-run
+ - run: |
+ docker compose run --rm phpfpm composer install
+ docker compose run --rm phpfpm composer normalize --dry-run
- composer-audit:
- runs-on: ubuntu-latest
- strategy:
- fail-fast: false
- steps:
- - uses: actions/checkout@v5
+ composer-audit:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ steps:
+ - uses: actions/checkout@v5
- - name: Create docker network
- run: |
- docker network create frontend
+ - name: Create docker network
+ run: |
+ docker network create frontend
- - run: |
- docker compose run --rm phpfpm composer audit
+ - run: |
+ docker compose run --rm phpfpm composer audit
diff --git a/.github/workflows/doctrine.yaml b/.github/workflows/doctrine.yaml
index 823c375..696886d 100644
--- a/.github/workflows/doctrine.yaml
+++ b/.github/workflows/doctrine.yaml
@@ -1,41 +1,41 @@
name: Doctrine
env:
- COMPOSE_USER: root
+ COMPOSE_USER: root
on:
- pull_request:
- push:
- branches:
- - main
- - develop
+ pull_request:
+ push:
+ branches:
+ - main
+ - develop
jobs:
- coding-standards:
- name: Validate Schema
- runs-on: ubuntu-latest
- env:
- APP_ENV: prod
-
- steps:
- - uses: actions/checkout@v5
-
- - name: Create docker network
- run: |
- docker network create frontend
-
- - name: Run Composer Install
- run: |
- docker compose run --rm phpfpm composer install
-
- - name: Run Doctrine Migrations
- run: |
- docker compose run --rm phpfpm bin/console doctrine:migrations:migrate --no-interaction
-
- - name: Setup messenger "failed" doctrine transport to ensure db schema is updated
- run: |
- docker compose run --rm phpfpm bin/console messenger:setup-transports failed
-
- - name: Validate Doctrine schema
- run: |
- docker compose run --rm phpfpm bin/console doctrine:schema:validate
\ No newline at end of file
+ coding-standards:
+ name: Validate Schema
+ runs-on: ubuntu-latest
+ env:
+ APP_ENV: prod
+
+ steps:
+ - uses: actions/checkout@v5
+
+ - name: Create docker network
+ run: |
+ docker network create frontend
+
+ - name: Run Composer Install
+ run: |
+ docker compose run --rm phpfpm composer install
+
+ - name: Run Doctrine Migrations
+ run: |
+ docker compose run --rm phpfpm bin/console doctrine:migrations:migrate --no-interaction
+
+ - name: Setup messenger "failed" doctrine transport to ensure db schema is updated
+ run: |
+ docker compose run --rm phpfpm bin/console messenger:setup-transports failed
+
+ - name: Validate Doctrine schema
+ run: |
+ docker compose run --rm phpfpm bin/console doctrine:schema:validate
diff --git a/.github/workflows/github_build_release.yml b/.github/workflows/github_build_release.yml
index 3817c60..b26cea6 100644
--- a/.github/workflows/github_build_release.yml
+++ b/.github/workflows/github_build_release.yml
@@ -1,45 +1,45 @@
on:
- push:
- tags:
- - '*.*.*'
+ push:
+ tags:
+ - "*.*.*"
name: Create Github Release
permissions:
- contents: write
+ contents: write
jobs:
- create-release:
- runs-on: ubuntu-latest
- env:
- COMPOSER_ALLOW_SUPERUSER: 1
- APP_ENV: prod
- steps:
- - name: Checkout
- uses: actions/checkout@v5
-
- - name: Composer install
- run: |
- docker network create frontend
- docker compose run --rm --user=root --env APP_ENV=prod phpfpm composer install --no-dev -o --classmap-authoritative
- docker compose run --rm --user=root --env APP_ENV=prod phpfpm composer clear-cache
- docker compose run --rm node yarn install
- docker compose run --rm node yarn build
-
- - name: Make assets dir
- run: |
- mkdir -p ../assets
-
- - name: Create archive
- run: tar --exclude='.git' --exclude='node_modules' -zcf ../assets/${{ github.event.repository.name }}-${{ github.ref_name }}.tar.gz ./
-
- - name: Create checksum
- run: |
- cd ../assets
- sha256sum ${{ github.event.repository.name }}-${{ github.ref_name }}.tar.gz > ../assets/checksum.txt
-
- - name: Create a release in GitHub and uploads assets
- run: gh release create ${{ github.ref_name }} --verify-tag --generate-notes ../assets/*.*
+ create-release:
+ runs-on: ubuntu-latest
env:
- GITHUB_TOKEN: ${{ github.TOKEN }}
- shell: bash
+ COMPOSER_ALLOW_SUPERUSER: 1
+ APP_ENV: prod
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
+
+ - name: Composer install
+ run: |
+ docker network create frontend
+ docker compose run --rm --user=root --env APP_ENV=prod phpfpm composer install --no-dev -o --classmap-authoritative
+ docker compose run --rm --user=root --env APP_ENV=prod phpfpm composer clear-cache
+ docker compose run --rm node yarn install
+ docker compose run --rm node yarn build
+
+ - name: Make assets dir
+ run: |
+ mkdir -p ../assets
+
+ - name: Create archive
+ run: tar --exclude='.git' --exclude='node_modules' -zcf ../assets/${{ github.event.repository.name }}-${{ github.ref_name }}.tar.gz ./
+
+ - name: Create checksum
+ run: |
+ cd ../assets
+ sha256sum ${{ github.event.repository.name }}-${{ github.ref_name }}.tar.gz > ../assets/checksum.txt
+
+ - name: Create a release in GitHub and uploads assets
+ run: gh release create ${{ github.ref_name }} --verify-tag --generate-notes ../assets/*.*
+ env:
+ GITHUB_TOKEN: ${{ github.TOKEN }}
+ shell: bash
diff --git a/.github/workflows/javascript.yaml b/.github/workflows/javascript.yaml
index 44b976e..bafc128 100644
--- a/.github/workflows/javascript.yaml
+++ b/.github/workflows/javascript.yaml
@@ -14,24 +14,24 @@
name: JavaScript
on:
- pull_request:
- push:
- branches:
- - main
- - develop
+ pull_request:
+ push:
+ branches:
+ - main
+ - develop
jobs:
- javascript-lint:
- runs-on: ubuntu-latest
- strategy:
- fail-fast: false
- steps:
- - name: Checkout
- uses: actions/checkout@v5
+ javascript-lint:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
- - name: Create docker network
- run: |
- docker network create frontend
+ - name: Create docker network
+ run: |
+ docker network create frontend
- - run: |
- docker compose run --rm prettier 'assets/**/*.js' --check
+ - run: |
+ docker compose run --rm prettier 'assets/**/*.js' --check
diff --git a/.github/workflows/markdown.yaml b/.github/workflows/markdown.yaml
index ae83163..cdd8b4b 100644
--- a/.github/workflows/markdown.yaml
+++ b/.github/workflows/markdown.yaml
@@ -21,24 +21,24 @@
name: Markdown
on:
- pull_request:
- push:
- branches:
- - main
- - develop
+ pull_request:
+ push:
+ branches:
+ - main
+ - develop
jobs:
- markdown-lint:
- runs-on: ubuntu-latest
- strategy:
- fail-fast: false
- steps:
- - name: Checkout
- uses: actions/checkout@v5
+ markdown-lint:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
- - name: Create docker network
- run: |
- docker network create frontend
+ - name: Create docker network
+ run: |
+ docker network create frontend
- - run: |
- docker compose run --rm markdownlint markdownlint '**/*.md'
+ - run: |
+ docker compose run --rm markdownlint markdownlint '**/*.md'
diff --git a/.github/workflows/php.yaml b/.github/workflows/php.yaml
index b7a68dd..d8942c7 100644
--- a/.github/workflows/php.yaml
+++ b/.github/workflows/php.yaml
@@ -34,27 +34,27 @@
name: Symfony PHP
env:
- COMPOSE_USER: root
+ COMPOSE_USER: root
on:
- pull_request:
- push:
- branches:
- - main
- - develop
+ pull_request:
+ push:
+ branches:
+ - main
+ - develop
jobs:
- coding-standards:
- name: PHP - Check Coding Standards
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v5
+ coding-standards:
+ name: PHP - Check Coding Standards
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v5
- - name: Create docker network
- run: |
- docker network create frontend
+ - name: Create docker network
+ run: |
+ docker network create frontend
- - run: |
- docker compose run --rm phpfpm composer install
- # https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/master/doc/usage.rst#the-check-command
- docker compose run --rm phpfpm vendor/bin/php-cs-fixer fix --dry-run --diff
+ - run: |
+ docker compose run --rm phpfpm composer install
+ # https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/blob/master/doc/usage.rst#the-check-command
+ docker compose run --rm phpfpm vendor/bin/php-cs-fixer fix --dry-run --diff
diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml
index 9119f5f..6dfe6ad 100644
--- a/.github/workflows/pr.yaml
+++ b/.github/workflows/pr.yaml
@@ -1,63 +1,62 @@
name: PR Review
env:
- COMPOSE_USER: root
+ COMPOSE_USER: root
on: pull_request
jobs:
- phpunit:
- name: PHP Unit tests
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v5
-
- - name: Install site
- run: |
- docker network create frontend
- docker compose pull
- docker compose up --detach
- docker compose exec --user=root phpfpm composer install
- docker compose exec phpfpm bin/console doctrine:migrations:migrate --no-interaction
-
- - name: Run tests
- run: |
- docker compose exec phpfpm composer run tests
-
- fixtures:
- name: Load fixtures
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v5
- with:
- fetch-depth: 2
-
- - name: Install site
- run: |
- docker network create frontend
- docker compose pull
- docker compose up --detach
- docker compose exec --user=root phpfpm composer install
- docker compose exec phpfpm bin/console doctrine:migrations:migrate --no-interaction
-
- - name: Load fixtures
- run: |
- docker compose exec phpfpm composer fixtures
-
- build-assets:
- name: Build assets
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v3
- with:
- fetch-depth: 2
-
- - name: Build assets
- run: |
- docker network create frontend
- docker compose run --rm node yarn install
- docker compose run --rm node yarn build
-
+ phpunit:
+ name: PHP Unit tests
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
+
+ - name: Install site
+ run: |
+ docker network create frontend
+ docker compose pull
+ docker compose up --detach
+ docker compose exec --user=root phpfpm composer install
+ docker compose exec phpfpm bin/console doctrine:migrations:migrate --no-interaction
+
+ - name: Run tests
+ run: |
+ docker compose exec phpfpm composer run tests
+
+ fixtures:
+ name: Load fixtures
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
+ with:
+ fetch-depth: 2
+
+ - name: Install site
+ run: |
+ docker network create frontend
+ docker compose pull
+ docker compose up --detach
+ docker compose exec --user=root phpfpm composer install
+ docker compose exec phpfpm bin/console doctrine:migrations:migrate --no-interaction
+
+ - name: Load fixtures
+ run: |
+ docker compose exec phpfpm composer fixtures
+
+ build-assets:
+ name: Build assets
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+ with:
+ fetch-depth: 2
+
+ - name: Build assets
+ run: |
+ docker network create frontend
+ docker compose run --rm node yarn install
+ docker compose run --rm node yarn build
diff --git a/.github/workflows/styles.yaml b/.github/workflows/styles.yaml
index 4c39d78..964cffb 100644
--- a/.github/workflows/styles.yaml
+++ b/.github/workflows/styles.yaml
@@ -14,24 +14,24 @@
name: Styles
on:
- pull_request:
- push:
- branches:
- - main
- - develop
+ pull_request:
+ push:
+ branches:
+ - main
+ - develop
jobs:
- styles-lint:
- runs-on: ubuntu-latest
- strategy:
- fail-fast: false
- steps:
- - name: Checkout
- uses: actions/checkout@v5
+ styles-lint:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
- - name: Create docker network
- run: |
- docker network create frontend
+ - name: Create docker network
+ run: |
+ docker network create frontend
- - run: |
- docker compose run --rm prettier 'assets/**/*.{css,scss}' --check
+ - run: |
+ docker compose run --rm prettier 'assets/**/*.{css,scss}' --check
diff --git a/.github/workflows/twig.yaml b/.github/workflows/twig.yaml
index 5909841..11b54ad 100644
--- a/.github/workflows/twig.yaml
+++ b/.github/workflows/twig.yaml
@@ -24,28 +24,28 @@
name: Twig
env:
- COMPOSE_USER: root
+ COMPOSE_USER: root
on:
- pull_request:
- push:
- branches:
- - main
- - develop
+ pull_request:
+ push:
+ branches:
+ - main
+ - develop
jobs:
- twig-lint:
- runs-on: ubuntu-latest
- strategy:
- fail-fast: false
- steps:
- - name: Checkout
- uses: actions/checkout@v5
+ twig-lint:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
- - name: Create docker network
- run: |
- docker network create frontend
+ - name: Create docker network
+ run: |
+ docker network create frontend
- - run: |
- docker compose run --rm phpfpm composer install
- docker compose run --rm phpfpm vendor/bin/twig-cs-fixer lint
+ - run: |
+ docker compose run --rm phpfpm composer install
+ docker compose run --rm phpfpm vendor/bin/twig-cs-fixer lint
diff --git a/.github/workflows/yaml.yaml b/.github/workflows/yaml.yaml
index 631e525..ba8ca52 100644
--- a/.github/workflows/yaml.yaml
+++ b/.github/workflows/yaml.yaml
@@ -21,21 +21,21 @@
name: YAML
on:
- pull_request:
- push:
- branches:
- - main
- - develop
+ pull_request:
+ push:
+ branches:
+ - main
+ - develop
jobs:
- yaml-lint:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v5
+ yaml-lint:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v5
- - name: Create docker network
- run: |
- docker network create frontend
+ - name: Create docker network
+ run: |
+ docker network create frontend
- - run: |
- docker compose run --rm prettier '**/*.{yml,yaml}' --check
+ - run: |
+ docker compose run --rm prettier '**/*.{yml,yaml}' --check
diff --git a/.prettierrc.yaml b/.prettierrc.yaml
index 12e0898..5b271ea 100644
--- a/.prettierrc.yaml
+++ b/.prettierrc.yaml
@@ -3,9 +3,9 @@
# https://prettier.io/docs/configuration
overrides:
- # Symfony config
- - files:
- - "config/**/*.{yml,yaml}"
- options:
- tabWidth: 4
- singleQuote: true
+ # Symfony config
+ - files:
+ - "config/**/*.{yml,yaml}"
+ options:
+ tabWidth: 4
+ singleQuote: true
diff --git a/.woodpecker/prod.yml b/.woodpecker/prod.yml
index 9bf9692..e3c1cc2 100644
--- a/.woodpecker/prod.yml
+++ b/.woodpecker/prod.yml
@@ -1,45 +1,45 @@
when:
- - event: release
+ - event: release
skip_clone: true
labels:
- zone: CLOUD
+ zone: CLOUD
steps:
- - name: Ansible playbook
- image: itkdev/ansible-plugin:1
- pull: true
- settings:
- id:
- from_secret: id
- secret:
- from_secret: secret
- host:
- from_secret: prod_host
- path:
- from_secret: prod_path
- user:
- from_secret: user
- keep: 4
- playbook: 'release'
- pre_up:
- - itkdev-docker-compose-server run phpfpm bin/console doctrine:migrations:migrate --no-interaction
- - itkdev-docker-compose-server run phpfpm bin/console messenger:setup-transports
+ - name: Ansible playbook
+ image: itkdev/ansible-plugin:1
+ pull: true
+ settings:
+ id:
+ from_secret: id
+ secret:
+ from_secret: secret
+ host:
+ from_secret: prod_host
+ path:
+ from_secret: prod_path
+ user:
+ from_secret: user
+ keep: 4
+ playbook: "release"
+ pre_up:
+ - itkdev-docker-compose-server run phpfpm bin/console doctrine:migrations:migrate --no-interaction
+ - itkdev-docker-compose-server run phpfpm bin/console messenger:setup-transports
- - name: Run post deploy
- image: itkdev/ansible-plugin:1
- pull: true
- settings:
- id:
- from_secret: id
- secret:
- from_secret: secret
- host:
- from_secret: prod_host
- path:
- from_secret: prod_path
- user:
- from_secret: user
- actions:
- - itkdev-docker-compose-server exec phpfpm bin/console cache:clear
+ - name: Run post deploy
+ image: itkdev/ansible-plugin:1
+ pull: true
+ settings:
+ id:
+ from_secret: id
+ secret:
+ from_secret: secret
+ host:
+ from_secret: prod_host
+ path:
+ from_secret: prod_path
+ user:
+ from_secret: user
+ actions:
+ - itkdev-docker-compose-server exec phpfpm bin/console cache:clear
diff --git a/.woodpecker/stg.yml b/.woodpecker/stg.yml
index 64ded24..0a5749a 100644
--- a/.woodpecker/stg.yml
+++ b/.woodpecker/stg.yml
@@ -1,37 +1,37 @@
when:
- - branch: release/*
- event: push
+ - branch: release/*
+ event: push
skip_clone: true
labels:
- zone: DMZ
+ zone: DMZ
steps:
- - name: Run stg site update
- image: itkdev/ansible-plugin:1
- when:
- branch: release/*
- event: push
- pull: true
- settings:
- id:
- from_secret: id
- secret:
- from_secret: secret
- host:
- from_secret: stg_host
- path:
- from_secret: stg_path
- user:
- from_secret: user
- actions:
- - git reset --hard
- - git fetch origin ${CI_COMMIT_BRANCH}
- - git checkout ${CI_COMMIT_BRANCH}
- - git pull
- - itkdev-docker-compose-server up -d --force-recreate --remove-orphans
- - itkdev-docker-compose-server exec phpfpm composer install -no-dev -o --classmap-authoritative
- - itkdev-docker-compose-server exec phpfpm bin/console doctrine:migrations:migrate --no-interaction
- - itkdev-docker-compose-server exec phpfpm bin/console messenger:setup-transports
- - itkdev-docker-compose-server exec phpfpm bin/console cache:clear
+ - name: Run stg site update
+ image: itkdev/ansible-plugin:1
+ when:
+ branch: release/*
+ event: push
+ pull: true
+ settings:
+ id:
+ from_secret: id
+ secret:
+ from_secret: secret
+ host:
+ from_secret: stg_host
+ path:
+ from_secret: stg_path
+ user:
+ from_secret: user
+ actions:
+ - git reset --hard
+ - git fetch origin ${CI_COMMIT_BRANCH}
+ - git checkout ${CI_COMMIT_BRANCH}
+ - git pull
+ - itkdev-docker-compose-server up -d --force-recreate --remove-orphans
+ - itkdev-docker-compose-server exec phpfpm composer install -no-dev -o --classmap-authoritative
+ - itkdev-docker-compose-server exec phpfpm bin/console doctrine:migrations:migrate --no-interaction
+ - itkdev-docker-compose-server exec phpfpm bin/console messenger:setup-transports
+ - itkdev-docker-compose-server exec phpfpm bin/console cache:clear
diff --git a/composer.json b/composer.json
index 689d484..685da54 100644
--- a/composer.json
+++ b/composer.json
@@ -119,10 +119,12 @@
"importmap:install": "symfony-cmd"
},
"coding-standards-apply": [
- "PHP_CS_FIXER_IGNORE_ENV=1 vendor/bin/php-cs-fixer fix"
+ "PHP_CS_FIXER_IGNORE_ENV=1 vendor/bin/php-cs-fixer fix",
+ "vendor/bin/twig-cs-fixer --fix"
],
"coding-standards-check": [
- "PHP_CS_FIXER_IGNORE_ENV=1 vendor/bin/php-cs-fixer fix --dry-run"
+ "PHP_CS_FIXER_IGNORE_ENV=1 vendor/bin/php-cs-fixer fix --dry-run",
+ "vendor/bin/twig-cs-fixer"
],
"fixtures-load": [
"bin/console hautelook:fixtures:load --no-interaction"
diff --git a/config/packages/api_platform.yaml b/config/packages/api_platform.yaml
index 56a17a4..e6a1b80 100644
--- a/config/packages/api_platform.yaml
+++ b/config/packages/api_platform.yaml
@@ -10,7 +10,7 @@ api_platform:
enable_swagger: true
enable_swagger_ui: true
swagger:
- versions: [ 3 ]
+ versions: [3]
api_keys:
apiKey:
name: Authorization
diff --git a/config/packages/cache.yaml b/config/packages/cache.yaml
index 6899b72..c3eb53d 100644
--- a/config/packages/cache.yaml
+++ b/config/packages/cache.yaml
@@ -16,4 +16,4 @@ framework:
# Namespaced pools use the above "app" backend by default
#pools:
- #my.dedicated.cache: null
+ #my.dedicated.cache: null
diff --git a/config/packages/debug.yaml b/config/packages/debug.yaml
index ad874af..54a4821 100644
--- a/config/packages/debug.yaml
+++ b/config/packages/debug.yaml
@@ -2,4 +2,4 @@ when@dev:
debug:
# Forwards VarDumper Data clones to a centralized server allowing to inspect dumps on CLI or in your browser.
# See the "server:dump" command to start a new server.
- dump_destination: "tcp://%env(VAR_DUMPER_SERVER)%"
+ dump_destination: 'tcp://%env(VAR_DUMPER_SERVER)%'
diff --git a/config/packages/itkdev_openid_connect.yaml b/config/packages/itkdev_openid_connect.yaml
index 4afe5f1..854a6d3 100644
--- a/config/packages/itkdev_openid_connect.yaml
+++ b/config/packages/itkdev_openid_connect.yaml
@@ -1,31 +1,31 @@
itkdev_openid_connect:
- cache_options:
- cache_pool: 'cache.app' # Cache item pool for caching discovery document and CLI login tokens
- cli_login_options:
- route: '%env(OIDC_CLI_LOGIN_ROUTE)%' # Route for CLI login
- user_provider: 'security.user.provider.concrete.app_user_provider'
- openid_providers:
- # Define one or more providers
- # [providerKey]:
- # options:
- # metadata_url: …
- # …
- azure_az:
- options:
- metadata_url: '%env(string:AZURE_AZ_OIDC_METADATA_URL)%'
- client_id: '%env(AZURE_AZ_OIDC_CLIENT_ID)%'
- client_secret: '%env(AZURE_AZ_OIDC_CLIENT_SECRET)%'
- # Specify redirect URI
- redirect_uri: '%env(string:AZURE_AZ_OIDC_REDIRECT_URI)%'
- allow_http: '%env(bool:AZURE_AZ_OIDC_ALLOW_HTTP)%'
- # Optional: Specify leeway (seconds) to account for clock skew between provider and hosting
- # Defaults to 10
- leeway: '%env(int:AZURE_AZ_OIDC_LEEWAY)%'
+ cache_options:
+ cache_pool: 'cache.app' # Cache item pool for caching discovery document and CLI login tokens
+ cli_login_options:
+ route: '%env(OIDC_CLI_LOGIN_ROUTE)%' # Route for CLI login
+ user_provider: 'security.user.provider.concrete.app_user_provider'
+ openid_providers:
+ # Define one or more providers
+ # [providerKey]:
+ # options:
+ # metadata_url: …
+ # …
+ azure_az:
+ options:
+ metadata_url: '%env(string:AZURE_AZ_OIDC_METADATA_URL)%'
+ client_id: '%env(AZURE_AZ_OIDC_CLIENT_ID)%'
+ client_secret: '%env(AZURE_AZ_OIDC_CLIENT_SECRET)%'
+ # Specify redirect URI
+ redirect_uri: '%env(string:AZURE_AZ_OIDC_REDIRECT_URI)%'
+ allow_http: '%env(bool:AZURE_AZ_OIDC_ALLOW_HTTP)%'
+ # Optional: Specify leeway (seconds) to account for clock skew between provider and hosting
+ # Defaults to 10
+ leeway: '%env(int:AZURE_AZ_OIDC_LEEWAY)%'
when@prod:
- itkdev_openid_connect:
- openid_providers:
- azure_az:
- options:
- client_id: '%env(vault:AZURE_AZ_OIDC_CLIENT_ID)%'
- client_secret: '%env(vault:AZURE_AZ_OIDC_CLIENT_SECRET)%'
+ itkdev_openid_connect:
+ openid_providers:
+ azure_az:
+ options:
+ client_id: '%env(vault:AZURE_AZ_OIDC_CLIENT_ID)%'
+ client_secret: '%env(vault:AZURE_AZ_OIDC_CLIENT_SECRET)%'
diff --git a/config/packages/messenger.yaml b/config/packages/messenger.yaml
index 419a72f..8db527e 100644
--- a/config/packages/messenger.yaml
+++ b/config/packages/messenger.yaml
@@ -7,7 +7,7 @@ framework:
# https://symfony.com/doc/current/messenger.html#transport-configuration
sync: 'sync://'
async:
- dsn: "%env(MESSENGER_TRANSPORT_DSN)%"
+ dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
retry_strategy:
# 1, 3, 9, 27
max_retries: 4
diff --git a/config/packages/monolog.yaml b/config/packages/monolog.yaml
index 9db7d8a..13ae420 100644
--- a/config/packages/monolog.yaml
+++ b/config/packages/monolog.yaml
@@ -7,9 +7,9 @@ when@dev:
handlers:
main:
type: stream
- path: "%kernel.logs_dir%/%kernel.environment%.log"
+ path: '%kernel.logs_dir%/%kernel.environment%.log'
level: debug
- channels: ["!event"]
+ channels: ['!event']
# uncomment to get logging in your browser
# you may have to allow bigger header sizes in your Web server configuration
#firephp:
@@ -21,7 +21,7 @@ when@dev:
console:
type: console
process_psr_3_messages: false
- channels: ["!event", "!doctrine", "!console"]
+ channels: ['!event', '!doctrine', '!console']
when@test:
monolog:
@@ -31,10 +31,10 @@ when@test:
action_level: error
handler: nested
excluded_http_codes: [404, 405]
- channels: ["!event"]
+ channels: ['!event']
nested:
type: stream
- path: "%kernel.logs_dir%/%kernel.environment%.log"
+ path: '%kernel.logs_dir%/%kernel.environment%.log'
level: debug
when@prod:
@@ -54,7 +54,7 @@ when@prod:
console:
type: console
process_psr_3_messages: false
- channels: ["!event", "!doctrine"]
+ channels: ['!event', '!doctrine']
deprecation:
type: stream
channels: [deprecation]
diff --git a/config/packages/security.yaml b/config/packages/security.yaml
index 67b283a..178fb0b 100644
--- a/config/packages/security.yaml
+++ b/config/packages/security.yaml
@@ -42,7 +42,7 @@ security:
access_control:
- { path: ^/api/docs, roles: PUBLIC_ACCESS }
- { path: ^/api, roles: ROLE_SERVER }
- - { path: ^/admin, roles: ROLE_ADMIN }
+ # - { path: ^/admin, roles: ROLE_ADMIN }
# - { path: ^/profile, roles: ROLE_USER }
when@test:
diff --git a/config/packages/webpack_encore.yaml b/config/packages/webpack_encore.yaml
index 4c009ee..d8b3909 100644
--- a/config/packages/webpack_encore.yaml
+++ b/config/packages/webpack_encore.yaml
@@ -11,8 +11,8 @@ webpack_encore:
# https://turbo.hotwired.dev/handbook/drive#reloading-when-assets-change
# 'data-turbo-track': reload
# link_attributes:
- # Uncomment if using Turbo Drive
- # 'data-turbo-track': reload
+ # Uncomment if using Turbo Drive
+ # 'data-turbo-track': reload
# If using Encore.enableIntegrityHashes() and need the crossorigin attribute (default: false, or use 'anonymous' or 'use-credentials')
# crossorigin: 'anonymous'
@@ -25,15 +25,14 @@ webpack_encore:
# If you have multiple builds:
# builds:
- # frontend: '%kernel.project_dir%/public/frontend/build'
+ # frontend: '%kernel.project_dir%/public/frontend/build'
- # pass the build name as the 3rd argument to the Twig functions
- # {{ encore_entry_script_tags('entry1', null, 'frontend') }}
+ # pass the build name as the 3rd argument to the Twig functions
+ # {{ encore_entry_script_tags('entry1', null, 'frontend') }}
framework:
assets:
json_manifest_path: '%kernel.project_dir%/public/build/manifest.json'
-
#when@prod:
# webpack_encore:
# # Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes)
diff --git a/config/routes.yaml b/config/routes.yaml
index 2048965..1459988 100644
--- a/config/routes.yaml
+++ b/config/routes.yaml
@@ -1,9 +1,9 @@
homepage:
- path: /
- controller: Symfony\Bundle\FrameworkBundle\Controller\RedirectController::urlRedirectAction
- defaults:
- path: /admin
- permanent: false
+ path: /
+ controller: Symfony\Bundle\FrameworkBundle\Controller\RedirectController::urlRedirectAction
+ defaults:
+ path: /admin
+ permanent: false
controllers:
resource:
diff --git a/config/routes/easyadmin.yaml b/config/routes/easyadmin.yaml
index a88552e..083ca15 100644
--- a/config/routes/easyadmin.yaml
+++ b/config/routes/easyadmin.yaml
@@ -1,3 +1,3 @@
easyadmin:
- resource: .
- type: easyadmin.routes
\ No newline at end of file
+ resource: .
+ type: easyadmin.routes
diff --git a/config/routes/itkdev_openid_connect.yaml b/config/routes/itkdev_openid_connect.yaml
index 2628cd9..1c60325 100644
--- a/config/routes/itkdev_openid_connect.yaml
+++ b/config/routes/itkdev_openid_connect.yaml
@@ -1,3 +1,3 @@
itkdev_openid_connect:
- resource: "@ItkDevOpenIdConnectBundle/src/Resources/config/routes.yaml"
- prefix: "/openidconnect" # Prefix for bundle routes
\ No newline at end of file
+ resource: '@ItkDevOpenIdConnectBundle/src/Resources/config/routes.yaml'
+ prefix: '/openidconnect' # Prefix for bundle routes
diff --git a/config/services.yaml b/config/services.yaml
index 8463e06..71d40c9 100644
--- a/config/services.yaml
+++ b/config/services.yaml
@@ -8,7 +8,7 @@ parameters:
services:
# default configuration for services in *this* file
_defaults:
- autowire: true # Automatically injects dependencies in your services.
+ autowire: true # Automatically injects dependencies in your services.
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
# makes classes in src/ available to be used as services
@@ -25,13 +25,12 @@ services:
_instanceof:
App\Handler\DetectionResultHandlerInterface:
- tags: [ app.handler.detection_result_handler ]
+ tags: [app.handler.detection_result_handler]
App\EventListener\RemovedRelationsListener:
tags:
- -
- name: 'doctrine.event_listener'
- event: 'postFlush'
+ - name: 'doctrine.event_listener'
+ event: 'postFlush'
App\MessageHandler\ProcessDetectionResultHandler:
arguments:
diff --git a/docker-compose.override.yml b/docker-compose.override.yml
index 76201fa..4208ae2 100644
--- a/docker-compose.override.yml
+++ b/docker-compose.override.yml
@@ -2,8 +2,8 @@ services:
rabbit:
image: rabbitmq:4-management-alpine
networks:
- - app
- - frontend
+ - app
+ - frontend
ports:
- "15672"
environment:
diff --git a/fixtures/oidc.yaml b/fixtures/oidc.yaml
index 3712104..26fcc88 100644
--- a/fixtures/oidc.yaml
+++ b/fixtures/oidc.yaml
@@ -1,8 +1,8 @@
# @see https://fakerphp.github.io/formatters/
App\Entity\OIDC:
- oidcservice_certificate/dev.example.com:
- domain: 'dev.example.com'
- expirationTime: <(new DateTime('+2 years'))>
- onePasswordUrl: 'https://example.com/1password'
- usageDocumentationUrl: https://example.com/example.com/README.md#oidc
- type: 'stg'
+ oidcservice_certificate/dev.example.com:
+ domain: "dev.example.com"
+ expirationTime: <(new DateTime('+2 years'))>
+ onePasswordUrl: "https://example.com/1password"
+ usageDocumentationUrl: https://example.com/example.com/README.md#oidc
+ type: "stg"
diff --git a/fixtures/server.yaml b/fixtures/server.yaml
index 8fb9bf3..c23095a 100644
--- a/fixtures/server.yaml
+++ b/fixtures/server.yaml
@@ -1,17 +1,17 @@
App\Entity\Server:
- server_{1..10}:
- # A server id is needed by App\Entity\DetectionResult::generateHash().
- id: '<(new Symfony\Component\Uid\Ulid())>'
- apiKey:
- name:
- hostingProvider:
- internalIp:
- externalIp:
- aarhusSsl:
- letsEncryptSsl:
- veeam:
- azureBackup:
- monitoring:
- databaseVersion:
- system:
- type:
+ server_{1..10}:
+ # A server id is needed by App\Entity\DetectionResult::generateHash().
+ id: '<(new Symfony\Component\Uid\Ulid())>'
+ apiKey:
+ name:
+ hostingProvider:
+ internalIp:
+ externalIp:
+ aarhusSsl:
+ letsEncryptSsl:
+ veeam:
+ azureBackup:
+ monitoring:
+ databaseVersion:
+ system:
+ type:
diff --git a/fixtures/service_certificates.yaml b/fixtures/service_certificates.yaml
index 76c0a0d..66c8cd6 100644
--- a/fixtures/service_certificates.yaml
+++ b/fixtures/service_certificates.yaml
@@ -1,30 +1,30 @@
# @see https://fakerphp.github.io/formatters/
App\Entity\ServiceCertificate:
- service_certificate/dev.example.com:
- domain: 'dev.example.com'
- name: 'CPR-opslag'
- description: |
- Bruges til opslag af CPR-numre.
- onePasswordUrl: 'https://example.com/1password'
- expirationTime: <(new DateTime('+2 years'))>
- usageDocumentationUrl: https://example.com/example.com/README.md#certificates
+ service_certificate/dev.example.com:
+ domain: "dev.example.com"
+ name: "CPR-opslag"
+ description: |
+ Bruges til opslag af CPR-numre.
+ onePasswordUrl: "https://example.com/1password"
+ expirationTime: <(new DateTime('+2 years'))>
+ usageDocumentationUrl: https://example.com/example.com/README.md#certificates
- service_certificate/prod.example.com:
- domain: 'prod.example.com'
- name: 'CVR-opslag'
- description: |
- Bruges til opslag af CVR-numre.
- onePasswordUrl: 'https://example.com/1password'
- expirationTime: <(new DateTime('+4 years'))>
- usageDocumentationUrl: https://example.com/example.com/README.md#certificates
+ service_certificate/prod.example.com:
+ domain: "prod.example.com"
+ name: "CVR-opslag"
+ description: |
+ Bruges til opslag af CVR-numre.
+ onePasswordUrl: "https://example.com/1password"
+ expirationTime: <(new DateTime('+4 years'))>
+ usageDocumentationUrl: https://example.com/example.com/README.md#certificates
App\Entity\ServiceCertificate\Service:
- service/dev.example.com/service_certificate/digital-post:
- certificate: '@service_certificate/dev.example.com'
- type: 'digital post'
- onePasswordUrl: 'https://example.com/1password'
+ service/dev.example.com/service_certificate/digital-post:
+ certificate: "@service_certificate/dev.example.com"
+ type: "digital post"
+ onePasswordUrl: "https://example.com/1password"
- service/dev.example.com/service_certificate/cpr-lookup:
- certificate: '@service_certificate/dev.example.com'
- type: 'cpr lookup'
- onePasswordUrl: 'https://example.com/1password'
+ service/dev.example.com/service_certificate/cpr-lookup:
+ certificate: "@service_certificate/dev.example.com"
+ type: "cpr lookup"
+ onePasswordUrl: "https://example.com/1password"
diff --git a/fixtures/site.yaml b/fixtures/site.yaml
index 4c19d2d..1e321b1 100644
--- a/fixtures/site.yaml
+++ b/fixtures/site.yaml
@@ -1,83 +1,83 @@
App\Entity\DetectionResult:
- detection_result/dev.example.com:
- server: '@server_1'
- type: 'nginx'
- rootDir: '/data/www/dev.example.com/htdocs/public'
- data: |
- {
- "domain": "dev.example.com",
- "phpVersion": "8.2",
- "config": "/etc/nginx/sites-enabled/dev.example.com"
- }
- __calls:
- - generateHash: []
- - setLastContact: []
+ detection_result/dev.example.com:
+ server: "@server_1"
+ type: "nginx"
+ rootDir: "/data/www/dev.example.com/htdocs/public"
+ data: |
+ {
+ "domain": "dev.example.com",
+ "phpVersion": "8.2",
+ "config": "/etc/nginx/sites-enabled/dev.example.com"
+ }
+ __calls:
+ - generateHash: []
+ - setLastContact: []
- detection_result/test.example.com:
- server: '@server_1'
- type: 'nginx'
- rootDir: '/data/www/test.example.com/htdocs/public'
- data: |
- {
- "domain": "test.example.com",
- "phpVersion": "8.2",
- "config": "/etc/nginx/sites-enabled/test.example.com"
- }
- __calls:
- - generateHash: []
- - setLastContact: []
+ detection_result/test.example.com:
+ server: "@server_1"
+ type: "nginx"
+ rootDir: "/data/www/test.example.com/htdocs/public"
+ data: |
+ {
+ "domain": "test.example.com",
+ "phpVersion": "8.2",
+ "config": "/etc/nginx/sites-enabled/test.example.com"
+ }
+ __calls:
+ - generateHash: []
+ - setLastContact: []
- detection_result/prod.example.com:
- server: '@server_1'
- type: 'nginx'
- rootDir: '/data/www/prod.example.com/htdocs/public'
- data: |
- {
- "domain": "prod.example.com",
- "phpVersion": "8.2",
- "config": "/etc/nginx/sites-enabled/prod.example.com"
- }
- __calls:
- - generateHash: []
- - setLastContact: []
+ detection_result/prod.example.com:
+ server: "@server_1"
+ type: "nginx"
+ rootDir: "/data/www/prod.example.com/htdocs/public"
+ data: |
+ {
+ "domain": "prod.example.com",
+ "phpVersion": "8.2",
+ "config": "/etc/nginx/sites-enabled/prod.example.com"
+ }
+ __calls:
+ - generateHash: []
+ - setLastContact: []
App\Entity\Domain:
- domain/dev.example.com:
- rootDir: '/tmp'
- address: 'dev.example.com'
- detectionResult: '@detection_result/dev.example.com'
- domain/test.example.com:
- rootDir: '/tmp'
- address: 'test.example.com'
- detectionResult: '@detection_result/test.example.com'
- domain/prod.example.com:
- rootDir: '/tmp'
- address: 'prod.example.com'
- detectionResult: '@detection_result/prod.example.com'
+ domain/dev.example.com:
+ rootDir: "/tmp"
+ address: "dev.example.com"
+ detectionResult: "@detection_result/dev.example.com"
+ domain/test.example.com:
+ rootDir: "/tmp"
+ address: "test.example.com"
+ detectionResult: "@detection_result/test.example.com"
+ domain/prod.example.com:
+ rootDir: "/tmp"
+ address: "prod.example.com"
+ detectionResult: "@detection_result/prod.example.com"
App\Entity\Installation:
- installation/dev.example.com:
- rootDir: '/tmp'
- detectionResult: '@detection_result/dev.example.com'
+ installation/dev.example.com:
+ rootDir: "/tmp"
+ detectionResult: "@detection_result/dev.example.com"
- installation/prod.example.com:
- rootDir: '/tmp'
- detectionResult: '@detection_result/prod.example.com'
+ installation/prod.example.com:
+ rootDir: "/tmp"
+ detectionResult: "@detection_result/prod.example.com"
App\Entity\Site:
- site/dev.example.com:
- server: '@server_1'
- detectionResult: '@detection_result/dev.example.com'
- rootDir: '/data/www/dev.example.com/htdocs/public'
- installation: '@installation/dev.example.com'
- __calls:
- - addDomain: ['@domain/dev.example.com']
+ site/dev.example.com:
+ server: "@server_1"
+ detectionResult: "@detection_result/dev.example.com"
+ rootDir: "/data/www/dev.example.com/htdocs/public"
+ installation: "@installation/dev.example.com"
+ __calls:
+ - addDomain: ["@domain/dev.example.com"]
- site/prod.example.com:
- server: '@server_1'
- detectionResult: '@detection_result/prod.example.com'
- rootDir: '/data/www/prod.example.com/htdocs/public'
- installation: '@installation/prod.example.com'
- __calls:
- - addDomain: ['@domain/prod.example.com']
- - addDomain: ['@domain/test.example.com']
+ site/prod.example.com:
+ server: "@server_1"
+ detectionResult: "@detection_result/prod.example.com"
+ rootDir: "/data/www/prod.example.com/htdocs/public"
+ installation: "@installation/prod.example.com"
+ __calls:
+ - addDomain: ["@domain/prod.example.com"]
+ - addDomain: ["@domain/test.example.com"]
diff --git a/fixtures/user.yaml b/fixtures/user.yaml
index ec4cfd7..de04a82 100644
--- a/fixtures/user.yaml
+++ b/fixtures/user.yaml
@@ -1,5 +1,3 @@
App\Entity\User:
- user_admin:
- __construct: [
- 'admin@example.com', 'Admin', [ROLE_ADMIN]
- ]
+ user_admin:
+ __construct: ["admin@example.com", "Admin", [ROLE_ADMIN]]
diff --git a/public/api-spec-v1.yaml b/public/api-spec-v1.yaml
index c8a4009..39587ec 100755
--- a/public/api-spec-v1.yaml
+++ b/public/api-spec-v1.yaml
@@ -1,245 +1,242 @@
openapi: 3.1.0
info:
- title: ''
- description: ''
- version: 0.0.0
+ title: ""
+ description: ""
+ version: 0.0.0
servers:
- -
- url: /
- description: ''
+ - url: /
+ description: ""
paths:
- /api/detection_results:
- post:
- operationId: api_detection_results_post
- tags:
- - DetectionResult
- responses:
- '202':
- description: 'DetectionResult resource created'
- content:
- application/json:
- schema: { }
- application/ld+json:
- schema: { }
- links: { }
- '400':
- description: 'Invalid input'
- content:
- application/ld+json:
- schema:
- $ref: '#/components/schemas/Error.jsonld'
- application/problem+json:
- schema:
- $ref: '#/components/schemas/Error'
- application/json:
- schema:
- $ref: '#/components/schemas/Error'
- links: { }
- '422':
- description: 'An error occurred'
- content:
- application/ld+json:
- schema:
- $ref: '#/components/schemas/ConstraintViolation.jsonld-jsonld'
- application/problem+json:
- schema:
- $ref: '#/components/schemas/ConstraintViolation-json'
- application/json:
- schema:
- $ref: '#/components/schemas/ConstraintViolation-json'
- links: { }
- summary: 'Creates a DetectionResult resource.'
- description: 'Creates a DetectionResult resource.'
- parameters: []
- requestBody:
- description: 'The new DetectionResult resource'
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/DetectionResult-write'
- application/ld+json:
- schema:
- $ref: '#/components/schemas/DetectionResult-write'
- required: true
- deprecated: false
+ /api/detection_results:
+ post:
+ operationId: api_detection_results_post
+ tags:
+ - DetectionResult
+ responses:
+ "202":
+ description: "DetectionResult resource created"
+ content:
+ application/json:
+ schema: {}
+ application/ld+json:
+ schema: {}
+ links: {}
+ "400":
+ description: "Invalid input"
+ content:
+ application/ld+json:
+ schema:
+ $ref: "#/components/schemas/Error.jsonld"
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/Error"
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Error"
+ links: {}
+ "422":
+ description: "An error occurred"
+ content:
+ application/ld+json:
+ schema:
+ $ref: "#/components/schemas/ConstraintViolation.jsonld-jsonld"
+ application/problem+json:
+ schema:
+ $ref: "#/components/schemas/ConstraintViolation-json"
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ConstraintViolation-json"
+ links: {}
+ summary: "Creates a DetectionResult resource."
+ description: "Creates a DetectionResult resource."
+ parameters: []
+ requestBody:
+ description: "The new DetectionResult resource"
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/DetectionResult-write"
+ application/ld+json:
+ schema:
+ $ref: "#/components/schemas/DetectionResult-write"
+ required: true
+ deprecated: false
components:
- schemas:
- ConstraintViolation-json:
- type: object
- description: 'Unprocessable entity'
- deprecated: false
- properties:
- status:
- default: 422
- example: 422
- type: integer
- violations:
- type: array
- items:
+ schemas:
+ ConstraintViolation-json:
type: object
+ description: "Unprocessable entity"
+ deprecated: false
properties:
- propertyPath:
- type: string
- description: 'The property path of the violation'
- message:
- type: string
- description: 'The message associated with the violation'
- detail:
- readOnly: true
- type: string
- type:
- readOnly: true
- type: string
- title:
- readOnly: true
- type:
- - string
- - 'null'
- instance:
- readOnly: true
- type:
- - string
- - 'null'
- ConstraintViolation.jsonld-jsonld:
- type: object
- description: 'Unprocessable entity'
- deprecated: false
- properties:
- status:
- default: 422
- example: 422
- type: integer
- violations:
- type: array
- items:
+ status:
+ default: 422
+ example: 422
+ type: integer
+ violations:
+ type: array
+ items:
+ type: object
+ properties:
+ propertyPath:
+ type: string
+ description: "The property path of the violation"
+ message:
+ type: string
+ description: "The message associated with the violation"
+ detail:
+ readOnly: true
+ type: string
+ type:
+ readOnly: true
+ type: string
+ title:
+ readOnly: true
+ type:
+ - string
+ - "null"
+ instance:
+ readOnly: true
+ type:
+ - string
+ - "null"
+ ConstraintViolation.jsonld-jsonld:
type: object
+ description: "Unprocessable entity"
+ deprecated: false
properties:
- propertyPath:
- type: string
- description: 'The property path of the violation'
- message:
- type: string
- description: 'The message associated with the violation'
- detail:
- readOnly: true
- type: string
- description:
- readOnly: true
- type: string
- type:
- readOnly: true
- type: string
- title:
- readOnly: true
- type:
- - string
- - 'null'
- instance:
- readOnly: true
- type:
- - string
- - 'null'
- DetectionResult-write:
- type: object
- description: ''
- deprecated: false
- properties:
- type:
- default: ''
- example: ''
- type: string
- rootDir:
- default: ''
- example: ''
- type: string
- data:
- default: ''
- example: ''
- type: string
- Error:
- type: object
- description: 'A representation of common errors.'
- deprecated: false
- properties:
- title:
- readOnly: true
- description: 'A short, human-readable summary of the problem.'
- type:
- - string
- - 'null'
- detail:
- readOnly: true
- description: 'A human-readable explanation specific to this occurrence of the problem.'
- type:
- - string
- - 'null'
- status:
- type: number
- examples:
- - 404
- default: 400
- instance:
- readOnly: true
- description: 'A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced.'
- type:
- - string
- - 'null'
- type:
- readOnly: true
- description: 'A URI reference that identifies the problem type'
- type: string
- Error.jsonld:
- type: object
- description: 'A representation of common errors.'
- deprecated: false
- properties:
- title:
- readOnly: true
- description: 'A short, human-readable summary of the problem.'
- type:
- - string
- - 'null'
- detail:
- readOnly: true
- description: 'A human-readable explanation specific to this occurrence of the problem.'
- type:
- - string
- - 'null'
- status:
- type: number
- examples:
- - 404
- default: 400
- instance:
- readOnly: true
- description: 'A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced.'
- type:
- - string
- - 'null'
- type:
- readOnly: true
- description: 'A URI reference that identifies the problem type'
- type: string
- description:
- readOnly: true
- type:
- - string
- - 'null'
- responses: { }
- parameters: { }
- examples: { }
- requestBodies: { }
- headers: { }
- securitySchemes:
- apiKey:
- type: apiKey
- description: 'Value for the Authorization header parameter.'
- name: Authorization
- in: header
+ status:
+ default: 422
+ example: 422
+ type: integer
+ violations:
+ type: array
+ items:
+ type: object
+ properties:
+ propertyPath:
+ type: string
+ description: "The property path of the violation"
+ message:
+ type: string
+ description: "The message associated with the violation"
+ detail:
+ readOnly: true
+ type: string
+ description:
+ readOnly: true
+ type: string
+ type:
+ readOnly: true
+ type: string
+ title:
+ readOnly: true
+ type:
+ - string
+ - "null"
+ instance:
+ readOnly: true
+ type:
+ - string
+ - "null"
+ DetectionResult-write:
+ type: object
+ description: ""
+ deprecated: false
+ properties:
+ type:
+ default: ""
+ example: ""
+ type: string
+ rootDir:
+ default: ""
+ example: ""
+ type: string
+ data:
+ default: ""
+ example: ""
+ type: string
+ Error:
+ type: object
+ description: "A representation of common errors."
+ deprecated: false
+ properties:
+ title:
+ readOnly: true
+ description: "A short, human-readable summary of the problem."
+ type:
+ - string
+ - "null"
+ detail:
+ readOnly: true
+ description: "A human-readable explanation specific to this occurrence of the problem."
+ type:
+ - string
+ - "null"
+ status:
+ type: number
+ examples:
+ - 404
+ default: 400
+ instance:
+ readOnly: true
+ description: "A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced."
+ type:
+ - string
+ - "null"
+ type:
+ readOnly: true
+ description: "A URI reference that identifies the problem type"
+ type: string
+ Error.jsonld:
+ type: object
+ description: "A representation of common errors."
+ deprecated: false
+ properties:
+ title:
+ readOnly: true
+ description: "A short, human-readable summary of the problem."
+ type:
+ - string
+ - "null"
+ detail:
+ readOnly: true
+ description: "A human-readable explanation specific to this occurrence of the problem."
+ type:
+ - string
+ - "null"
+ status:
+ type: number
+ examples:
+ - 404
+ default: 400
+ instance:
+ readOnly: true
+ description: "A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced."
+ type:
+ - string
+ - "null"
+ type:
+ readOnly: true
+ description: "A URI reference that identifies the problem type"
+ type: string
+ description:
+ readOnly: true
+ type:
+ - string
+ - "null"
+ responses: {}
+ parameters: {}
+ examples: {}
+ requestBodies: {}
+ headers: {}
+ securitySchemes:
+ apiKey:
+ type: apiKey
+ description: "Value for the Authorization header parameter."
+ name: Authorization
+ in: header
security:
- -
- apiKey: []
+ - apiKey: []
tags:
- -
- name: DetectionResult
-webhooks: { }
+ - name: DetectionResult
+webhooks: {}
From 32b61437c7351560d74e1f63bb15f7ef768784a0 Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Tue, 14 Oct 2025 18:50:47 +0200
Subject: [PATCH 12/31] 5564: Add api spec to prettier ignore
---
.prettierignore | 2 +
public/api-spec-v1.yaml | 465 ++++++++++++++++++++--------------------
2 files changed, 236 insertions(+), 231 deletions(-)
create mode 100644 .prettierignore
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000..bb35050
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,2 @@
+# API spec
+public/api-spec-v1.yaml
diff --git a/public/api-spec-v1.yaml b/public/api-spec-v1.yaml
index 39587ec..c8a4009 100755
--- a/public/api-spec-v1.yaml
+++ b/public/api-spec-v1.yaml
@@ -1,242 +1,245 @@
openapi: 3.1.0
info:
- title: ""
- description: ""
- version: 0.0.0
+ title: ''
+ description: ''
+ version: 0.0.0
servers:
- - url: /
- description: ""
+ -
+ url: /
+ description: ''
paths:
- /api/detection_results:
- post:
- operationId: api_detection_results_post
- tags:
- - DetectionResult
- responses:
- "202":
- description: "DetectionResult resource created"
- content:
- application/json:
- schema: {}
- application/ld+json:
- schema: {}
- links: {}
- "400":
- description: "Invalid input"
- content:
- application/ld+json:
- schema:
- $ref: "#/components/schemas/Error.jsonld"
- application/problem+json:
- schema:
- $ref: "#/components/schemas/Error"
- application/json:
- schema:
- $ref: "#/components/schemas/Error"
- links: {}
- "422":
- description: "An error occurred"
- content:
- application/ld+json:
- schema:
- $ref: "#/components/schemas/ConstraintViolation.jsonld-jsonld"
- application/problem+json:
- schema:
- $ref: "#/components/schemas/ConstraintViolation-json"
- application/json:
- schema:
- $ref: "#/components/schemas/ConstraintViolation-json"
- links: {}
- summary: "Creates a DetectionResult resource."
- description: "Creates a DetectionResult resource."
- parameters: []
- requestBody:
- description: "The new DetectionResult resource"
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/DetectionResult-write"
- application/ld+json:
- schema:
- $ref: "#/components/schemas/DetectionResult-write"
- required: true
- deprecated: false
+ /api/detection_results:
+ post:
+ operationId: api_detection_results_post
+ tags:
+ - DetectionResult
+ responses:
+ '202':
+ description: 'DetectionResult resource created'
+ content:
+ application/json:
+ schema: { }
+ application/ld+json:
+ schema: { }
+ links: { }
+ '400':
+ description: 'Invalid input'
+ content:
+ application/ld+json:
+ schema:
+ $ref: '#/components/schemas/Error.jsonld'
+ application/problem+json:
+ schema:
+ $ref: '#/components/schemas/Error'
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Error'
+ links: { }
+ '422':
+ description: 'An error occurred'
+ content:
+ application/ld+json:
+ schema:
+ $ref: '#/components/schemas/ConstraintViolation.jsonld-jsonld'
+ application/problem+json:
+ schema:
+ $ref: '#/components/schemas/ConstraintViolation-json'
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ConstraintViolation-json'
+ links: { }
+ summary: 'Creates a DetectionResult resource.'
+ description: 'Creates a DetectionResult resource.'
+ parameters: []
+ requestBody:
+ description: 'The new DetectionResult resource'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/DetectionResult-write'
+ application/ld+json:
+ schema:
+ $ref: '#/components/schemas/DetectionResult-write'
+ required: true
+ deprecated: false
components:
- schemas:
- ConstraintViolation-json:
+ schemas:
+ ConstraintViolation-json:
+ type: object
+ description: 'Unprocessable entity'
+ deprecated: false
+ properties:
+ status:
+ default: 422
+ example: 422
+ type: integer
+ violations:
+ type: array
+ items:
type: object
- description: "Unprocessable entity"
- deprecated: false
properties:
- status:
- default: 422
- example: 422
- type: integer
- violations:
- type: array
- items:
- type: object
- properties:
- propertyPath:
- type: string
- description: "The property path of the violation"
- message:
- type: string
- description: "The message associated with the violation"
- detail:
- readOnly: true
- type: string
- type:
- readOnly: true
- type: string
- title:
- readOnly: true
- type:
- - string
- - "null"
- instance:
- readOnly: true
- type:
- - string
- - "null"
- ConstraintViolation.jsonld-jsonld:
+ propertyPath:
+ type: string
+ description: 'The property path of the violation'
+ message:
+ type: string
+ description: 'The message associated with the violation'
+ detail:
+ readOnly: true
+ type: string
+ type:
+ readOnly: true
+ type: string
+ title:
+ readOnly: true
+ type:
+ - string
+ - 'null'
+ instance:
+ readOnly: true
+ type:
+ - string
+ - 'null'
+ ConstraintViolation.jsonld-jsonld:
+ type: object
+ description: 'Unprocessable entity'
+ deprecated: false
+ properties:
+ status:
+ default: 422
+ example: 422
+ type: integer
+ violations:
+ type: array
+ items:
type: object
- description: "Unprocessable entity"
- deprecated: false
properties:
- status:
- default: 422
- example: 422
- type: integer
- violations:
- type: array
- items:
- type: object
- properties:
- propertyPath:
- type: string
- description: "The property path of the violation"
- message:
- type: string
- description: "The message associated with the violation"
- detail:
- readOnly: true
- type: string
- description:
- readOnly: true
- type: string
- type:
- readOnly: true
- type: string
- title:
- readOnly: true
- type:
- - string
- - "null"
- instance:
- readOnly: true
- type:
- - string
- - "null"
- DetectionResult-write:
- type: object
- description: ""
- deprecated: false
- properties:
- type:
- default: ""
- example: ""
- type: string
- rootDir:
- default: ""
- example: ""
- type: string
- data:
- default: ""
- example: ""
- type: string
- Error:
- type: object
- description: "A representation of common errors."
- deprecated: false
- properties:
- title:
- readOnly: true
- description: "A short, human-readable summary of the problem."
- type:
- - string
- - "null"
- detail:
- readOnly: true
- description: "A human-readable explanation specific to this occurrence of the problem."
- type:
- - string
- - "null"
- status:
- type: number
- examples:
- - 404
- default: 400
- instance:
- readOnly: true
- description: "A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced."
- type:
- - string
- - "null"
- type:
- readOnly: true
- description: "A URI reference that identifies the problem type"
- type: string
- Error.jsonld:
- type: object
- description: "A representation of common errors."
- deprecated: false
- properties:
- title:
- readOnly: true
- description: "A short, human-readable summary of the problem."
- type:
- - string
- - "null"
- detail:
- readOnly: true
- description: "A human-readable explanation specific to this occurrence of the problem."
- type:
- - string
- - "null"
- status:
- type: number
- examples:
- - 404
- default: 400
- instance:
- readOnly: true
- description: "A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced."
- type:
- - string
- - "null"
- type:
- readOnly: true
- description: "A URI reference that identifies the problem type"
- type: string
- description:
- readOnly: true
- type:
- - string
- - "null"
- responses: {}
- parameters: {}
- examples: {}
- requestBodies: {}
- headers: {}
- securitySchemes:
- apiKey:
- type: apiKey
- description: "Value for the Authorization header parameter."
- name: Authorization
- in: header
+ propertyPath:
+ type: string
+ description: 'The property path of the violation'
+ message:
+ type: string
+ description: 'The message associated with the violation'
+ detail:
+ readOnly: true
+ type: string
+ description:
+ readOnly: true
+ type: string
+ type:
+ readOnly: true
+ type: string
+ title:
+ readOnly: true
+ type:
+ - string
+ - 'null'
+ instance:
+ readOnly: true
+ type:
+ - string
+ - 'null'
+ DetectionResult-write:
+ type: object
+ description: ''
+ deprecated: false
+ properties:
+ type:
+ default: ''
+ example: ''
+ type: string
+ rootDir:
+ default: ''
+ example: ''
+ type: string
+ data:
+ default: ''
+ example: ''
+ type: string
+ Error:
+ type: object
+ description: 'A representation of common errors.'
+ deprecated: false
+ properties:
+ title:
+ readOnly: true
+ description: 'A short, human-readable summary of the problem.'
+ type:
+ - string
+ - 'null'
+ detail:
+ readOnly: true
+ description: 'A human-readable explanation specific to this occurrence of the problem.'
+ type:
+ - string
+ - 'null'
+ status:
+ type: number
+ examples:
+ - 404
+ default: 400
+ instance:
+ readOnly: true
+ description: 'A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced.'
+ type:
+ - string
+ - 'null'
+ type:
+ readOnly: true
+ description: 'A URI reference that identifies the problem type'
+ type: string
+ Error.jsonld:
+ type: object
+ description: 'A representation of common errors.'
+ deprecated: false
+ properties:
+ title:
+ readOnly: true
+ description: 'A short, human-readable summary of the problem.'
+ type:
+ - string
+ - 'null'
+ detail:
+ readOnly: true
+ description: 'A human-readable explanation specific to this occurrence of the problem.'
+ type:
+ - string
+ - 'null'
+ status:
+ type: number
+ examples:
+ - 404
+ default: 400
+ instance:
+ readOnly: true
+ description: 'A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced.'
+ type:
+ - string
+ - 'null'
+ type:
+ readOnly: true
+ description: 'A URI reference that identifies the problem type'
+ type: string
+ description:
+ readOnly: true
+ type:
+ - string
+ - 'null'
+ responses: { }
+ parameters: { }
+ examples: { }
+ requestBodies: { }
+ headers: { }
+ securitySchemes:
+ apiKey:
+ type: apiKey
+ description: 'Value for the Authorization header parameter.'
+ name: Authorization
+ in: header
security:
- - apiKey: []
+ -
+ apiKey: []
tags:
- - name: DetectionResult
-webhooks: {}
+ -
+ name: DetectionResult
+webhooks: { }
From f1548aad1e91c392b85368f20e61771dad36630c Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Tue, 14 Oct 2025 18:56:04 +0200
Subject: [PATCH 13/31] 5564: Composer normalize
---
composer.json | 8 ++++----
composer.lock | 6 +++---
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/composer.json b/composer.json
index 685da54..b032c1b 100644
--- a/composer.json
+++ b/composer.json
@@ -21,8 +21,8 @@
"phpdocumentor/reflection-docblock": "^5.6.3",
"phpstan/phpdoc-parser": "^2.3",
"symfony/amqp-messenger": "^7.3.2",
- "symfony/asset": "7.3.*",
- "symfony/asset-mapper": "7.3.*",
+ "symfony/asset": "^7.3.0",
+ "symfony/asset-mapper": "^7.3.4",
"symfony/browser-kit": "^7.3.2",
"symfony/console": "^7.3.4",
"symfony/doctrine-messenger": "^7.3.4",
@@ -43,8 +43,8 @@
"symfony/validator": "^7.3.4",
"symfony/webpack-encore-bundle": "^2.3",
"symfony/yaml": "^7.3.3",
- "twig/extra-bundle": "^2.12|^3.0",
- "twig/twig": "^2.12|^3.0"
+ "twig/extra-bundle": "^2.12 || ^3.21",
+ "twig/twig": "^2.12 || ^3.21.1"
},
"require-dev": {
"ergebnis/composer-normalize": "^2.48.2",
diff --git a/composer.lock b/composer.lock
index c7af645..ff3bcc3 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "27b62ec66b20f82b1b953f9b698bd714",
+ "content-hash": "23e908fe58ef72041cd16db5e898981d",
"packages": [
{
"name": "api-platform/core",
@@ -14222,7 +14222,7 @@
],
"aliases": [],
"minimum-stability": "dev",
- "stability-flags": [],
+ "stability-flags": {},
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
@@ -14230,6 +14230,6 @@
"ext-ctype": "*",
"ext-iconv": "*"
},
- "platform-dev": [],
+ "platform-dev": {},
"plugin-api-version": "2.6.0"
}
From 918deec8cb30fd5c93e800d57e8016740a574758 Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Tue, 14 Oct 2025 18:57:02 +0200
Subject: [PATCH 14/31] 5564: JS lint
---
assets/app.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/assets/app.js b/assets/app.js
index 6174cc6..e2824a5 100644
--- a/assets/app.js
+++ b/assets/app.js
@@ -4,6 +4,6 @@
* This file will be included onto the page via the importmap() Twig function,
* which should already be in your base.html.twig.
*/
-import './styles/app.css';
+import "./styles/app.css";
-console.log('This log comes from assets/app.js - welcome to AssetMapper! 🎉');
+console.log("This log comes from assets/app.js - welcome to AssetMapper! 🎉");
From 69528dc575622c3d3218964397d56dd97b416be2 Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Tue, 14 Oct 2025 18:59:26 +0200
Subject: [PATCH 15/31] 5564: Markdown lint
---
CHANGELOG.md | 2 +-
README.md | 7 ++++++-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d25da1f..b1bf9dd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -67,7 +67,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Upgrade to: Symfony 7.2, Doctrine ORM 3.x / DBAL 4.x, Api-platform 4.0, PhpUnit 11 with dependencies
- Switch to PHPStan
- Added cleanup for detection results
-- Refactor rootDir normalization to ensure values are always normalized, fix type errors,
+- Refactor rootDir normalization to ensure values are always normalized, fix type errors,
- Fix various values not being set
## [1.7.1] - 2024-11-08
diff --git a/README.md b/README.md
index a1fc813..72b2dff 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,6 @@
[](https://github.com/itk-dev/devops_itksites/commits/develop/)
[](https://github.com/itk-dev/devops_itksites/blob/develop/LICENSE)
-
This is our internal server and site registration tool. It works in tandem with our
[ITK sites server harvester](https://github.com/itk-dev/devops_itkServerHarvest).
The harvester is installed by default on all servers, and runs at intervals and collects
@@ -15,6 +14,7 @@ information about sites and installations running on the server. These are sent
`DetectionResults` to ITKsites where they are analysed and processed.
This allows us to monitor
+
* What is installed and running
* Which sites/domains we are hosting
* What docker images we are running
@@ -23,6 +23,7 @@ This allows us to monitor
* What git repositories we are hosting
Additionally we can register and document
+
* All OpenID Connect setups
* All Services Certificates
@@ -30,6 +31,7 @@ Servers, OpenID Connect setups, Services Certificates must be created and mainta
All other information is kept up to date by analysing the DetectionResults.
## Architecture
+
This is a Symfony 6 project build with api-platform 3.x and EasyAdmin.
Api-platform provides a simple REST api for POST'ing the DetectionResults.
@@ -54,6 +56,7 @@ docker compose exec phpfpm bin/console doctrine:migrations:migrate --no-interact
Then create a `.env.local` file to set secrets for your local setup.
### OpenID Connect
+
All users access is controlled by OpenID Connect. For local development you must
add the following to your `.env.local` file:
@@ -94,11 +97,13 @@ docker compose exec phpfpm bin/console itk-dev:openid-connect:login admin@exampl
All processing of Detctionresults is done in a series of message handlers. To
run these do either:
+
```shell
docker compose exec phpfpm composer queues
```
or
+
```shell
docker compose exec phpfpm bin/console messenger:consume async --failure-limit=1 -vvv
```
From ad0a2f4afaed3efcebe80aeacdac8c448b7fca84 Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Tue, 14 Oct 2025 19:00:29 +0200
Subject: [PATCH 16/31] 5564: CSS lint
---
assets/styles/app.css | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/assets/styles/app.css b/assets/styles/app.css
index 853c0f8..2e8af7a 100644
--- a/assets/styles/app.css
+++ b/assets/styles/app.css
@@ -2,14 +2,14 @@
--body-max-width: 100%;
--sidebar-bg: #fff;
/* make the base font size smaller */
- --button-primary-bg: rgb(0,123,166);
- --pagination-active-bg: rgb(0,123,166);
- --link-color: rgb(0,123,166);
- --sidebar-menu-active-item-color: rgb(0,123,166);
- --badge-boolean-true-bg: rgb(0,123,166);
+ --button-primary-bg: rgb(0, 123, 166);
+ --pagination-active-bg: rgb(0, 123, 166);
+ --link-color: rgb(0, 123, 166);
+ --sidebar-menu-active-item-color: rgb(0, 123, 166);
+ --badge-boolean-true-bg: rgb(0, 123, 166);
--badge-boolean-false-bg: rgb(228, 73, 48);
--badge-boolean-false-color: var(--white);
- --sidebar-menu-color: rgb(66,66,66);
- --text-color-dark: rgb(66,66,66);
+ --sidebar-menu-color: rgb(66, 66, 66);
+ --text-color-dark: rgb(66, 66, 66);
--bs-danger-rgb: 228, 73, 48;
-}
\ No newline at end of file
+}
From 180faff23f477725947b30e965a9010c23ace70d Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Fri, 17 Oct 2025 12:52:38 +0200
Subject: [PATCH 17/31] 5564: Remove redundant psalm config
---
Taskfile.yml | 203 +++++++++++++++++++++++++++++++++++++++++++++++++++
psalm.xml | 27 -------
2 files changed, 203 insertions(+), 27 deletions(-)
create mode 100644 Taskfile.yml
delete mode 100644 psalm.xml
diff --git a/Taskfile.yml b/Taskfile.yml
new file mode 100644
index 0000000..0785dc0
--- /dev/null
+++ b/Taskfile.yml
@@ -0,0 +1,203 @@
+# https://taskfile.dev
+
+version: "3"
+
+# https://taskfile.dev/usage/#env-files
+dotenv: [".env.local", ".env"]
+
+vars:
+ # https://taskfile.dev/reference/templating/
+ DOCKER_COMPOSE: '{{.TASK_DOCKER_COMPOSE | default "docker compose"}}'
+
+tasks:
+ site:update:
+ desc: Update/install site
+ cmds:
+ - task: compose
+ vars:
+ COMPOSE_ARGS: pull
+ - task: compose
+ vars:
+ COMPOSE_ARGS: up --detach --wait
+ - task: composer
+ vars:
+ COMPOSER_ARGS: install
+
+ fixtures:load:
+ desc: Load all fixtures
+ prompt: Really load all fixtures?
+ cmds:
+ - for:
+ - events
+ - organizations
+ - occurrences
+ - daily_occurrences
+ - tags
+ - vocabularies
+ - locations
+ task: compose
+ vars:
+ COMPOSE_ARGS: exec phpfpm bin/console app:fixtures:load {{.ITEM}}
+ # Loading some fixtures generates an 'Warning: Undefined array key "entityId"' error.
+ ignore_error: true
+ silent: true
+
+ fixtures:load:test:
+ desc: Load local fixtures
+ prompt: Really load all local fixtures?
+ cmds:
+ - for:
+ - events
+ - organizations
+ - occurrences
+ - daily_occurrences
+ - tags
+ - vocabularies
+ - locations
+ task: compose
+ vars:
+ COMPOSE_ARGS: exec phpfpm bin/console app:fixtures:load {{.ITEM}} --url=file:///app/tests/resources/{{.ITEM}}.json
+ # Loading some fixtures generates an 'Warning: Undefined array key "entityId"' error.
+ ignore_error: true
+
+ composer:
+ desc: "Run `composer` command. Example: task composer -- normalize"
+ cmds:
+ - task: compose
+ vars:
+ COMPOSE_ARGS: exec phpfpm composer {{.COMPOSER_ARGS}}
+
+ compose:
+ desc: "Run `docker compose` command. Example: task compose -- ps"
+ cmds:
+ # Run docker compose with both arguments passed via var plus any cli args.
+ - "{{.DOCKER_COMPOSE}} {{.COMPOSE_ARGS}} {{.CLI_ARGS}}"
+
+ console:
+ desc: "Run Symfony console command. Example: task console -- cache:clear"
+ cmds:
+ # Run docker compose with both arguments passed via var plus any cli args.
+ - task: compose
+ vars:
+ COMPOSE_ARGS: exec phpfpm bin/console {{.CONSOLE_ARGS}}
+
+ coding-standards:apply:
+ desc: "Apply coding standards"
+ cmds:
+ - task: coding-standards:markdown:apply
+ - task: coding-standards:php:apply
+ - task: coding-standards:twig:apply
+ - task: coding-standards:yaml:apply
+ silent: true
+
+ coding-standards:check:
+ desc: "Apply coding standards"
+ cmds:
+ - task: coding-standards:markdown:check
+ - task: coding-standards:php:check
+ - task: coding-standards:twig:check
+ - task: coding-standards:yaml:check
+ silent: true
+
+ coding-standards:markdown:apply:
+ desc: "Apply coding standards for Markdown"
+ cmds:
+ - task: compose
+ vars:
+ COMPOSE_ARGS: run --rm markdownlint markdownlint '**/*.md' --fix
+
+ coding-standards:markdown:check:
+ desc: "Apply and check coding standards for Markdown"
+ cmds:
+ - task: coding-standards:markdown:apply
+ - task: compose
+ vars:
+ COMPOSE_ARGS: run --rm markdownlint markdownlint '**/*.md'
+
+ coding-standards:php:apply:
+ desc: "Apply coding standards for PHP"
+ cmds:
+ - task: compose
+ vars:
+ COMPOSE_ARGS: exec phpfpm vendor/bin/php-cs-fixer fix
+ silent: true
+
+ coding-standards:php:check:
+ desc: "Apply and check coding standards for PHP"
+ cmds:
+ - task: coding-standards:php:apply
+ - task: compose
+ vars:
+ COMPOSE_ARGS: exec phpfpm vendor/bin/php-cs-fixer check
+ silent: true
+
+ coding-standards:twig:apply:
+ desc: "Apply coding standards for Twig"
+ cmds:
+ - task: compose
+ vars:
+ COMPOSE_ARGS: exec phpfpm vendor/bin/twig-cs-fixer fix
+ silent: true
+
+ coding-standards:twig:check:
+ desc: "Apply and check coding standards for Twig"
+ cmds:
+ - task: coding-standards:twig:apply
+ - task: compose
+ vars:
+ COMPOSE_ARGS: exec phpfpm vendor/bin/twig-cs-fixer check
+ silent: true
+
+ coding-standards:yaml:apply:
+ desc: "Apply coding standards for YAML"
+ cmds:
+ - task: compose
+ vars:
+ COMPOSE_ARGS: run --rm prettier '**/*.{yml,yaml}' --write
+ silent: true
+
+ coding-standards:yaml:check:
+ desc: "Apply and check coding standards for YAML"
+ cmds:
+ - task: coding-standards:yaml:apply
+ - task: compose
+ vars:
+ COMPOSE_ARGS: run --rm prettier '**/*.{yml,yaml}' --check
+ silent: true
+
+ code-analysis:
+ desc: "Run code analysis"
+ cmds:
+ - task: code-analysis:phpstan
+ silent: true
+
+ code-analysis:phpstan:
+ desc: "Run PHPStan"
+ cmds:
+ - task: compose
+ vars:
+ COMPOSE_ARGS: exec phpfpm vendor/bin/phpstan
+ silent: true
+
+ api:test:
+ desc: Run API tests
+ cmds:
+ - task: compose
+ vars:
+ COMPOSE_ARGS: exec phpfpm bin/phpunit
+
+ api:spec:export:
+ desc: Export API spec
+ cmds:
+ - task: console
+ vars:
+ CONSOLE_ARGS: api:openapi:export --yaml --output=public/api-spec-v1.yaml --no-interaction
+ - task: console
+ vars:
+ CONSOLE_ARGS: api:openapi:export --json --output=public/api-spec-v1.json --no-interaction
+ silent: true
+
+ default:
+ cmds:
+ - task --list
+ silent: true
diff --git a/psalm.xml b/psalm.xml
deleted file mode 100644
index bedf5ac..0000000
--- a/psalm.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
From e2a30c7b65db9ca61570689ebc1f0d2f209f3777 Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Fri, 17 Oct 2025 12:53:07 +0200
Subject: [PATCH 18/31] 5564: Add Taskfile
---
Taskfile.yml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/Taskfile.yml b/Taskfile.yml
index 0785dc0..e3b6974 100644
--- a/Taskfile.yml
+++ b/Taskfile.yml
@@ -22,6 +22,12 @@ tasks:
- task: composer
vars:
COMPOSER_ARGS: install
+ - task: console
+ vars:
+ CONSOLE_ARGS: doctrine:migrations:migrate --no-interaction
+ - task: console
+ vars:
+ CONSOLE_ARGS: messenger:setup-transports
fixtures:load:
desc: Load all fixtures
From b3dece71ffae94f441dcb4ad9be8bd3e948cd3ad Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Fri, 17 Oct 2025 13:38:02 +0200
Subject: [PATCH 19/31] 5564: Move commands crom composer.json to taskfile,
cleanup actions
---
.github/workflows/changelog.yaml | 2 -
.github/workflows/composer.yaml | 2 -
.github/workflows/javascript.yaml | 2 -
.github/workflows/markdown.yaml | 2 -
.github/workflows/pr.yaml | 124 +++++++++++++++++-------------
.github/workflows/styles.yaml | 2 -
.github/workflows/twig.yaml | 2 -
.github/workflows/yaml.yaml | 2 +-
Taskfile.yml | 64 +++++++--------
composer.json | 26 +------
10 files changed, 103 insertions(+), 125 deletions(-)
diff --git a/.github/workflows/changelog.yaml b/.github/workflows/changelog.yaml
index 15297e3..9f5fead 100644
--- a/.github/workflows/changelog.yaml
+++ b/.github/workflows/changelog.yaml
@@ -14,8 +14,6 @@ on:
jobs:
changelog:
runs-on: ubuntu-latest
- strategy:
- fail-fast: false
steps:
- name: Checkout
uses: actions/checkout@v5
diff --git a/.github/workflows/composer.yaml b/.github/workflows/composer.yaml
index 9a56bd6..314a11b 100644
--- a/.github/workflows/composer.yaml
+++ b/.github/workflows/composer.yaml
@@ -38,8 +38,6 @@ on:
jobs:
composer-validate:
runs-on: ubuntu-latest
- strategy:
- fail-fast: false
steps:
- uses: actions/checkout@v5
diff --git a/.github/workflows/javascript.yaml b/.github/workflows/javascript.yaml
index bafc128..15f14b6 100644
--- a/.github/workflows/javascript.yaml
+++ b/.github/workflows/javascript.yaml
@@ -23,8 +23,6 @@ on:
jobs:
javascript-lint:
runs-on: ubuntu-latest
- strategy:
- fail-fast: false
steps:
- name: Checkout
uses: actions/checkout@v5
diff --git a/.github/workflows/markdown.yaml b/.github/workflows/markdown.yaml
index cdd8b4b..cf4c011 100644
--- a/.github/workflows/markdown.yaml
+++ b/.github/workflows/markdown.yaml
@@ -30,8 +30,6 @@ on:
jobs:
markdown-lint:
runs-on: ubuntu-latest
- strategy:
- fail-fast: false
steps:
- name: Checkout
uses: actions/checkout@v5
diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml
index 6dfe6ad..99b63a6 100644
--- a/.github/workflows/pr.yaml
+++ b/.github/workflows/pr.yaml
@@ -6,57 +6,77 @@ env:
on: pull_request
jobs:
- phpunit:
- name: PHP Unit tests
+ phpstan:
+ name: PHPStan static analysis
runs-on: ubuntu-latest
steps:
- - name: Checkout
- uses: actions/checkout@v5
-
- - name: Install site
- run: |
- docker network create frontend
- docker compose pull
- docker compose up --detach
- docker compose exec --user=root phpfpm composer install
- docker compose exec phpfpm bin/console doctrine:migrations:migrate --no-interaction
-
- - name: Run tests
- run: |
- docker compose exec phpfpm composer run tests
-
- fixtures:
- name: Load fixtures
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v5
- with:
- fetch-depth: 2
-
- - name: Install site
- run: |
- docker network create frontend
- docker compose pull
- docker compose up --detach
- docker compose exec --user=root phpfpm composer install
- docker compose exec phpfpm bin/console doctrine:migrations:migrate --no-interaction
-
- - name: Load fixtures
- run: |
- docker compose exec phpfpm composer fixtures
-
- build-assets:
- name: Build assets
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v3
- with:
- fetch-depth: 2
-
- - name: Build assets
- run: |
- docker network create frontend
- docker compose run --rm node yarn install
- docker compose run --rm node yarn build
+ phpstan:
+ name: PHPStan static analysis
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
+
+ - name: Create docker network
+ run: |
+ docker network create frontend
+
+ - name: Run phpstan
+ run: |
+ docker compose run --rm phpfpm composer install
+ docker compose run --rm phpfpm vendor/bin/phpstan analyse src --no-progress --error-format=github --memory-limit=1G
+
+ phpunit:
+ name: PHP Unit tests
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
+
+ - name: Install site
+ run: |
+ docker network create frontend
+ docker compose pull
+ docker compose up --detach
+ docker compose exec --user=root phpfpm composer install
+ docker compose exec phpfpm bin/console doctrine:migrations:migrate --no-interaction
+
+ - name: Run tests
+ run: |
+ docker compose exec phpfpm composer run tests
+
+ fixtures:
+ name: Load fixtures
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
+ with:
+ fetch-depth: 2
+
+ - name: Install site
+ run: |
+ docker network create frontend
+ docker compose pull
+ docker compose up --detach
+ docker compose exec --user=root phpfpm composer install
+ docker compose exec phpfpm bin/console doctrine:migrations:migrate --no-interaction
+
+ - name: Load fixtures
+ run: |
+ docker compose exec phpfpm composer fixtures
+
+ build-assets:
+ name: Build assets
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+ with:
+ fetch-depth: 2
+
+ - name: Build assets
+ run: |
+ docker network create frontend
+ docker compose run --rm node yarn install
+ docker compose run --rm node yarn build
diff --git a/.github/workflows/styles.yaml b/.github/workflows/styles.yaml
index 964cffb..985e56f 100644
--- a/.github/workflows/styles.yaml
+++ b/.github/workflows/styles.yaml
@@ -23,8 +23,6 @@ on:
jobs:
styles-lint:
runs-on: ubuntu-latest
- strategy:
- fail-fast: false
steps:
- name: Checkout
uses: actions/checkout@v5
diff --git a/.github/workflows/twig.yaml b/.github/workflows/twig.yaml
index 11b54ad..680a42d 100644
--- a/.github/workflows/twig.yaml
+++ b/.github/workflows/twig.yaml
@@ -36,8 +36,6 @@ on:
jobs:
twig-lint:
runs-on: ubuntu-latest
- strategy:
- fail-fast: false
steps:
- name: Checkout
uses: actions/checkout@v5
diff --git a/.github/workflows/yaml.yaml b/.github/workflows/yaml.yaml
index ba8ca52..3115e31 100644
--- a/.github/workflows/yaml.yaml
+++ b/.github/workflows/yaml.yaml
@@ -14,7 +14,7 @@
### #### Symfony YAML
###
### Symfony's YAML config files use 4 spaces for indentation and single quotes.
-### Therefore we use a [Prettier configuration
+### Therefore, we use a [Prettier configuration
### file](https://prettier.io/docs/configuration), `.prettierrc.yaml`, to make
### Prettier format YAML files in the `config/` folder like Symfony expects.
diff --git a/Taskfile.yml b/Taskfile.yml
index e3b6974..d4e3070 100644
--- a/Taskfile.yml
+++ b/Taskfile.yml
@@ -18,7 +18,7 @@ tasks:
COMPOSE_ARGS: pull
- task: compose
vars:
- COMPOSE_ARGS: up --detach --wait
+ COMPOSE_ARGS: up --detach
- task: composer
vars:
COMPOSER_ARGS: install
@@ -33,38 +33,10 @@ tasks:
desc: Load all fixtures
prompt: Really load all fixtures?
cmds:
- - for:
- - events
- - organizations
- - occurrences
- - daily_occurrences
- - tags
- - vocabularies
- - locations
- task: compose
- vars:
- COMPOSE_ARGS: exec phpfpm bin/console app:fixtures:load {{.ITEM}}
- # Loading some fixtures generates an 'Warning: Undefined array key "entityId"' error.
- ignore_error: true
- silent: true
-
- fixtures:load:test:
- desc: Load local fixtures
- prompt: Really load all local fixtures?
- cmds:
- - for:
- - events
- - organizations
- - occurrences
- - daily_occurrences
- - tags
- - vocabularies
- - locations
- task: compose
+ - task: console
vars:
- COMPOSE_ARGS: exec phpfpm bin/console app:fixtures:load {{.ITEM}} --url=file:///app/tests/resources/{{.ITEM}}.json
- # Loading some fixtures generates an 'Warning: Undefined array key "entityId"' error.
- ignore_error: true
+ CONSOLE_ARGS: hautelook:fixtures:load --no-interaction
+ silent: true
composer:
desc: "Run `composer` command. Example: task composer -- normalize"
@@ -185,15 +157,37 @@ tasks:
COMPOSE_ARGS: exec phpfpm vendor/bin/phpstan
silent: true
- api:test:
- desc: Run API tests
+ messenger:consume:
+ desc: "Run queue consumer"
+ cmds:
+ - task: console
+ vars:
+ CONSOLE_ARGS: bin/console messenger:consume async --failure-limit=1 -vvv
+
+ test:setup:
+ desc: "Setup test environment"
+ env:
+ APP_ENV: test
+ cmds:
+ - task: console
+ vars:
+ CONSOLE_ARGS: doctrine:database:create --if-not-exists --no-interaction
+ - task: console
+ vars:
+ CONSOLE_ARGS: doctrine:database:create --no-interaction --if-not-exists --quiet
+ - task: console
+ vars:
+ CONSOLE_ARGS: doctrine:migrations:migrate --no-interaction --quiet
+
+ test:run:
+ desc: "Run phpunit tests"
cmds:
- task: compose
vars:
COMPOSE_ARGS: exec phpfpm bin/phpunit
api:spec:export:
- desc: Export API spec
+ desc: "Export API spec"
cmds:
- task: console
vars:
diff --git a/composer.json b/composer.json
index b032c1b..13ac7b1 100644
--- a/composer.json
+++ b/composer.json
@@ -117,30 +117,6 @@
"cache:clear": "symfony-cmd",
"assets:install %PUBLIC_DIR%": "symfony-cmd",
"importmap:install": "symfony-cmd"
- },
- "coding-standards-apply": [
- "PHP_CS_FIXER_IGNORE_ENV=1 vendor/bin/php-cs-fixer fix",
- "vendor/bin/twig-cs-fixer --fix"
- ],
- "coding-standards-check": [
- "PHP_CS_FIXER_IGNORE_ENV=1 vendor/bin/php-cs-fixer fix --dry-run",
- "vendor/bin/twig-cs-fixer"
- ],
- "fixtures-load": [
- "bin/console hautelook:fixtures:load --no-interaction"
- ],
- "queues": [
- "bin/console messenger:consume async --failure-limit=1 -vvv"
- ],
- "tests": [
- "bin/console --env=test doctrine:database:drop --if-exists --force --quiet",
- "bin/console --env=test doctrine:database:create --no-interaction --if-not-exists --quiet",
- "bin/console --env=test doctrine:migrations:migrate --no-interaction --quiet",
- "vendor/bin/phpunit --stop-on-failure"
- ],
- "update-api-spec": [
- "bin/console api:openapi:export --output=public/api-spec-v1.yaml --yaml --no-interaction",
- "bin/console api:openapi:export --output=public/api-spec-v1.json --no-interaction"
- ]
+ }
}
}
From 129ac60fc103153c1439a17ce0e903514f9a449d Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Fri, 17 Oct 2025 13:41:02 +0200
Subject: [PATCH 20/31] 5564: Fix yaml indentation
---
.github/workflows/pr.yaml | 116 ++++++++++++++++++--------------------
1 file changed, 56 insertions(+), 60 deletions(-)
diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml
index 99b63a6..54e7e79 100644
--- a/.github/workflows/pr.yaml
+++ b/.github/workflows/pr.yaml
@@ -10,73 +10,69 @@ jobs:
name: PHPStan static analysis
runs-on: ubuntu-latest
steps:
- phpstan:
- name: PHPStan static analysis
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v5
+ - name: Checkout
+ uses: actions/checkout@v5
- - name: Create docker network
- run: |
- docker network create frontend
+ - name: Create docker network
+ run: |
+ docker network create frontend
- - name: Run phpstan
- run: |
- docker compose run --rm phpfpm composer install
- docker compose run --rm phpfpm vendor/bin/phpstan analyse src --no-progress --error-format=github --memory-limit=1G
+ - name: Run phpstan
+ run: |
+ docker compose run --rm phpfpm composer install
+ docker compose run --rm phpfpm vendor/bin/phpstan analyse src --no-progress --error-format=github --memory-limit=1G
- phpunit:
- name: PHP Unit tests
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v5
+ phpunit:
+ name: PHP Unit tests
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
- - name: Install site
- run: |
- docker network create frontend
- docker compose pull
- docker compose up --detach
- docker compose exec --user=root phpfpm composer install
- docker compose exec phpfpm bin/console doctrine:migrations:migrate --no-interaction
+ - name: Install site
+ run: |
+ docker network create frontend
+ docker compose pull
+ docker compose up --detach
+ docker compose exec --user=root phpfpm composer install
+ docker compose exec phpfpm bin/console doctrine:migrations:migrate --no-interaction
- - name: Run tests
- run: |
- docker compose exec phpfpm composer run tests
+ - name: Run tests
+ run: |
+ docker compose exec phpfpm composer run tests
- fixtures:
- name: Load fixtures
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v5
- with:
- fetch-depth: 2
+ fixtures:
+ name: Load fixtures
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v5
+ with:
+ fetch-depth: 2
- - name: Install site
- run: |
- docker network create frontend
- docker compose pull
- docker compose up --detach
- docker compose exec --user=root phpfpm composer install
- docker compose exec phpfpm bin/console doctrine:migrations:migrate --no-interaction
+ - name: Install site
+ run: |
+ docker network create frontend
+ docker compose pull
+ docker compose up --detach
+ docker compose exec --user=root phpfpm composer install
+ docker compose exec phpfpm bin/console doctrine:migrations:migrate --no-interaction
- - name: Load fixtures
- run: |
- docker compose exec phpfpm composer fixtures
+ - name: Load fixtures
+ run: |
+ docker compose exec phpfpm composer fixtures
- build-assets:
- name: Build assets
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v3
- with:
- fetch-depth: 2
+ build-assets:
+ name: Build assets
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+ with:
+ fetch-depth: 2
- - name: Build assets
- run: |
- docker network create frontend
- docker compose run --rm node yarn install
- docker compose run --rm node yarn build
+ - name: Build assets
+ run: |
+ docker network create frontend
+ docker compose run --rm node yarn install
+ docker compose run --rm node yarn build
From 23daf7a7cd06bec164a61aadd78fba6d4be28dea Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Fri, 17 Oct 2025 13:43:18 +0200
Subject: [PATCH 21/31] 5564: Update checkout action
---
.github/workflows/pr.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml
index 54e7e79..4e4ddde 100644
--- a/.github/workflows/pr.yaml
+++ b/.github/workflows/pr.yaml
@@ -67,7 +67,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v5
with:
fetch-depth: 2
From fe4eb24d94594cd42375d574b0609cf5da29650a Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Fri, 17 Oct 2025 14:03:21 +0200
Subject: [PATCH 22/31] 5564: Update test action to report code coverage
---
.github/workflows/pr.yaml | 73 ++++++++++++++++++++++++---------------
.gitignore | 1 +
Taskfile.yml | 7 ++--
3 files changed, 50 insertions(+), 31 deletions(-)
diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml
index 4e4ddde..628af19 100644
--- a/.github/workflows/pr.yaml
+++ b/.github/workflows/pr.yaml
@@ -6,57 +6,74 @@ env:
on: pull_request
jobs:
- phpstan:
- name: PHPStan static analysis
+ test-suite:
+ name: Test suite
runs-on: ubuntu-latest
steps:
- - name: Checkout
- uses: actions/checkout@v5
+ - uses: actions/checkout@v5
- - name: Create docker network
+ - name: Install Task
+ uses: go-task/setup-task@v1
+
+ - name: Setup docker network
run: |
docker network create frontend
- - name: Run phpstan
+ - name: Install Site
+ run: |
+ task site:install
+
+ - name: Test suite
run: |
- docker compose run --rm phpfpm composer install
- docker compose run --rm phpfpm vendor/bin/phpstan analyse src --no-progress --error-format=github --memory-limit=1G
+ task test:setup
+ task test
- phpunit:
- name: PHP Unit tests
+ - name: Upload coverage to Codecov test
+ uses: codecov/codecov-action@v5
+ with:
+ files: ./coverage/unit.xml
+ flags: unittests
+ env:
+ CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
+
+ phpstan:
+ name: PHPStan
runs-on: ubuntu-latest
steps:
- - name: Checkout
- uses: actions/checkout@v5
+ - uses: actions/checkout@v5
- - name: Install site
+ - name: Install Task
+ uses: go-task/setup-task@v1
+
+ - name: Start docker compose setup
run: |
docker network create frontend
- docker compose pull
- docker compose up --detach
- docker compose exec --user=root phpfpm composer install
- docker compose exec phpfpm bin/console doctrine:migrations:migrate --no-interaction
+ task compose -- up --detach
+
+ - name: Install Dependencies
+ run: |
+ task composer -- install
- - name: Run tests
+ - name: Run PHPStan
run: |
- docker compose exec phpfpm composer run tests
+ task code-analysis:phpstan
fixtures:
name: Load fixtures
runs-on: ubuntu-latest
steps:
- - name: Checkout
- uses: actions/checkout@v5
- with:
- fetch-depth: 2
+ - uses: actions/checkout@v5
+
+ - name: Install Task
+ uses: go-task/setup-task@v1
- - name: Install site
+ - name: Setup docker network
run: |
docker network create frontend
- docker compose pull
- docker compose up --detach
- docker compose exec --user=root phpfpm composer install
- docker compose exec phpfpm bin/console doctrine:migrations:migrate --no-interaction
+
+ - name: Install Site
+ run: |
+ task site:install
- name: Load fixtures
run: |
diff --git a/.gitignore b/.gitignore
index 80f8c4d..4e7ed3e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,3 +39,4 @@ phpstan.neon
/public/assets/
/assets/vendor/
###< symfony/asset-mapper ###
+coverage
diff --git a/Taskfile.yml b/Taskfile.yml
index d4e3070..9d08906 100644
--- a/Taskfile.yml
+++ b/Taskfile.yml
@@ -12,6 +12,7 @@ vars:
tasks:
site:update:
desc: Update/install site
+ aliases: [site:install]
cmds:
- task: compose
vars:
@@ -179,12 +180,12 @@ tasks:
vars:
CONSOLE_ARGS: doctrine:migrations:migrate --no-interaction --quiet
- test:run:
- desc: "Run phpunit tests"
+ test:
+ desc: "Run tests"
cmds:
- task: compose
vars:
- COMPOSE_ARGS: exec phpfpm bin/phpunit
+ COMPOSE_ARGS: exec --env XDEBUG_MODE=coverage phpfpm vendor/bin/phpunit --coverage-clover=coverage/unit.xml
api:spec:export:
desc: "Export API spec"
From a1c752af7b00d90227616c8f52389c7f913a8cc8 Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Fri, 17 Oct 2025 14:09:53 +0200
Subject: [PATCH 23/31] 5564: Fix PR review action
---
.github/workflows/pr.yaml | 2 +-
Taskfile.yml | 8 +++-----
2 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml
index 628af19..466d7d4 100644
--- a/.github/workflows/pr.yaml
+++ b/.github/workflows/pr.yaml
@@ -77,7 +77,7 @@ jobs:
- name: Load fixtures
run: |
- docker compose exec phpfpm composer fixtures
+ task fixtures:load
build-assets:
name: Build assets
diff --git a/Taskfile.yml b/Taskfile.yml
index 9d08906..5b7cc25 100644
--- a/Taskfile.yml
+++ b/Taskfile.yml
@@ -167,18 +167,16 @@ tasks:
test:setup:
desc: "Setup test environment"
- env:
- APP_ENV: test
cmds:
- task: console
vars:
- CONSOLE_ARGS: doctrine:database:create --if-not-exists --no-interaction
+ CONSOLE_ARGS: --env=test doctrine:database:create --if-not-exists --no-interaction
- task: console
vars:
- CONSOLE_ARGS: doctrine:database:create --no-interaction --if-not-exists --quiet
+ CONSOLE_ARGS: --env=test doctrine:database:create --no-interaction --if-not-exists --quiet
- task: console
vars:
- CONSOLE_ARGS: doctrine:migrations:migrate --no-interaction --quiet
+ CONSOLE_ARGS: --env=test doctrine:migrations:migrate --no-interaction --quiet
test:
desc: "Run tests"
From 0f57193b649660541113faf7821093f3939f094f Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Fri, 17 Oct 2025 14:20:47 +0200
Subject: [PATCH 24/31] 5564: Fix PR fixtures action
---
.github/workflows/pr.yaml | 2 +-
config/packages/security.yaml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml
index 466d7d4..5f6e255 100644
--- a/.github/workflows/pr.yaml
+++ b/.github/workflows/pr.yaml
@@ -77,7 +77,7 @@ jobs:
- name: Load fixtures
run: |
- task fixtures:load
+ task fixtures:load --yes
build-assets:
name: Build assets
diff --git a/config/packages/security.yaml b/config/packages/security.yaml
index 178fb0b..67b283a 100644
--- a/config/packages/security.yaml
+++ b/config/packages/security.yaml
@@ -42,7 +42,7 @@ security:
access_control:
- { path: ^/api/docs, roles: PUBLIC_ACCESS }
- { path: ^/api, roles: ROLE_SERVER }
- # - { path: ^/admin, roles: ROLE_ADMIN }
+ - { path: ^/admin, roles: ROLE_ADMIN }
# - { path: ^/profile, roles: ROLE_USER }
when@test:
From 39bc3f731a601c5b364f904998de2bd646f0ad11 Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Fri, 17 Oct 2025 14:22:55 +0200
Subject: [PATCH 25/31] 5564: Lint yml files
---
config/packages/security.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/config/packages/security.yaml b/config/packages/security.yaml
index 67b283a..25bfb56 100644
--- a/config/packages/security.yaml
+++ b/config/packages/security.yaml
@@ -42,7 +42,7 @@ security:
access_control:
- { path: ^/api/docs, roles: PUBLIC_ACCESS }
- { path: ^/api, roles: ROLE_SERVER }
- - { path: ^/admin, roles: ROLE_ADMIN }
+ - { path: ^/admin, roles: ROLE_ADMIN }
# - { path: ^/profile, roles: ROLE_USER }
when@test:
From 9b278ff1e172493f7332703bf4c5870b1d236cad Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Tue, 21 Oct 2025 13:42:27 +0200
Subject: [PATCH 26/31] 5566: Add project entity and Leantime sync
---
.env | 2 +
composer.json | 1 +
composer.lock | 75 ++++++++++-
config/packages/framework.yaml | 8 ++
config/services.yaml | 4 +
migrations/Version20251021113753.php | 47 +++++++
src/Command/SyncLeantimeProjectsCommand.php | 56 ++++++++
src/Entity/Project.php | 120 ++++++++++++++++++
src/Exception/LeantimeApiException.php | 7 +
src/Repository/ProjectRepository.php | 43 +++++++
src/Service/Leantime/ApiService.php | 95 ++++++++++++++
.../Leantime/LeantimeProjectUrlFactory.php | 17 +++
src/Service/Leantime/ProjectDto.php | 75 +++++++++++
src/Service/Leantime/ProjectSyncService.php | 76 +++++++++++
14 files changed, 625 insertions(+), 1 deletion(-)
create mode 100644 migrations/Version20251021113753.php
create mode 100644 src/Command/SyncLeantimeProjectsCommand.php
create mode 100644 src/Entity/Project.php
create mode 100644 src/Exception/LeantimeApiException.php
create mode 100644 src/Repository/ProjectRepository.php
create mode 100644 src/Service/Leantime/ApiService.php
create mode 100644 src/Service/Leantime/LeantimeProjectUrlFactory.php
create mode 100644 src/Service/Leantime/ProjectDto.php
create mode 100644 src/Service/Leantime/ProjectSyncService.php
diff --git a/.env b/.env
index a2f0c5a..988bd7a 100644
--- a/.env
+++ b/.env
@@ -64,3 +64,5 @@ VAULT_SECRET_ID="CHANGE_ME_IN_LOCAL_ENV"
# The number of old results for each server/result-type combination
APP_KEEP_RESULTS=5
+APP_LEANTIME_URI=https://leantime.itkdev.dk
+APP_LEANTIME_API_KEY="CHANGE_ME_IN_LOCAL_ENV"
diff --git a/composer.json b/composer.json
index 13ac7b1..a0105ff 100644
--- a/composer.json
+++ b/composer.json
@@ -33,6 +33,7 @@
"symfony/http-client": "^7.3.4",
"symfony/messenger": "^7.3.3",
"symfony/monolog-bundle": "^3.10",
+ "symfony/object-mapper": "7.3.*",
"symfony/property-access": "^7.3.3",
"symfony/property-info": "^7.3.4",
"symfony/runtime": "^7.3.4",
diff --git a/composer.lock b/composer.lock
index ff3bcc3..1b986e3 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "23e908fe58ef72041cd16db5e898981d",
+ "content-hash": "de3752721523d5945ac78630b69f2b53",
"packages": [
{
"name": "api-platform/core",
@@ -6209,6 +6209,79 @@
],
"time": "2023-11-06T17:08:13+00:00"
},
+ {
+ "name": "symfony/object-mapper",
+ "version": "v7.3.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/object-mapper.git",
+ "reference": "62752b89178d7654bb7ec97d3fa3dbd67e417dbe"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/object-mapper/zipball/62752b89178d7654bb7ec97d3fa3dbd67e417dbe",
+ "reference": "62752b89178d7654bb7ec97d3fa3dbd67e417dbe",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.2",
+ "psr/container": "^2.0"
+ },
+ "conflict": {
+ "symfony/property-access": "<7.2"
+ },
+ "require-dev": {
+ "symfony/property-access": "^7.2",
+ "symfony/var-exporter": "^7.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\ObjectMapper\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides a way to map an object to another object",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/object-mapper/tree/v7.3.4"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-09-20T14:49:40+00:00"
+ },
{
"name": "symfony/options-resolver",
"version": "v7.3.3",
diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml
index 2c9057c..1ad58d7 100644
--- a/config/packages/framework.yaml
+++ b/config/packages/framework.yaml
@@ -13,6 +13,14 @@ framework:
#esi: true
#fragments: true
+ http_client:
+ scoped_clients:
+ leantime.client:
+ base_uri: '%env(APP_LEANTIME_URI)%'
+ scope: '%env(APP_LEANTIME_URI)%'
+ headers:
+ x-api-key: '%env(APP_LEANTIME_API_KEY)%'
+
when@test:
framework:
test: true
diff --git a/config/services.yaml b/config/services.yaml
index 71d40c9..c98c423 100644
--- a/config/services.yaml
+++ b/config/services.yaml
@@ -36,3 +36,7 @@ services:
arguments:
$resultHandlers: !tagged_iterator app.handler.detection_result_handler
$keepResults: '%env(int:APP_KEEP_RESULTS)%'
+
+ App\Service\Leantime\LeantimeProjectUrlFactory:
+ arguments:
+ $baseUrl: '%env(string:APP_LEANTIME_URI)%'
diff --git a/migrations/Version20251021113753.php b/migrations/Version20251021113753.php
new file mode 100644
index 0000000..27b347d
--- /dev/null
+++ b/migrations/Version20251021113753.php
@@ -0,0 +1,47 @@
+addSql(<<<'SQL'
+ CREATE TABLE project (
+ id BINARY(16) NOT NULL,
+ created_at DATETIME NOT NULL,
+ modified_at DATETIME NOT NULL,
+ created_by VARCHAR(255) DEFAULT '' NOT NULL,
+ modified_by VARCHAR(255) DEFAULT '' NOT NULL,
+ leantime_id INT NOT NULL,
+ name VARCHAR(255) NOT NULL,
+ leantime_url VARCHAR(255) DEFAULT NULL,
+ economics_url VARCHAR(255) DEFAULT NULL,
+ details LONGTEXT DEFAULT NULL,
+ leantime_modified_at DATETIME NOT NULL,
+ UNIQUE INDEX UNIQ_2FB3D0EE4B785F0C (leantime_id),
+ PRIMARY KEY (id)
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci`
+ SQL);
+ }
+
+ public function down(Schema $schema): void
+ {
+ // this down() migration is auto-generated, please modify it to your needs
+ $this->addSql('DROP TABLE project');
+ }
+}
diff --git a/src/Command/SyncLeantimeProjectsCommand.php b/src/Command/SyncLeantimeProjectsCommand.php
new file mode 100644
index 0000000..a7205a6
--- /dev/null
+++ b/src/Command/SyncLeantimeProjectsCommand.php
@@ -0,0 +1,56 @@
+addOption('project-id', null, InputOption::VALUE_REQUIRED, 'Leantime project ID');
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output): int
+ {
+ $io = new SymfonyStyle($input, $output);
+
+ try {
+ if ($input->getOption('project-id')) {
+ $projectId = (int) $input->getOption('project-id');
+
+ $project = $this->projectSyncService->syncProject($projectId);
+
+ $io->success(sprintf('Project: %s (%d) synced successfully.', $project->getName(), $project->getLeantimeId()));
+ } else {
+ $count = $this->projectSyncService->syncAllProjects();
+
+ $io->success(sprintf('Synced %d projects successfully.', $count));
+ }
+ } catch (\Throwable $e) {
+ $io->error($e->getMessage());
+
+ return Command::FAILURE;
+ }
+
+ return Command::SUCCESS;
+ }
+}
diff --git a/src/Entity/Project.php b/src/Entity/Project.php
new file mode 100644
index 0000000..33b4dc7
--- /dev/null
+++ b/src/Entity/Project.php
@@ -0,0 +1,120 @@
+leantimeId = $leantimeId;
+ $this->name = $name;
+ $this->details = $details;
+ }
+
+ public function getName(): string
+ {
+ return $this->name;
+ }
+
+ public function setName(string $name): static
+ {
+ $this->name = $name;
+
+ return $this;
+ }
+
+ public function getLeantimeUrl(): ?string
+ {
+ return $this->LeantimeUrl;
+ }
+
+ public function setLeantimeUrl(string $LeantimeUrl): static
+ {
+ $this->LeantimeUrl = $LeantimeUrl;
+
+ return $this;
+ }
+
+ public function getEconomicsUrl(): ?string
+ {
+ return $this->EconomicsUrl;
+ }
+
+ public function setEconomicsUrl(string $EconomicsUrl): static
+ {
+ $this->EconomicsUrl = $EconomicsUrl;
+
+ return $this;
+ }
+
+ public function getDetails(): ?string
+ {
+ return $this->details;
+ }
+
+ public function setDetails(?string $details): static
+ {
+ $this->details = $details;
+
+ return $this;
+ }
+
+ public function getLeantimeId(): ?int
+ {
+ return $this->leantimeId;
+ }
+
+ public function setLeantimeId(int $leantimeId): static
+ {
+ $this->leantimeId = $leantimeId;
+
+ return $this;
+ }
+
+ public function getLeantimeModifiedAt(): ?\DateTimeImmutable
+ {
+ return $this->leantimeModifiedAt;
+ }
+
+ public function setLeantimeModifiedAt(\DateTimeImmutable $leantimeModifiedAt): static
+ {
+ $this->leantimeModifiedAt = $leantimeModifiedAt;
+
+ return $this;
+ }
+
+ public function getDetailsText(): ?string
+ {
+ return $this->detailsText;
+ }
+
+ public function setDetailsText(string $detailsText): static
+ {
+ $this->detailsText = $detailsText;
+
+ return $this;
+ }
+}
diff --git a/src/Exception/LeantimeApiException.php b/src/Exception/LeantimeApiException.php
new file mode 100644
index 0000000..ba79156
--- /dev/null
+++ b/src/Exception/LeantimeApiException.php
@@ -0,0 +1,7 @@
+
+ */
+class ProjectRepository extends ServiceEntityRepository
+{
+ public function __construct(ManagerRegistry $registry)
+ {
+ parent::__construct($registry, Project::class);
+ }
+
+ // /**
+ // * @return Project[] Returns an array of Project objects
+ // */
+ // public function findByExampleField($value): array
+ // {
+ // return $this->createQueryBuilder('p')
+ // ->andWhere('p.exampleField = :val')
+ // ->setParameter('val', $value)
+ // ->orderBy('p.id', 'ASC')
+ // ->setMaxResults(10)
+ // ->getQuery()
+ // ->getResult()
+ // ;
+ // }
+
+ // public function findOneBySomeField($value): ?Project
+ // {
+ // return $this->createQueryBuilder('p')
+ // ->andWhere('p.exampleField = :val')
+ // ->setParameter('val', $value)
+ // ->getQuery()
+ // ->getOneOrNullResult()
+ // ;
+ // }
+}
diff --git a/src/Service/Leantime/ApiService.php b/src/Service/Leantime/ApiService.php
new file mode 100644
index 0000000..dd7390c
--- /dev/null
+++ b/src/Service/Leantime/ApiService.php
@@ -0,0 +1,95 @@
+
+ *
+ * @throws LeantimeApiException
+ */
+ public function getProjects(): array
+ {
+ $projects = [];
+
+ $data = $this->request(self::API_PATH_JSONRPC, 'POST', 'leantime.rpc.projects.getAll', []);
+
+ foreach ($data as $project) {
+ $projects[$project->id] = ProjectDto::fromStdClass($project);
+ }
+
+ return $projects;
+ }
+
+ /**
+ * Get project.
+ *
+ * @param $key
+ * A project key or id
+ *
+ * @throws LeantimeApiException
+ */
+ public function getProject($key): ProjectDto
+ {
+ $data = $this->request(self::API_PATH_JSONRPC, 'POST', 'leantime.rpc.projects.getProject', ['id' => $key]);
+
+ if (is_array($data) && false === $data[0]) {
+ throw new LeantimeApiException(sprintf('Project (id: %d) not found', $key), 404);
+ }
+
+ return ProjectDto::fromStdClass($data);
+ }
+
+ /**
+ * Get from Leantime.
+ *
+ * @throws LeantimeApiException
+ */
+ private function request(string $path, string $type, string $method, array $params = []): mixed
+ {
+ try {
+ $response = $this->leantimeClient->request($type, $path,
+ ['json' => [
+ 'jsonrpc' => '2.0',
+ 'method' => $method,
+ 'id' => new Ulid()->jsonSerialize(),
+ 'params' => $params,
+ ]]
+ );
+
+ $body = $response->getContent();
+
+ if ($body) {
+ $data = json_decode($body, null, 512, JSON_THROW_ON_ERROR);
+
+ if (isset($data->error)) {
+ $message = $data->error->message;
+ if (isset($data->error->data)) {
+ $message .= ': '.(is_scalar($data->error->data) ? $data->error->data : json_encode($data->error->data));
+ }
+ throw new LeantimeApiException($message, $data->error->code);
+ }
+
+ return $data->result;
+ }
+ } catch (\Throwable $e) {
+ throw new LeantimeApiException('Error from Leantime API: '.$e->getMessage(), (int) $e->getCode(), $e);
+ }
+
+ return null;
+ }
+}
diff --git a/src/Service/Leantime/LeantimeProjectUrlFactory.php b/src/Service/Leantime/LeantimeProjectUrlFactory.php
new file mode 100644
index 0000000..5ed6f5d
--- /dev/null
+++ b/src/Service/Leantime/LeantimeProjectUrlFactory.php
@@ -0,0 +1,17 @@
+baseUrl, $projectId);
+ }
+}
diff --git a/src/Service/Leantime/ProjectDto.php b/src/Service/Leantime/ProjectDto.php
new file mode 100644
index 0000000..4ccf1cd
--- /dev/null
+++ b/src/Service/Leantime/ProjectDto.php
@@ -0,0 +1,75 @@
+Udfyld beskrivelse
';
+
+ public function __construct(
+ #[Map(target: 'leantimeId')]
+ #[Map(target: 'leantimeUrl', transform: LeantimeProjectUrlFactory::class)]
+ public int $id,
+ #[Map(target: 'name')]
+ public string $name,
+ #[Map(target: 'details')]
+ public ?string $details,
+ public int $clientId,
+ public ?int $state,
+ public string $hourBudget,
+ public int $dollarBudget,
+ public string $menuType,
+ public string $type,
+ public ?int $parent,
+ #[Map(target: 'leantimeModifiedAt')]
+ public \DateTimeImmutable $modified,
+ public ?string $start,
+ public ?string $end,
+ public string $clientName,
+ public ?int $parentId,
+ public ?string $parentName,
+ public int $isFavorite,
+ ) {
+ }
+
+ /**
+ * Create a LeantimeProjectDto from JSON data.
+ */
+ public static function fromStdClass(\stdClass $data): self
+ {
+ $data->details = self::DETAILS_DEFAULT === $data->details ? null : $data->details;
+ $data->hourBudget = floatval($data->hourBudget);
+ $data->dollarBudget = floatval($data->dollarBudget);
+ $data->modified = \DateTimeImmutable::createFromFormat(
+ self::DATE_FORMAT,
+ $data->modified,
+ new \DateTimeZone(self::TIMEZONE)
+ );
+
+ return new self(
+ id: $data->id,
+ name: $data->name,
+ details: $data->details ?? null,
+ clientId: $data->clientId,
+ state: $data->state,
+ hourBudget: $data->hourBudget,
+ dollarBudget: $data->dollarBudget,
+ menuType: $data->menuType,
+ type: $data->type,
+ parent: $data->parent,
+ modified: $data->modified,
+ start: $data->start ?? null,
+ end: $data->end ?? null,
+ clientName: $data->clientName,
+ parentId: $data->parentId ?? null,
+ parentName: $data->parentName ?? null,
+ isFavorite: $data->isFavorite,
+ );
+ }
+}
diff --git a/src/Service/Leantime/ProjectSyncService.php b/src/Service/Leantime/ProjectSyncService.php
new file mode 100644
index 0000000..60f3ae8
--- /dev/null
+++ b/src/Service/Leantime/ProjectSyncService.php
@@ -0,0 +1,76 @@
+leantimeApiService->getProjects();
+ $count = count($projectDtoArray);
+
+ $projects = $this->entityManager->getRepository(Project::class)->findBy([], ['id' => 'ASC']);
+
+ foreach ($projects as $project) {
+ if (isset($projectDtoArray[$project->getLeantimeId()])) {
+ $dto = $projectDtoArray[$project->getLeantimeId()];
+ $this->setProperties($project, $dto);
+
+ unset($projectDtoArray[$project->getLeantimeId()]);
+ } else {
+ // Delete projects that are not in Leantime
+ $this->entityManager->remove($project);
+ }
+ }
+
+ foreach ($projectDtoArray as $id => $projectDto) {
+ $project = $this->objectMapper->map($projectDto, Project::class);
+ $this->setProperties($project, $projectDto);
+ $this->entityManager->persist($project);
+ }
+
+ $this->entityManager->flush();
+
+ return $count;
+ }
+
+ public function syncProject(int $leantimeId): Project
+ {
+ $projectDto = $this->leantimeApiService->getProject($leantimeId);
+ $project = $this->entityManager->getRepository(Project::class)->findOneBy(['leantimeId' => $leantimeId]);
+
+ if (null === $project) {
+ $project = $this->objectMapper->map($projectDto, Project::class);
+ $this->entityManager->persist($project);
+ }
+
+ $this->setProperties($project, $projectDto);
+
+ $this->entityManager->flush();
+
+ return $project;
+ }
+
+ private function setProperties(Project $project, ProjectDto $projectDto): void
+ {
+ $project->setLeantimeId($projectDto->id);
+ $project->setName($projectDto->name);
+ $project->setDetails($projectDto->details);
+ $project->setLeantimeModifiedAt($projectDto->modified);
+
+ $url = $this->leantimeProjectUrlFactory->getProjectUrl($project->getLeantimeId());
+ $project->setLeantimeUrl($url);
+ }
+}
From 06ca1c5a2009957c4009c69eb9c4c31958c4e3b7 Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Wed, 22 Oct 2025 08:50:28 +0200
Subject: [PATCH 27/31] 5566: Add project crud controller, use 'disable' for
actions, UI tweaks
---
composer.json | 1 +
composer.lock | 5 +-
src/Command/SyncLeantimeProjectsCommand.php | 2 -
src/Controller/Admin/DashboardController.php | 2 +
.../Admin/DetectionResultCrudController.php | 8 +-
.../Admin/DockerImageCrudController.php | 8 +-
.../Admin/DockerImageTagCrudController.php | 8 +-
src/Controller/Admin/DomainCrudController.php | 9 +-
.../Admin/GitRepoCrudController.php | 8 +-
src/Controller/Admin/GitTagCrudController.php | 8 +-
.../Admin/InstallationCrudController.php | 8 +-
src/Controller/Admin/ModuleCrudController.php | 8 +-
.../Admin/ModuleVersionCrudController.php | 8 +-
src/Controller/Admin/OIDCCrudController.php | 3 +
.../Admin/PackageCrudController.php | 8 +-
.../Admin/PackageVersionCrudController.php | 8 +-
.../Admin/ProjectCrudController.php | 87 +++++++++++++++++++
src/Controller/Admin/ServerCrudController.php | 3 +
.../ServiceCertificateCrudController.php | 6 +-
src/Controller/Admin/SiteCrudController.php | 8 +-
src/Entity/Project.php | 5 ++
src/Trait/ExportCrudControllerTrait.php | 2 +-
22 files changed, 134 insertions(+), 79 deletions(-)
create mode 100644 src/Controller/Admin/ProjectCrudController.php
diff --git a/composer.json b/composer.json
index a0105ff..aa99043 100644
--- a/composer.json
+++ b/composer.json
@@ -7,6 +7,7 @@
"php": ">=8.4",
"ext-ctype": "*",
"ext-iconv": "*",
+ "ext-mbstring": "*",
"api-platform/core": "~4.1.25",
"composer/semver": "^3.4.4",
"doctrine/dbal": "^4.3.4",
diff --git a/composer.lock b/composer.lock
index 1b986e3..2e80675 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "de3752721523d5945ac78630b69f2b53",
+ "content-hash": "60d7644f1ca92f78aa528dbb47634b49",
"packages": [
{
"name": "api-platform/core",
@@ -14301,7 +14301,8 @@
"platform": {
"php": ">=8.4",
"ext-ctype": "*",
- "ext-iconv": "*"
+ "ext-iconv": "*",
+ "ext-mbstring": "*"
},
"platform-dev": {},
"plugin-api-version": "2.6.0"
diff --git a/src/Command/SyncLeantimeProjectsCommand.php b/src/Command/SyncLeantimeProjectsCommand.php
index a7205a6..dc66a49 100644
--- a/src/Command/SyncLeantimeProjectsCommand.php
+++ b/src/Command/SyncLeantimeProjectsCommand.php
@@ -2,7 +2,6 @@
namespace App\Command;
-use App\Service\Leantime\ApiService;
use App\Service\Leantime\ProjectSyncService;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
@@ -18,7 +17,6 @@
class SyncLeantimeProjectsCommand extends Command
{
public function __construct(
- private readonly ApiService $leantimeService,
private readonly ProjectSyncService $projectSyncService,
) {
parent::__construct();
diff --git a/src/Controller/Admin/DashboardController.php b/src/Controller/Admin/DashboardController.php
index bccf631..9624283 100644
--- a/src/Controller/Admin/DashboardController.php
+++ b/src/Controller/Admin/DashboardController.php
@@ -17,6 +17,7 @@
use App\Entity\OIDC;
use App\Entity\Package;
use App\Entity\PackageVersion;
+use App\Entity\Project;
use App\Entity\Server;
use App\Entity\ServiceCertificate;
use App\Entity\Site;
@@ -62,6 +63,7 @@ public function configureMenuItems(): iterable
{
yield MenuItem::linkToDashboard('Dashboard', 'fa fa-home');
yield MenuItem::linkToCrud('Servers', 'fas fa-server', Server::class);
+ yield MenuItem::linkToCrud('Projects', 'fas fa-folder', Project::class);
yield MenuItem::linkToCrud('Installations', 'fas fa-folder', Installation::class);
yield MenuItem::linkToCrud('Sites', 'fas fa-bookmark', Site::class);
yield MenuItem::linkToCrud('Domains', 'fas fa-link', Domain::class);
diff --git a/src/Controller/Admin/DetectionResultCrudController.php b/src/Controller/Admin/DetectionResultCrudController.php
index 5027e68..a206930 100644
--- a/src/Controller/Admin/DetectionResultCrudController.php
+++ b/src/Controller/Admin/DetectionResultCrudController.php
@@ -36,12 +36,8 @@ public function configureCrud(Crud $crud): Crud
public function configureActions(Actions $actions): Actions
{
return $actions
- ->add(Crud::PAGE_INDEX, Action::DETAIL)
- ->remove(Crud::PAGE_INDEX, Action::NEW)
- ->remove(Crud::PAGE_INDEX, Action::EDIT)
- ->remove(Crud::PAGE_INDEX, Action::DELETE)
- ->remove(Crud::PAGE_DETAIL, Action::EDIT)
- ->remove(Crud::PAGE_DETAIL, Action::DELETE);
+ ->disable(Action::DELETE, Action::NEW, Action::EDIT)
+ ->add(Crud::PAGE_INDEX, Action::DETAIL);
}
#[\Override]
diff --git a/src/Controller/Admin/DockerImageCrudController.php b/src/Controller/Admin/DockerImageCrudController.php
index 980c426..dec7b4f 100644
--- a/src/Controller/Admin/DockerImageCrudController.php
+++ b/src/Controller/Admin/DockerImageCrudController.php
@@ -32,12 +32,8 @@ public function configureCrud(Crud $crud): Crud
public function configureActions(Actions $actions): Actions
{
return $actions
- ->add(Crud::PAGE_INDEX, Action::DETAIL)
- ->remove(Crud::PAGE_INDEX, Action::NEW)
- ->remove(Crud::PAGE_INDEX, Action::EDIT)
- ->remove(Crud::PAGE_INDEX, Action::DELETE)
- ->remove(Crud::PAGE_DETAIL, Action::EDIT)
- ->remove(Crud::PAGE_DETAIL, Action::DELETE);
+ ->disable(Action::DELETE, Action::NEW, Action::EDIT)
+ ->add(Crud::PAGE_INDEX, Action::DETAIL);
}
#[\Override]
diff --git a/src/Controller/Admin/DockerImageTagCrudController.php b/src/Controller/Admin/DockerImageTagCrudController.php
index 49f7855..779e484 100644
--- a/src/Controller/Admin/DockerImageTagCrudController.php
+++ b/src/Controller/Admin/DockerImageTagCrudController.php
@@ -31,12 +31,8 @@ public function configureCrud(Crud $crud): Crud
public function configureActions(Actions $actions): Actions
{
return $actions
- ->add(Crud::PAGE_INDEX, Action::DETAIL)
- ->remove(Crud::PAGE_INDEX, Action::NEW)
- ->remove(Crud::PAGE_INDEX, Action::EDIT)
- ->remove(Crud::PAGE_INDEX, Action::DELETE)
- ->remove(Crud::PAGE_DETAIL, Action::EDIT)
- ->remove(Crud::PAGE_DETAIL, Action::DELETE);
+ ->disable(Action::DELETE, Action::NEW, Action::EDIT)
+ ->add(Crud::PAGE_INDEX, Action::DETAIL);
}
#[\Override]
diff --git a/src/Controller/Admin/DomainCrudController.php b/src/Controller/Admin/DomainCrudController.php
index 060e8ef..9387eb9 100644
--- a/src/Controller/Admin/DomainCrudController.php
+++ b/src/Controller/Admin/DomainCrudController.php
@@ -36,14 +36,9 @@ public function configureCrud(Crud $crud): Crud
public function configureActions(Actions $actions): Actions
{
return $actions
+ ->disable(Action::DELETE, Action::NEW, Action::EDIT)
->add(Crud::PAGE_INDEX, Action::DETAIL)
- ->add(Crud::PAGE_INDEX, $this->createExportAction())
- ->remove(Crud::PAGE_INDEX, Action::NEW)
- ->remove(Crud::PAGE_INDEX, Action::EDIT)
- ->remove(Crud::PAGE_INDEX, Action::DELETE)
- ->remove(Crud::PAGE_DETAIL, Action::EDIT)
- ->remove(Crud::PAGE_DETAIL, Action::DELETE)
- ;
+ ->add(Crud::PAGE_INDEX, $this->createExportAction());
}
#[\Override]
diff --git a/src/Controller/Admin/GitRepoCrudController.php b/src/Controller/Admin/GitRepoCrudController.php
index 7fa2d4e..562c8c9 100644
--- a/src/Controller/Admin/GitRepoCrudController.php
+++ b/src/Controller/Admin/GitRepoCrudController.php
@@ -35,12 +35,8 @@ public function configureCrud(Crud $crud): Crud
public function configureActions(Actions $actions): Actions
{
return $actions
- ->add(Crud::PAGE_INDEX, Action::DETAIL)
- ->remove(Crud::PAGE_INDEX, Action::NEW)
- ->remove(Crud::PAGE_INDEX, Action::EDIT)
- ->remove(Crud::PAGE_INDEX, Action::DELETE)
- ->remove(Crud::PAGE_DETAIL, Action::EDIT)
- ->remove(Crud::PAGE_DETAIL, Action::DELETE);
+ ->disable(Action::DELETE, Action::NEW, Action::EDIT)
+ ->add(Crud::PAGE_INDEX, Action::DETAIL);
}
#[\Override]
diff --git a/src/Controller/Admin/GitTagCrudController.php b/src/Controller/Admin/GitTagCrudController.php
index eceec7e..8c2d592 100644
--- a/src/Controller/Admin/GitTagCrudController.php
+++ b/src/Controller/Admin/GitTagCrudController.php
@@ -33,12 +33,8 @@ public function configureCrud(Crud $crud): Crud
public function configureActions(Actions $actions): Actions
{
return $actions
- ->add(Crud::PAGE_INDEX, Action::DETAIL)
- ->remove(Crud::PAGE_INDEX, Action::NEW)
- ->remove(Crud::PAGE_INDEX, Action::EDIT)
- ->remove(Crud::PAGE_INDEX, Action::DELETE)
- ->remove(Crud::PAGE_DETAIL, Action::EDIT)
- ->remove(Crud::PAGE_DETAIL, Action::DELETE);
+ ->disable(Action::DELETE, Action::NEW, Action::EDIT)
+ ->add(Crud::PAGE_INDEX, Action::DETAIL);
}
#[\Override]
diff --git a/src/Controller/Admin/InstallationCrudController.php b/src/Controller/Admin/InstallationCrudController.php
index e78a4cf..d36000e 100644
--- a/src/Controller/Admin/InstallationCrudController.php
+++ b/src/Controller/Admin/InstallationCrudController.php
@@ -41,13 +41,9 @@ public function configureCrud(Crud $crud): Crud
public function configureActions(Actions $actions): Actions
{
return $actions
+ ->disable(Action::DELETE, Action::NEW, Action::EDIT)
->add(Crud::PAGE_INDEX, Action::DETAIL)
- ->add(Crud::PAGE_INDEX, $this->createExportAction())
- ->remove(Crud::PAGE_INDEX, Action::NEW)
- ->remove(Crud::PAGE_INDEX, Action::EDIT)
- ->remove(Crud::PAGE_INDEX, Action::DELETE)
- ->remove(Crud::PAGE_DETAIL, Action::EDIT)
- ->remove(Crud::PAGE_DETAIL, Action::DELETE);
+ ->add(Crud::PAGE_INDEX, $this->createExportAction());
}
#[\Override]
diff --git a/src/Controller/Admin/ModuleCrudController.php b/src/Controller/Admin/ModuleCrudController.php
index 9cc6a73..311d478 100644
--- a/src/Controller/Admin/ModuleCrudController.php
+++ b/src/Controller/Admin/ModuleCrudController.php
@@ -31,12 +31,8 @@ public function configureCrud(Crud $crud): Crud
public function configureActions(Actions $actions): Actions
{
return $actions
- ->add(Crud::PAGE_INDEX, Action::DETAIL)
- ->remove(Crud::PAGE_INDEX, Action::NEW)
- ->remove(Crud::PAGE_INDEX, Action::EDIT)
- ->remove(Crud::PAGE_INDEX, Action::DELETE)
- ->remove(Crud::PAGE_DETAIL, Action::EDIT)
- ->remove(Crud::PAGE_DETAIL, Action::DELETE);
+ ->disable(Action::DELETE, Action::NEW, Action::EDIT)
+ ->add(Crud::PAGE_INDEX, Action::DETAIL);
}
#[\Override]
diff --git a/src/Controller/Admin/ModuleVersionCrudController.php b/src/Controller/Admin/ModuleVersionCrudController.php
index 1d3f3e5..e80ad8d 100644
--- a/src/Controller/Admin/ModuleVersionCrudController.php
+++ b/src/Controller/Admin/ModuleVersionCrudController.php
@@ -30,12 +30,8 @@ public function configureCrud(Crud $crud): Crud
public function configureActions(Actions $actions): Actions
{
return $actions
- ->add(Crud::PAGE_INDEX, Action::DETAIL)
- ->remove(Crud::PAGE_INDEX, Action::NEW)
- ->remove(Crud::PAGE_INDEX, Action::EDIT)
- ->remove(Crud::PAGE_INDEX, Action::DELETE)
- ->remove(Crud::PAGE_DETAIL, Action::EDIT)
- ->remove(Crud::PAGE_DETAIL, Action::DELETE);
+ ->disable(Action::DELETE, Action::NEW, Action::EDIT)
+ ->add(Crud::PAGE_INDEX, Action::DETAIL);
}
#[\Override]
diff --git a/src/Controller/Admin/OIDCCrudController.php b/src/Controller/Admin/OIDCCrudController.php
index 176871e..48effce 100644
--- a/src/Controller/Admin/OIDCCrudController.php
+++ b/src/Controller/Admin/OIDCCrudController.php
@@ -44,6 +44,9 @@ public function configureActions(Actions $actions): Actions
return $actions
->add(Crud::PAGE_INDEX, Action::DETAIL)
->add(Crud::PAGE_INDEX, $this->createExportAction())
+ ->update(Crud::PAGE_INDEX, Action::NEW,
+ static fn (Action $action) => $action->setIcon('fa fa-plus')
+ )
;
}
diff --git a/src/Controller/Admin/PackageCrudController.php b/src/Controller/Admin/PackageCrudController.php
index 21fbd74..1e076b4 100644
--- a/src/Controller/Admin/PackageCrudController.php
+++ b/src/Controller/Admin/PackageCrudController.php
@@ -37,12 +37,8 @@ public function configureCrud(Crud $crud): Crud
public function configureActions(Actions $actions): Actions
{
return $actions
- ->add(Crud::PAGE_INDEX, Action::DETAIL)
- ->remove(Crud::PAGE_INDEX, Action::NEW)
- ->remove(Crud::PAGE_INDEX, Action::EDIT)
- ->remove(Crud::PAGE_INDEX, Action::DELETE)
- ->remove(Crud::PAGE_DETAIL, Action::EDIT)
- ->remove(Crud::PAGE_DETAIL, Action::DELETE);
+ ->disable(Action::DELETE, Action::NEW, Action::EDIT)
+ ->add(Crud::PAGE_INDEX, Action::DETAIL);
}
#[\Override]
diff --git a/src/Controller/Admin/PackageVersionCrudController.php b/src/Controller/Admin/PackageVersionCrudController.php
index a015c2b..d36efc4 100644
--- a/src/Controller/Admin/PackageVersionCrudController.php
+++ b/src/Controller/Admin/PackageVersionCrudController.php
@@ -36,12 +36,8 @@ public function configureCrud(Crud $crud): Crud
public function configureActions(Actions $actions): Actions
{
return $actions
- ->add(Crud::PAGE_INDEX, Action::DETAIL)
- ->remove(Crud::PAGE_INDEX, Action::NEW)
- ->remove(Crud::PAGE_INDEX, Action::EDIT)
- ->remove(Crud::PAGE_INDEX, Action::DELETE)
- ->remove(Crud::PAGE_DETAIL, Action::EDIT)
- ->remove(Crud::PAGE_DETAIL, Action::DELETE);
+ ->disable(Action::DELETE, Action::NEW, Action::EDIT)
+ ->add(Crud::PAGE_INDEX, Action::DETAIL);
}
#[\Override]
diff --git a/src/Controller/Admin/ProjectCrudController.php b/src/Controller/Admin/ProjectCrudController.php
new file mode 100644
index 0000000..88972f3
--- /dev/null
+++ b/src/Controller/Admin/ProjectCrudController.php
@@ -0,0 +1,87 @@
+setDefaultSort(['name' => 'ASC'])
+ ->setSearchFields(['name', 'details'])
+ ->showEntityActionsInlined()
+ ->setPageTitle(Crud::PAGE_INDEX, 'Leantime projects')
+ ->setHelp(Crud::PAGE_INDEX, 'Projects are synced from Leantime. Click on the "Sync all" button to update all projects.');
+ }
+
+ #[\Override]
+ public function configureActions(Actions $actions): Actions
+ {
+ return $actions
+ ->disable(Action::DELETE, Action::NEW, Action::EDIT)
+ ->add(Crud::PAGE_INDEX, $this->createLeantimeAction())
+ ->add(Crud::PAGE_DETAIL, $this->createLeantimeAction())
+ ->add(Crud::PAGE_INDEX, Action::DETAIL)
+ ->add(Crud::PAGE_INDEX, $this->createExportAction())
+ ->add(Crud::PAGE_INDEX, $this->createUpdateAllProjectsAction());
+ }
+
+ #[\Override]
+ public function configureFields(string $pageName): iterable
+ {
+ yield VersionField::new('LeantimeId')->setLabel('id');
+ yield TextField::new('name');
+ yield TextEditorField::new('details')->formatValue(fn ($value) => strip_tags($value));
+ yield DateTimeField::new('createdAt')->hideOnIndex();
+ }
+
+ public function createLeantimeAction(): Action
+ {
+ return Action::new('leantime', $label ?? new TranslatableMessage('Leantime'), 'fa fa-link')
+ ->linkToUrl(function (Project $project) {
+ return $project->getLeantimeUrl();
+ });
+ }
+
+ public function createUpdateAllProjectsAction(): Action
+ {
+ return Action::new('update', $label ?? new TranslatableMessage('Sync all'), 'fa fa-rotate')
+ ->createAsGlobalAction()
+ ->linkToCrudAction('updateAllProjects');
+ }
+
+ public function updateAllProjects(SiteRepository $siteRepository): RedirectResponse
+ {
+ $this->projectSyncService->syncAllProjects();
+
+ return $this->redirectToRoute('admin_project_index');
+ }
+}
diff --git a/src/Controller/Admin/ServerCrudController.php b/src/Controller/Admin/ServerCrudController.php
index a7bbcda..f0e3d80 100644
--- a/src/Controller/Admin/ServerCrudController.php
+++ b/src/Controller/Admin/ServerCrudController.php
@@ -62,6 +62,9 @@ public function configureActions(Actions $actions): Actions
->remove(Crud::PAGE_INDEX, Action::DELETE)
->add(Crud::PAGE_INDEX, Action::DETAIL)
->add(Crud::PAGE_INDEX, $this->createExportAction())
+ ->update(Crud::PAGE_INDEX, Action::NEW,
+ static fn (Action $action) => $action->setIcon('fa fa-plus')
+ )
;
}
diff --git a/src/Controller/Admin/ServiceCertificateCrudController.php b/src/Controller/Admin/ServiceCertificateCrudController.php
index 8c68f7f..74267d5 100644
--- a/src/Controller/Admin/ServiceCertificateCrudController.php
+++ b/src/Controller/Admin/ServiceCertificateCrudController.php
@@ -52,7 +52,11 @@ public function configureActions(Actions $actions): Actions
return $actions
->add(Crud::PAGE_INDEX, Action::DETAIL)
->add(Crud::PAGE_INDEX, $this->createExportAction())
- ->remove(Crud::PAGE_INDEX, Action::DELETE);
+ ->remove(Crud::PAGE_INDEX, Action::DELETE)
+ ->update(Crud::PAGE_INDEX, Action::NEW,
+ static fn (Action $action) => $action->setIcon('fa fa-plus')
+ )
+ ;
}
#[\Override]
diff --git a/src/Controller/Admin/SiteCrudController.php b/src/Controller/Admin/SiteCrudController.php
index 3380dab..9a3af8e 100644
--- a/src/Controller/Admin/SiteCrudController.php
+++ b/src/Controller/Admin/SiteCrudController.php
@@ -44,13 +44,9 @@ public function configureCrud(Crud $crud): Crud
public function configureActions(Actions $actions): Actions
{
return $actions
+ ->disable(Action::DELETE, Action::NEW, Action::EDIT)
->add(Crud::PAGE_INDEX, Action::DETAIL)
- ->add(Crud::PAGE_INDEX, $this->createExportAction())
- ->remove(Crud::PAGE_INDEX, Action::NEW)
- ->remove(Crud::PAGE_INDEX, Action::EDIT)
- ->remove(Crud::PAGE_INDEX, Action::DELETE)
- ->remove(Crud::PAGE_DETAIL, Action::EDIT)
- ->remove(Crud::PAGE_DETAIL, Action::DELETE);
+ ->add(Crud::PAGE_INDEX, $this->createExportAction());
}
#[\Override]
diff --git a/src/Entity/Project.php b/src/Entity/Project.php
index 33b4dc7..720f7d2 100644
--- a/src/Entity/Project.php
+++ b/src/Entity/Project.php
@@ -34,6 +34,11 @@ public function __construct(int $leantimeId, string $name, ?string $details = nu
$this->details = $details;
}
+ public function __toString(): string
+ {
+ return $this->name;
+ }
+
public function getName(): string
{
return $this->name;
diff --git a/src/Trait/ExportCrudControllerTrait.php b/src/Trait/ExportCrudControllerTrait.php
index 8880d58..4e9656c 100644
--- a/src/Trait/ExportCrudControllerTrait.php
+++ b/src/Trait/ExportCrudControllerTrait.php
@@ -34,7 +34,7 @@ public function setExporter(Exporter $exporter): void
protected function createExportAction(string|TranslatableMessage|null $label = null): Action
{
- return Action::new('export', $label ?? new TranslatableMessage('Export'))
+ return Action::new('export', $label ?? new TranslatableMessage('Export'), 'fa fa-file-csv')
->createAsGlobalAction()
->linkToCrudAction('export');
}
From 3cb35dc8576f07dd87d5886bf1c9a8dfd290bbba Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Thu, 23 Oct 2025 11:19:02 +0200
Subject: [PATCH 28/31] 5566: Add security contract entity and controller,
refactor crud controller and styling
---
assets/styles/app.css | 11 ++
...21113753.php => Version20251023091529.php} | 30 +++-
.../Admin/AbstractFullCrudController.php | 65 ++++++++
src/Controller/Admin/DashboardController.php | 26 ++-
src/Controller/Admin/OIDCCrudController.php | 24 +--
.../Admin/ProjectCrudController.php | 10 +-
.../Admin/SecurityContractCrudController.php | 66 ++++++++
src/Controller/Admin/ServerCrudController.php | 18 +--
.../ServiceCertificateCrudController.php | 31 +---
src/EasyAdmin/Config/AutoBadgeMenuItem.php | 28 ++++
.../Config/Menu/AutoBadgeCrudMenuItem.php | 38 +++++
src/Entity/Project.php | 20 +++
src/Entity/SecurityContract.php | 152 ++++++++++++++++++
src/Repository/OIDCRepository.php | 10 ++
src/Repository/SecurityContractRepository.php | 54 +++++++
.../ServiceCertificateRepository.php | 10 ++
.../EasyAdminBundle/crud/detail.html.twig | 43 +++++
17 files changed, 564 insertions(+), 72 deletions(-)
rename migrations/{Version20251021113753.php => Version20251023091529.php} (50%)
create mode 100644 src/Controller/Admin/AbstractFullCrudController.php
create mode 100644 src/Controller/Admin/SecurityContractCrudController.php
create mode 100644 src/EasyAdmin/Config/AutoBadgeMenuItem.php
create mode 100644 src/EasyAdmin/Config/Menu/AutoBadgeCrudMenuItem.php
create mode 100644 src/Entity/SecurityContract.php
create mode 100644 src/Repository/SecurityContractRepository.php
create mode 100644 templates/bundles/EasyAdminBundle/crud/detail.html.twig
diff --git a/assets/styles/app.css b/assets/styles/app.css
index 2e8af7a..3d9fd32 100644
--- a/assets/styles/app.css
+++ b/assets/styles/app.css
@@ -13,3 +13,14 @@
--text-color-dark: rgb(66, 66, 66);
--bs-danger-rgb: 228, 73, 48;
}
+
+/* Grouped dropdown group styling for index pages */
+.dropdown-menu {
+ .btn-danger i, .text-danger i {
+ color: var(--button-invisible-danger-color);
+ }
+
+ a.btn-danger:hover , a.text-danger:hover {
+ background: var(--button-invisible-danger-hover-hover-bg);
+ }
+}
\ No newline at end of file
diff --git a/migrations/Version20251021113753.php b/migrations/Version20251023091529.php
similarity index 50%
rename from migrations/Version20251021113753.php
rename to migrations/Version20251023091529.php
index 27b347d..f1a4fea 100644
--- a/migrations/Version20251021113753.php
+++ b/migrations/Version20251023091529.php
@@ -10,7 +10,7 @@
/**
* Auto-generated Migration: Please modify to your needs!
*/
-final class Version20251021113753 extends AbstractMigration
+final class Version20251023091529 extends AbstractMigration
{
public function getDescription(): string
{
@@ -37,11 +37,39 @@ public function up(Schema $schema): void
PRIMARY KEY (id)
) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci`
SQL);
+ $this->addSql(<<<'SQL'
+ CREATE TABLE security_contract (
+ id BINARY(16) NOT NULL,
+ created_at DATETIME NOT NULL,
+ modified_at DATETIME NOT NULL,
+ created_by VARCHAR(255) DEFAULT '' NOT NULL,
+ modified_by VARCHAR(255) DEFAULT '' NOT NULL,
+ economics_report_url VARCHAR(255) DEFAULT NULL,
+ operational_contract_url LONGTEXT DEFAULT NULL,
+ monthly_price DOUBLE PRECISION DEFAULT NULL,
+ quarterly_hours DOUBLE PRECISION DEFAULT NULL,
+ valid_from DATE NOT NULL,
+ valid_to DATE NOT NULL,
+ active TINYINT(1) NOT NULL,
+ notes LONGTEXT NOT NULL,
+ project_id BINARY(16) NOT NULL,
+ UNIQUE INDEX UNIQ_8AE4AF8B166D1F9C (project_id),
+ PRIMARY KEY (id)
+ ) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci`
+ SQL);
+ $this->addSql(<<<'SQL'
+ ALTER TABLE
+ security_contract
+ ADD
+ CONSTRAINT FK_8AE4AF8B166D1F9C FOREIGN KEY (project_id) REFERENCES project (id)
+ SQL);
}
public function down(Schema $schema): void
{
// this down() migration is auto-generated, please modify it to your needs
+ $this->addSql('ALTER TABLE security_contract DROP FOREIGN KEY FK_8AE4AF8B166D1F9C');
$this->addSql('DROP TABLE project');
+ $this->addSql('DROP TABLE security_contract');
}
}
diff --git a/src/Controller/Admin/AbstractFullCrudController.php b/src/Controller/Admin/AbstractFullCrudController.php
new file mode 100644
index 0000000..268c544
--- /dev/null
+++ b/src/Controller/Admin/AbstractFullCrudController.php
@@ -0,0 +1,65 @@
+showEntityActionsInlined();
+ }
+
+ #[\Override]
+ public function configureActions(Actions $actions): Actions
+ {
+ // Remove default actions
+ $actions
+ ->remove(Crud::PAGE_INDEX, Action::EDIT)
+ ->remove(Crud::PAGE_INDEX, Action::DELETE);
+
+ // Re-add default actions as grouped action.
+ $groupedDefaultActions = ActionGroup::new('default', 'Default')
+ ->addMainAction(
+ Action::new('show', 'Show')
+ ->linkToCrudAction(Action::DETAIL)
+ )
+ ->addAction(
+ Action::new('edit', 'Edit')
+ ->linkToCrudAction(Action::EDIT)
+ ->setIcon('fa fa-edit')
+ )
+ ->addDivider()
+ ->addAction(
+ Action::new('delete', 'Delete')
+ ->linkToCrudAction(Action::DELETE)
+ ->setIcon('fa fa-trash')
+ ->setCssClass('btn-danger text-danger')
+ );
+
+ return $actions
+ ->add(Crud::PAGE_INDEX, $groupedDefaultActions)
+ ->add(Crud::PAGE_INDEX, $this->createExportAction())
+ ->update(Crud::PAGE_INDEX, Action::NEW,
+ static fn (Action $action) => $action->setIcon('fa fa-plus')
+ )
+ ;
+ }
+
+ #[\Override]
+ public function configureAssets(Assets $assets): Assets
+ {
+ return $assets
+ ->addWebpackEncoreEntry('easyadmin');
+ }
+}
\ No newline at end of file
diff --git a/src/Controller/Admin/DashboardController.php b/src/Controller/Admin/DashboardController.php
index 9624283..9e1e0e6 100644
--- a/src/Controller/Admin/DashboardController.php
+++ b/src/Controller/Admin/DashboardController.php
@@ -4,6 +4,7 @@
namespace App\Controller\Admin;
+use App\EasyAdmin\Config\AutoBadgeMenuItem;
use App\Entity\Advisory;
use App\Entity\DetectionResult;
use App\Entity\DockerImage;
@@ -18,10 +19,14 @@
use App\Entity\Package;
use App\Entity\PackageVersion;
use App\Entity\Project;
+use App\Entity\SecurityContract;
use App\Entity\Server;
use App\Entity\ServiceCertificate;
use App\Entity\Site;
use App\Repository\AdvisoryRepository;
+use App\Repository\OIDCRepository;
+use App\Repository\SecurityContractRepository;
+use App\Repository\ServiceCertificateRepository;
use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;
@@ -35,6 +40,9 @@ class DashboardController extends AbstractDashboardController
public function __construct(
private readonly AdminUrlGenerator $adminUrlGenerator,
private readonly AdvisoryRepository $advisoryRepository,
+ private readonly ServiceCertificateRepository $serviceCertificateRepository,
+ private readonly OIDCRepository $oidcRepository,
+ private readonly SecurityContractRepository $securityContractRepository,
) {
}
@@ -62,17 +70,27 @@ public function configureDashboard(): Dashboard
public function configureMenuItems(): iterable
{
yield MenuItem::linkToDashboard('Dashboard', 'fa fa-home');
- yield MenuItem::linkToCrud('Servers', 'fas fa-server', Server::class);
+
+ yield MenuItem::section('Projects');
yield MenuItem::linkToCrud('Projects', 'fas fa-folder', Project::class);
+ yield AutoBadgeMenuItem::linkToCrud('Cyber Security', 'fas fa-file-contract', SecurityContract::class)
+ ->setBadge($this->securityContractRepository->countExpiredContracts(), 'danger');
+ yield AutoBadgeMenuItem::linkToCrud('OIDC', 'fas fa-shield-halved', OIDC::class)
+ ->setBadge($this->oidcRepository->countExpiredCertificates(), 'danger');
+ yield AutoBadgeMenuItem::linkToCrud('Service certificates', 'fas fa-passport', ServiceCertificate::class)
+ ->setBadge($this->serviceCertificateRepository->countExpiredCertificates(), 'danger');
+
+ yield MenuItem::section('Hosting');
+ yield MenuItem::linkToCrud('Servers', 'fas fa-server', Server::class);
yield MenuItem::linkToCrud('Installations', 'fas fa-folder', Installation::class);
yield MenuItem::linkToCrud('Sites', 'fas fa-bookmark', Site::class);
yield MenuItem::linkToCrud('Domains', 'fas fa-link', Domain::class);
- yield MenuItem::linkToCrud('OIDC', 'fas fa-key', OIDC::class);
- yield MenuItem::linkToCrud('Service certificates', 'fas fa-lock', ServiceCertificate::class);
+
yield MenuItem::section('Dependencies');
yield MenuItem::linkToCrud('Packages', 'fas fa-cube', Package::class);
yield MenuItem::linkToCrud('Package Versions', 'fas fa-cubes', PackageVersion::class);
- yield MenuItem::linkToCrud('Advisories', 'fas fa-skull-crossbones', Advisory::class)->setBadge($this->advisoryRepository->count([]), 'dark');
+ yield AutoBadgeMenuItem::linkToCrud('Advisories', 'fas fa-skull-crossbones', Advisory::class)
+ ->setBadge($this->advisoryRepository->count([]), 'danger');
yield MenuItem::linkToCrud('Modules', 'fas fa-cube', Module::class);
yield MenuItem::linkToCrud('Modules Versions', 'fas fa-cubes', ModuleVersion::class);
yield MenuItem::linkToCrud('Docker Images', 'fas fa-cube', DockerImage::class);
diff --git a/src/Controller/Admin/OIDCCrudController.php b/src/Controller/Admin/OIDCCrudController.php
index 48effce..3ba6522 100644
--- a/src/Controller/Admin/OIDCCrudController.php
+++ b/src/Controller/Admin/OIDCCrudController.php
@@ -8,9 +8,9 @@
use App\Repository\SiteRepository;
use App\Trait\ExportCrudControllerTrait;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
+use EasyCorp\Bundle\EasyAdminBundle\Config\ActionGroup;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
-use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
use EasyCorp\Bundle\EasyAdminBundle\Field\DateField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextareaField;
@@ -18,10 +18,8 @@
use EasyCorp\Bundle\EasyAdminBundle\Field\UrlField;
use Symfony\Component\Translation\TranslatableMessage;
-class OIDCCrudController extends AbstractCrudController
+class OIDCCrudController extends AbstractFullCrudController
{
- use ExportCrudControllerTrait;
-
public function __construct(
private readonly SiteRepository $siteRepository)
{
@@ -32,24 +30,6 @@ public static function getEntityFqcn(): string
return OIDC::class;
}
- #[\Override]
- public function configureCrud(Crud $crud): Crud
- {
- return $crud->showEntityActionsInlined();
- }
-
- #[\Override]
- public function configureActions(Actions $actions): Actions
- {
- return $actions
- ->add(Crud::PAGE_INDEX, Action::DETAIL)
- ->add(Crud::PAGE_INDEX, $this->createExportAction())
- ->update(Crud::PAGE_INDEX, Action::NEW,
- static fn (Action $action) => $action->setIcon('fa fa-plus')
- )
- ;
- }
-
#[\Override]
public function configureFields(string $pageName): iterable
{
diff --git a/src/Controller/Admin/ProjectCrudController.php b/src/Controller/Admin/ProjectCrudController.php
index 88972f3..18af14a 100644
--- a/src/Controller/Admin/ProjectCrudController.php
+++ b/src/Controller/Admin/ProjectCrudController.php
@@ -38,7 +38,7 @@ public function configureCrud(Crud $crud): Crud
->setDefaultSort(['name' => 'ASC'])
->setSearchFields(['name', 'details'])
->showEntityActionsInlined()
- ->setPageTitle(Crud::PAGE_INDEX, 'Leantime projects')
+ ->setPageTitle(Crud::PAGE_INDEX, 'Projects')
->setHelp(Crud::PAGE_INDEX, 'Projects are synced from Leantime. Click on the "Sync all" button to update all projects.');
}
@@ -80,7 +80,13 @@ public function createUpdateAllProjectsAction(): Action
public function updateAllProjects(SiteRepository $siteRepository): RedirectResponse
{
- $this->projectSyncService->syncAllProjects();
+ try {
+ $this->projectSyncService->syncAllProjects();
+
+ $this->addFlash('info', 'All projects have been synced.', );
+ } catch (\Throwable $e) {
+ $this->addFlash('error', 'An error occurred while syncing projects. Check the log for details.');
+ }
return $this->redirectToRoute('admin_project_index');
}
diff --git a/src/Controller/Admin/SecurityContractCrudController.php b/src/Controller/Admin/SecurityContractCrudController.php
new file mode 100644
index 0000000..80b372d
--- /dev/null
+++ b/src/Controller/Admin/SecurityContractCrudController.php
@@ -0,0 +1,66 @@
+setDefaultSort(['project.name' => 'ASC'])
+ //->setSearchFields(['name', 'details'])
+ ->showEntityActionsInlined()
+ ->setPageTitle(Crud::PAGE_INDEX, 'Cyber Security Contracts');
+ }
+
+ #[\Override]
+ public function configureFields(string $pageName): iterable
+ {
+ yield FormField::addFieldset('Project');
+ yield BooleanField::new('active')->renderAsSwitch(false)->setColumns(2);
+ yield AssociationField::new('project')->setColumns(10);
+
+ yield FormField::addFieldset('Links');
+ yield UrlField::new('project.leantimeUrl')->setLabel('Leantime URL')->setDisabled()->hideOnIndex()->hideWhenCreating();
+ yield UrlField::new('economicsReportUrl')->setLabel('Economics URL')->hideOnIndex()->setColumns(12);
+ yield UrlField::new('operationalContractUrl')->setLabel('Contract URL')->hideOnIndex()->setColumns(12);
+
+ yield FormField::addFieldset('Budget');
+ yield NumberField::new('monthlyPrice')->setTextAlign('right')->setColumns(6);
+ yield NumberField::new('quarterlyHours')->setTextAlign('right')->setColumns(6);
+
+ yield FormField::addFieldset('Validity');
+ yield DateField::new('validFrom')->setColumns(6);
+ yield DateField::new('validTo')->setColumns(6);
+
+ yield FormField::addFieldset('Notes');
+ yield TextareaField::new('notes')->hideOnIndex()->setColumns(12);
+ }
+}
diff --git a/src/Controller/Admin/ServerCrudController.php b/src/Controller/Admin/ServerCrudController.php
index f0e3d80..b15b4b5 100644
--- a/src/Controller/Admin/ServerCrudController.php
+++ b/src/Controller/Admin/ServerCrudController.php
@@ -28,10 +28,8 @@
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use Symfony\Component\HttpFoundation\RequestStack;
-class ServerCrudController extends AbstractCrudController
+class ServerCrudController extends AbstractFullCrudController
{
- use ExportCrudControllerTrait;
-
public function __construct(
private readonly RequestStack $requestStack,
) {
@@ -54,20 +52,6 @@ public function configureCrud(Crud $crud): Crud
return $crud;
}
- #[\Override]
- public function configureActions(Actions $actions): Actions
- {
- return $actions
- ->remove(Crud::PAGE_INDEX, Action::EDIT)
- ->remove(Crud::PAGE_INDEX, Action::DELETE)
- ->add(Crud::PAGE_INDEX, Action::DETAIL)
- ->add(Crud::PAGE_INDEX, $this->createExportAction())
- ->update(Crud::PAGE_INDEX, Action::NEW,
- static fn (Action $action) => $action->setIcon('fa fa-plus')
- )
- ;
- }
-
#[\Override]
public function configureFields(string $pageName): iterable
{
diff --git a/src/Controller/Admin/ServiceCertificateCrudController.php b/src/Controller/Admin/ServiceCertificateCrudController.php
index 74267d5..995bf76 100644
--- a/src/Controller/Admin/ServiceCertificateCrudController.php
+++ b/src/Controller/Admin/ServiceCertificateCrudController.php
@@ -21,12 +21,11 @@
use EasyCorp\Bundle\EasyAdminBundle\Field\UrlField;
use Symfony\Component\Translation\TranslatableMessage;
-class ServiceCertificateCrudController extends AbstractCrudController
+class ServiceCertificateCrudController extends AbstractFullCrudController
{
- use ExportCrudControllerTrait;
-
- public function __construct(private readonly SiteRepository $siteRepository)
- {
+ public function __construct(
+ private readonly SiteRepository $siteRepository
+ ) {
}
public static function getEntityFqcn(): string
@@ -46,19 +45,6 @@ public function configureCrud(Crud $crud): Crud
->setSearchFields(['domain', 'name', 'description', 'services.type']);
}
- #[\Override]
- public function configureActions(Actions $actions): Actions
- {
- return $actions
- ->add(Crud::PAGE_INDEX, Action::DETAIL)
- ->add(Crud::PAGE_INDEX, $this->createExportAction())
- ->remove(Crud::PAGE_INDEX, Action::DELETE)
- ->update(Crud::PAGE_INDEX, Action::NEW,
- static fn (Action $action) => $action->setIcon('fa fa-plus')
- )
- ;
- }
-
#[\Override]
public function configureFields(string $pageName): iterable
{
@@ -81,7 +67,7 @@ public function configureFields(string $pageName): iterable
yield TextField::new('description')->onlyOnIndex()
->setHelp(new TranslatableMessage('Tell what this certificate is used for.'))->setMaxLength(33)->stripTags();
yield UrlField::new('onePasswordUrl')
- ->setLabel(new TranslatableMessage('1Password url'));
+ ->setLabel(new TranslatableMessage('1Password url'))->hideOnIndex();
yield UrlField::new('usageDocumentationUrl')->hideOnIndex()
->setHelp(new TranslatableMessage('Tell where to find documentation on how the certificate is used on the site and how to configure the use.'));
yield DateTimeField::new('expirationTime');
@@ -97,11 +83,4 @@ public function configureFields(string $pageName): iterable
->setTemplatePath('service_certificate/services.html.twig')
;
}
-
- #[\Override]
- public function configureAssets(Assets $assets): Assets
- {
- return $assets
- ->addWebpackEncoreEntry('easyadmin');
- }
}
diff --git a/src/EasyAdmin/Config/AutoBadgeMenuItem.php b/src/EasyAdmin/Config/AutoBadgeMenuItem.php
new file mode 100644
index 0000000..edc2fcd
--- /dev/null
+++ b/src/EasyAdmin/Config/AutoBadgeMenuItem.php
@@ -0,0 +1,28 @@
+crudMenuItem = new CrudMenuItem(...$args);
+ }
+
+ public function __call($name, $arguments)
+ {
+ return $this->crudMenuItem->$name(...$arguments);
+ }
+
+ public static function __callStatic(string $name, array $arguments)
+ {
+ throw new \BadMethodCallException(sprintf('Static method %s not implemented', $name));
+ }
+
+ public function setBadge(/* \Stringable|string|int|float|bool|null */ $content, string $style = 'secondary', array $htmlAttributes = []): self
+ {
+ if (!is_int($content)) {
+ throw new \InvalidArgumentException('The badge content must be an integer');
+ }
+
+ if ($content > 0) {
+ $this->crudMenuItem->setBadge($content, $style, $htmlAttributes);
+ }
+
+ return $this;
+ }
+}
\ No newline at end of file
diff --git a/src/Entity/Project.php b/src/Entity/Project.php
index 720f7d2..e1d3699 100644
--- a/src/Entity/Project.php
+++ b/src/Entity/Project.php
@@ -27,6 +27,9 @@ class Project extends AbstractBaseEntity implements \Stringable
#[ORM\Column]
private ?\DateTimeImmutable $leantimeModifiedAt = null;
+ #[ORM\OneToOne(mappedBy: 'project', cascade: ['persist', 'remove'])]
+ private ?SecurityContract $securityContract = null;
+
public function __construct(int $leantimeId, string $name, ?string $details = null)
{
$this->leantimeId = $leantimeId;
@@ -122,4 +125,21 @@ public function setDetailsText(string $detailsText): static
return $this;
}
+
+ public function getSecurityContract(): ?SecurityContract
+ {
+ return $this->securityContract;
+ }
+
+ public function setSecurityContract(SecurityContract $securityContract): static
+ {
+ // set the owning side of the relation if necessary
+ if ($securityContract->getProject() !== $this) {
+ $securityContract->setProject($this);
+ }
+
+ $this->securityContract = $securityContract;
+
+ return $this;
+ }
}
diff --git a/src/Entity/SecurityContract.php b/src/Entity/SecurityContract.php
new file mode 100644
index 0000000..97741e6
--- /dev/null
+++ b/src/Entity/SecurityContract.php
@@ -0,0 +1,152 @@
+project->getName();
+ }
+
+ public function getProject(): ?Project
+ {
+ return $this->project;
+ }
+
+ public function setProject(Project $project): static
+ {
+ $this->project = $project;
+
+ return $this;
+ }
+
+ public function getEconomicsReportUrl(): ?string
+ {
+ return $this->economicsReportUrl;
+ }
+
+ public function setEconomicsReportUrl(?string $economicsReportUrl): static
+ {
+ $this->economicsReportUrl = $economicsReportUrl;
+
+ return $this;
+ }
+
+ public function getOperationalContractUrl(): ?string
+ {
+ return $this->operationalContractUrl;
+ }
+
+ public function setOperationalContractUrl(?string $operationalContractUrl): static
+ {
+ $this->operationalContractUrl = $operationalContractUrl;
+
+ return $this;
+ }
+
+ public function getMonthlyPrice(): ?float
+ {
+ return $this->monthlyPrice;
+ }
+
+ public function setMonthlyPrice(?float $monthlyPrice): static
+ {
+ $this->monthlyPrice = $monthlyPrice;
+
+ return $this;
+ }
+
+ public function getQuarterlyHours(): ?float
+ {
+ return $this->quarterlyHours;
+ }
+
+ public function setQuarterlyHours(float $quarterlyHours): static
+ {
+ $this->quarterlyHours = $quarterlyHours;
+
+ return $this;
+ }
+
+ public function getValidFrom(): ?\DateTimeImmutable
+ {
+ return $this->validFrom;
+ }
+
+ public function setValidFrom(\DateTimeImmutable $validFrom): static
+ {
+ $this->validFrom = $validFrom;
+
+ return $this;
+ }
+
+ public function getValidTo(): ?\DateTimeImmutable
+ {
+ return $this->validTo;
+ }
+
+ public function setValidTo(\DateTimeImmutable $validTo): static
+ {
+ $this->validTo = $validTo;
+
+ return $this;
+ }
+
+ public function isActive(): ?bool
+ {
+ return $this->active;
+ }
+
+ public function setActive(bool $active): static
+ {
+ $this->active = $active;
+
+ return $this;
+ }
+
+ public function getNotes(): ?string
+ {
+ return $this->notes;
+ }
+
+ public function setNotes(string $notes): static
+ {
+ $this->notes = $notes;
+
+ return $this;
+ }
+}
diff --git a/src/Repository/OIDCRepository.php b/src/Repository/OIDCRepository.php
index cfe5a56..09171d2 100644
--- a/src/Repository/OIDCRepository.php
+++ b/src/Repository/OIDCRepository.php
@@ -40,4 +40,14 @@ public function remove(OIDC $entity, bool $flush = false): void
$this->getEntityManager()->flush();
}
}
+
+ public function countExpiredCertificates(): int
+ {
+ return $this->createQueryBuilder('o')
+ ->select('COUNT(o)')
+ ->where('o.expirationTime < :now')
+ ->setParameter('now', new \DateTime())
+ ->getQuery()
+ ->getSingleScalarResult();
+ }
}
diff --git a/src/Repository/SecurityContractRepository.php b/src/Repository/SecurityContractRepository.php
new file mode 100644
index 0000000..d33baf8
--- /dev/null
+++ b/src/Repository/SecurityContractRepository.php
@@ -0,0 +1,54 @@
+
+ */
+class SecurityContractRepository extends ServiceEntityRepository
+{
+ public function __construct(ManagerRegistry $registry)
+ {
+ parent::__construct($registry, SecurityContract::class);
+ }
+
+ // /**
+ // * @return SecurityContract[] Returns an array of SecurityContract objects
+ // */
+ // public function findByExampleField($value): array
+ // {
+ // return $this->createQueryBuilder('s')
+ // ->andWhere('s.exampleField = :val')
+ // ->setParameter('val', $value)
+ // ->orderBy('s.id', 'ASC')
+ // ->setMaxResults(10)
+ // ->getQuery()
+ // ->getResult()
+ // ;
+ // }
+
+ // public function findOneBySomeField($value): ?SecurityContract
+ // {
+ // return $this->createQueryBuilder('s')
+ // ->andWhere('s.exampleField = :val')
+ // ->setParameter('val', $value)
+ // ->getQuery()
+ // ->getOneOrNullResult()
+ // ;
+ // }
+
+ public function countExpiredContracts(): int
+ {
+ return $this->createQueryBuilder('c')
+ ->select('COUNT(c)')
+ ->where('c.validTo < :now')
+ ->andWhere('c.active = true')
+ ->setParameter('now', new \DateTime())
+ ->getQuery()
+ ->getSingleScalarResult();
+ }
+}
diff --git a/src/Repository/ServiceCertificateRepository.php b/src/Repository/ServiceCertificateRepository.php
index 219da2b..bbd1370 100644
--- a/src/Repository/ServiceCertificateRepository.php
+++ b/src/Repository/ServiceCertificateRepository.php
@@ -40,4 +40,14 @@ public function remove(ServiceCertificate $entity, bool $flush = false): void
$this->getEntityManager()->flush();
}
}
+
+ public function countExpiredCertificates(): int
+ {
+ return $this->createQueryBuilder('c')
+ ->select('COUNT(c)')
+ ->where('c.expirationTime < :now')
+ ->setParameter('now', new \DateTime())
+ ->getQuery()
+ ->getSingleScalarResult();
+ }
}
diff --git a/templates/bundles/EasyAdminBundle/crud/detail.html.twig b/templates/bundles/EasyAdminBundle/crud/detail.html.twig
new file mode 100644
index 0000000..9abbc27
--- /dev/null
+++ b/templates/bundles/EasyAdminBundle/crud/detail.html.twig
@@ -0,0 +1,43 @@
+{% extends '@!EasyAdmin/crud/detail.html.twig' %}
+
+{% block main %}
+ {{ parent() }}
+
+
+
+
+{% endblock %}
\ No newline at end of file
From e11493eb33015268ca0193ed71fadf82ea467a91 Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Thu, 23 Oct 2025 11:27:43 +0200
Subject: [PATCH 29/31] 5566: Normalize composer.json
---
composer.json | 2 +-
composer.lock | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/composer.json b/composer.json
index aa99043..57405df 100644
--- a/composer.json
+++ b/composer.json
@@ -34,7 +34,7 @@
"symfony/http-client": "^7.3.4",
"symfony/messenger": "^7.3.3",
"symfony/monolog-bundle": "^3.10",
- "symfony/object-mapper": "7.3.*",
+ "symfony/object-mapper": "^7.3.0",
"symfony/property-access": "^7.3.3",
"symfony/property-info": "^7.3.4",
"symfony/runtime": "^7.3.4",
diff --git a/composer.lock b/composer.lock
index 2e80675..c700676 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "60d7644f1ca92f78aa528dbb47634b49",
+ "content-hash": "1e514f2fb03ce2e04966c86e6b5b2cc2",
"packages": [
{
"name": "api-platform/core",
From c72a91610780cda6e6af323debdb0d4956541d39 Mon Sep 17 00:00:00 2001
From: turegjorup
Date: Thu, 23 Oct 2025 12:24:40 +0200
Subject: [PATCH 30/31] 5566: Code style and static analysis cleanup
---
.../Admin/AbstractFullCrudController.php | 4 ++--
src/Controller/Admin/OIDCCrudController.php | 4 ----
.../Admin/ProjectCrudController.php | 6 +++---
.../Admin/SecurityContractCrudController.php | 13 +------------
src/Controller/Admin/ServerCrudController.php | 4 ----
.../ServiceCertificateCrudController.php | 7 +------
src/EasyAdmin/Config/AutoBadgeMenuItem.php | 5 +++--
.../Config/Menu/AutoBadgeCrudMenuItem.php | 19 +++++++++++++++----
src/Entity/Project.php | 12 ------------
src/Service/Leantime/ApiService.php | 2 +-
src/Service/Leantime/ProjectDto.php | 4 ++--
.../EasyAdminBundle/crud/detail.html.twig | 5 +----
12 files changed, 29 insertions(+), 56 deletions(-)
diff --git a/src/Controller/Admin/AbstractFullCrudController.php b/src/Controller/Admin/AbstractFullCrudController.php
index 268c544..10c4c47 100644
--- a/src/Controller/Admin/AbstractFullCrudController.php
+++ b/src/Controller/Admin/AbstractFullCrudController.php
@@ -53,7 +53,7 @@ public function configureActions(Actions $actions): Actions
->update(Crud::PAGE_INDEX, Action::NEW,
static fn (Action $action) => $action->setIcon('fa fa-plus')
)
- ;
+ ;
}
#[\Override]
@@ -62,4 +62,4 @@ public function configureAssets(Assets $assets): Assets
return $assets
->addWebpackEncoreEntry('easyadmin');
}
-}
\ No newline at end of file
+}
diff --git a/src/Controller/Admin/OIDCCrudController.php b/src/Controller/Admin/OIDCCrudController.php
index 3ba6522..006c319 100644
--- a/src/Controller/Admin/OIDCCrudController.php
+++ b/src/Controller/Admin/OIDCCrudController.php
@@ -6,10 +6,6 @@
use App\Entity\OIDC;
use App\Repository\SiteRepository;
-use App\Trait\ExportCrudControllerTrait;
-use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
-use EasyCorp\Bundle\EasyAdminBundle\Config\ActionGroup;
-use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
use EasyCorp\Bundle\EasyAdminBundle\Field\DateField;
diff --git a/src/Controller/Admin/ProjectCrudController.php b/src/Controller/Admin/ProjectCrudController.php
index 18af14a..a435adf 100644
--- a/src/Controller/Admin/ProjectCrudController.php
+++ b/src/Controller/Admin/ProjectCrudController.php
@@ -63,7 +63,7 @@ public function configureFields(string $pageName): iterable
yield DateTimeField::new('createdAt')->hideOnIndex();
}
- public function createLeantimeAction(): Action
+ public function createLeantimeAction(?string $label = null): Action
{
return Action::new('leantime', $label ?? new TranslatableMessage('Leantime'), 'fa fa-link')
->linkToUrl(function (Project $project) {
@@ -71,7 +71,7 @@ public function createLeantimeAction(): Action
});
}
- public function createUpdateAllProjectsAction(): Action
+ public function createUpdateAllProjectsAction(?string $label = null): Action
{
return Action::new('update', $label ?? new TranslatableMessage('Sync all'), 'fa fa-rotate')
->createAsGlobalAction()
@@ -83,7 +83,7 @@ public function updateAllProjects(SiteRepository $siteRepository): RedirectRespo
try {
$this->projectSyncService->syncAllProjects();
- $this->addFlash('info', 'All projects have been synced.', );
+ $this->addFlash('info', 'All projects have been synced.');
} catch (\Throwable $e) {
$this->addFlash('error', 'An error occurred while syncing projects. Check the log for details.');
}
diff --git a/src/Controller/Admin/SecurityContractCrudController.php b/src/Controller/Admin/SecurityContractCrudController.php
index 80b372d..c95ccad 100644
--- a/src/Controller/Admin/SecurityContractCrudController.php
+++ b/src/Controller/Admin/SecurityContractCrudController.php
@@ -3,10 +3,7 @@
namespace App\Controller\Admin;
use App\Entity\SecurityContract;
-use App\Repository\SecurityContractRepository;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
-use EasyCorp\Bundle\EasyAdminBundle\Config\KeyValueStore;
-use EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext;
use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
use EasyCorp\Bundle\EasyAdminBundle\Field\BooleanField;
use EasyCorp\Bundle\EasyAdminBundle\Field\DateField;
@@ -14,17 +11,9 @@
use EasyCorp\Bundle\EasyAdminBundle\Field\NumberField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextareaField;
use EasyCorp\Bundle\EasyAdminBundle\Field\UrlField;
-use Symfony\Component\HttpFoundation\RedirectResponse;
-use Symfony\Component\HttpFoundation\Response;
class SecurityContractCrudController extends AbstractFullCrudController
{
- public function __construct(
- private readonly SecurityContractRepository $securityContractRepository,
- )
- {
- }
-
public static function getEntityFqcn(): string
{
return SecurityContract::class;
@@ -35,7 +24,7 @@ public function configureCrud(Crud $crud): Crud
{
return $crud
->setDefaultSort(['project.name' => 'ASC'])
- //->setSearchFields(['name', 'details'])
+ // ->setSearchFields(['name', 'details'])
->showEntityActionsInlined()
->setPageTitle(Crud::PAGE_INDEX, 'Cyber Security Contracts');
}
diff --git a/src/Controller/Admin/ServerCrudController.php b/src/Controller/Admin/ServerCrudController.php
index b15b4b5..e56522d 100644
--- a/src/Controller/Admin/ServerCrudController.php
+++ b/src/Controller/Admin/ServerCrudController.php
@@ -9,16 +9,12 @@
use App\Form\Type\Admin\MariaDbVersionFilter;
use App\Form\Type\Admin\ServerTypeFilter;
use App\Form\Type\Admin\SystemFilter;
-use App\Trait\ExportCrudControllerTrait;
use App\Types\DatabaseVersionType;
use App\Types\HostingProviderType;
use App\Types\ServerTypeType;
use App\Types\SystemType;
-use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
-use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Config\Filters;
-use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
use EasyCorp\Bundle\EasyAdminBundle\Field\BooleanField;
use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
diff --git a/src/Controller/Admin/ServiceCertificateCrudController.php b/src/Controller/Admin/ServiceCertificateCrudController.php
index 995bf76..526dbe0 100644
--- a/src/Controller/Admin/ServiceCertificateCrudController.php
+++ b/src/Controller/Admin/ServiceCertificateCrudController.php
@@ -7,12 +7,7 @@
use App\Entity\ServiceCertificate;
use App\Form\Type\ServiceCertificate\ServiceType;
use App\Repository\SiteRepository;
-use App\Trait\ExportCrudControllerTrait;
-use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
-use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
-use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
-use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
use EasyCorp\Bundle\EasyAdminBundle\Field\CollectionField;
use EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField;
@@ -24,7 +19,7 @@
class ServiceCertificateCrudController extends AbstractFullCrudController
{
public function __construct(
- private readonly SiteRepository $siteRepository
+ private readonly SiteRepository $siteRepository,
) {
}
diff --git a/src/EasyAdmin/Config/AutoBadgeMenuItem.php b/src/EasyAdmin/Config/AutoBadgeMenuItem.php
index edc2fcd..9ba8ca1 100644
--- a/src/EasyAdmin/Config/AutoBadgeMenuItem.php
+++ b/src/EasyAdmin/Config/AutoBadgeMenuItem.php
@@ -3,16 +3,17 @@
namespace App\EasyAdmin\Config;
use App\EasyAdmin\Config\Menu\AutoBadgeCrudMenuItem;
-use EasyCorp\Bundle\EasyAdminBundle\Config\Menu\CrudMenuItem;
use Symfony\Contracts\Translation\TranslatableInterface;
class AutoBadgeMenuItem
{
+ /** @phpstan-ignore missingType.return */
public function __call(string $name, array $arguments)
{
throw new \BadMethodCallException(sprintf('Method %s not implemented', $name));
}
+ /** @phpstan-ignore missingType.return */
public static function __callStatic(string $name, array $arguments)
{
throw new \BadMethodCallException(sprintf('Static method %s not implemented', $name));
@@ -25,4 +26,4 @@ public static function linkToCrud(TranslatableInterface|string $label, ?string $
{
return new AutoBadgeCrudMenuItem($label, $icon, $entityFqcn);
}
-}
\ No newline at end of file
+}
diff --git a/src/EasyAdmin/Config/Menu/AutoBadgeCrudMenuItem.php b/src/EasyAdmin/Config/Menu/AutoBadgeCrudMenuItem.php
index be37436..97a8ecf 100644
--- a/src/EasyAdmin/Config/Menu/AutoBadgeCrudMenuItem.php
+++ b/src/EasyAdmin/Config/Menu/AutoBadgeCrudMenuItem.php
@@ -3,26 +3,32 @@
namespace App\EasyAdmin\Config\Menu;
use EasyCorp\Bundle\EasyAdminBundle\Config\Menu\CrudMenuItem;
+use EasyCorp\Bundle\EasyAdminBundle\Contracts\Menu\MenuItemInterface;
+use EasyCorp\Bundle\EasyAdminBundle\Dto\MenuItemDto;
+use Symfony\Contracts\Translation\TranslatableInterface;
-class AutoBadgeCrudMenuItem
+class AutoBadgeCrudMenuItem implements MenuItemInterface
{
private CrudMenuItem $crudMenuItem;
- public function __construct(...$args)
+ public function __construct(TranslatableInterface|string $label, ?string $icon, string $entityFqcn)
{
- $this->crudMenuItem = new CrudMenuItem(...$args);
+ $this->crudMenuItem = new CrudMenuItem($label, $icon, $entityFqcn);
}
+ /** @phpstan-ignore missingType.return, missingType.parameter, missingType.parameter */
public function __call($name, $arguments)
{
return $this->crudMenuItem->$name(...$arguments);
}
+ /** @phpstan-ignore missingType.return */
public static function __callStatic(string $name, array $arguments)
{
throw new \BadMethodCallException(sprintf('Static method %s not implemented', $name));
}
+ /** @phpstan-ignore missingType.parameter */
public function setBadge(/* \Stringable|string|int|float|bool|null */ $content, string $style = 'secondary', array $htmlAttributes = []): self
{
if (!is_int($content)) {
@@ -35,4 +41,9 @@ public function setBadge(/* \Stringable|string|int|float|bool|null */ $content,
return $this;
}
-}
\ No newline at end of file
+
+ public function getAsDto(): MenuItemDto
+ {
+ return $this->crudMenuItem->getAsDto();
+ }
+}
diff --git a/src/Entity/Project.php b/src/Entity/Project.php
index e1d3699..a1841ed 100644
--- a/src/Entity/Project.php
+++ b/src/Entity/Project.php
@@ -114,18 +114,6 @@ public function setLeantimeModifiedAt(\DateTimeImmutable $leantimeModifiedAt): s
return $this;
}
- public function getDetailsText(): ?string
- {
- return $this->detailsText;
- }
-
- public function setDetailsText(string $detailsText): static
- {
- $this->detailsText = $detailsText;
-
- return $this;
- }
-
public function getSecurityContract(): ?SecurityContract
{
return $this->securityContract;
diff --git a/src/Service/Leantime/ApiService.php b/src/Service/Leantime/ApiService.php
index dd7390c..83a3ea6 100644
--- a/src/Service/Leantime/ApiService.php
+++ b/src/Service/Leantime/ApiService.php
@@ -43,7 +43,7 @@ public function getProjects(): array
*
* @throws LeantimeApiException
*/
- public function getProject($key): ProjectDto
+ public function getProject(int $key): ProjectDto
{
$data = $this->request(self::API_PATH_JSONRPC, 'POST', 'leantime.rpc.projects.getProject', ['id' => $key]);
diff --git a/src/Service/Leantime/ProjectDto.php b/src/Service/Leantime/ProjectDto.php
index 4ccf1cd..986f051 100644
--- a/src/Service/Leantime/ProjectDto.php
+++ b/src/Service/Leantime/ProjectDto.php
@@ -22,8 +22,8 @@ public function __construct(
public ?string $details,
public int $clientId,
public ?int $state,
- public string $hourBudget,
- public int $dollarBudget,
+ public float $hourBudget,
+ public float $dollarBudget,
public string $menuType,
public string $type,
public ?int $parent,
diff --git a/templates/bundles/EasyAdminBundle/crud/detail.html.twig b/templates/bundles/EasyAdminBundle/crud/detail.html.twig
index 9abbc27..9596b80 100644
--- a/templates/bundles/EasyAdminBundle/crud/detail.html.twig
+++ b/templates/bundles/EasyAdminBundle/crud/detail.html.twig
@@ -3,14 +3,12 @@
{% block main %}
{{ parent() }}
-