-
-
Notifications
You must be signed in to change notification settings - Fork 3.3k
v4.0.0-beta.453 #7467
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
v4.0.0-beta.453 #7467
+5,748
−1,145
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Arch Linux was listed in SUPPORTED_OS but InstallDocker.php had no specific handler for it, causing 'Unsupported OS' errors when trying to add Arch Linux servers. This adds: - Detection of 'arch' OS type in the install flow - New getArchDockerInstallCommand() method using pacman: - pacman -Syyy (refresh package databases) - pacman -S docker docker-compose (install Docker) - systemctl start/enable docker Fixes #4523
Rename GitHub Actions secrets from DOCKER_TOKEN and DOCKER_USERNAME to DOCKERHUB_TOKEN and DOCKERHUB_USERNAME across all Docker image build workflows for improved clarity and explicit Docker Hub identification. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
The regex pattern in injectDockerComposeBuildArgs() was too restrictive and failed to match `docker compose build servicename` commands. Changed the lookahead from `(?=\s+(?:--|-)|\s+(?:&&|\|\||;|\|)|$)` to the simpler `(?=\s|$)` to allow any content after the build command, including service names with hyphens/underscores and flags. Also improved the ApplicationDeploymentJob to use the new helper function and added comprehensive test coverage for service-specific builds. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Add instantSaveSettings() method to save gzip, stripprefix, and exclude_from_status checkboxes without triggering port validation modal. These settings don't require domain/port validation. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
The "Final Build Command (Preview)" field now shows build arguments that will be injected during deployment, matching the actual command that runs. This provides transparency and helps users debug build issues. Changes: - Modified getDockerComposeBuildCommandPreviewProperty() to inject build args - Uses same helper functions as deployment (generateDockerBuildArgs, injectDockerComposeBuildArgs) - Respects use_build_secrets setting (build args only shown when disabled) - Filters environment variables where is_buildtime = true Example output: docker compose -f ./docker-compose.yaml --env-file /artifacts/build-time.env build --build-arg FOO --build-arg BAR backend 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
- Replace substring matching with exact base image name comparison in isDatabaseImage() to prevent false positives (postgres no longer matches postgrest) - Add 'timescaledb' and 'timescaledb-ha' to DATABASE_DOCKER_IMAGES constants for proper namespace handling - Add empty state messaging when no applications are defined in Docker Compose configuration - Maintain backward compatibility with all existing database patterns 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
- Add URL generation to notification class using base_url() helper
- Replace config('app.url') with proper base_url() for accurate instance URL
- Make server names clickable links to proxy configuration page
- Use data_get() with fallback values for safer template data access
- Add comprehensive tests for URL generation and email rendering
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>
- API Access: Explain what REST API access enables and where to configure tokens - Registration Allowed: Simplify wording while keeping both states clear - Do Not Track: Clarify it only tracks instance count to coolify.io - DNS Validation: Explain the benefit (prevents deployment failures) - Custom DNS Servers: Add example format and note about system defaults - Sponsorship Popup: Make purpose and action clearer, less verbose These improvements provide users with meaningful, actionable information instead of redundant or vague descriptions. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Server disk usage checks now run on their configured schedule regardless of Sentinel status, eliminating monitoring blind spots when Sentinel is offline, out of sync, or disabled. Storage checks now respect server timezone settings, consistent with patch checks. Changes: - Moved server timezone calculation to top of processServerTasks() - Extracted ServerStorageCheckJob dispatch from Sentinel conditional - Fixed default frequency to '0 23 * * *' (11 PM daily) - Added timezone parameter to storage check scheduling 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
This feature stored incoming webhooks during maintenance mode and replayed them when maintenance ended. The behavior adds unnecessary complexity without clear value. Standard approach is to let webhooks fail during maintenance and let senders retry. Removes: - Listener classes that handled maintenance mode events and webhook replay - Maintenance mode checks from all webhook controllers (Github, Gitea, Gitlab, Bitbucket, Stripe) - webhooks-during-maintenance filesystem disk configuration - Feature mention from CHANGELOG 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Users can now switch between the enhanced color-coded log view and the original simple raw text view using a new toggle checkbox. The preference is saved to localStorage and persists across page reloads and different resources. 🤖 Generated with Claude Code Co-Authored-By: Claude <[email protected]>
…mented-out buttons
Fixed a critical bug where $this->executionTime was being mutated during the server processing loop, causing incorrect scheduling calculations for subsequent servers. The issue occurred at line 123 where subSeconds() was called directly on the shared executionTime instance. This caused the baseline time to shift by waitTime seconds with each server iteration, resulting in compounding scheduling errors (e.g., 1680 seconds drift over 5 servers). Changed: - app/Jobs/ServerManagerJob.php:123 Added .copy() before .subSeconds() to prevent mutation Added comprehensive unit tests that verify: - Immutability when using .copy() - Demonstration of the bug without .copy() - Correct behavior across multiple iterations This follows the existing pattern in shouldRunNow() (line 167) and aligns with other jobs in the codebase. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Pass the server timezone parameter to shouldRunNow() call at line 127, ensuring ServerCheckJob dispatch respects the server's local timezone instead of falling back to the instance default. This aligns the behavior with other scheduled tasks in the same method: - ServerStorageCheckJob (line 137) - ServerPatchCheckJob (line 144) - Sentinel restart (line 152) All scheduled tasks in processServerTasks() now consistently use the server's configured timezone for cron evaluation. Added unit test to verify timezone-aware cron schedule evaluation. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
…s failed Fixes #7439 where successful deployments were being marked as FAILED due to exceptions during old container cleanup. Root cause: Commit 97550f4 wrapped stop_running_container() in try-catch that re-throws ALL exceptions as DeploymentException. When old containers are already removed (a common scenario), the "No such container" error propagates and marks successful deployments as failed. Solution: Check if deployment has already succeeded (newVersionIsHealthy || force) before re-throwing exceptions from cleanup operations. Cleanup failures are logged but don't fail the deployment. - Add conditional handling in stop_running_container() catch block - Log cleanup warnings with hidden: true to avoid UI clutter - Only re-throw exceptions if deployment hasn't succeeded yet - Preserves backward compatibility and expected behavior 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Add Basecamp's Fizzy Kanban tracking tool as a one-click deployable service. - Uses official Docker image: ghcr.io/basecamp/fizzy:main - PostgreSQL database with auto-generated credentials - Rails environment with SECRET_KEY_BASE and RAILS_MASTER_KEY - VAPID keys for web push notifications - Health checks on /up endpoint - Persistent storage for Rails storage directory 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Replace custom logo with official Fizzy equalizer/bar chart design from the basecamp/fizzy repository. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Fizzy uses MySQL/MariaDB, not PostgreSQL. Update the service template to use: - MariaDB 11 instead of PostgreSQL - mysql2:// protocol in DATABASE_URL - Proper MariaDB environment variables and health checks 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Changed MARIADB_ROOT_PASSWORD from $SERVICE_PASSWORD_MARIADB_ROOT to $SERVICE_PASSWORD_ROOT to match Coolify's standard naming convention for root passwords. This fixes the MariaDB initialization error. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Remove MariaDB dependency and use Fizzy's default SQLite database. This simplifies deployment by: - Removing external database container - Using DATABASE_ADAPTER=sqlite3 environment variable - Mounting /rails/db volume for SQLite database persistence - Reducing resource requirements and startup time Fizzy supports SQLite by default and it's the recommended setup for single-instance deployments. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Garage v2.x expects rpc_bind_addr, rpc_secret_file, and bootstrap_peers at the root level of the TOML config, not inside a [rpc] section. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
- Initialize logsLoaded as false to ensure init() triggers log loading - Set logsLoaded=true after calling getLogs() in init() - Allow services/PRs to load logs automatically when expandByDefault=true (single container) - Previously, services would skip initial load unless refresh=true, now single containers work 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
The Garage container doesn't have wget. Use the built-in garage CLI with 'stats -a' command to check if the node is healthy. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
This was
linked to
issues
Dec 5, 2025
Closed
…pended to preview URLs
The {{port}} template variable was undocumented and caused a double port bug
when used in preview URL templates. Since ports are always appended to the final
URL anyway, we remove {{port}} substitution entirely and ensure consistent port
handling across ApplicationPreview, PreviewsCompose, and the applicationParser helper.
Also fix PreviewsCompose.php which wasn't preserving ports at all, and improve
the Blade template formatting in previews-compose.blade.php.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>
- Add Arch Linux (pacman) support to server operations: CheckUpdates, InstallDocker, InstallPrerequisites, UpdatePackage - Implement parsePacmanOutput() to parse 'pacman -Qu' output format - Add security improvement: package name sanitization to prevent command injection - Initialize variables in CheckUpdates to prevent undefined variable errors in catch block - Use proper Arch pacman flags: -Syu for full system upgrade before operations 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
- Add explicit validation in UpdatePackage to require package name when 'all' is false, preventing empty package commands being sent to servers - Add --needed flag to pacman install in InstallDocker for idempotent Docker installation on Arch Linux 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
…st-level caching best practices
…hooks Create a shared CleanupPreviewDeployment action that unifies PR cleanup logic across all Git providers. Previously, GitHub had comprehensive cleanup (cancels active deployments, kills helper containers, removes all PR containers), while GitLab, Bitbucket, and Gitea only did basic cleanup (delete preview record and remove one container by name). This fix ensures all providers properly clean up orphaned PR containers when a PR is closed/merged, preventing security issues and resource waste. Also fixes early return bug in GitLab webhook handler. Fixes #2610 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Add CleanupOrphanedPreviewContainersJob that runs daily to find and remove any PR preview containers that weren't properly cleaned up when their PR was closed. The job: - Scans all functional servers for containers with coolify.pullRequestId label - Checks if the corresponding ApplicationPreview record exists in the database - Removes containers where the preview record no longer exists (truly orphaned) - Acts as a safety net for webhook failures or race conditions 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Add shell escaping with escapeshellarg() for container names in the docker rm command to prevent command injection. Also add validation to skip containers with missing names and log a warning. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Add visibility API handling to pause heartbeat monitoring when the browser tab is hidden, preventing false disconnection timeouts. When the tab becomes visible again, verify the connection is still alive or attempt reconnection. Also remove the ApplicationStatusChanged event listener that was triggering terminal reloads whenever any application status changed across the team. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What's Changed
Security & Fixes
/artifacts/thegameplan.json#6830)New Services & Templates
Improvements