coolify/app/Jobs
Andras Bacsai bf00405971 fix(git): handle Git redirects and improve URL parsing for tangled.sh and other Git hosts
Fixes deployment failures when Git repositories redirect (e.g., tangled.sh → tangled.org)
and improves security by adding proper shell escaping for repository URLs.

**Root Cause:**
Git redirect warnings can appear on the same line as ls-remote output with no newline:
`warning: redirecting to https://tangled.org/...196d3df...	refs/heads/master`

The previous parsing logic split by newlines and extracted text before tabs, which
included the entire warning message instead of just the 40-character commit SHA.

**Changes:**

1. **Fixed commit SHA extraction** (ApplicationDeploymentJob.php):
   - Changed from line-based parsing to regex pattern matching
   - Uses `/([0-9a-f]{40})\s*\t/` to find valid 40-char hex commit SHA before tab
   - Handles warnings on same line, separate lines, multiple warnings, and whitespace
   - Added comprehensive Ray debug logs for troubleshooting

2. **Added security fix** (Application.php):
   - Added `escapeshellarg()` for repository URLs in 'other' deployment type
   - Prevents shell injection and fixes parsing issues with special characters like `@`
   - Added Ray debug logs for deployment type tracking

3. **Comprehensive test coverage** (GitLsRemoteParsingTest.php):
   - Tests normal output without warnings
   - Tests redirect warning on separate line
   - Tests redirect warning on same line (actual tangled.sh format)
   - Tests multiple warning lines
   - Tests extra whitespace handling

**Resolves:**
- Linear issue COOLGH-53: Valid git URLs are rejected as being invalid
- GitHub issue #6568: tangled.sh deployments failing
- Handles Git redirects universally for all Git hosting services

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-14 11:55:17 +02:00
..
ApplicationDeploymentJob.php fix(git): handle Git redirects and improve URL parsing for tangled.sh and other Git hosts 2025-10-14 11:55:17 +02:00
ApplicationPullRequestUpdateJob.php Handle all ProcessStatus values in ApplicationPullRequestUpdateJob 2025-10-14 11:05:42 +02:00
CheckAndStartSentinelJob.php fix: add timeout to sentinel process checks for improved reliability 2025-01-10 13:03:47 +01:00
CheckForUpdatesJob.php Revert "rector: arrrrr" 2025-01-07 15:31:43 +01:00
CheckHelperImageJob.php Revert "rector: arrrrr" 2025-01-07 15:31:43 +01:00
CleanupHelperContainersJob.php refactor(docker): update image references to use centralized registry URL 2025-03-25 08:17:13 +01:00
CleanupInstanceStuffsJob.php feat(email): implement email change request and verification process 2025-08-18 14:54:08 +02:00
CleanupStaleMultiplexedConnections.php Revert "rector: arrrrr" 2025-01-07 15:31:43 +01:00
CoolifyTask.php Revert "rector: arrrrr" 2025-01-07 15:31:43 +01:00
DatabaseBackupJob.php refactor(backup): make backup_log_uuid initialization lazy 2025-10-11 13:42:50 +02:00
DeleteResourceJob.php fix(docker): cleanup always running on deletion 2025-08-04 22:14:19 +02:00
DockerCleanupJob.php fix(docker): volumes get delete when stopping a service if Delete Unused Volumes is activated (#6317) 2025-08-04 21:15:56 +02:00
GithubAppPermissionJob.php Revert "rector: arrrrr" 2025-01-07 15:31:43 +01:00
PullChangelog.php refactor(jobs): pull github changelogs from cdn instead of github 2025-09-01 16:13:55 +02:00
PullHelperImageJob.php fix: make sure important jobs/actions are running on high prio queue 2024-11-22 11:16:01 +01:00
PullTemplatesFromCDN.php refactor(templates): update service template file handling to use dynamic file name from constants 2025-08-12 10:06:19 +02:00
PushServerUpdateJob.php fix(docker): enhance container status aggregation for multi-container applications, including exclusion handling based on docker-compose configuration 2025-09-13 20:32:15 +02:00
RegenerateSslCertJob.php refactor: replace direct SslCertificate queries with server relationship methods for consistency 2025-10-09 17:00:05 +02:00
RestartProxyJob.php fix(jobs): update middleware to use expireAfter for WithoutOverlapping in multiple job classes 2025-07-01 10:50:27 +02:00
ScheduledJobManager.php feat(docker): implement Docker cleanup processing in ScheduledJobManager; refactor server task scheduling to streamline cleanup job dispatching 2025-08-26 14:43:57 +02:00
ScheduledTaskJob.php fix(ScheduledTaskJob): replace generic Exception with NonReportableException for better error handling 2025-09-09 09:30:44 +02:00
SendMessageToDiscordJob.php Revert "rector: arrrrr" 2025-01-07 15:31:43 +01:00
SendMessageToPushoverJob.php Revert "rector: arrrrr" 2025-01-07 15:31:43 +01:00
SendMessageToSlackJob.php feat(slack): Show message title in notification previews (#5063) 2025-02-11 16:31:37 +01:00
SendMessageToTelegramJob.php Revert "rector: arrrrr" 2025-01-07 15:31:43 +01:00
SendWebhookJob.php feat: implement actual webhook delivery with Ray debugging 2025-10-10 18:07:04 +02:00
ServerCheckJob.php fix(jobs): update middleware to use expireAfter for WithoutOverlapping in multiple job classes 2025-07-01 10:50:27 +02:00
ServerCleanupMux.php Revert "rector: arrrrr" 2025-01-07 15:31:43 +01:00
ServerConnectionCheckJob.php fix: improve error logging and handling in ServerConnectionCheckJob for Hetzner server status 2025-10-10 10:12:59 +02:00
ServerFilesFromServerJob.php fix: make sure important jobs/actions are running on high prio queue 2024-11-22 11:16:01 +01:00
ServerLimitCheckJob.php Revert "rector: arrrrr" 2025-01-07 15:31:43 +01:00
ServerManagerJob.php feat(docker): implement Docker cleanup processing in ScheduledJobManager; refactor server task scheduling to streamline cleanup job dispatching 2025-08-26 14:43:57 +02:00
ServerPatchCheckJob.php fix(jobs): update middleware to use expireAfter for WithoutOverlapping in multiple job classes 2025-07-01 10:50:27 +02:00
ServerStorageCheckJob.php fix(horizon): add silenced jobs 2025-07-12 14:44:32 +02:00
ServerStorageSaveJob.php fix: make sure important jobs/actions are running on high prio queue 2024-11-22 11:16:01 +01:00
StripeProcessJob.php feat(stripe): enhance subscription handling and verification process 2025-09-23 11:00:38 +02:00
SubscriptionInvoiceFailedJob.php refactor(stripe-jobs): comment out internal notification calls and add subscription status verification before sending failure notifications 2025-09-13 19:35:32 +02:00
UpdateCoolifyJob.php Revert "rector: arrrrr" 2025-01-07 15:31:43 +01:00
UpdateStripeCustomerEmailJob.php feat(email): implement email change request and verification process 2025-08-18 14:54:08 +02:00
ValidateAndInstallServerJob.php work work on hetzner integration 2025-10-09 16:54:13 +02:00
VerifyStripeSubscriptionStatusJob.php fix(subscription-job): enhance retry logic for VerifyStripeSubscriptionStatusJob 2025-09-23 18:17:52 +02:00
VolumeCloneJob.php feat: remote server volume cloning 2025-01-13 11:13:15 +01:00