-
+
Non-root user is experimental:
docs
@@ -147,11 +147,7 @@
- No
- (create
- one
- for
- me)
+ No (create one for me)
@@ -167,18 +163,39 @@
@if (!$serverReachable)
- This server is not reachable with the following public key.
-
- Please make sure you have the correct public key in your ~/.ssh/authorized_keys file for
- user or skip the boarding process and add a new private key manually to Coolify and to the
- server.
-
- Check this documentation for further
- help.
-
- Check
- again
-
+
+
Server is not reachable
+
Please check the connection details below and correct them if they are incorrect.
+
+
+
+
+
+
+ Non-root user is experimental:
+ docs
+
+
+
+
+
+
If the connection details are correct, please ensure:
+
+ - The correct public key is in your
~/.ssh/authorized_keys file for the specified user
+ - Or skip the boarding process and manually add a new private key to Coolify and the server
+
+
+
+
+ For more help, check this documentation.
+
+
+
+
+
+ Check again
+
+
@endif
@@ -225,27 +242,27 @@
From d378bb94bea40dd7208df12390989577bbbee0d0 Mon Sep 17 00:00:00 2001
From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com>
Date: Tue, 10 Sep 2024 17:29:53 +0200
Subject: [PATCH 09/35] Fix: remote servers with port and user
---
app/Livewire/Boarding/Index.php | 11 ++++++-----
app/Models/Server.php | 11 ++++++-----
2 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/app/Livewire/Boarding/Index.php b/app/Livewire/Boarding/Index.php
index 9503da499..514f00c3a 100644
--- a/app/Livewire/Boarding/Index.php
+++ b/app/Livewire/Boarding/Index.php
@@ -247,11 +247,12 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
public function saveServer()
{
$this->validate([
- 'remoteServerName' => 'required',
- 'remoteServerHost' => 'required',
+ 'remoteServerName' => 'required|string',
+ 'remoteServerHost' => 'required|string',
'remoteServerPort' => 'required|integer',
- 'remoteServerUser' => 'required',
+ 'remoteServerUser' => 'required|string',
]);
+
$this->privateKey = formatPrivateKey($this->privateKey);
$foundServer = Server::whereIp($this->remoteServerHost)->first();
if ($foundServer) {
@@ -379,8 +380,8 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
'name' => $this->remoteServerName,
'port' => $this->remoteServerPort,
'user' => $this->remoteServerUser,
- 'timezone' => 'UTC',
- ]);
+ 'timezone' => 'UTC',
+ ]);
$this->validateServer();
}
diff --git a/app/Models/Server.php b/app/Models/Server.php
index d30cdc9d6..46536ed47 100644
--- a/app/Models/Server.php
+++ b/app/Models/Server.php
@@ -113,8 +113,13 @@ class Server extends BaseModel
];
protected $fillable = [
+ 'name',
+ 'ip',
'port',
'user',
+ 'description',
+ 'private_key_id',
+ 'team_id',
];
protected $guarded = [];
@@ -148,11 +153,7 @@ class Server extends BaseModel
public function settings()
{
- return $this->hasOne(ServerSetting::class)->withDefault([
- 'force_disabled' => false,
- 'is_reachable' => false,
- 'is_usable' => false,
- ]);
+ return $this->hasOne(ServerSetting::class);
}
public function setupDefault404Redirect()
From 2c9491d81c684380d072f663703d6aa61126a1f7 Mon Sep 17 00:00:00 2001
From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com>
Date: Tue, 10 Sep 2024 17:43:16 +0200
Subject: [PATCH 10/35] Fix: Do not change localhost server name on
revalidation
---
app/Livewire/Boarding/Index.php | 1 -
1 file changed, 1 deletion(-)
diff --git a/app/Livewire/Boarding/Index.php b/app/Livewire/Boarding/Index.php
index 514f00c3a..7f913b79c 100644
--- a/app/Livewire/Boarding/Index.php
+++ b/app/Livewire/Boarding/Index.php
@@ -377,7 +377,6 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
]);
$this->createdServer->update([
- 'name' => $this->remoteServerName,
'port' => $this->remoteServerPort,
'user' => $this->remoteServerUser,
'timezone' => 'UTC',
From 826b64d056c3c7083af9600d65903d1e5efd01a0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Valentinas=20=C4=8Cirba?=
Date: Wed, 11 Sep 2024 07:57:16 +0300
Subject: [PATCH 11/35] Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index c3412be14..14a741088 100644
--- a/README.md
+++ b/README.md
@@ -54,7 +54,7 @@ Special thanks to our biggest sponsors!
* [Latitude](https://latitude.sh/?ref=coolify.io) - A cloud computing platform offering bare metal servers and cloud instances for developers and businesses.
* [Brand Dev](https://brand.dev/?ref=coolify.io) - A web development agency specializing in creating custom digital experiences and brand identities.
* [Jobscollider](https://jobscollider.com/remote-jobs?ref=coolify.io) - A job search platform connecting professionals with remote work opportunities across various industries.
-* [Hostinger](https://hostinger.com?ref=coolify.io) - A web hosting provider offering affordable hosting solutions, domain registration, and website building tools.
+* [Hostinger](https://www.hostinger.com/vps/coolify-hosting?ref=coolify.io) - A web hosting provider offering affordable hosting solutions, domain registration, and website building tools.
* [Glueops](https://www.glueops.dev/?ref=coolify.io) - A DevOps consulting company providing infrastructure automation and cloud optimization services.
* [Ubicloud](https://ubicloud.com/?ref=coolify.io) - An open-source alternative to hyperscale cloud providers, offering high-performance cloud computing services.
* [Juxtdigital](https://juxtdigital.dev/?ref=coolify.io) - A digital agency offering web development, design, and digital marketing services for businesses.
From f1a1deff26b7a700614f2eadc2e97f46d043f45d Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Wed, 11 Sep 2024 10:21:18 +0200
Subject: [PATCH 12/35] fix: Disable mux_enabled during server validation
---
app/Livewire/Boarding/Index.php | 4 +-
.../views/livewire/boarding/index.blade.php | 338 ++++++++++--------
2 files changed, 194 insertions(+), 148 deletions(-)
diff --git a/app/Livewire/Boarding/Index.php b/app/Livewire/Boarding/Index.php
index 7f913b79c..0bfcaf729 100644
--- a/app/Livewire/Boarding/Index.php
+++ b/app/Livewire/Boarding/Index.php
@@ -282,7 +282,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
public function validateServer()
{
try {
- config()->set('coolify.mux_enabled', true);
+ config()->set('coolify.mux_enabled', false);
// EC2 does not have `uptime` command, lol
instant_remote_process(['ls /'], $this->createdServer, true);
@@ -296,7 +296,6 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
$this->createdServer->settings()->update([
'is_reachable' => false,
]);
-
return handleError(error: $e, livewire: $this);
}
@@ -316,6 +315,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
$this->createdServer->settings()->update([
'is_usable' => false,
]);
+
return handleError(error: $e, livewire: $this);
}
}
diff --git a/resources/views/livewire/boarding/index.blade.php b/resources/views/livewire/boarding/index.blade.php
index c826e7b98..7b7ef8c12 100644
--- a/resources/views/livewire/boarding/index.blade.php
+++ b/resources/views/livewire/boarding/index.blade.php
@@ -1,18 +1,20 @@
@php use App\Enums\ProxyTypes; @endphp
Onboarding | Coolify
-
-
-
- @if ($currentState === 'welcome')
+
+
+
+ @if ($currentState === 'welcome')
Welcome to Coolify
Let me help you set up the basics.
- Get
+ Get
Started
- @elseif ($currentState === 'explanation')
+ @elseif ($currentState === 'explanation')
Coolify is an all-in-one application to automate tasks on your servers, deploy application with
@@ -29,21 +31,24 @@
You don't need to manage your servers anymore.
Coolify does
- it for you.
+ it for you.
+
All configurations are stored on your servers, so
- everything works without a connection to Coolify (except integrations and automations).
+ everything works without a connection to Coolify (except integrations and automations).
+
You can get notified on your favourite platforms
(Discord,
- Telegram, Email, etc.) when something goes wrong, or an action is needed from your side.
+ Telegram, Email, etc.) when something goes wrong, or an action is needed from your side.
+
- Next
+ Next
- @elseif ($currentState === 'select-server-type')
+ @elseif ($currentState === 'select-server-type')
Do you want to deploy your resources to your
@@ -52,46 +57,57 @@
?
- Localhost
+ Localhost
- Remote Server
+ Remote Server
@if (!$serverReachable)
-
-
Server is not reachable
-
Please check the connection details below and correct them if they are incorrect.
+
+
Server is not reachable
+
Please check the connection details below and correct them if they are
+ incorrect.
-
-
-
-
-
- Non-root user is experimental:
- docs
-
+
+
+
+
+
+ Non-root user is experimental:
+ docs
+
+
+
+
+
If the connection details are correct, please ensure:
+
+ - The correct public key is in your
~/.ssh/authorized_keys
+ file for the specified user
+ - Or skip the boarding process and manually add a new private key to Coolify and
+ the server
+
+
+
+
+ For more help, check this documentation.
+
+
+
+
+
+ Check Again
+
-
-
-
If the connection details are correct, please ensure:
-
- - The correct public key is in your
~/.ssh/authorized_keys file for the specified user
- - Or skip the boarding process and manually add a new private key to Coolify and the server
-
-
-
-
- For more help, check this documentation.
-
-
-
-
-
- Check again
-
-
@endif
@@ -101,33 +117,37 @@
is the server where Coolify is running on. It is not
recommended to use one server
- for everything.
+ for everything.
+
is a server reachable through SSH. It can be hosted
at home, or from any cloud
- provider.
+ provider.
+
- @elseif ($currentState === 'private-key')
+ @elseif ($currentState === 'private-key')
Do you have your own SSH Private Key?
- Yes
+ Yes
- No (create one for me)
+ No (create one for me)
@if (count($privateKeys) > 0)
-
+
@endif
@@ -139,7 +159,7 @@
- @elseif ($currentState === 'select-existing-server')
+ @elseif ($currentState === 'select-existing-server')
There are already servers available for your Team. Do you want to use one of them?
@@ -147,15 +167,16 @@
- No (create one for me)
+ No
+ (create one for me)
@if (!$serverReachable)
-
-
Server is not reachable
-
Please check the connection details below and correct them if they are incorrect.
+
+
Server is not reachable
+
Please check the connection details below and correct them if they are
+ incorrect.
-
-
-
-
-
- Non-root user is experimental:
- docs
-
+
+
+
+
+
+ Non-root user is experimental:
+ docs
+
+
+
+
+
If the connection details are correct, please ensure:
+
+ - The correct public key is in your
~/.ssh/authorized_keys
+ file for the specified user
+ - Or skip the boarding process and manually add a new private key to Coolify and
+ the server
+
+
+
+
+ For more help, check this documentation.
+
+
+
+
+
+ Check again
+
-
-
-
If the connection details are correct, please ensure:
-
- - The correct public key is in your
~/.ssh/authorized_keys file for the specified user
- - Or skip the boarding process and manually add a new private key to Coolify and the server
-
-
-
-
- For more help, check this documentation.
-
-
-
-
-
- Check again
-
-
@endif
@@ -206,22 +236,25 @@
- @elseif ($currentState === 'create-private-key')
+ @elseif ($currentState === 'create-private-key')
Please let me know your key details.
@@ -234,7 +267,7 @@
- @elseif ($currentState === 'create-server')
+ @elseif ($currentState === 'create-server')
Please let me know your server details.
@@ -242,33 +275,44 @@
+
From a3caad239cac4695b29769fdfdef77f7c55ecea5 Mon Sep 17 00:00:00 2001
From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com>
Date: Wed, 11 Sep 2024 14:09:15 +0200
Subject: [PATCH 13/35] Feat: release.md file
---
RELEASE.md | 46 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)
create mode 100644 RELEASE.md
diff --git a/RELEASE.md b/RELEASE.md
new file mode 100644
index 000000000..d362eceaa
--- /dev/null
+++ b/RELEASE.md
@@ -0,0 +1,46 @@
+# Coolify Release Guide
+
+This guide outlines the release process for Coolify, intended for developers and those interested in understanding how releases are managed and deployed.
+
+## Release Process
+
+1. **Development on `next` branch**
+ - Changes and new features are developed on the `next` or even separate branches.
+
+2. **Merging to `main`**
+ - Once changes are ready, they are merged from `next` into the `main` branch.
+
+3. **Building the release**
+ - After merging to `main`, a new release is built.
+ - Note: A push to `main` does not automatically mean a new version is released.
+
+4. **Creating a GitHub release**
+ - A new release is created on GitHub, which generates new version images.
+ - Note: This does not mean the version is released.
+
+5. **Updating the CDN**
+ - The final step is updating the version information on the CDN:
+ [https://cdn.coollabs.io/coolify/versions.json](https://cdn.coollabs.io/coolify/versions.json)
+
+> [!NOTE]
+> The CDN update may not occur immediately after the GitHub release. It can happen hours or even days later due to additional testing, stability checks, or potential hotfixes.
+
+
+## Version Availability
+
+It's important to understand that a new version released on GitHub may not immediately become available for users to update (through manual or auto-update).
+
+> [!IMPORTANT]
+> If you see a new release on GitHub but haven't received the update, it's likely because the CDN hasn't been updated yet. This is intentional and ensures stability and allows for hotfixes before the new version is officially released.
+
+### Manually Update to Specific Versions
+
+> [!WARNING]
+> Updating to unreleased versions is not recommended and may cause issues. Use at your own risk!
+
+To update your Coolify instance to a specific (unreleased) version, use the following command:
+
+```bash
+curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash -s
+```
+-> Replace `` with the version you want to update to (for example `4.0.0-beta.332`).
\ No newline at end of file
From 6498e5b6f01aebac8cf02f3e8a73e35517d75c30 Mon Sep 17 00:00:00 2001
From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com>
Date: Wed, 11 Sep 2024 14:16:25 +0200
Subject: [PATCH 14/35] Update RELEASE.md
---
RELEASE.md | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/RELEASE.md b/RELEASE.md
index d362eceaa..8c0ff0b41 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -4,8 +4,8 @@ This guide outlines the release process for Coolify, intended for developers and
## Release Process
-1. **Development on `next` branch**
- - Changes and new features are developed on the `next` or even separate branches.
+1. **Development on `next` or separate branches**
+ - Changes, fixes and new features are developed on the `next` or even separate branches.
2. **Merging to `main`**
- Once changes are ready, they are merged from `next` into the `main` branch.
@@ -15,8 +15,7 @@ This guide outlines the release process for Coolify, intended for developers and
- Note: A push to `main` does not automatically mean a new version is released.
4. **Creating a GitHub release**
- - A new release is created on GitHub, which generates new version images.
- - Note: This does not mean the version is released.
+ - A new release is created on GitHub with the new version details.
5. **Updating the CDN**
- The final step is updating the version information on the CDN:
@@ -35,7 +34,7 @@ It's important to understand that a new version released on GitHub may not immed
### Manually Update to Specific Versions
-> [!WARNING]
+> [!CAUTION]
> Updating to unreleased versions is not recommended and may cause issues. Use at your own risk!
To update your Coolify instance to a specific (unreleased) version, use the following command:
@@ -43,4 +42,4 @@ To update your Coolify instance to a specific (unreleased) version, use the foll
```bash
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash -s
```
--> Replace `` with the version you want to update to (for example `4.0.0-beta.332`).
\ No newline at end of file
+-> Replace `` with the version you want to update to (for example `4.0.0-beta.332`).
From 3f3bf075fa80b7d313d6b36e49f500242c78d202 Mon Sep 17 00:00:00 2001
From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com>
Date: Wed, 11 Sep 2024 14:18:10 +0200
Subject: [PATCH 15/35] Update RELEASE.md
---
RELEASE.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/RELEASE.md b/RELEASE.md
index 8c0ff0b41..2cb96b72b 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -32,7 +32,7 @@ It's important to understand that a new version released on GitHub may not immed
> [!IMPORTANT]
> If you see a new release on GitHub but haven't received the update, it's likely because the CDN hasn't been updated yet. This is intentional and ensures stability and allows for hotfixes before the new version is officially released.
-### Manually Update to Specific Versions
+## Manually Update to Specific Versions
> [!CAUTION]
> Updating to unreleased versions is not recommended and may cause issues. Use at your own risk!
From 5d476e39249be05e575e596acc4e3e6bd2be64b6 Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Wed, 11 Sep 2024 14:23:19 +0200
Subject: [PATCH 16/35] chore: Update server check job middleware to use server
ID instead of UUID
---
app/Jobs/ServerCheckJob.php | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/Jobs/ServerCheckJob.php b/app/Jobs/ServerCheckJob.php
index f7b54cd80..540085385 100644
--- a/app/Jobs/ServerCheckJob.php
+++ b/app/Jobs/ServerCheckJob.php
@@ -47,12 +47,12 @@ class ServerCheckJob implements ShouldBeEncrypted, ShouldQueue
public function middleware(): array
{
- return [(new WithoutOverlapping($this->server->uuid))];
+ return [(new WithoutOverlapping($this->server->id))];
}
public function uniqueId(): int
{
- return $this->server->uuid;
+ return $this->server->id;
}
public function handle()
From b145691e1e7a1116a8d98a3ff84a330d8ebd2b76 Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Wed, 11 Sep 2024 14:25:16 +0200
Subject: [PATCH 17/35] chore: Add reminder to backup .env file before running
install script again
---
scripts/install.sh | 3 +++
1 file changed, 3 insertions(+)
diff --git a/scripts/install.sh b/scripts/install.sh
index c7cfc0309..843c260a1 100755
--- a/scripts/install.sh
+++ b/scripts/install.sh
@@ -405,3 +405,6 @@ echo "Waiting for 20 seconds for Coolify to be ready..."
sleep 20
echo "Please visit http://$(curl -4s https://ifconfig.io):8000 to get started."
echo -e "\nCongratulations! Your Coolify instance is ready to use.\n"
+
+echo -e "Make sure you backup your .env file before running this script again.\n"
+echo -e "You can find it in /data/coolify/source/.env\n"
From bc13ad6b821cbd3d4ec87e1b3a361cea5dd5cd7f Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Wed, 11 Sep 2024 14:25:40 +0200
Subject: [PATCH 18/35] chore: Copy .env file to backup location during
installation script
---
scripts/install.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/scripts/install.sh b/scripts/install.sh
index 843c260a1..d9e570c58 100755
--- a/scripts/install.sh
+++ b/scripts/install.sh
@@ -406,5 +406,5 @@ sleep 20
echo "Please visit http://$(curl -4s https://ifconfig.io):8000 to get started."
echo -e "\nCongratulations! Your Coolify instance is ready to use.\n"
-echo -e "Make sure you backup your .env file before running this script again.\n"
-echo -e "You can find it in /data/coolify/source/.env\n"
+cp /data/coolify/source/.env /data/coolify/source/.env.backup
+echo -e "Your .env file has been copied to /data/coolify/source/.env.backup\n"
From 72f01185067201f34345ec1d21609562a0ff4e10 Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Wed, 11 Sep 2024 14:26:10 +0200
Subject: [PATCH 19/35] chore: Add reminder to backup .env file during
installation script
---
scripts/install.sh | 1 +
1 file changed, 1 insertion(+)
diff --git a/scripts/install.sh b/scripts/install.sh
index d9e570c58..648f78da0 100755
--- a/scripts/install.sh
+++ b/scripts/install.sh
@@ -406,5 +406,6 @@ sleep 20
echo "Please visit http://$(curl -4s https://ifconfig.io):8000 to get started."
echo -e "\nCongratulations! Your Coolify instance is ready to use.\n"
+echo -e "Make sure you backup your /data/coolify/source/.env file to a safe location, outside of this server.\n"
cp /data/coolify/source/.env /data/coolify/source/.env.backup
echo -e "Your .env file has been copied to /data/coolify/source/.env.backup\n"
From 6e48c94c6ea8e06722f4b094533a099f9de1ec0c Mon Sep 17 00:00:00 2001
From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com>
Date: Wed, 11 Sep 2024 15:10:25 +0200
Subject: [PATCH 20/35] Install Clockwork
---
.env.development.example | 16 +-
composer.json | 3 +-
composer.lock | 77 ++++++-
config/clockwork.php | 424 +++++++++++++++++++++++++++++++++++++++
4 files changed, 512 insertions(+), 8 deletions(-)
create mode 100644 config/clockwork.php
diff --git a/.env.development.example b/.env.development.example
index ba0213f58..511e3d5fd 100644
--- a/.env.development.example
+++ b/.env.development.example
@@ -8,12 +8,6 @@ APP_PORT=8000
APP_DEBUG=true
MUX_ENABLED=false
-# Enable Laravel Telescope for debugging
-TELESCOPE_ENABLED=false
-
-# Selenium Driver URL for Dusk
-DUSK_DRIVER_URL=http://selenium:4444
-
# PostgreSQL Database Configuration
DB_DATABASE=coolify
DB_USERNAME=coolify
@@ -27,6 +21,16 @@ RAY_ENABLED=false
# Set custom ray port
RAY_PORT=
+# Clockwork Configuration
+CLOCKWORK_ENABLED=false
+CLOCKWORK_QUEUE_COLLECT=true
+
+# Enable Laravel Telescope for debugging
+TELESCOPE_ENABLED=false
+
+# Selenium Driver URL for Dusk
+DUSK_DRIVER_URL=http://selenium:4444
+
# Special Keys for Andras
# For cache purging
BUNNY_API_KEY=
diff --git a/composer.json b/composer.json
index 7ca65babe..4dcd066ec 100644
--- a/composer.json
+++ b/composer.json
@@ -12,6 +12,7 @@
"danharrin/livewire-rate-limiting": "^1.1",
"doctrine/dbal": "^3.6",
"guzzlehttp/guzzle": "^7.5.0",
+ "itsgoingd/clockwork": "^5.2",
"laravel/fortify": "^v1.16.0",
"laravel/framework": "^v11",
"laravel/horizon": "^5.27.1",
@@ -110,4 +111,4 @@
},
"minimum-stability": "stable",
"prefer-stable": true
-}
\ No newline at end of file
+}
diff --git a/composer.lock b/composer.lock
index 4deaa42de..457a5b7c7 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": "96f8146407d0e6e897ff097c5eccd3a4",
+ "content-hash": "5c24125e9c7d34e0d4bc1d1fb1c00018",
"packages": [
{
"name": "amphp/amp",
@@ -2670,6 +2670,81 @@
],
"time": "2023-12-03T19:50:20+00:00"
},
+ {
+ "name": "itsgoingd/clockwork",
+ "version": "v5.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/itsgoingd/clockwork.git",
+ "reference": "29bc4cedfbe742b419544c30b7b6e15cd9da08ef"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/itsgoingd/clockwork/zipball/29bc4cedfbe742b419544c30b7b6e15cd9da08ef",
+ "reference": "29bc4cedfbe742b419544c30b7b6e15cd9da08ef",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "php": ">=5.6"
+ },
+ "suggest": {
+ "ext-pdo": "Needed in order to use a SQL database for metadata storage",
+ "ext-pdo_mysql": "Needed in order to use MySQL for metadata storage",
+ "ext-pdo_postgres": "Needed in order to use Postgres for metadata storage",
+ "ext-pdo_sqlite": "Needed in order to use a SQLite for metadata storage",
+ "ext-redis": "Needed in order to use Redis for metadata storage"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Clockwork\\Support\\Laravel\\ClockworkServiceProvider"
+ ],
+ "aliases": {
+ "Clockwork": "Clockwork\\Support\\Laravel\\Facade"
+ }
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Clockwork\\": "Clockwork/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "itsgoingd",
+ "email": "itsgoingd@luzer.sk",
+ "homepage": "https://twitter.com/itsgoingd"
+ }
+ ],
+ "description": "php dev tools in your browser",
+ "homepage": "https://underground.works/clockwork",
+ "keywords": [
+ "Devtools",
+ "debugging",
+ "laravel",
+ "logging",
+ "lumen",
+ "profiling",
+ "slim"
+ ],
+ "support": {
+ "issues": "https://github.com/itsgoingd/clockwork/issues",
+ "source": "https://github.com/itsgoingd/clockwork/tree/v5.2.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/itsgoingd",
+ "type": "github"
+ }
+ ],
+ "time": "2024-04-14T10:49:22+00:00"
+ },
{
"name": "jean85/pretty-package-versions",
"version": "2.0.6",
diff --git a/config/clockwork.php b/config/clockwork.php
new file mode 100644
index 000000000..ce880464a
--- /dev/null
+++ b/config/clockwork.php
@@ -0,0 +1,424 @@
+ env('CLOCKWORK_ENABLE', null),
+
+ /*
+ |------------------------------------------------------------------------------------------------------------------
+ | Features
+ |------------------------------------------------------------------------------------------------------------------
+ |
+ | You can enable or disable various Clockwork features here. Some features have additional settings (eg. slow query
+ | threshold for database queries).
+ |
+ */
+
+ 'features' => [
+
+ // Cache usage stats and cache queries including results
+ 'cache' => [
+ 'enabled' => env('CLOCKWORK_CACHE_ENABLED', true),
+
+ // Collect cache queries
+ 'collect_queries' => env('CLOCKWORK_CACHE_QUERIES', true),
+
+ // Collect values from cache queries (high performance impact with a very high number of queries)
+ 'collect_values' => env('CLOCKWORK_CACHE_COLLECT_VALUES', false)
+ ],
+
+ // Database usage stats and queries
+ 'database' => [
+ 'enabled' => env('CLOCKWORK_DATABASE_ENABLED', true),
+
+ // Collect database queries (high performance impact with a very high number of queries)
+ 'collect_queries' => env('CLOCKWORK_DATABASE_COLLECT_QUERIES', true),
+
+ // Collect details of models updates (high performance impact with a lot of model updates)
+ 'collect_models_actions' => env('CLOCKWORK_DATABASE_COLLECT_MODELS_ACTIONS', true),
+
+ // Collect details of retrieved models (very high performance impact with a lot of models retrieved)
+ 'collect_models_retrieved' => env('CLOCKWORK_DATABASE_COLLECT_MODELS_RETRIEVED', false),
+
+ // Query execution time threshold in milliseconds after which the query will be marked as slow
+ 'slow_threshold' => env('CLOCKWORK_DATABASE_SLOW_THRESHOLD'),
+
+ // Collect only slow database queries
+ 'slow_only' => env('CLOCKWORK_DATABASE_SLOW_ONLY', false),
+
+ // Detect and report duplicate queries
+ 'detect_duplicate_queries' => env('CLOCKWORK_DATABASE_DETECT_DUPLICATE_QUERIES', false)
+ ],
+
+ // Dispatched events
+ 'events' => [
+ 'enabled' => env('CLOCKWORK_EVENTS_ENABLED', true),
+
+ // Ignored events (framework events are ignored by default)
+ 'ignored_events' => [
+ // App\Events\UserRegistered::class,
+ // 'user.registered'
+ ],
+ ],
+
+ // Laravel log (you can still log directly to Clockwork with laravel log disabled)
+ 'log' => [
+ 'enabled' => env('CLOCKWORK_LOG_ENABLED', true)
+ ],
+
+ // Sent notifications
+ 'notifications' => [
+ 'enabled' => env('CLOCKWORK_NOTIFICATIONS_ENABLED', true),
+ ],
+
+ // Performance metrics
+ 'performance' => [
+ // Allow collecting of client metrics. Requires separate clockwork-browser npm package.
+ 'client_metrics' => env('CLOCKWORK_PERFORMANCE_CLIENT_METRICS', true)
+ ],
+
+ // Dispatched queue jobs
+ 'queue' => [
+ 'enabled' => env('CLOCKWORK_QUEUE_ENABLED', true)
+ ],
+
+ // Redis commands
+ 'redis' => [
+ 'enabled' => env('CLOCKWORK_REDIS_ENABLED', true)
+ ],
+
+ // Routes list
+ 'routes' => [
+ 'enabled' => env('CLOCKWORK_ROUTES_ENABLED', false),
+
+ // Collect only routes from particular namespaces (only application routes by default)
+ 'only_namespaces' => [ 'App' ]
+ ],
+
+ // Rendered views
+ 'views' => [
+ 'enabled' => env('CLOCKWORK_VIEWS_ENABLED', true),
+
+ // Collect views including view data (high performance impact with a high number of views)
+ 'collect_data' => env('CLOCKWORK_VIEWS_COLLECT_DATA', false),
+
+ // Use Twig profiler instead of Laravel events for apps using laravel-twigbridge (more precise, but does
+ // not support collecting view data)
+ 'use_twig_profiler' => env('CLOCKWORK_VIEWS_USE_TWIG_PROFILER', false)
+ ]
+
+ ],
+
+ /*
+ |------------------------------------------------------------------------------------------------------------------
+ | Enable web UI
+ |------------------------------------------------------------------------------------------------------------------
+ |
+ | Clockwork comes with a web UI accessible via http://your.app/clockwork. Here you can enable or disable this
+ | feature. You can also set a custom path for the web UI.
+ |
+ */
+
+ 'web' => env('CLOCKWORK_WEB', true),
+
+ /*
+ |------------------------------------------------------------------------------------------------------------------
+ | Enable toolbar
+ |------------------------------------------------------------------------------------------------------------------
+ |
+ | Clockwork can show a toolbar with basic metrics on all responses. Here you can enable or disable this feature.
+ | Requires a separate clockwork-browser npm library.
+ | For installation instructions see https://underground.works/clockwork/#docs-viewing-data
+ |
+ */
+
+ 'toolbar' => env('CLOCKWORK_TOOLBAR', true),
+
+ /*
+ |------------------------------------------------------------------------------------------------------------------
+ | HTTP requests collection
+ |------------------------------------------------------------------------------------------------------------------
+ |
+ | Clockwork collects data about HTTP requests to your app. Here you can choose which requests should be collected.
+ |
+ */
+
+ 'requests' => [
+ // With on-demand mode enabled, Clockwork will only profile requests when the browser extension is open or you
+ // manually pass a "clockwork-profile" cookie or get/post data key.
+ // Optionally you can specify a "secret" that has to be passed as the value to enable profiling.
+ 'on_demand' => env('CLOCKWORK_REQUESTS_ON_DEMAND', false),
+
+ // Collect only errors (requests with HTTP 4xx and 5xx responses)
+ 'errors_only' => env('CLOCKWORK_REQUESTS_ERRORS_ONLY', false),
+
+ // Response time threshold in milliseconds after which the request will be marked as slow
+ 'slow_threshold' => env('CLOCKWORK_REQUESTS_SLOW_THRESHOLD'),
+
+ // Collect only slow requests
+ 'slow_only' => env('CLOCKWORK_REQUESTS_SLOW_ONLY', false),
+
+ // Sample the collected requests (e.g. set to 100 to collect only 1 in 100 requests)
+ 'sample' => env('CLOCKWORK_REQUESTS_SAMPLE', false),
+
+ // List of URIs that should not be collected
+ 'except' => [
+ '/horizon/.*', // Laravel Horizon requests
+ '/telescope/.*', // Laravel Telescope requests
+ '/_tt/.*', // Laravel Telescope toolbar
+ '/_debugbar/.*', // Laravel DebugBar requests
+ ],
+
+ // List of URIs that should be collected, any other URI will not be collected if not empty
+ 'only' => [
+ // '/api/.*'
+ ],
+
+ // Don't collect OPTIONS requests, mostly used in the CSRF pre-flight requests and are rarely of interest
+ 'except_preflight' => env('CLOCKWORK_REQUESTS_EXCEPT_PREFLIGHT', true)
+ ],
+
+ /*
+ |------------------------------------------------------------------------------------------------------------------
+ | Artisan commands collection
+ |------------------------------------------------------------------------------------------------------------------
+ |
+ | Clockwork can collect data about executed artisan commands. Here you can enable and configure which commands
+ | should be collected.
+ |
+ */
+
+ 'artisan' => [
+ // Enable or disable collection of executed Artisan commands
+ 'collect' => env('CLOCKWORK_ARTISAN_COLLECT', false),
+
+ // List of commands that should not be collected (built-in commands are not collected by default)
+ 'except' => [
+ // 'inspire'
+ ],
+
+ // List of commands that should be collected, any other command will not be collected if not empty
+ 'only' => [
+ // 'inspire'
+ ],
+
+ // Enable or disable collection of command output
+ 'collect_output' => env('CLOCKWORK_ARTISAN_COLLECT_OUTPUT', false),
+
+ // Enable or disable collection of built-in Laravel commands
+ 'except_laravel_commands' => env('CLOCKWORK_ARTISAN_EXCEPT_LARAVEL_COMMANDS', true)
+ ],
+
+ /*
+ |------------------------------------------------------------------------------------------------------------------
+ | Queue jobs collection
+ |------------------------------------------------------------------------------------------------------------------
+ |
+ | Clockwork can collect data about executed queue jobs. Here you can enable and configure which queue jobs should
+ | be collected.
+ |
+ */
+
+ 'queue' => [
+ // Enable or disable collection of executed queue jobs
+ 'collect' => env('CLOCKWORK_QUEUE_COLLECT', false),
+
+ // List of queue jobs that should not be collected
+ 'except' => [
+ // App\Jobs\ExpensiveJob::class
+ ],
+
+ // List of queue jobs that should be collected, any other queue job will not be collected if not empty
+ 'only' => [
+ // App\Jobs\BuggyJob::class
+ ]
+ ],
+
+ /*
+ |------------------------------------------------------------------------------------------------------------------
+ | Tests collection
+ |------------------------------------------------------------------------------------------------------------------
+ |
+ | Clockwork can collect data about executed tests. Here you can enable and configure which tests should be
+ | collected.
+ |
+ */
+
+ 'tests' => [
+ // Enable or disable collection of ran tests
+ 'collect' => env('CLOCKWORK_TESTS_COLLECT', false),
+
+ // List of tests that should not be collected
+ 'except' => [
+ // Tests\Unit\ExampleTest::class
+ ]
+ ],
+
+ /*
+ |------------------------------------------------------------------------------------------------------------------
+ | Enable data collection when Clockwork is disabled
+ |------------------------------------------------------------------------------------------------------------------
+ |
+ | You can enable this setting to collect data even when Clockwork is disabled, e.g. for future analysis.
+ |
+ */
+
+ 'collect_data_always' => env('CLOCKWORK_COLLECT_DATA_ALWAYS', false),
+
+ /*
+ |------------------------------------------------------------------------------------------------------------------
+ | Metadata storage
+ |------------------------------------------------------------------------------------------------------------------
+ |
+ | Configure how is the metadata collected by Clockwork stored. Three options are available:
+ | - files - A simple fast storage implementation storing data in one-per-request files.
+ | - sql - Stores requests in a sql database. Supports MySQL, PostgreSQL and SQLite. Requires PDO.
+ | - redis - Stores requests in redis. Requires phpredis.
+ */
+
+ 'storage' => env('CLOCKWORK_STORAGE', 'files'),
+
+ // Path where the Clockwork metadata is stored
+ 'storage_files_path' => env('CLOCKWORK_STORAGE_FILES_PATH', storage_path('clockwork')),
+
+ // Compress the metadata files using gzip, trading a little bit of performance for lower disk usage
+ 'storage_files_compress' => env('CLOCKWORK_STORAGE_FILES_COMPRESS', false),
+
+ // SQL database to use, can be a name of database configured in database.php or a path to a SQLite file
+ 'storage_sql_database' => env('CLOCKWORK_STORAGE_SQL_DATABASE', storage_path('clockwork.sqlite')),
+
+ // SQL table name to use, the table is automatically created and updated when needed
+ 'storage_sql_table' => env('CLOCKWORK_STORAGE_SQL_TABLE', 'clockwork'),
+
+ // Redis connection, name of redis connection or cluster configured in database.php
+ 'storage_redis' => env('CLOCKWORK_STORAGE_REDIS', 'default'),
+
+ // Redis prefix for Clockwork keys ("clockwork" if not set)
+ 'storage_redis_prefix' => env('CLOCKWORK_STORAGE_REDIS_PREFIX', 'clockwork'),
+
+ // Maximum lifetime of collected metadata in minutes, older requests will automatically be deleted, false to disable
+ 'storage_expiration' => env('CLOCKWORK_STORAGE_EXPIRATION', 60 * 24 * 7),
+
+ /*
+ |------------------------------------------------------------------------------------------------------------------
+ | Authentication
+ |------------------------------------------------------------------------------------------------------------------
+ |
+ | Clockwork can be configured to require authentication before allowing access to the collected data. This might be
+ | useful when the application is publicly accessible. Setting to true will enable a simple authentication with a
+ | pre-configured password. You can also pass a class name of a custom implementation.
+ |
+ */
+
+ 'authentication' => env('CLOCKWORK_AUTHENTICATION', false),
+
+ // Password for the simple authentication
+ 'authentication_password' => env('CLOCKWORK_AUTHENTICATION_PASSWORD', 'VerySecretPassword'),
+
+ /*
+ |------------------------------------------------------------------------------------------------------------------
+ | Stack traces collection
+ |------------------------------------------------------------------------------------------------------------------
+ |
+ | Clockwork can collect stack traces for log messages and certain data like database queries. Here you can set
+ | whether to collect stack traces, limit the number of collected frames and set further configuration. Collecting
+ | long stack traces considerably increases metadata size.
+ |
+ */
+
+ 'stack_traces' => [
+ // Enable or disable collecting of stack traces
+ 'enabled' => env('CLOCKWORK_STACK_TRACES_ENABLED', true),
+
+ // Limit the number of frames to be collected
+ 'limit' => env('CLOCKWORK_STACK_TRACES_LIMIT', 10),
+
+ // List of vendor names to skip when determining caller, common vendors are automatically added
+ 'skip_vendors' => [
+ // 'phpunit'
+ ],
+
+ // List of namespaces to skip when determining caller
+ 'skip_namespaces' => [
+ // 'Laravel'
+ ],
+
+ // List of class names to skip when determining caller
+ 'skip_classes' => [
+ // App\CustomLog::class
+ ]
+
+ ],
+
+ /*
+ |------------------------------------------------------------------------------------------------------------------
+ | Serialization
+ |------------------------------------------------------------------------------------------------------------------
+ |
+ | Clockwork serializes the collected data to json for storage and transfer. Here you can configure certain aspects
+ | of serialization. Serialization has a large effect on the cpu time and memory usage.
+ |
+ */
+
+ // Maximum depth of serialized multi-level arrays and objects
+ 'serialization_depth' => env('CLOCKWORK_SERIALIZATION_DEPTH', 10),
+
+ // A list of classes that will never be serialized (e.g. a common service container class)
+ 'serialization_blackbox' => [
+ \Illuminate\Container\Container::class,
+ \Illuminate\Foundation\Application::class,
+ \Laravel\Lumen\Application::class
+ ],
+
+ /*
+ |------------------------------------------------------------------------------------------------------------------
+ | Register helpers
+ |------------------------------------------------------------------------------------------------------------------
+ |
+ | Clockwork comes with a "clock" global helper function. You can use this helper to quickly log something and to
+ | access the Clockwork instance.
+ |
+ */
+
+ 'register_helpers' => env('CLOCKWORK_REGISTER_HELPERS', true),
+
+ /*
+ |------------------------------------------------------------------------------------------------------------------
+ | Send headers for AJAX request
+ |------------------------------------------------------------------------------------------------------------------
+ |
+ | When trying to collect data, the AJAX method can sometimes fail if it is missing required headers. For example, an
+ | API might require a version number using Accept headers to route the HTTP request to the correct codebase.
+ |
+ */
+
+ 'headers' => [
+ // 'Accept' => 'application/vnd.com.whatever.v1+json',
+ ],
+
+ /*
+ |------------------------------------------------------------------------------------------------------------------
+ | Server timing
+ |------------------------------------------------------------------------------------------------------------------
+ |
+ | Clockwork supports the W3C Server Timing specification, which allows for collecting a simple performance metrics
+ | in a cross-browser way. E.g. in Chrome, your app, database and timeline event timings will be shown in the Dev
+ | Tools network tab. This setting specifies the max number of timeline events that will be sent. Setting to false
+ | will disable the feature.
+ |
+ */
+
+ 'server_timing' => env('CLOCKWORK_SERVER_TIMING', 10)
+
+];
From 25f50603334a03dabb38bf0844b10aebff17c39d Mon Sep 17 00:00:00 2001
From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com>
Date: Wed, 11 Sep 2024 15:25:51 +0200
Subject: [PATCH 21/35] move clockwork to dev only
---
composer.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/composer.json b/composer.json
index 4dcd066ec..9749afdad 100644
--- a/composer.json
+++ b/composer.json
@@ -12,7 +12,6 @@
"danharrin/livewire-rate-limiting": "^1.1",
"doctrine/dbal": "^3.6",
"guzzlehttp/guzzle": "^7.5.0",
- "itsgoingd/clockwork": "^5.2",
"laravel/fortify": "^v1.16.0",
"laravel/framework": "^v11",
"laravel/horizon": "^5.27.1",
@@ -49,6 +48,7 @@
"zircote/swagger-php": "^4.10"
},
"require-dev": {
+ "itsgoingd/clockwork": "^5.2",
"fakerphp/faker": "^v1.21.0",
"laravel/dusk": "^v8.0",
"laravel/pint": "^1.16",
From 1a40bebaae0d4b073c569c3a2af9c54ecd97f922 Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Wed, 11 Sep 2024 15:47:54 +0200
Subject: [PATCH 22/35] chore: Update permissions in pr-build.yml and version
numbers
---
.github/workflows/pr-build.yml | 9 +++++++++
config/sentry.php | 2 +-
config/version.php | 2 +-
versions.json | 6 +++---
4 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml
index cf2fae8f3..017399e73 100644
--- a/.github/workflows/pr-build.yml
+++ b/.github/workflows/pr-build.yml
@@ -16,6 +16,11 @@ env:
jobs:
amd64:
runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ packages: write
+ attestations: write
+ id-token: write
steps:
- uses: actions/checkout@v4
- name: Login to ghcr.io
@@ -37,6 +42,8 @@ jobs:
permissions:
contents: read
packages: write
+ attestations: write
+ id-token: write
steps:
- uses: actions/checkout@v4
- name: Login to ghcr.io
@@ -58,6 +65,8 @@ jobs:
permissions:
contents: read
packages: write
+ attestations: write
+ id-token: write
needs: [amd64, aarch64]
steps:
- name: Checkout
diff --git a/config/sentry.php b/config/sentry.php
index eb0a3a508..5a0bfdaac 100644
--- a/config/sentry.php
+++ b/config/sentry.php
@@ -7,7 +7,7 @@ return [
// The release version of your application
// Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD'))
- 'release' => '4.0.0-beta.333',
+ 'release' => '4.0.0-beta.334',
// When left empty or `null` the Laravel environment will be used
'environment' => config('app.env'),
diff --git a/config/version.php b/config/version.php
index c3c14e32b..f4b7ee9f7 100644
--- a/config/version.php
+++ b/config/version.php
@@ -1,3 +1,3 @@
Date: Wed, 11 Sep 2024 22:44:35 +0300
Subject: [PATCH 23/35] fix: keydb. add `:` delimiter for connection string
---
app/Models/StandaloneKeydb.php | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/Models/StandaloneKeydb.php b/app/Models/StandaloneKeydb.php
index 607cacade..7ecb00348 100644
--- a/app/Models/StandaloneKeydb.php
+++ b/app/Models/StandaloneKeydb.php
@@ -209,7 +209,7 @@ class StandaloneKeydb extends BaseModel
protected function internalDbUrl(): Attribute
{
return new Attribute(
- get: fn () => "redis://{$this->keydb_password}@{$this->uuid}:6379/0",
+ get: fn () => "redis://:{$this->keydb_password}@{$this->uuid}:6379/0",
);
}
@@ -218,7 +218,7 @@ class StandaloneKeydb extends BaseModel
return new Attribute(
get: function () {
if ($this->is_public && $this->public_port) {
- return "redis://{$this->keydb_password}@{$this->destination->server->getIp}:{$this->public_port}/0";
+ return "redis://:{$this->keydb_password}@{$this->destination->server->getIp}:{$this->public_port}/0";
}
return null;
From 8712af737983a88f7768dd94ecee7e731feff04d Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Thu, 12 Sep 2024 09:42:28 +0200
Subject: [PATCH 24/35] fix: move mc command to coolify image from helper
---
app/Jobs/DatabaseBackupJob.php | 60 ++++++--------------------------
docker-compose.dev.yml | 1 +
docker/coolify-helper/Dockerfile | 2 +-
docker/dev/Dockerfile | 3 ++
4 files changed, 15 insertions(+), 51 deletions(-)
diff --git a/app/Jobs/DatabaseBackupJob.php b/app/Jobs/DatabaseBackupJob.php
index 5d481199b..e6fa05b55 100644
--- a/app/Jobs/DatabaseBackupJob.php
+++ b/app/Jobs/DatabaseBackupJob.php
@@ -25,7 +25,7 @@ use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\Middleware\WithoutOverlapping;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Str;
-use App\Models\InstanceSettings;
+use Visus\Cuid2\Cuid2;
class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
{
@@ -399,6 +399,7 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
$backupCommand .= " $this->container_name pg_dump --format=custom --no-acl --no-owner --username {$this->database->postgres_user} $database > $this->backup_location";
$commands[] = $backupCommand;
+ ray($commands);
$this->backup_output = instant_remote_process($commands, $this->server);
$this->backup_output = trim($this->backup_output);
if ($this->backup_output === '') {
@@ -480,6 +481,7 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
private function upload_to_s3(): void
{
try {
+ ray($this->backup_location);
if (is_null($this->s3)) {
return;
}
@@ -489,62 +491,20 @@ class DatabaseBackupJob implements ShouldBeEncrypted, ShouldQueue
$bucket = $this->s3->bucket;
$endpoint = $this->s3->endpoint;
$this->s3->testConnection(shouldSave: true);
- if (data_get($this->backup, 'database_type') === 'App\Models\ServiceDatabase') {
- $network = $this->database->service->destination->network;
- } else {
- $network = $this->database->destination->network;
- }
+ $configName = new Cuid2;
- $this->ensureHelperImageAvailable();
-
- $fullImageName = $this->getFullImageName();
- $commands[] = "docker run -d --network {$network} --name backup-of-{$this->backup->uuid} --rm -v $this->backup_location:$this->backup_location:ro {$fullImageName}";
- $commands[] = "docker exec backup-of-{$this->backup->uuid} mc config host add temporary {$endpoint} $key $secret";
- $commands[] = "docker exec backup-of-{$this->backup->uuid} mc cp $this->backup_location temporary/$bucket{$this->backup_dir}/";
+ $s3_copy_dir = str($this->backup_location)->replace(backup_dir(), '/var/www/html/storage/app/backups/');
+ $commands[] = "docker exec coolify bash -c 'mc config host add {$configName} {$endpoint} $key $secret'";
+ $commands[] = "docker exec coolify bash -c 'mc cp $s3_copy_dir {$configName}/{$bucket}{$this->backup_dir}/'";
instant_remote_process($commands, $this->server);
$this->add_to_backup_output('Uploaded to S3.');
} catch (\Throwable $e) {
$this->add_to_backup_output($e->getMessage());
throw $e;
} finally {
- $command = "docker rm -f backup-of-{$this->backup->uuid}";
- instant_remote_process([$command], $this->server);
+ $removeConfigCommands[] = "docker exec coolify bash -c 'mc config remove {$configName}'";
+ $removeConfigCommands[] = "docker exec coolify bash -c 'mc alias rm {$configName}'";
+ instant_remote_process($removeConfigCommands, $this->server, false);
}
}
-
- private function ensureHelperImageAvailable(): void
- {
- $fullImageName = $this->getFullImageName();
-
- $imageExists = $this->checkImageExists($fullImageName);
-
- if (!$imageExists) {
- $this->pullHelperImage($fullImageName);
- }
- }
-
- private function checkImageExists(string $fullImageName): bool
- {
- $result = instant_remote_process(["docker image inspect {$fullImageName} >/dev/null 2>&1 && echo 'exists' || echo 'not exists'"], $this->server, false);
- return trim($result) === 'exists';
- }
-
- private function pullHelperImage(string $fullImageName): void
- {
- try {
- instant_remote_process(["docker pull {$fullImageName}"], $this->server);
- } catch (\Exception $e) {
- $errorMessage = "Failed to pull helper image: " . $e->getMessage();
- $this->add_to_backup_output($errorMessage);
- throw new \RuntimeException($errorMessage);
- }
- }
-
- private function getFullImageName(): string
- {
- $settings = InstanceSettings::get();
- $helperImage = config('coolify.helper_image');
- $latestVersion = $settings->helper_version;
- return "{$helperImage}:{$latestVersion}";
- }
}
diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml
index 7eda14d41..718d52d04 100644
--- a/docker-compose.dev.yml
+++ b/docker-compose.dev.yml
@@ -19,6 +19,7 @@ services:
PUSHER_APP_SECRET: "${PUSHER_APP_SECRET:-coolify}"
volumes:
- .:/var/www/html/:cached
+ - /data/coolify/backups/:/var/www/html/storage/app/backups
postgres:
pull_policy: always
ports:
diff --git a/docker/coolify-helper/Dockerfile b/docker/coolify-helper/Dockerfile
index 09ca18825..7aa9d8722 100644
--- a/docker/coolify-helper/Dockerfile
+++ b/docker/coolify-helper/Dockerfile
@@ -34,7 +34,7 @@ RUN if [[ ${TARGETPLATFORM} == 'linux/arm64' ]]; then \
chmod +x ~/.docker/cli-plugins/docker-compose /usr/bin/docker /usr/local/bin/pack /root/.docker/cli-plugins/docker-buildx \
;fi
-COPY --from=minio/mc:RELEASE.2024-03-13T23-51-57Z /usr/bin/mc /usr/bin/mc
+COPY --from=minio/mc:RELEASE.2024-09-09T07-53-10Z /usr/bin/mc /usr/bin/mc
RUN chmod +x /usr/bin/mc
ENTRYPOINT ["/sbin/tini", "--"]
diff --git a/docker/dev/Dockerfile b/docker/dev/Dockerfile
index f75a0ff1e..63832dc36 100644
--- a/docker/dev/Dockerfile
+++ b/docker/dev/Dockerfile
@@ -37,6 +37,9 @@ RUN /bin/bash -c "if [[ ${TARGETPLATFORM} == 'linux/arm64' ]]; then \
curl -L https://github.com/cloudflare/cloudflared/releases/download/${CLOUDFLARED_VERSION}/cloudflared-linux-arm64 -o /usr/local/bin/cloudflared && chmod +x /usr/local/bin/cloudflared \
;fi"
+COPY --from=minio/mc:RELEASE.2024-09-09T07-53-10Z /usr/bin/mc /usr/bin/mc
+RUN chmod +x /usr/bin/mc
+
RUN { \
echo 'upload_max_filesize=256M'; \
echo 'post_max_size=256M'; \
From f672a08afb2dc5833bee63321f6cda545a70ee23 Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Thu, 12 Sep 2024 09:56:48 +0200
Subject: [PATCH 25/35] chore: Add minio/mc command to Dockerfile
---
docker/prod/Dockerfile | 3 +++
1 file changed, 3 insertions(+)
diff --git a/docker/prod/Dockerfile b/docker/prod/Dockerfile
index f46124062..d0cebcbca 100644
--- a/docker/prod/Dockerfile
+++ b/docker/prod/Dockerfile
@@ -68,3 +68,6 @@ RUN { \
echo 'upload_max_filesize=256M'; \
echo 'post_max_size=256M'; \
} > /etc/php/current_version/cli/conf.d/upload-limits.ini
+
+COPY --from=minio/mc:RELEASE.2024-09-09T07-53-10Z /usr/bin/mc /usr/bin/mc
+RUN chmod +x /usr/bin/mc
From 03d419e591fc52c6a21b03009e76d121707c795c Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Thu, 12 Sep 2024 10:20:55 +0200
Subject: [PATCH 26/35] chore: Remove itsgoingd/clockwork from require-dev in
composer.json
---
composer.json | 1 -
1 file changed, 1 deletion(-)
diff --git a/composer.json b/composer.json
index 9749afdad..e8b46105d 100644
--- a/composer.json
+++ b/composer.json
@@ -48,7 +48,6 @@
"zircote/swagger-php": "^4.10"
},
"require-dev": {
- "itsgoingd/clockwork": "^5.2",
"fakerphp/faker": "^v1.21.0",
"laravel/dusk": "^v8.0",
"laravel/pint": "^1.16",
From f3748fc294cf7175833226f02fa31ae0900c668d Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Thu, 12 Sep 2024 10:25:46 +0200
Subject: [PATCH 27/35] update lock file
---
composer.lock | 507 ++++++++++++++++++--------------------------------
1 file changed, 180 insertions(+), 327 deletions(-)
diff --git a/composer.lock b/composer.lock
index 457a5b7c7..fffb320d3 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": "5c24125e9c7d34e0d4bc1d1fb1c00018",
+ "content-hash": "96f8146407d0e6e897ff097c5eccd3a4",
"packages": [
{
"name": "amphp/amp",
@@ -921,16 +921,16 @@
},
{
"name": "aws/aws-sdk-php",
- "version": "3.321.2",
+ "version": "3.321.9",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
- "reference": "c04f8f30891cee8480c132778cd4cc486467e77a"
+ "reference": "5de5099cfe0e17cb3eb2fe51de0101c99bc9442a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/c04f8f30891cee8480c132778cd4cc486467e77a",
- "reference": "c04f8f30891cee8480c132778cd4cc486467e77a",
+ "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/5de5099cfe0e17cb3eb2fe51de0101c99bc9442a",
+ "reference": "5de5099cfe0e17cb3eb2fe51de0101c99bc9442a",
"shasum": ""
},
"require": {
@@ -1013,9 +1013,9 @@
"support": {
"forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
"issues": "https://github.com/aws/aws-sdk-php/issues",
- "source": "https://github.com/aws/aws-sdk-php/tree/3.321.2"
+ "source": "https://github.com/aws/aws-sdk-php/tree/3.321.9"
},
- "time": "2024-08-30T18:14:40+00:00"
+ "time": "2024-09-11T18:15:49+00:00"
},
{
"name": "bacon/bacon-qr-code",
@@ -1518,16 +1518,16 @@
},
{
"name": "doctrine/dbal",
- "version": "3.9.0",
+ "version": "3.9.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
- "reference": "d8f68ea6cc00912e5313237130b8c8decf4d28c6"
+ "reference": "d7dc08f98cba352b2bab5d32c5e58f7e745c11a7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/dbal/zipball/d8f68ea6cc00912e5313237130b8c8decf4d28c6",
- "reference": "d8f68ea6cc00912e5313237130b8c8decf4d28c6",
+ "url": "https://api.github.com/repos/doctrine/dbal/zipball/d7dc08f98cba352b2bab5d32c5e58f7e745c11a7",
+ "reference": "d7dc08f98cba352b2bab5d32c5e58f7e745c11a7",
"shasum": ""
},
"require": {
@@ -1543,7 +1543,7 @@
"doctrine/coding-standard": "12.0.0",
"fig/log-test": "^1",
"jetbrains/phpstorm-stubs": "2023.1",
- "phpstan/phpstan": "1.11.7",
+ "phpstan/phpstan": "1.12.0",
"phpstan/phpstan-strict-rules": "^1.6",
"phpunit/phpunit": "9.6.20",
"psalm/plugin-phpunit": "0.18.4",
@@ -1611,7 +1611,7 @@
],
"support": {
"issues": "https://github.com/doctrine/dbal/issues",
- "source": "https://github.com/doctrine/dbal/tree/3.9.0"
+ "source": "https://github.com/doctrine/dbal/tree/3.9.1"
},
"funding": [
{
@@ -1627,7 +1627,7 @@
"type": "tidelift"
}
],
- "time": "2024-08-15T07:34:42+00:00"
+ "time": "2024-09-01T13:49:23+00:00"
},
{
"name": "doctrine/deprecations",
@@ -2670,81 +2670,6 @@
],
"time": "2023-12-03T19:50:20+00:00"
},
- {
- "name": "itsgoingd/clockwork",
- "version": "v5.2.2",
- "source": {
- "type": "git",
- "url": "https://github.com/itsgoingd/clockwork.git",
- "reference": "29bc4cedfbe742b419544c30b7b6e15cd9da08ef"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/itsgoingd/clockwork/zipball/29bc4cedfbe742b419544c30b7b6e15cd9da08ef",
- "reference": "29bc4cedfbe742b419544c30b7b6e15cd9da08ef",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "php": ">=5.6"
- },
- "suggest": {
- "ext-pdo": "Needed in order to use a SQL database for metadata storage",
- "ext-pdo_mysql": "Needed in order to use MySQL for metadata storage",
- "ext-pdo_postgres": "Needed in order to use Postgres for metadata storage",
- "ext-pdo_sqlite": "Needed in order to use a SQLite for metadata storage",
- "ext-redis": "Needed in order to use Redis for metadata storage"
- },
- "type": "library",
- "extra": {
- "laravel": {
- "providers": [
- "Clockwork\\Support\\Laravel\\ClockworkServiceProvider"
- ],
- "aliases": {
- "Clockwork": "Clockwork\\Support\\Laravel\\Facade"
- }
- }
- },
- "autoload": {
- "psr-4": {
- "Clockwork\\": "Clockwork/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "itsgoingd",
- "email": "itsgoingd@luzer.sk",
- "homepage": "https://twitter.com/itsgoingd"
- }
- ],
- "description": "php dev tools in your browser",
- "homepage": "https://underground.works/clockwork",
- "keywords": [
- "Devtools",
- "debugging",
- "laravel",
- "logging",
- "lumen",
- "profiling",
- "slim"
- ],
- "support": {
- "issues": "https://github.com/itsgoingd/clockwork/issues",
- "source": "https://github.com/itsgoingd/clockwork/tree/v5.2.2"
- },
- "funding": [
- {
- "url": "https://github.com/itsgoingd",
- "type": "github"
- }
- ],
- "time": "2024-04-14T10:49:22+00:00"
- },
{
"name": "jean85/pretty-package-versions",
"version": "2.0.6",
@@ -2864,16 +2789,16 @@
},
{
"name": "laravel/fortify",
- "version": "v1.24.0",
+ "version": "v1.24.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/fortify.git",
- "reference": "fbe67f018c1fe26d00913de56a6d60589b4be9b2"
+ "reference": "8158ba0960bb5f4aae509d01d74a95e16e30de20"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/fortify/zipball/fbe67f018c1fe26d00913de56a6d60589b4be9b2",
- "reference": "fbe67f018c1fe26d00913de56a6d60589b4be9b2",
+ "url": "https://api.github.com/repos/laravel/fortify/zipball/8158ba0960bb5f4aae509d01d74a95e16e30de20",
+ "reference": "8158ba0960bb5f4aae509d01d74a95e16e30de20",
"shasum": ""
},
"require": {
@@ -2925,20 +2850,20 @@
"issues": "https://github.com/laravel/fortify/issues",
"source": "https://github.com/laravel/fortify"
},
- "time": "2024-08-20T14:43:56+00:00"
+ "time": "2024-09-03T10:02:14+00:00"
},
{
"name": "laravel/framework",
- "version": "v11.21.0",
+ "version": "v11.23.2",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "9d9d36708d56665b12185493f684abce38ad2d30"
+ "reference": "d38bf0fd3a8936e1cb9ca8eb8d7304a564f790f3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/9d9d36708d56665b12185493f684abce38ad2d30",
- "reference": "9d9d36708d56665b12185493f684abce38ad2d30",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/d38bf0fd3a8936e1cb9ca8eb8d7304a564f790f3",
+ "reference": "d38bf0fd3a8936e1cb9ca8eb8d7304a564f790f3",
"shasum": ""
},
"require": {
@@ -3000,6 +2925,7 @@
"illuminate/bus": "self.version",
"illuminate/cache": "self.version",
"illuminate/collections": "self.version",
+ "illuminate/concurrency": "self.version",
"illuminate/conditionable": "self.version",
"illuminate/config": "self.version",
"illuminate/console": "self.version",
@@ -3042,7 +2968,7 @@
"league/flysystem-sftp-v3": "^3.0",
"mockery/mockery": "^1.6",
"nyholm/psr7": "^1.2",
- "orchestra/testbench-core": "^9.1.5",
+ "orchestra/testbench-core": "^9.4.0",
"pda/pheanstalk": "^5.0",
"phpstan/phpstan": "^1.11.5",
"phpunit/phpunit": "^10.5|^11.0",
@@ -3100,6 +3026,7 @@
"src/Illuminate/Events/functions.php",
"src/Illuminate/Filesystem/functions.php",
"src/Illuminate/Foundation/helpers.php",
+ "src/Illuminate/Log/functions.php",
"src/Illuminate/Support/helpers.php"
],
"psr-4": {
@@ -3131,20 +3058,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2024-08-20T15:00:52+00:00"
+ "time": "2024-09-11T21:59:23+00:00"
},
{
"name": "laravel/horizon",
- "version": "v5.27.1",
+ "version": "v5.28.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/horizon.git",
- "reference": "184449be3eb296ab16c13a69ce22049f32d0fc2c"
+ "reference": "9d2c4eaeb11408384401f8a7d1b0ea4c76554f3f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/horizon/zipball/184449be3eb296ab16c13a69ce22049f32d0fc2c",
- "reference": "184449be3eb296ab16c13a69ce22049f32d0fc2c",
+ "url": "https://api.github.com/repos/laravel/horizon/zipball/9d2c4eaeb11408384401f8a7d1b0ea4c76554f3f",
+ "reference": "9d2c4eaeb11408384401f8a7d1b0ea4c76554f3f",
"shasum": ""
},
"require": {
@@ -3208,9 +3135,9 @@
],
"support": {
"issues": "https://github.com/laravel/horizon/issues",
- "source": "https://github.com/laravel/horizon/tree/v5.27.1"
+ "source": "https://github.com/laravel/horizon/tree/v5.28.1"
},
- "time": "2024-08-05T14:23:30+00:00"
+ "time": "2024-09-04T14:06:50+00:00"
},
{
"name": "laravel/prompts",
@@ -3397,16 +3324,16 @@
},
{
"name": "laravel/socialite",
- "version": "v5.15.1",
+ "version": "v5.16.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/socialite.git",
- "reference": "cc02625f0bd1f95dc3688eb041cce0f1e709d029"
+ "reference": "40a2dc98c53d9dc6d55eadb0d490d3d72b73f1bf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/socialite/zipball/cc02625f0bd1f95dc3688eb041cce0f1e709d029",
- "reference": "cc02625f0bd1f95dc3688eb041cce0f1e709d029",
+ "url": "https://api.github.com/repos/laravel/socialite/zipball/40a2dc98c53d9dc6d55eadb0d490d3d72b73f1bf",
+ "reference": "40a2dc98c53d9dc6d55eadb0d490d3d72b73f1bf",
"shasum": ""
},
"require": {
@@ -3465,7 +3392,7 @@
"issues": "https://github.com/laravel/socialite/issues",
"source": "https://github.com/laravel/socialite"
},
- "time": "2024-06-28T20:09:34+00:00"
+ "time": "2024-09-03T09:46:57+00:00"
},
{
"name": "laravel/telescope",
@@ -4607,16 +4534,16 @@
},
{
"name": "lorisleiva/laravel-actions",
- "version": "v2.8.3",
+ "version": "v2.8.4",
"source": {
"type": "git",
"url": "https://github.com/lorisleiva/laravel-actions.git",
- "reference": "4507d5bc7b28d168881a799081e60c245b3449db"
+ "reference": "5a168bfdd3b75dd6ff259019d4aeef784bbd5403"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/lorisleiva/laravel-actions/zipball/4507d5bc7b28d168881a799081e60c245b3449db",
- "reference": "4507d5bc7b28d168881a799081e60c245b3449db",
+ "url": "https://api.github.com/repos/lorisleiva/laravel-actions/zipball/5a168bfdd3b75dd6ff259019d4aeef784bbd5403",
+ "reference": "5a168bfdd3b75dd6ff259019d4aeef784bbd5403",
"shasum": ""
},
"require": {
@@ -4671,7 +4598,7 @@
],
"support": {
"issues": "https://github.com/lorisleiva/laravel-actions/issues",
- "source": "https://github.com/lorisleiva/laravel-actions/tree/v2.8.3"
+ "source": "https://github.com/lorisleiva/laravel-actions/tree/v2.8.4"
},
"funding": [
{
@@ -4679,7 +4606,7 @@
"type": "github"
}
],
- "time": "2024-08-20T17:08:48+00:00"
+ "time": "2024-09-10T09:57:29+00:00"
},
{
"name": "lorisleiva/lody",
@@ -4856,16 +4783,16 @@
},
{
"name": "mtdowling/jmespath.php",
- "version": "2.7.0",
+ "version": "2.8.0",
"source": {
"type": "git",
"url": "https://github.com/jmespath/jmespath.php.git",
- "reference": "bbb69a935c2cbb0c03d7f481a238027430f6440b"
+ "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/bbb69a935c2cbb0c03d7f481a238027430f6440b",
- "reference": "bbb69a935c2cbb0c03d7f481a238027430f6440b",
+ "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/a2a865e05d5f420b50cc2f85bb78d565db12a6bc",
+ "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc",
"shasum": ""
},
"require": {
@@ -4882,7 +4809,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.7-dev"
+ "dev-master": "2.8-dev"
}
},
"autoload": {
@@ -4916,9 +4843,9 @@
],
"support": {
"issues": "https://github.com/jmespath/jmespath.php/issues",
- "source": "https://github.com/jmespath/jmespath.php/tree/2.7.0"
+ "source": "https://github.com/jmespath/jmespath.php/tree/2.8.0"
},
- "time": "2023-08-25T10:54:48+00:00"
+ "time": "2024-09-04T18:46:31+00:00"
},
{
"name": "nesbot/carbon",
@@ -5287,16 +5214,16 @@
},
{
"name": "nunomaduro/termwind",
- "version": "v2.0.1",
+ "version": "v2.1.0",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/termwind.git",
- "reference": "58c4c58cf23df7f498daeb97092e34f5259feb6a"
+ "reference": "e5f21eade88689536c0cdad4c3cd75f3ed26e01a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/58c4c58cf23df7f498daeb97092e34f5259feb6a",
- "reference": "58c4c58cf23df7f498daeb97092e34f5259feb6a",
+ "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/e5f21eade88689536c0cdad4c3cd75f3ed26e01a",
+ "reference": "e5f21eade88689536c0cdad4c3cd75f3ed26e01a",
"shasum": ""
},
"require": {
@@ -5306,11 +5233,11 @@
},
"require-dev": {
"ergebnis/phpstan-rules": "^2.2.0",
- "illuminate/console": "^11.0.0",
- "laravel/pint": "^1.14.0",
- "mockery/mockery": "^1.6.7",
- "pestphp/pest": "^2.34.1",
- "phpstan/phpstan": "^1.10.59",
+ "illuminate/console": "^11.1.1",
+ "laravel/pint": "^1.15.0",
+ "mockery/mockery": "^1.6.11",
+ "pestphp/pest": "^2.34.6",
+ "phpstan/phpstan": "^1.10.66",
"phpstan/phpstan-strict-rules": "^1.5.2",
"symfony/var-dumper": "^7.0.4",
"thecodingmachine/phpstan-strict-rules": "^1.0.0"
@@ -5355,7 +5282,7 @@
],
"support": {
"issues": "https://github.com/nunomaduro/termwind/issues",
- "source": "https://github.com/nunomaduro/termwind/tree/v2.0.1"
+ "source": "https://github.com/nunomaduro/termwind/tree/v2.1.0"
},
"funding": [
{
@@ -5371,20 +5298,20 @@
"type": "github"
}
],
- "time": "2024-03-06T16:17:14+00:00"
+ "time": "2024-09-05T15:25:50+00:00"
},
{
"name": "nyholm/psr7",
- "version": "1.8.1",
+ "version": "1.8.2",
"source": {
"type": "git",
"url": "https://github.com/Nyholm/psr7.git",
- "reference": "aa5fc277a4f5508013d571341ade0c3886d4d00e"
+ "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Nyholm/psr7/zipball/aa5fc277a4f5508013d571341ade0c3886d4d00e",
- "reference": "aa5fc277a4f5508013d571341ade0c3886d4d00e",
+ "url": "https://api.github.com/repos/Nyholm/psr7/zipball/a71f2b11690f4b24d099d6b16690a90ae14fc6f3",
+ "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3",
"shasum": ""
},
"require": {
@@ -5437,7 +5364,7 @@
],
"support": {
"issues": "https://github.com/Nyholm/psr7/issues",
- "source": "https://github.com/Nyholm/psr7/tree/1.8.1"
+ "source": "https://github.com/Nyholm/psr7/tree/1.8.2"
},
"funding": [
{
@@ -5449,28 +5376,28 @@
"type": "github"
}
],
- "time": "2023-11-13T09:31:12+00:00"
+ "time": "2024-09-09T07:06:30+00:00"
},
{
"name": "paragonie/constant_time_encoding",
- "version": "v2.7.0",
+ "version": "v3.0.0",
"source": {
"type": "git",
"url": "https://github.com/paragonie/constant_time_encoding.git",
- "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105"
+ "reference": "df1e7fde177501eee2037dd159cf04f5f301a512"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/52a0d99e69f56b9ec27ace92ba56897fe6993105",
- "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105",
+ "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/df1e7fde177501eee2037dd159cf04f5f301a512",
+ "reference": "df1e7fde177501eee2037dd159cf04f5f301a512",
"shasum": ""
},
"require": {
- "php": "^7|^8"
+ "php": "^8"
},
"require-dev": {
- "phpunit/phpunit": "^6|^7|^8|^9",
- "vimeo/psalm": "^1|^2|^3|^4"
+ "phpunit/phpunit": "^9",
+ "vimeo/psalm": "^4|^5"
},
"type": "library",
"autoload": {
@@ -5516,7 +5443,7 @@
"issues": "https://github.com/paragonie/constant_time_encoding/issues",
"source": "https://github.com/paragonie/constant_time_encoding"
},
- "time": "2024-05-08T12:18:48+00:00"
+ "time": "2024-05-08T12:36:18+00:00"
},
{
"name": "paragonie/random_compat",
@@ -6080,16 +6007,16 @@
},
{
"name": "phpstan/phpdoc-parser",
- "version": "1.30.0",
+ "version": "1.30.1",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "5ceb0e384997db59f38774bf79c2a6134252c08f"
+ "reference": "51b95ec8670af41009e2b2b56873bad96682413e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/5ceb0e384997db59f38774bf79c2a6134252c08f",
- "reference": "5ceb0e384997db59f38774bf79c2a6134252c08f",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/51b95ec8670af41009e2b2b56873bad96682413e",
+ "reference": "51b95ec8670af41009e2b2b56873bad96682413e",
"shasum": ""
},
"require": {
@@ -6121,22 +6048,22 @@
"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/1.30.0"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.30.1"
},
- "time": "2024-08-29T09:54:52+00:00"
+ "time": "2024-09-07T20:13:05+00:00"
},
{
"name": "phpstan/phpstan",
- "version": "1.12.0",
+ "version": "1.12.3",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
- "reference": "384af967d35b2162f69526c7276acadce534d0e1"
+ "reference": "0fcbf194ab63d8159bb70d9aa3e1350051632009"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/384af967d35b2162f69526c7276acadce534d0e1",
- "reference": "384af967d35b2162f69526c7276acadce534d0e1",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0fcbf194ab63d8159bb70d9aa3e1350051632009",
+ "reference": "0fcbf194ab63d8159bb70d9aa3e1350051632009",
"shasum": ""
},
"require": {
@@ -6181,7 +6108,7 @@
"type": "github"
}
],
- "time": "2024-08-27T09:18:05+00:00"
+ "time": "2024-09-09T08:10:35+00:00"
},
{
"name": "pion/laravel-chunk-upload",
@@ -6295,24 +6222,24 @@
},
{
"name": "pragmarx/google2fa",
- "version": "v8.0.1",
+ "version": "v8.0.3",
"source": {
"type": "git",
"url": "https://github.com/antonioribeiro/google2fa.git",
- "reference": "80c3d801b31fe165f8fe99ea085e0a37834e1be3"
+ "reference": "6f8d87ebd5afbf7790bde1ffc7579c7c705e0fad"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/80c3d801b31fe165f8fe99ea085e0a37834e1be3",
- "reference": "80c3d801b31fe165f8fe99ea085e0a37834e1be3",
+ "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/6f8d87ebd5afbf7790bde1ffc7579c7c705e0fad",
+ "reference": "6f8d87ebd5afbf7790bde1ffc7579c7c705e0fad",
"shasum": ""
},
"require": {
- "paragonie/constant_time_encoding": "^1.0|^2.0",
+ "paragonie/constant_time_encoding": "^1.0|^2.0|^3.0",
"php": "^7.1|^8.0"
},
"require-dev": {
- "phpstan/phpstan": "^0.12.18",
+ "phpstan/phpstan": "^1.9",
"phpunit/phpunit": "^7.5.15|^8.5|^9.0"
},
"type": "library",
@@ -6341,9 +6268,9 @@
],
"support": {
"issues": "https://github.com/antonioribeiro/google2fa/issues",
- "source": "https://github.com/antonioribeiro/google2fa/tree/v8.0.1"
+ "source": "https://github.com/antonioribeiro/google2fa/tree/v8.0.3"
},
- "time": "2022-06-13T21:57:56+00:00"
+ "time": "2024-09-05T11:56:40+00:00"
},
{
"name": "psr/cache",
@@ -6707,16 +6634,16 @@
},
{
"name": "psr/log",
- "version": "3.0.1",
+ "version": "3.0.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
- "reference": "79dff0b268932c640297f5208d6298f71855c03e"
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/79dff0b268932c640297f5208d6298f71855c03e",
- "reference": "79dff0b268932c640297f5208d6298f71855c03e",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
"shasum": ""
},
"require": {
@@ -6751,9 +6678,9 @@
"psr-3"
],
"support": {
- "source": "https://github.com/php-fig/log/tree/3.0.1"
+ "source": "https://github.com/php-fig/log/tree/3.0.2"
},
- "time": "2024-08-21T13:31:24+00:00"
+ "time": "2024-09-11T13:17:53+00:00"
},
{
"name": "psr/simple-cache",
@@ -7221,21 +7148,21 @@
},
{
"name": "rector/rector",
- "version": "1.2.4",
+ "version": "1.2.5",
"source": {
"type": "git",
"url": "https://github.com/rectorphp/rector.git",
- "reference": "42a4aa23b48b4cfc8ebfeac2b570364e27744381"
+ "reference": "e98aa793ca3fcd17e893cfaf9103ac049775d339"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/rectorphp/rector/zipball/42a4aa23b48b4cfc8ebfeac2b570364e27744381",
- "reference": "42a4aa23b48b4cfc8ebfeac2b570364e27744381",
+ "url": "https://api.github.com/repos/rectorphp/rector/zipball/e98aa793ca3fcd17e893cfaf9103ac049775d339",
+ "reference": "e98aa793ca3fcd17e893cfaf9103ac049775d339",
"shasum": ""
},
"require": {
"php": "^7.2|^8.0",
- "phpstan/phpstan": "^1.11.11"
+ "phpstan/phpstan": "^1.12.2"
},
"conflict": {
"rector/rector-doctrine": "*",
@@ -7268,7 +7195,7 @@
],
"support": {
"issues": "https://github.com/rectorphp/rector/issues",
- "source": "https://github.com/rectorphp/rector/tree/1.2.4"
+ "source": "https://github.com/rectorphp/rector/tree/1.2.5"
},
"funding": [
{
@@ -7276,7 +7203,7 @@
"type": "github"
}
],
- "time": "2024-08-23T09:03:01+00:00"
+ "time": "2024-09-08T17:43:24+00:00"
},
{
"name": "resend/resend-laravel",
@@ -9595,20 +9522,20 @@
},
{
"name": "symfony/polyfill-ctype",
- "version": "v1.30.0",
+ "version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "0424dff1c58f028c451efff2045f5d92410bd540"
+ "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540",
- "reference": "0424dff1c58f028c451efff2045f5d92410bd540",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
+ "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
},
"provide": {
"ext-ctype": "*"
@@ -9654,7 +9581,7 @@
"portable"
],
"support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0"
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0"
},
"funding": [
{
@@ -9670,24 +9597,24 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T15:07:36+00:00"
+ "time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-iconv",
- "version": "v1.30.0",
+ "version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-iconv.git",
- "reference": "c027e6a3c6aee334663ec21f5852e89738abc805"
+ "reference": "48becf00c920479ca2e910c22a5a39e5d47ca956"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/c027e6a3c6aee334663ec21f5852e89738abc805",
- "reference": "c027e6a3c6aee334663ec21f5852e89738abc805",
+ "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/48becf00c920479ca2e910c22a5a39e5d47ca956",
+ "reference": "48becf00c920479ca2e910c22a5a39e5d47ca956",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
},
"provide": {
"ext-iconv": "*"
@@ -9734,7 +9661,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-iconv/tree/v1.30.0"
+ "source": "https://github.com/symfony/polyfill-iconv/tree/v1.31.0"
},
"funding": [
{
@@ -9750,24 +9677,24 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T15:07:36+00:00"
+ "time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
- "version": "v1.30.0",
+ "version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a"
+ "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/64647a7c30b2283f5d49b874d84a18fc22054b7a",
- "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
+ "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
},
"suggest": {
"ext-intl": "For best performance"
@@ -9812,7 +9739,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.30.0"
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0"
},
"funding": [
{
@@ -9828,26 +9755,25 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T15:07:36+00:00"
+ "time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-intl-idn",
- "version": "v1.30.0",
+ "version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
- "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c"
+ "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a6e83bdeb3c84391d1dfe16f42e40727ce524a5c",
- "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773",
+ "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773",
"shasum": ""
},
"require": {
- "php": ">=7.1",
- "symfony/polyfill-intl-normalizer": "^1.10",
- "symfony/polyfill-php72": "^1.10"
+ "php": ">=7.2",
+ "symfony/polyfill-intl-normalizer": "^1.10"
},
"suggest": {
"ext-intl": "For best performance"
@@ -9896,7 +9822,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.30.0"
+ "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0"
},
"funding": [
{
@@ -9912,24 +9838,24 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T15:07:36+00:00"
+ "time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
- "version": "v1.30.0",
+ "version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
- "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb"
+ "reference": "3833d7255cc303546435cb650316bff708a1c75c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/a95281b0be0d9ab48050ebd988b967875cdb9fdb",
- "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c",
+ "reference": "3833d7255cc303546435cb650316bff708a1c75c",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
},
"suggest": {
"ext-intl": "For best performance"
@@ -9977,7 +9903,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.30.0"
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0"
},
"funding": [
{
@@ -9993,24 +9919,24 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T15:07:36+00:00"
+ "time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.30.0",
+ "version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c"
+ "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c",
- "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341",
+ "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
},
"provide": {
"ext-mbstring": "*"
@@ -10057,7 +9983,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0"
},
"funding": [
{
@@ -10073,97 +9999,24 @@
"type": "tidelift"
}
],
- "time": "2024-06-19T12:30:46+00:00"
- },
- {
- "name": "symfony/polyfill-php72",
- "version": "v1.30.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php72.git",
- "reference": "10112722600777e02d2745716b70c5db4ca70442"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/10112722600777e02d2745716b70c5db4ca70442",
- "reference": "10112722600777e02d2745716b70c5db4ca70442",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Php72\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php72/tree/v1.30.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-06-19T12:30:46+00:00"
+ "time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-php80",
- "version": "v1.30.0",
+ "version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "77fa7995ac1b21ab60769b7323d600a991a90433"
+ "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433",
- "reference": "77fa7995ac1b21ab60769b7323d600a991a90433",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
+ "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
},
"type": "library",
"extra": {
@@ -10210,7 +10063,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0"
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
},
"funding": [
{
@@ -10226,24 +10079,24 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T15:07:36+00:00"
+ "time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-php83",
- "version": "v1.30.0",
+ "version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php83.git",
- "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9"
+ "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9",
- "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9",
+ "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491",
+ "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
},
"type": "library",
"extra": {
@@ -10286,7 +10139,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php83/tree/v1.30.0"
+ "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0"
},
"funding": [
{
@@ -10302,24 +10155,24 @@
"type": "tidelift"
}
],
- "time": "2024-06-19T12:35:24+00:00"
+ "time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/polyfill-uuid",
- "version": "v1.30.0",
+ "version": "v1.31.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-uuid.git",
- "reference": "2ba1f33797470debcda07fe9dce20a0003df18e9"
+ "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/2ba1f33797470debcda07fe9dce20a0003df18e9",
- "reference": "2ba1f33797470debcda07fe9dce20a0003df18e9",
+ "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2",
+ "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
},
"provide": {
"ext-uuid": "*"
@@ -10365,7 +10218,7 @@
"uuid"
],
"support": {
- "source": "https://github.com/symfony/polyfill-uuid/tree/v1.30.0"
+ "source": "https://github.com/symfony/polyfill-uuid/tree/v1.31.0"
},
"funding": [
{
@@ -10381,7 +10234,7 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T15:07:36+00:00"
+ "time": "2024-09-09T11:45:10+00:00"
},
{
"name": "symfony/process",
@@ -12384,16 +12237,16 @@
},
{
"name": "laravel/pint",
- "version": "v1.17.2",
+ "version": "v1.17.3",
"source": {
"type": "git",
"url": "https://github.com/laravel/pint.git",
- "reference": "e8a88130a25e3f9d4d5785e6a1afca98268ab110"
+ "reference": "9d77be916e145864f10788bb94531d03e1f7b482"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/pint/zipball/e8a88130a25e3f9d4d5785e6a1afca98268ab110",
- "reference": "e8a88130a25e3f9d4d5785e6a1afca98268ab110",
+ "url": "https://api.github.com/repos/laravel/pint/zipball/9d77be916e145864f10788bb94531d03e1f7b482",
+ "reference": "9d77be916e145864f10788bb94531d03e1f7b482",
"shasum": ""
},
"require": {
@@ -12404,13 +12257,13 @@
"php": "^8.1.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^3.61.1",
- "illuminate/view": "^10.48.18",
+ "friendsofphp/php-cs-fixer": "^3.64.0",
+ "illuminate/view": "^10.48.20",
"larastan/larastan": "^2.9.8",
"laravel-zero/framework": "^10.4.0",
"mockery/mockery": "^1.6.12",
"nunomaduro/termwind": "^1.15.1",
- "pestphp/pest": "^2.35.0"
+ "pestphp/pest": "^2.35.1"
},
"bin": [
"builds/pint"
@@ -12446,7 +12299,7 @@
"issues": "https://github.com/laravel/pint/issues",
"source": "https://github.com/laravel/pint"
},
- "time": "2024-08-06T15:11:54+00:00"
+ "time": "2024-09-03T15:00:28+00:00"
},
{
"name": "mockery/mockery",
From 5244ef60bdb88897a8f6f8d14e6f0a8aea16880d Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Thu, 12 Sep 2024 10:29:45 +0200
Subject: [PATCH 28/35] chore: Update 'key' value of gitlab in Service.php to
use environment variable
---
app/Models/Service.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/Models/Service.php b/app/Models/Service.php
index 967e7d076..d8def6663 100644
--- a/app/Models/Service.php
+++ b/app/Models/Service.php
@@ -667,7 +667,7 @@ class Service extends BaseModel
}
$data = $data->merge([
'Root User' => [
- 'key' => 'N/A',
+ 'key' => 'GITLAB_ROOT_USER',
'value' => 'root',
'rules' => 'required',
'isPassword' => true,
From 4aeb8ff02b23de2773c8065d28ad975fdf8c2463 Mon Sep 17 00:00:00 2001
From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com>
Date: Thu, 12 Sep 2024 10:40:06 +0200
Subject: [PATCH 29/35] Fix: SSH Multiplexing on docker desktop on Windows
---
bootstrap/helpers/remoteProcess.php | 20 ++++++++++++++------
1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/bootstrap/helpers/remoteProcess.php b/bootstrap/helpers/remoteProcess.php
index f6cf9fbe5..9c66bd21c 100644
--- a/bootstrap/helpers/remoteProcess.php
+++ b/bootstrap/helpers/remoteProcess.php
@@ -98,12 +98,10 @@ function generateScpCommand(Server $server, string $source, string $dest)
$muxPersistTime = config('constants.ssh.mux_persist_time');
$scp_command = "timeout $timeout scp ";
- // Check if multiplexing is enabled
- $muxEnabled = config('constants.ssh.mux_enabled', true);
+ $muxEnabled = config('constants.ssh.mux_enabled', true) && config('coolify.is_windows_docker_desktop') == false;
// ray('SSH Multiplexing Enabled:', $muxEnabled)->blue();
if ($muxEnabled) {
- // Always use multiplexing when enabled
$muxSocket = "/var/www/html/storage/app/ssh/mux/{$server->muxFilename()}";
$scp_command .= "-o ControlMaster=auto -o ControlPath=$muxSocket -o ControlPersist={$muxPersistTime} ";
ensureMultiplexedConnection($server);
@@ -163,9 +161,7 @@ function generateSshCommand(Server $server, string $command)
$ssh_command = "timeout $timeout ssh ";
- // Check if multiplexing is enabled
- $muxEnabled = config('constants.ssh.mux_enabled', true);
- // ray('SSH Multiplexing Enabled:', $muxEnabled)->blue();
+ $muxEnabled = config('coolify.mux_enabled') && config('coolify.is_windows_docker_desktop') == false;
if ($muxEnabled) {
// Always use multiplexing when enabled
@@ -201,6 +197,10 @@ function generateSshCommand(Server $server, string $command)
function ensureMultiplexedConnection(Server $server)
{
+ if (!(config('coolify.mux_enabled') && config('coolify.is_windows_docker_desktop') == false)) {
+ return;
+ }
+
static $ensuredConnections = [];
if (isset($ensuredConnections[$server->id])) {
@@ -260,6 +260,10 @@ function ensureMultiplexedConnection(Server $server)
function shouldResetMultiplexedConnection(Server $server)
{
+ if (!(config('coolify.mux_enabled') && config('coolify.is_windows_docker_desktop') == false)) {
+ return false;
+ }
+
static $ensuredConnections = [];
if (! isset($ensuredConnections[$server->id])) {
@@ -275,6 +279,10 @@ function shouldResetMultiplexedConnection(Server $server)
function resetMultiplexedConnection(Server $server)
{
+ if (!(config('coolify.mux_enabled') && config('coolify.is_windows_docker_desktop') == false)) {
+ return;
+ }
+
static $ensuredConnections = [];
if (isset($ensuredConnections[$server->id])) {
From 90fd0ebf124152c9d8e97438b4b79d696e46891e Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Thu, 12 Sep 2024 10:51:14 +0200
Subject: [PATCH 30/35] chore: Update release version to 4.0.0-beta.335
---
config/sentry.php | 2 +-
config/version.php | 2 +-
versions.json | 6 +++---
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/config/sentry.php b/config/sentry.php
index 5a0bfdaac..253202507 100644
--- a/config/sentry.php
+++ b/config/sentry.php
@@ -7,7 +7,7 @@ return [
// The release version of your application
// Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD'))
- 'release' => '4.0.0-beta.334',
+ 'release' => '4.0.0-beta.335',
// When left empty or `null` the Laravel environment will be used
'environment' => config('app.env'),
diff --git a/config/version.php b/config/version.php
index f4b7ee9f7..c41d57f66 100644
--- a/config/version.php
+++ b/config/version.php
@@ -1,3 +1,3 @@
Date: Thu, 12 Sep 2024 12:07:50 +0200
Subject: [PATCH 31/35] fix: cloudflare tunnel with new multiplexing feature
---
.env.development.example | 2 +-
app/Livewire/Boarding/Index.php | 2 +-
app/Models/Server.php | 2 +-
bootstrap/helpers/proxy.php | 2 ++
bootstrap/helpers/remoteProcess.php | 17 ++++++++++++-----
config/constants.php | 3 ++-
config/coolify.php | 1 -
docker-compose.prod.yml | 1 +
docker-compose.windows.yml | 2 +-
9 files changed, 21 insertions(+), 11 deletions(-)
diff --git a/.env.development.example b/.env.development.example
index 511e3d5fd..3023a21a6 100644
--- a/.env.development.example
+++ b/.env.development.example
@@ -6,7 +6,7 @@ APP_KEY=
APP_URL=http://localhost
APP_PORT=8000
APP_DEBUG=true
-MUX_ENABLED=false
+SSH_MUX_ENABLED=false
# PostgreSQL Database Configuration
DB_DATABASE=coolify
diff --git a/app/Livewire/Boarding/Index.php b/app/Livewire/Boarding/Index.php
index 0bfcaf729..af05ad767 100644
--- a/app/Livewire/Boarding/Index.php
+++ b/app/Livewire/Boarding/Index.php
@@ -282,7 +282,7 @@ uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
public function validateServer()
{
try {
- config()->set('coolify.mux_enabled', false);
+ config()->set('constants.ssh.mux_enabled', false);
// EC2 does not have `uptime` command, lol
instant_remote_process(['ls /'], $this->createdServer, true);
diff --git a/app/Models/Server.php b/app/Models/Server.php
index 46536ed47..65d70083f 100644
--- a/app/Models/Server.php
+++ b/app/Models/Server.php
@@ -967,7 +967,7 @@ $schema://$host {
public function validateConnection()
{
- config()->set('coolify.mux_enabled', false);
+ config()->set('constants.ssh.mux_enabled', false);
$server = Server::find($this->id);
if (! $server) {
diff --git a/bootstrap/helpers/proxy.php b/bootstrap/helpers/proxy.php
index c4c15b8fe..127404d4b 100644
--- a/bootstrap/helpers/proxy.php
+++ b/bootstrap/helpers/proxy.php
@@ -137,6 +137,8 @@ function generate_default_proxy_configuration(Server $server)
'external' => true,
];
});
+ // TODO: This should not be null on new servers, but it is.
+ ray($proxy_type);
if ($proxy_type === ProxyTypes::TRAEFIK->value) {
$labels = [
'traefik.enable=true',
diff --git a/bootstrap/helpers/remoteProcess.php b/bootstrap/helpers/remoteProcess.php
index f6cf9fbe5..0e5e932cf 100644
--- a/bootstrap/helpers/remoteProcess.php
+++ b/bootstrap/helpers/remoteProcess.php
@@ -166,7 +166,6 @@ function generateSshCommand(Server $server, string $command)
// Check if multiplexing is enabled
$muxEnabled = config('constants.ssh.mux_enabled', true);
// ray('SSH Multiplexing Enabled:', $muxEnabled)->blue();
-
if ($muxEnabled) {
// Always use multiplexing when enabled
$muxSocket = "/var/www/html/storage/app/ssh/mux/{$server->muxFilename()}";
@@ -212,7 +211,11 @@ function ensureMultiplexedConnection(Server $server)
}
$muxSocket = "/var/www/html/storage/app/ssh/mux/{$server->muxFilename()}";
- $checkCommand = "ssh -O check -o ControlPath=$muxSocket {$server->user}@{$server->ip} 2>/dev/null";
+ $checkCommand = "ssh -O check -o ControlPath=$muxSocket ";
+ if (data_get($server, 'settings.is_cloudflare_tunnel')) {
+ $checkCommand .= '-o ProxyCommand="/usr/local/bin/cloudflared access ssh --hostname %h" ';
+ }
+ $checkCommand .= " {$server->user}@{$server->ip}";
$process = Process::run($checkCommand);
@@ -233,8 +236,12 @@ function ensureMultiplexedConnection(Server $server)
$serverInterval = config('constants.ssh.server_interval');
$muxPersistTime = config('constants.ssh.mux_persist_time');
- $establishCommand = "ssh -fNM -o ControlMaster=auto -o ControlPath=$muxSocket -o ControlPersist={$muxPersistTime} "
- ."-i {$privateKeyLocation} "
+ $establishCommand = "ssh -fNM -o ControlMaster=auto -o ControlPath=$muxSocket -o ControlPersist={$muxPersistTime} ";
+
+ if (data_get($server, 'settings.is_cloudflare_tunnel')) {
+ $establishCommand .= '-o ProxyCommand="/usr/local/bin/cloudflared access ssh --hostname %h" ';
+ }
+ $establishCommand .= "-i {$privateKeyLocation} "
.'-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null '
.'-o PasswordAuthentication=no '
."-o ConnectTimeout=$connectionTimeout "
@@ -305,7 +312,7 @@ function instant_remote_process(Collection|array $command, Server $server, bool
$end_time = microtime(true);
$execution_time = ($end_time - $start_time) * 1000; // Convert to milliseconds
- // ray('SSH command execution time:', $execution_time.' ms')->orange();
+ ray('SSH command execution time:', $execution_time.' ms')->orange();
$output = trim($process->output());
$exitCode = $process->exitCode();
diff --git a/config/constants.php b/config/constants.php
index c223e6418..906ef3ba2 100644
--- a/config/constants.php
+++ b/config/constants.php
@@ -6,7 +6,8 @@ return [
'contact' => 'https://coolify.io/docs/contact',
],
'ssh' => [
- 'mux_enabled' => env('SSH_MUX_ENABLED', true),
+ // Using MUX
+ 'mux_enabled' => env('MUX_ENABLED', env('SSH_MUX_ENABLED', true), true),
'mux_persist_time' => env('SSH_MUX_PERSIST_TIME', '1h'),
'connection_timeout' => 10,
'server_interval' => 20,
diff --git a/config/coolify.php b/config/coolify.php
index 6e284fe9e..f9878fff7 100644
--- a/config/coolify.php
+++ b/config/coolify.php
@@ -7,7 +7,6 @@ return [
'self_hosted' => env('SELF_HOSTED', true),
'waitlist' => env('WAITLIST', false),
'license_url' => 'https://licenses.coollabs.io',
- 'mux_enabled' => env('MUX_ENABLED', true),
'dev_webhook' => env('SERVEO_URL'),
'is_windows_docker_desktop' => env('IS_WINDOWS_DOCKER_DESKTOP', false),
'base_config_path' => env('BASE_CONFIG_PATH', '/data/coolify'),
diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml
index b26cd5746..65a708acb 100644
--- a/docker-compose.prod.yml
+++ b/docker-compose.prod.yml
@@ -48,6 +48,7 @@ services:
- PUSHER_APP_SECRET
- AUTOUPDATE
- SELF_HOSTED
+ - SSH_MUX_ENABLED
- SSH_MUX_PERSIST_TIME
- FEEDBACK_DISCORD_WEBHOOK
- WAITLIST
diff --git a/docker-compose.windows.yml b/docker-compose.windows.yml
index a1ee1aeea..3f45b62cd 100644
--- a/docker-compose.windows.yml
+++ b/docker-compose.windows.yml
@@ -45,7 +45,7 @@ services:
- PUSHER_APP_SECRET
- AUTOUPDATE=true
- SELF_HOSTED=true
- - MUX_ENABLED=false
+ - SSH_MUX_ENABLED=false
- IS_WINDOWS_DOCKER_DESKTOP=true
ports:
- "${APP_PORT:-8000}:80"
From 16e472da19e8a0ff0146e0aa90eff1b43c856ba6 Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Thu, 12 Sep 2024 12:16:20 +0200
Subject: [PATCH 32/35] chore: Update constants.ssh.mux_enabled in
remoteProcess.php
---
bootstrap/helpers/remoteProcess.php | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/bootstrap/helpers/remoteProcess.php b/bootstrap/helpers/remoteProcess.php
index 9c147639a..3b63a5b97 100644
--- a/bootstrap/helpers/remoteProcess.php
+++ b/bootstrap/helpers/remoteProcess.php
@@ -197,7 +197,7 @@ function generateSshCommand(Server $server, string $command)
function ensureMultiplexedConnection(Server $server)
{
- if (!(config('coolify.mux_enabled') && config('coolify.is_windows_docker_desktop') == false)) {
+ if (! (config('constants.ssh.mux_enabled') && config('coolify.is_windows_docker_desktop') == false)) {
return;
}
@@ -268,7 +268,7 @@ function ensureMultiplexedConnection(Server $server)
function shouldResetMultiplexedConnection(Server $server)
{
- if (!(config('coolify.mux_enabled') && config('coolify.is_windows_docker_desktop') == false)) {
+ if (! (config('constants.ssh.mux_enabled') && config('coolify.is_windows_docker_desktop') == false)) {
return false;
}
@@ -287,7 +287,7 @@ function shouldResetMultiplexedConnection(Server $server)
function resetMultiplexedConnection(Server $server)
{
- if (!(config('coolify.mux_enabled') && config('coolify.is_windows_docker_desktop') == false)) {
+ if (! (config('constants.ssh.mux_enabled') && config('coolify.is_windows_docker_desktop') == false)) {
return;
}
From 664a990c60b96ebebf863a35520e7ee5193a6e65 Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Thu, 12 Sep 2024 12:34:09 +0200
Subject: [PATCH 33/35] chore: Update listeners and proxy settings in server
form and new server components
---
app/Livewire/Server/Form.php | 6 +++++-
app/Livewire/Server/New/ByIp.php | 12 +++++-------
app/Livewire/Server/Show.php | 8 +++++++-
3 files changed, 17 insertions(+), 9 deletions(-)
diff --git a/app/Livewire/Server/Form.php b/app/Livewire/Server/Form.php
index 8a4efb21d..3b3747a81 100644
--- a/app/Livewire/Server/Form.php
+++ b/app/Livewire/Server/Form.php
@@ -24,7 +24,11 @@ class Form extends Component
public $timezones;
- protected $listeners = ['serverInstalled', 'revalidate' => '$refresh'];
+ protected $listeners = [
+ 'serverInstalled',
+ 'refreshServerShow' => 'serverInstalled',
+ 'revalidate' => '$refresh',
+ ];
protected $rules = [
'server.name' => 'required',
diff --git a/app/Livewire/Server/New/ByIp.php b/app/Livewire/Server/New/ByIp.php
index 5f69835d7..f80152435 100644
--- a/app/Livewire/Server/New/ByIp.php
+++ b/app/Livewire/Server/New/ByIp.php
@@ -2,10 +2,10 @@
namespace App\Livewire\Server\New;
-use App\Enums\ProxyStatus;
use App\Enums\ProxyTypes;
use App\Models\Server;
use App\Models\Team;
+use Illuminate\Support\Collection;
use Livewire\Component;
class ByIp extends Component
@@ -40,7 +40,7 @@ class ByIp extends Component
public bool $is_build_server = false;
- public $swarm_managers = [];
+ public Collection $swarm_managers;
protected $rules = [
'name' => 'required|string',
@@ -102,11 +102,6 @@ class ByIp extends Component
'port' => $this->port,
'team_id' => currentTeam()->id,
'private_key_id' => $this->private_key_id,
- 'proxy' => [
- // set default proxy type to traefik v2
- 'type' => ProxyTypes::TRAEFIK->value,
- 'status' => ProxyStatus::EXITED->value,
- ],
];
if ($this->is_swarm_worker) {
$payload['swarm_cluster'] = $this->selected_swarm_cluster;
@@ -115,6 +110,9 @@ class ByIp extends Component
data_forget($payload, 'proxy');
}
$server = Server::create($payload);
+ $server->proxy->set('status', 'exited');
+ $server->proxy->set('type', ProxyTypes::TRAEFIK->value);
+ $server->save();
if ($this->is_build_server) {
$this->is_swarm_manager = false;
$this->is_swarm_worker = false;
diff --git a/app/Livewire/Server/Show.php b/app/Livewire/Server/Show.php
index 0751b186e..a5e94a19a 100644
--- a/app/Livewire/Server/Show.php
+++ b/app/Livewire/Server/Show.php
@@ -14,7 +14,7 @@ class Show extends Component
public $parameters = [];
- protected $listeners = ['refreshServerShow' => '$refresh'];
+ protected $listeners = ['refreshServerShow'];
public function mount()
{
@@ -29,6 +29,12 @@ class Show extends Component
}
}
+ public function refreshServerShow()
+ {
+ $this->server->refresh();
+ $this->dispatch('$refresh');
+ }
+
public function submit()
{
$this->dispatch('serverRefresh', false);
From b5a56892fdcf6f3b4b4224a2d4d9f77523003686 Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Thu, 12 Sep 2024 12:39:34 +0200
Subject: [PATCH 34/35] chore: Remove unnecessary null check for proxy_type in
generate_default_proxy_configuration
---
bootstrap/helpers/proxy.php | 2 --
1 file changed, 2 deletions(-)
diff --git a/bootstrap/helpers/proxy.php b/bootstrap/helpers/proxy.php
index 127404d4b..c4c15b8fe 100644
--- a/bootstrap/helpers/proxy.php
+++ b/bootstrap/helpers/proxy.php
@@ -137,8 +137,6 @@ function generate_default_proxy_configuration(Server $server)
'external' => true,
];
});
- // TODO: This should not be null on new servers, but it is.
- ray($proxy_type);
if ($proxy_type === ProxyTypes::TRAEFIK->value) {
$labels = [
'traefik.enable=true',
From 8862b50c9896f1d74fd3d1074758f9ec44ebe73c Mon Sep 17 00:00:00 2001
From: Andras Bacsai
Date: Thu, 12 Sep 2024 12:42:47 +0200
Subject: [PATCH 35/35] chore: Remove unnecessary SSH command execution time
logging
---
bootstrap/helpers/remoteProcess.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/bootstrap/helpers/remoteProcess.php b/bootstrap/helpers/remoteProcess.php
index 3b63a5b97..4ba378e67 100644
--- a/bootstrap/helpers/remoteProcess.php
+++ b/bootstrap/helpers/remoteProcess.php
@@ -321,7 +321,7 @@ function instant_remote_process(Collection|array $command, Server $server, bool
$end_time = microtime(true);
$execution_time = ($end_time - $start_time) * 1000; // Convert to milliseconds
- ray('SSH command execution time:', $execution_time.' ms')->orange();
+ // ray('SSH command execution time:', $execution_time.' ms')->orange();
$output = trim($process->output());
$exitCode = $process->exitCode();