diff --git a/app/Jobs/ApplicationDeploymentJob.php b/app/Jobs/ApplicationDeploymentJob.php
index 84fd6efcc0..ced01c43c1 100644
--- a/app/Jobs/ApplicationDeploymentJob.php
+++ b/app/Jobs/ApplicationDeploymentJob.php
@@ -767,6 +767,9 @@ private function save_environment_variables()
$envs->push("SOURCE_COMMIT=unknown");
}
}
+ $envs = $envs->sort(function ($a, $b) {
+ return strpos($a, '$') === false ? -1 : 1;
+ });
}
if ($envs->isEmpty()) {
@@ -791,6 +794,14 @@ private function save_environment_variables()
"echo '{$this->saved_outputs->get('dotenv')->value()}' | tee $this->configuration_dir/.env > /dev/null"
]
);
+ } else {
+ $this->execute_remote_command(
+ [
+ "command" => "rm -f $this->configuration_dir/.env",
+ "hidden" => true,
+ "ignore_errors" => true
+ ]
+ );
}
$envs_base64 = base64_encode($envs->implode("\n"));
$this->execute_remote_command(
diff --git a/app/Livewire/Project/Service/StackForm.php b/app/Livewire/Project/Service/StackForm.php
index dee85ec543..03bf99245e 100644
--- a/app/Livewire/Project/Service/StackForm.php
+++ b/app/Livewire/Project/Service/StackForm.php
@@ -42,7 +42,7 @@ public function mount()
$this->validationAttributes["fields.$key.value"] = $fieldKey;
}
}
- $this->fields = $this->fields->sort();
+ $this->fields = $this->fields->sortDesc();
}
public function saveCompose($raw)
{
diff --git a/app/Models/Service.php b/app/Models/Service.php
index 49939ee8b1..5de1a97454 100644
--- a/app/Models/Service.php
+++ b/app/Models/Service.php
@@ -150,6 +150,29 @@ public function extraFields()
foreach ($applications as $application) {
$image = str($application->image)->before(':')->value();
switch ($image) {
+ case str($image)?->contains('tolgee'):
+ $data = collect([]);
+ $admin_password = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_TOLGEE')->first();
+ $data = $data->merge([
+ 'Admin User' => [
+ 'key' => 'TOLGEE_AUTHENTICATION_INITIAL_USERNAME',
+ 'value' => 'admin',
+ 'readonly' => true,
+ 'rules' => 'required',
+ ],
+ ]);
+ if ($admin_password) {
+ $data = $data->merge([
+ 'Admin Password' => [
+ 'key' => 'SERVICE_PASSWORD_TOLGEE',
+ 'value' => data_get($admin_password, 'value'),
+ 'rules' => 'required',
+ 'isPassword' => true,
+ ],
+ ]);
+ }
+ $fields->put('Tolgee', $data);
+ break;
case str($image)?->contains('logto'):
$data = collect([]);
$logto_endpoint = $this->environment_variables()->where('key', 'LOGTO_ENDPOINT')->first();
diff --git a/bootstrap/helpers/remoteProcess.php b/bootstrap/helpers/remoteProcess.php
index 98255de769..85533550ba 100644
--- a/bootstrap/helpers/remoteProcess.php
+++ b/bootstrap/helpers/remoteProcess.php
@@ -35,7 +35,6 @@ function remote_process(
if ($server->isNonRoot()) {
$command = parseCommandsByLineForSudo(collect($command), $server);
}
- ray($command);
$command_string = implode("\n", $command);
if (auth()->user()) {
$teams = auth()->user()->teams->pluck('id');
diff --git a/config/sentry.php b/config/sentry.php
index 9c93ecb67c..a1d034f960 100644
--- a/config/sentry.php
+++ b/config/sentry.php
@@ -7,7 +7,7 @@
// 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.259',
+ 'release' => '4.0.0-beta.260',
// 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 bcab84b3a5..ebefe1d034 100644
--- a/config/version.php
+++ b/config/version.php
@@ -1,3 +1,3 @@
@foreach ($fields as $serviceName => $field)
+
{{ data_get($field, 'serviceName') }}{{ data_get($field, 'name') }}
@endforeach
diff --git a/templates/compose/tolgee.yaml b/templates/compose/tolgee.yaml
new file mode 100644
index 0000000000..6e6302526b
--- /dev/null
+++ b/templates/compose/tolgee.yaml
@@ -0,0 +1,42 @@
+# documentation: https://tolgee.io/
+# slogan: Tolgee is a localization management platform for developers and translators.
+# tags: localization,translation,management,platform
+# logo: svgs/tolgee.svg
+# port: 8080
+
+services:
+ tolgee:
+ image: tolgee/tolgee
+ environment:
+ - SERVICE_FQDN_TOLGEE_8080
+ - TOLGEE_AUTHENTICATION_ENABLED=true
+ - TOLGEE_AUTHENTICATION_INITIAL_PASSWORD=$SERVICE_PASSWORD_TOLGEE
+ - TOLGEE_AUTHENTICATION_INITIAL_USERNAME=admin
+ - TOLGEE_AUTHENTICATION_JWT_SECRET=$SERVICE_PASSWORD_JWT
+ - TOLGEE_POSTGRES_AUTOSTART_ENABLED=false
+ - SPRING_DATASOURCE_URL=jdbc:postgresql://postgresql:5432/${POSTGRES_DB:-tolgee}
+ - SPRING_DATASOURCE_USERNAME=${SERVICE_USER_POSTGRESQL}
+ - SPRING_DATASOURCE_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL}
+ volumes:
+ - tolgee-data:/data
+ healthcheck:
+ test: ["CMD", "wget", "-q", "--spider", "http://localhost:8080"]
+ interval: 5s
+ timeout: 20s
+ retries: 10
+ depends_on:
+ postgresql:
+ condition: service_healthy
+ postgresql:
+ image: postgres:16-alpine
+ volumes:
+ - tolgee-postgresql-data:/var/lib/postgresql/data
+ environment:
+ - POSTGRES_USER=${SERVICE_USER_POSTGRESQL}
+ - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL}
+ - POSTGRES_DB=${POSTGRESQL_DATABASE:-tolgee}
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
+ interval: 5s
+ timeout: 20s
+ retries: 10
diff --git a/templates/service-templates.json b/templates/service-templates.json
index 7c25dbda4a..725d4dca86 100644
--- a/templates/service-templates.json
+++ b/templates/service-templates.json
@@ -867,6 +867,20 @@
"minversion": "0.0.0",
"port": "8384"
},
+ "tolgee": {
+ "documentation": "https:\/\/tolgee.io\/",
+ "slogan": "Tolgee is a localization management platform for developers and translators.",
+ "compose": "c2VydmljZXM6CiAgdG9sZ2VlOgogICAgaW1hZ2U6IHRvbGdlZS90b2xnZWUKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9UT0xHRUVfODA4MAogICAgICAtIFRPTEdFRV9BVVRIRU5USUNBVElPTl9FTkFCTEVEPXRydWUKICAgICAgLSBUT0xHRUVfQVVUSEVOVElDQVRJT05fSU5JVElBTF9QQVNTV09SRD0kU0VSVklDRV9QQVNTV09SRF9UT0xHRUUKICAgICAgLSBUT0xHRUVfQVVUSEVOVElDQVRJT05fSU5JVElBTF9VU0VSTkFNRT1hZG1pbgogICAgICAtIFRPTEdFRV9BVVRIRU5USUNBVElPTl9KV1RfU0VDUkVUPSRTRVJWSUNFX1BBU1NXT1JEX0pXVAogICAgICAtIFRPTEdFRV9QT1NUR1JFU19BVVRPU1RBUlRfRU5BQkxFRD1mYWxzZQogICAgICAtICdTUFJJTkdfREFUQVNPVVJDRV9VUkw9amRiYzpwb3N0Z3Jlc3FsOi8vcG9zdGdyZXNxbDo1NDMyLyR7UE9TVEdSRVNfREI6LXRvbGdlZX0nCiAgICAgIC0gJ1NQUklOR19EQVRBU09VUkNFX1VTRVJOQU1FPSR7U0VSVklDRV9VU0VSX1BPU1RHUkVTUUx9JwogICAgICAtICdTUFJJTkdfREFUQVNPVVJDRV9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVNRTH0nCiAgICB2b2x1bWVzOgogICAgICAtICd0b2xnZWUtZGF0YTovZGF0YScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSB3Z2V0CiAgICAgICAgLSAnLXEnCiAgICAgICAgLSAnLS1zcGlkZXInCiAgICAgICAgLSAnaHR0cDovL2xvY2FsaG9zdDo4MDgwJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCiAgICBkZXBlbmRzX29uOgogICAgICBwb3N0Z3Jlc3FsOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgcG9zdGdyZXNxbDoKICAgIGltYWdlOiAncG9zdGdyZXM6MTYtYWxwaW5lJwogICAgdm9sdW1lczoKICAgICAgLSAndG9sZ2VlLXBvc3RncmVzcWwtZGF0YTovdmFyL2xpYi9wb3N0Z3Jlc3FsL2RhdGEnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnUE9TVEdSRVNfVVNFUj0ke1NFUlZJQ0VfVVNFUl9QT1NUR1JFU1FMfScKICAgICAgLSAnUE9TVEdSRVNfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTUUx9JwogICAgICAtICdQT1NUR1JFU19EQj0ke1BPU1RHUkVTUUxfREFUQUJBU0U6LXRvbGdlZX0nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ3BnX2lzcmVhZHkgLVUgJCR7UE9TVEdSRVNfVVNFUn0gLWQgJCR7UE9TVEdSRVNfREJ9JwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCg==",
+ "tags": [
+ "localization",
+ "translation",
+ "management",
+ "platform"
+ ],
+ "logo": "svgs\/tolgee.svg",
+ "minversion": "0.0.0",
+ "port": "8080"
+ },
"trigger-with-external-database": {
"documentation": "https:\/\/trigger.dev",
"slogan": "The open source Background Jobs framework for TypeScript",
diff --git a/versions.json b/versions.json
index 6926bce300..9b09d22b8b 100644
--- a/versions.json
+++ b/versions.json
@@ -1,7 +1,7 @@
{
"coolify": {
"v4": {
- "version": "4.0.0-beta.259"
+ "version": "4.0.0-beta.260"
}
}
}