feat: version selection for runtimes and databases

Backend:
- Add runtimeVersion, phpVersion, dbVersion columns to Application entity
- Add version fields to CreateApplicationDto with validation
- Node.js Dockerfile: use selected version (22/20/18/16) instead of hardcoded 20
- Laravel Dockerfile: use selected PHP version (8.4/8.3/8.2/8.1) instead of 8.3
- WordPress Dockerfile: use selected WP version (6.7/6.6/6.5/6.4) + PHP version
- K8s deployDatabase(): use selected DB version instead of hardcoded postgres:16/mysql:8.0
- K8s restoreDatabaseDump(): match DB image version for restore jobs
- Add dbVersion to ManifestContext interface

Frontend:
- Add runtimeVersion, phpVersion, dbVersion to Application and CreateApplicationDto
- Deploy page: Node.js version dropdown (22/20/18/16)
- Deploy page: Laravel PHP version dropdown (8.4/8.3/8.2/8.1)
- Deploy page: WordPress version + PHP version dropdowns
- Deploy page: PostgreSQL version dropdown (17/16/15/14)
- Deploy page: MySQL version dropdown (9.0/8.4/8.0/5.7)
- Deploy page: auto-set default versions on runtime/DB selection
- Review step: show selected versions
- App detail page: display runtime + DB versions in config and header
This commit is contained in:
keyhan
2026-04-06 23:38:23 +03:30
parent c411c5873e
commit 762657f9ed
8 changed files with 172 additions and 19 deletions
@@ -32,6 +32,21 @@ export class CreateApplicationDto {
@IsEnum(DatabaseType)
databaseType: DatabaseType;
@ApiPropertyOptional({ example: '20', description: 'Runtime version — Node: 20/18/16, WordPress: 6.7/6.6/6.5, Laravel: ignored (uses phpVersion)' })
@IsOptional()
@IsString()
runtimeVersion?: string;
@ApiPropertyOptional({ example: '8.3', description: 'PHP version for Laravel/WordPress (8.3/8.2/8.1)' })
@IsOptional()
@IsString()
phpVersion?: string;
@ApiPropertyOptional({ example: '16', description: 'Database version — PostgreSQL: 17/16/15/14, MySQL: 9.0/8.4/8.0' })
@IsOptional()
@IsString()
dbVersion?: string;
@ApiPropertyOptional({ example: 'appuser', description: 'Database username (default: appuser)' })
@IsOptional()
@IsString()