From f780d7429c888eb3848e38f4c6c68186e82c1f1c Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Fri, 30 Oct 2026 18:16:47 +0100 Subject: [PATCH 1/2] feat(database): bump the SQLite image to 3.54.1-v0.2.0 --- bootstrap/helpers/databases.php | 2 +- ...mage_default_from_standalone_sqlites_table.php | 15 +++++++++++++++ tests/Feature/ModelFillableCreationTest.php | 2 +- tests/Feature/MultiServerApplicationTest.php | 1 + .../SqliteConnectApplicationResourceTeamTest.php | 1 + tests/Feature/SqliteConnectApplicationTest.php | 1 + tests/Feature/StandaloneSqliteTest.php | 2 +- tests/Feature/StorageAndServiceAuditTest.php | 1 + .../ServerTransferExporterImporterTest.php | 1 + 9 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 database/migrations/2026_10_30_171359_drop_image_default_from_standalone_sqlites_table.php diff --git a/bootstrap/helpers/databases.php b/bootstrap/helpers/databases.php index 78632b762e..dba148933f 100644 --- a/bootstrap/helpers/databases.php +++ b/bootstrap/helpers/databases.php @@ -190,7 +190,7 @@ function create_standalone_sqlite($environment_id, StandaloneDocker|SwarmDocker $database = new StandaloneSqlite; $database->uuid = new_public_id(); $database->name = 'sqlite-database-'.$database->uuid; - $database->image = 'peakimages/sqlite:3.53.4-v0.1.0'; + $database->image = 'peakimages/sqlite:3.54.1-v0.2.0'; $database->environment_id = $environment_id; $database->destination_id = $destination->id; $database->destination_type = $destination->getMorphClass(); diff --git a/database/migrations/2026_10_30_171359_drop_image_default_from_standalone_sqlites_table.php b/database/migrations/2026_10_30_171359_drop_image_default_from_standalone_sqlites_table.php new file mode 100644 index 0000000000..5d1ad7b5fd --- /dev/null +++ b/database/migrations/2026_10_30_171359_drop_image_default_from_standalone_sqlites_table.php @@ -0,0 +1,15 @@ +string('image')->change(); + }); + } +}; diff --git a/tests/Feature/ModelFillableCreationTest.php b/tests/Feature/ModelFillableCreationTest.php index 2590d44c71..9c71382e25 100644 --- a/tests/Feature/ModelFillableCreationTest.php +++ b/tests/Feature/ModelFillableCreationTest.php @@ -849,7 +849,7 @@ it('creates StandaloneSqlite with all fillable attributes', function () { 'is_log_drain_enabled' => false, 'is_include_timestamps' => false, 'status' => 'running', - 'image' => 'peakimages/sqlite:3.53.4-v0.1.0', + 'image' => 'peakimages/sqlite:3.54.1-v0.2.0', 'limits_memory' => '1g', 'limits_memory_swap' => '2g', 'limits_memory_swappiness' => 30, diff --git a/tests/Feature/MultiServerApplicationTest.php b/tests/Feature/MultiServerApplicationTest.php index 8f47010ac3..12ded0d222 100644 --- a/tests/Feature/MultiServerApplicationTest.php +++ b/tests/Feature/MultiServerApplicationTest.php @@ -619,6 +619,7 @@ describe('adding a volume to an application with additional servers', function ( test('connecting a SQLite database rejects the volume', function () { $sqlite = StandaloneSqlite::create([ 'name' => 'app-sqlite', + 'image' => 'peakimages/sqlite:3.54.1-v0.2.0', 'environment_id' => $this->application->environment_id, 'destination_id' => $this->mainDestination->id, 'destination_type' => $this->mainDestination->getMorphClass(), diff --git a/tests/Feature/SqliteConnectApplicationResourceTeamTest.php b/tests/Feature/SqliteConnectApplicationResourceTeamTest.php index c30cdbc597..ec19233810 100644 --- a/tests/Feature/SqliteConnectApplicationResourceTeamTest.php +++ b/tests/Feature/SqliteConnectApplicationResourceTeamTest.php @@ -37,6 +37,7 @@ beforeEach(function () { $this->sqlite = StandaloneSqlite::create([ 'name' => 'app-sqlite', + 'image' => 'peakimages/sqlite:3.54.1-v0.2.0', 'environment_id' => sqliteResourceTeamEnvironment($this->resourceTeam)->id, 'destination_id' => $this->destination->id, 'destination_type' => $this->destination->getMorphClass(), diff --git a/tests/Feature/SqliteConnectApplicationTest.php b/tests/Feature/SqliteConnectApplicationTest.php index 3cdfd40de0..26dec9da19 100644 --- a/tests/Feature/SqliteConnectApplicationTest.php +++ b/tests/Feature/SqliteConnectApplicationTest.php @@ -63,6 +63,7 @@ beforeEach(function () { $this->sqlite = StandaloneSqlite::create([ 'name' => 'app-sqlite', + 'image' => 'peakimages/sqlite:3.54.1-v0.2.0', 'environment_id' => $this->environment->id, 'destination_id' => $this->destination->id, 'destination_type' => $this->destination->getMorphClass(), diff --git a/tests/Feature/StandaloneSqliteTest.php b/tests/Feature/StandaloneSqliteTest.php index db0baa3286..15c47f9344 100644 --- a/tests/Feature/StandaloneSqliteTest.php +++ b/tests/Feature/StandaloneSqliteTest.php @@ -40,7 +40,7 @@ function sqliteApiHeaders(): array } it('creates the data volume and restores into the first configured file', function () { - expect($this->database->image)->toBe('peakimages/sqlite:3.53.4-v0.1.0') + expect($this->database->image)->toBe('peakimages/sqlite:3.54.1-v0.2.0') ->and($this->database->databaseFilePath())->toBe('/var/lib/sqlite/app.db') ->and($this->database->persistentStorages()->first()->mount_path)->toBe('/var/lib/sqlite'); }); diff --git a/tests/Feature/StorageAndServiceAuditTest.php b/tests/Feature/StorageAndServiceAuditTest.php index 63fbfbc086..57a56b94b0 100644 --- a/tests/Feature/StorageAndServiceAuditTest.php +++ b/tests/Feature/StorageAndServiceAuditTest.php @@ -298,6 +298,7 @@ test('connecting and unlinking a sqlite volume records application storage event $this->server->settings()->update(['is_reachable' => true, 'is_usable' => true]); $sqlite = StandaloneSqlite::create([ 'name' => 'app-sqlite', + 'image' => 'peakimages/sqlite:3.54.1-v0.2.0', 'environment_id' => $this->environment->id, 'destination_id' => $this->destination->id, 'destination_type' => $this->destination->getMorphClass(), diff --git a/tests/Unit/ServerTransfer/ServerTransferExporterImporterTest.php b/tests/Unit/ServerTransfer/ServerTransferExporterImporterTest.php index eafb3212ff..34e5e03606 100644 --- a/tests/Unit/ServerTransfer/ServerTransferExporterImporterTest.php +++ b/tests/Unit/ServerTransfer/ServerTransferExporterImporterTest.php @@ -1219,6 +1219,7 @@ test('transfer keeps whether a volume ignores the Compose driver options', funct test('transfer keeps the link between an application volume and its sqlite database', function () { $sqlite = StandaloneSqlite::create([ 'name' => 'app-sqlite', + 'image' => 'peakimages/sqlite:3.54.1-v0.2.0', 'environment_id' => $this->environment->id, 'destination_id' => $this->destination->id, 'destination_type' => $this->destination->getMorphClass(), From 3665482f774ab0cdee8c7fe64af563983e6e360b Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Fri, 30 Oct 2026 18:16:51 +0100 Subject: [PATCH 2/2] feat(database): replace the SQLite uid note with a bind mount warning - 3.54.1-v0.2.0 lets any uid write the databases, so the application no longer has to run as 65532 or root for improved compatibility, however the SQLite files are now writable by every user, so a bind mount instead of a docker volume mount opens them to every user on the host --- .../project/database/sqlite/connect-application.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/livewire/project/database/sqlite/connect-application.blade.php b/resources/views/livewire/project/database/sqlite/connect-application.blade.php index ac1ffb75d4..2969d15e62 100644 --- a/resources/views/livewire/project/database/sqlite/connect-application.blade.php +++ b/resources/views/livewire/project/database/sqlite/connect-application.blade.php @@ -1,7 +1,7 @@ {{-- Rendered inside the General form, so no
here: the button is type=button and Enter is handled explicitly. --}}
+ description="Mount the data volume of this database into an application on the same server. Keep the data in a Docker volume as the database files are writable by every user, so with a bind mount every user on the host can read and change them."> @if ($this->connections->isNotEmpty() || $this->composeConnections->isNotEmpty())
@foreach ($this->connections as $connection)