From b7e4f298136688511fc45b914ca5c1cc1a6af062 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Mon, 5 Jan 2026 17:34:02 +0100 Subject: [PATCH] chore: update upgrade plan with current state of the project --- docs/SYMFONY_7.4_UPGRADE_PLAN.md | 148 ++++++++++++------------------- 1 file changed, 59 insertions(+), 89 deletions(-) diff --git a/docs/SYMFONY_7.4_UPGRADE_PLAN.md b/docs/SYMFONY_7.4_UPGRADE_PLAN.md index d495621..5682412 100644 --- a/docs/SYMFONY_7.4_UPGRADE_PLAN.md +++ b/docs/SYMFONY_7.4_UPGRADE_PLAN.md @@ -1,9 +1,9 @@ # Symfony 7.4 Upgrade Plan **Project:** MyEP Next Booking -**Current Version:** Symfony 6.4.27 +**Current Version:** Symfony 6.4.31 **Target Version:** Symfony 7.4 (LTS) -**Date:** 2025-12-06 +**Date:** 2026-01-05 **Status:** Ready for Upgrade --- @@ -14,7 +14,7 @@ **Risk Level: LOW** **Status: READY FOR UPGRADE** -The MyEP Next Booking application is well-positioned for a Symfony 7.4 upgrade. The codebase follows modern Symfony best practices, uses PHP 8 features extensively, and avoids most deprecated patterns. +The MyEP Next Booking application is well-positioned for a Symfony 7.4 upgrade. The codebase follows modern Symfony best practices, uses PHP 8 features extensively, and avoids most deprecated patterns. All pre-upgrade fixes have been completed. **Key Facts:** - Symfony 7.4 was released on November 27, 2025 @@ -24,39 +24,36 @@ The MyEP Next Booking application is well-positioned for a Symfony 7.4 upgrade. **Pre-Upgrade Status:** - PHP version: 8.2.29 (compatible) -- OAuth2 Server Bundle: 1.0.0 (compatible) -- Stimulus Bundle: 2.31.0 (compatible) +- OAuth2 Server Bundle: 1.1.0 (compatible) +- Stimulus Bundle: 2.32.0 (compatible) - KnpMenuBundle: Removed (no longer in use) -- Doctrine ORM: 3.5.8 (compatible) -- All 281 tests passing (1 unrelated test failure to investigate) -- 18 deprecation warnings to resolve (Email validator loose mode) +- Doctrine ORM: 3.6.0 (compatible) +- All 312 tests passing +- Email validation mode: Configured (html5) +- 18 test-only deprecation warnings (cosmetic, do not affect runtime) --- ## Previous Plan Status -The previous upgrade plan (dated 2025-10-24) was written for Symfony 7.3. Several items have changed: +The previous upgrade plan (dated 2025-12-06) has been updated. All pre-upgrade tasks are now complete. ### Completed Items | Item | Previous Status | Current Status | |------|----------------|----------------| -| OAuth2 Server Bundle | ^1.0 | **1.0.0 installed** | -| Stimulus Bundle | ^2.30 | **2.31.0 installed** | +| OAuth2 Server Bundle | 1.0.0 | **1.1.0 installed** | +| Stimulus Bundle | 2.31.0 | **2.32.0 installed** | | PHP 8.2 deprecations (ParticipantDto::$touched) | Planned | **Completed** | | Doctrine config (controller_resolver) | Planned | **Completed** | -| SecurityController null safety | Planned | **Needs verification** | +| SecurityController null safety | Needs verification | **Completed** (uses `?->` and `??`) | +| Email validator "loose" mode deprecation | Needs fix | **Completed** (validator.yaml configured) | +| Failing test in BookingDataProcessorTest | Unrelated to upgrade | **Resolved** (test now passes) | ### Items No Longer Relevant | Item | Reason | |------|--------| | KnpMenuBundle upgrade | **Bundle removed from project** | -### New Items Discovered -| Item | Priority | Status | -|------|----------|--------| -| Email validator "loose" mode deprecation | MEDIUM | **Needs fix** | -| Failing test in BookingDataProcessorTest | LOW | **Unrelated to upgrade** | - --- ## Current State Analysis @@ -71,19 +68,19 @@ The previous upgrade plan (dated 2025-10-24) was written for Symfony 7.3. Severa ### Installed Dependencies #### Core Symfony Packages (6.4.x) -All 32 Symfony packages currently at 6.4.x need version constraint updates to 7.4.* +All 33 Symfony packages currently at 6.4.x need version constraint updates to 7.4.* #### Third-Party Bundles - Compatible | Package | Installed | Symfony 7.4 Compatible | |---------|-----------|------------------------| -| `doctrine/orm` | 3.5.8 | Yes | +| `doctrine/orm` | 3.6.0 | Yes | | `doctrine/doctrine-bundle` | 2.18.1 | Yes | | `doctrine/doctrine-migrations-bundle` | 3.7.0 | Yes | -| `league/oauth2-server-bundle` | 1.0.0 | Yes | -| `symfony/stimulus-bundle` | 2.31.0 | Yes | +| `league/oauth2-server-bundle` | 1.1.0 | Yes | +| `symfony/stimulus-bundle` | 2.32.0 | Yes | | `symfony/webpack-encore-bundle` | 2.4.0 | Yes | | `symfony/monolog-bundle` | 3.11.0 | Yes | -| `zenstruck/schedule-bundle` | ^1.8 | Verify during upgrade | +| `zenstruck/schedule-bundle` | 1.9.0 | Yes | ### Code Quality Assessment @@ -98,21 +95,13 @@ The codebase implements modern Symfony/PHP patterns: --- -## Pre-Upgrade Fixes Required +## Pre-Upgrade Fixes - COMPLETED -### 1. Email Validator "loose" Mode Deprecation (MEDIUM Priority) +### 1. Email Validator "loose" Mode Deprecation - DONE **Issue:** The default mode for `#[Assert\Email]` is "loose", which is deprecated in Symfony 6.2+ and removed in Symfony 7.0. -**Current State:** Most Email constraints already have `mode: 'strict'`, but the framework default is still being triggered somewhere during validation. - -**Files to verify:** -- `src/Form/Model/ParticipantDto.php` - Has `mode: 'strict'` ✓ -- `src/Form/Model/RegistrationDto.php` - Has `mode: 'strict'` ✓ -- `src/BusProNet/Model/Communication.php` - Has `mode: 'strict'` ✓ -- `src/Controller/ResetPasswordController.php` - Has `mode: 'strict'` ✓ - -**Action:** Configure framework default email validation mode in `config/packages/validator.yaml`: +**Resolution:** Framework default configured in `config/packages/validator.yaml`: ```yaml framework: @@ -120,14 +109,24 @@ framework: email_validation_mode: html5 ``` -This sets the global default to `html5` (recommended for Symfony 7+), eliminating deprecation warnings. +All Email constraints in the codebase also explicitly use `mode: 'strict'`: +- `src/Form/Model/ParticipantDto.php` - Has `mode: 'strict'` +- `src/Form/Model/RegistrationDto.php` - Has `mode: 'strict'` +- `src/BusProNet/Model/Communication.php` - Has `mode: 'strict'` +- `src/Controller/ResetPasswordController.php` - Has `mode: 'strict'` -### 2. Test Failure Investigation (LOW Priority) +### 2. Test Deprecation Warnings - COSMETIC ONLY -**File:** `tests/BusProNet/DataProcessor/BookingDataProcessorTest.php:171` -**Issue:** Expected 'Original', got 'Updated' +**Issue:** 18 deprecation warnings appear during test runs. -This appears to be a test that's failing due to recent code changes unrelated to the Symfony upgrade. Should be investigated separately but does not block the upgrade. +**Cause:** `ParticipantEditDtoTest` creates a standalone validator using `Validation::createValidatorBuilder()` which bypasses the framework's `validator.yaml` configuration. + +**Impact:** These warnings are cosmetic and do not affect: +- Runtime behavior (all Email constraints use explicit `mode: 'strict'`) +- Symfony 7.4 compatibility (no code changes needed) +- Test results (all 312 tests pass) + +**Note:** Warnings can be silenced with `SYMFONY_DEPRECATIONS_HELPER=disabled` if desired. --- @@ -154,6 +153,7 @@ Update all packages from `6.4.*` to `7.4.*`: "symfony/html-sanitizer": "7.4.*", "symfony/http-client": "7.4.*", "symfony/intl": "7.4.*", + "symfony/lock": "7.4.*", "symfony/mailer": "7.4.*", "symfony/mime": "7.4.*", "symfony/notifier": "7.4.*", @@ -204,23 +204,13 @@ Update all packages from `6.4.*` to `7.4.*`: } ``` -### 3. Configure Email Validation Mode - -**File:** `config/packages/validator.yaml` - -```yaml -framework: - validation: - email_validation_mode: html5 -``` - --- ## Potential Breaking Changes -### 1. Symfony Core Changes (Symfony 7.0 → 7.4) +### 1. Symfony Core Changes (Symfony 7.0 -> 7.4) -Symfony 7.0 removed all deprecated features from 6.4. Our codebase is mostly compliant: +Symfony 7.0 removed all deprecated features from 6.4. Our codebase is fully compliant: - **Native Return Types:** Already implemented - **Attribute-based Configuration:** Already implemented @@ -232,7 +222,7 @@ Symfony 7.0 removed all deprecated features from 6.4. Our codebase is mostly com **Breaking Change:** The default `mode` for `Email` constraint changes from `loose` to `html5` in Symfony 7.0. -**Status:** Already using `mode: 'strict'` in most places. Setting global default will ensure consistency. +**Status:** Already handled - all constraints use explicit `mode: 'strict'` and framework default is set to `html5`. ### 3. Deprecation Cleanup @@ -245,26 +235,7 @@ Deprecations accumulated in Symfony 7.1-7.4 will need review: ## Upgrade Procedure -### Phase 1: Pre-Upgrade Fixes (30 minutes) - -1. **Configure Email Validation Mode** - ```bash - # Edit config/packages/validator.yaml - ``` - -2. **Clear Caches** - ```bash - ddev exec bin/console cache:clear - ddev exec "php -r 'opcache_reset();'" - ``` - -3. **Run Tests** - ```bash - ddev exec ./vendor/bin/phpunit - ``` - Verify deprecation warnings are resolved. - -### Phase 2: Preparation (15 minutes) +### Phase 1: Preparation (15 minutes) 1. **Create Feature Branch** ```bash @@ -276,7 +247,7 @@ Deprecations accumulated in Symfony 7.1-7.4 will need review: git tag before-symfony-7.4-upgrade ``` -### Phase 3: Dependency Updates (30 minutes - 1 hour) +### Phase 2: Dependency Updates (30 minutes - 1 hour) 1. **Update composer.json** - Update all Symfony package constraints to `7.4.*` @@ -300,7 +271,7 @@ Deprecations accumulated in Symfony 7.1-7.4 will need review: ddev exec "php -r 'opcache_reset();'" ``` -### Phase 4: Testing & Validation (1-2 hours) +### Phase 3: Testing & Validation (1-2 hours) 1. **Run PHPUnit Test Suite** ```bash @@ -313,7 +284,7 @@ Deprecations accumulated in Symfony 7.1-7.4 will need review: 2. **Run PHP-CS-Fixer** ```bash - /opt/homebrew/bin/php-cs-fixer fix --dry-run --diff + ddev php vendor/bin/php-cs-fixer fix --dry-run --diff ``` 3. **Manual Testing - Critical Paths** @@ -349,7 +320,7 @@ Deprecations accumulated in Symfony 7.1-7.4 will need review: - Verify Toastify notifications - Check TailwindCSS compilation -### Phase 5: Bug Fixes (0-2 hours) +### Phase 4: Bug Fixes (0-2 hours) Address any issues discovered during testing: @@ -362,7 +333,7 @@ Address any issues discovered during testing: - Use Symfony Profiler to identify deprecations - Update code to use modern alternatives -### Phase 6: Deployment (1 hour) +### Phase 5: Deployment (1 hour) 1. **Deploy to Staging** ```bash @@ -415,7 +386,7 @@ ddev exec vendor/bin/dep rollback production ## Testing Checklist ### Unit Tests -- [ ] All PHPUnit tests pass +- [ ] All PHPUnit tests pass (312 tests) - [ ] No new deprecation warnings - [ ] Code coverage maintained @@ -449,13 +420,12 @@ ddev exec vendor/bin/dep rollback production | Phase | Estimated Time | Notes | |-------|---------------|-------| -| **Phase 1:** Pre-Upgrade Fixes | 30 min | Email validation mode config | -| **Phase 2:** Preparation | 15 min | Branch creation | -| **Phase 3:** Dependency Updates | 30 min - 1 hour | composer.json updates, composer update | -| **Phase 4:** Testing & Validation | 1-2 hours | Automated + manual testing | -| **Phase 5:** Bug Fixes | 0-2 hours | Address any issues | -| **Phase 6:** Deployment | 1 hour | Staging deployment | -| **Total** | **3-6 hours** | Average: **4 hours** | +| **Phase 1:** Preparation | 15 min | Branch creation | +| **Phase 2:** Dependency Updates | 30 min - 1 hour | composer.json updates, composer update | +| **Phase 3:** Testing & Validation | 1-2 hours | Automated + manual testing | +| **Phase 4:** Bug Fixes | 0-2 hours | Address any issues | +| **Phase 5:** Deployment | 1 hour | Staging deployment | +| **Total** | **2.5-6 hours** | Average: **3.5 hours** | --- @@ -472,7 +442,7 @@ Symfony 8.0 was released alongside 7.4 (November 2025) with identical features b ## Success Criteria -- [ ] All PHPUnit tests pass +- [ ] All PHPUnit tests pass (312 tests) - [ ] No deprecation warnings in Symfony Profiler - [ ] All critical user flows functional - [ ] OAuth2 authentication working @@ -499,7 +469,7 @@ Symfony 8.0 was released alongside 7.4 (November 2025) with identical features b --- -**Document Version:** 4.0 -**Previous Version:** 3.0 (Symfony 7.3 plan, dated 2025-10-24) -**Last Updated:** 2025-12-06 +**Document Version:** 5.0 +**Previous Version:** 4.0 (dated 2025-12-06) +**Last Updated:** 2026-01-05 **Status:** Ready for Symfony 7.4 Upgrade