From a1d09ad5744984ffc8d7e07fcb1636cad9ccbed9 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Mon, 19 Feb 2024 13:39:05 +0100 Subject: [PATCH 01/26] Update version numbers to 4.0.0-beta.222 --- config/sentry.php | 2 +- config/version.php | 2 +- versions.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/sentry.php b/config/sentry.php index c974623b0..f537dc4d2 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.221', + 'release' => '4.0.0-beta.222', // 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 c67555702..7fca7b055 100644 --- a/config/version.php +++ b/config/version.php @@ -1,3 +1,3 @@ Date: Tue, 20 Feb 2024 17:16:43 +0800 Subject: [PATCH 02/26] fix: connections being stuck and not processed until proxy restarts --- bootstrap/helpers/proxy.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bootstrap/helpers/proxy.php b/bootstrap/helpers/proxy.php index 19403a505..0701f13b2 100644 --- a/bootstrap/helpers/proxy.php +++ b/bootstrap/helpers/proxy.php @@ -141,6 +141,8 @@ function generate_default_proxy_configuration(Server $server) "--entrypoints.https.address=:443", "--entrypoints.http.http.encodequerysemicolons=true", "--entrypoints.https.http.encodequerysemicolons=true", + "--entryPoints.http.http2.maxConcurrentStreams=50", + "--entryPoints.https.http2.maxConcurrentStreams=50", "--providers.docker.exposedbydefault=false", "--providers.file.directory=/traefik/dynamic/", "--providers.file.watch=true", From f81b676abee31ff4d5b01e753e95e51944c4cb2d Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Tue, 20 Feb 2024 15:07:12 +0100 Subject: [PATCH 03/26] ui: updates --- app/Console/Commands/ServicesGenerate.php | 5 + app/Livewire/Project/New/Select.php | 5 +- app/Livewire/Source/Github/Change.php | 35 +++ app/View/Components/ResourceView.php | 30 +++ public/svgs/appsmith.svg | 19 ++ public/svgs/appwrite.svg | 1 + public/svgs/babybuddy.png | Bin 0 -> 27699 bytes public/svgs/code-server.svg | 15 ++ public/svgs/directus.svg | 31 +++ public/svgs/docker-registry.png | Bin 0 -> 7191 bytes public/svgs/dokuwiki.png | Bin 0 -> 3744 bytes public/svgs/duplicati.webp | Bin 0 -> 3780 bytes public/svgs/emby.png | Bin 0 -> 869641 bytes public/svgs/fider.svg | 1 + public/svgs/filebrowser.svg | 147 ++++++++++++ public/svgs/formbricks.png | Bin 0 -> 22089 bytes public/svgs/ghost.svg | 9 + public/svgs/gitea.svg | 31 +++ public/svgs/glitchtip.png | Bin 0 -> 16211 bytes public/svgs/grafana.svg | 1 + public/svgs/grocy.svg | 21 ++ .../views/components/resource-view.blade.php | 23 ++ .../livewire/project/new/select.blade.php | 221 ++++++++---------- .../livewire/source/github/change.blade.php | 1 + templates/compose/appsmith.yaml | 3 +- templates/compose/appwrite.yaml | 5 +- templates/compose/babybuddy.yaml | 3 +- templates/compose/code-server.yaml | 5 +- templates/compose/dashboard.yaml | 2 +- .../compose/directus-with-postgresql.yaml | 5 +- templates/compose/directus.yaml | 6 +- templates/compose/docker-registry.yaml | 1 + templates/compose/dokuwiki.yaml | 5 +- templates/compose/duplicati.yaml | 5 +- templates/compose/emby.yaml | 3 +- templates/compose/embystat.yaml | 4 +- templates/compose/fider.yaml | 5 +- templates/compose/filebrowser.yaml | 5 +- templates/compose/formbricks.yaml | 3 +- templates/compose/ghost.yaml | 5 +- templates/compose/gitea-with-mariadb.yaml | 3 +- templates/compose/gitea-with-mysql.yaml | 3 +- templates/compose/gitea-with-postgresql.yaml | 3 +- templates/compose/gitea.yaml | 1 + templates/compose/glitchtip.yaml | 1 + .../compose/grafana-with-postgresql.yaml | 1 + templates/compose/grafana.yaml | 1 + templates/compose/grocy.yaml | 3 +- templates/compose/syncthing.yaml | 3 +- templates/service-templates.json | 220 ++++++++++------- 50 files changed, 662 insertions(+), 238 deletions(-) create mode 100644 app/View/Components/ResourceView.php create mode 100644 public/svgs/appsmith.svg create mode 100644 public/svgs/appwrite.svg create mode 100644 public/svgs/babybuddy.png create mode 100644 public/svgs/code-server.svg create mode 100644 public/svgs/directus.svg create mode 100644 public/svgs/docker-registry.png create mode 100644 public/svgs/dokuwiki.png create mode 100644 public/svgs/duplicati.webp create mode 100644 public/svgs/emby.png create mode 100644 public/svgs/fider.svg create mode 100644 public/svgs/filebrowser.svg create mode 100644 public/svgs/formbricks.png create mode 100644 public/svgs/ghost.svg create mode 100644 public/svgs/gitea.svg create mode 100644 public/svgs/glitchtip.png create mode 100644 public/svgs/grafana.svg create mode 100644 public/svgs/grocy.svg create mode 100644 resources/views/components/resource-view.blade.php diff --git a/app/Console/Commands/ServicesGenerate.php b/app/Console/Commands/ServicesGenerate.php index 802b3180f..5c71a58cf 100644 --- a/app/Console/Commands/ServicesGenerate.php +++ b/app/Console/Commands/ServicesGenerate.php @@ -73,6 +73,10 @@ private function process_file($file) } else { $slogan = str($file)->headline()->value(); } + $logo = collect(preg_grep('/^# logo:/', explode("\n", $content)))->values(); + if ($logo->count() > 0) { + $logo = str($logo[0])->after('# logo:')->trim()->value(); + } $env_file = collect(preg_grep('/^# env_file:/', explode("\n", $content)))->values(); if ($env_file->count() > 0) { $env_file = str($env_file[0])->after('# env_file:')->trim()->value(); @@ -96,6 +100,7 @@ private function process_file($file) 'slogan' => $slogan, 'compose' => $yaml, 'tags' => $tags, + 'logo' => $logo, ]; if ($env_file) { $env_file_content = file_get_contents(base_path("templates/compose/$env_file")); diff --git a/app/Livewire/Project/New/Select.php b/app/Livewire/Project/New/Select.php index 1c49ac7ad..964c3f143 100644 --- a/app/Livewire/Project/New/Select.php +++ b/app/Livewire/Project/New/Select.php @@ -71,10 +71,10 @@ public function updatedSelectedEnvironment() // } // } - public function loadServices() + public function loadServices(bool $force = false) { try { - if (count($this->allServices) > 0) { + if (count($this->allServices) > 0 && !$force) { if (!$this->search) { $this->services = $this->allServices; return; @@ -93,6 +93,7 @@ public function loadServices() });; $this->dispatch('success', 'Successfully loaded services.'); } + ray($this->services); } catch (\Throwable $e) { return handleError($e, $this); } finally { diff --git a/app/Livewire/Source/Github/Change.php b/app/Livewire/Source/Github/Change.php index 020e9c6ad..cdbec6486 100644 --- a/app/Livewire/Source/Github/Change.php +++ b/app/Livewire/Source/Github/Change.php @@ -4,6 +4,7 @@ use App\Models\GithubApp; use App\Models\InstanceSettings; +use Illuminate\Support\Facades\Http; use Livewire\Component; class Change extends Component @@ -36,6 +37,40 @@ class Change extends Component 'github_app.is_system_wide' => 'required|bool', ]; + // public function check() + // { + + // Need administration:read:write permission + // https://docs.github.com/en/rest/actions/self-hosted-runners?apiVersion=2022-11-28#list-self-hosted-runners-for-a-repository + + + // $github_access_token = generate_github_installation_token($this->github_app); + // $repositories = Http::withToken($github_access_token)->get("{$this->github_app->api_url}/installation/repositories?per_page=100"); + // $runners_by_repository = collect([]); + // $repositories = $repositories->json()['repositories']; + // foreach ($repositories as $repository) { + // $runners_downloads = Http::withToken($github_access_token)->get("{$this->github_app->api_url}/repos/{$repository['full_name']}/actions/runners/downloads"); + // $runners = Http::withToken($github_access_token)->get("{$this->github_app->api_url}/repos/{$repository['full_name']}/actions/runners"); + // $token = Http::withHeaders([ + // 'Authorization' => "Bearer $github_access_token", + // 'Accept' => 'application/vnd.github+json' + // ])->withBody(null)->post("{$this->github_app->api_url}/repos/{$repository['full_name']}/actions/runners/registration-token"); + // $token = $token->json(); + // $remove_token = Http::withHeaders([ + // 'Authorization' => "Bearer $github_access_token", + // 'Accept' => 'application/vnd.github+json' + // ])->withBody(null)->post("{$this->github_app->api_url}/repos/{$repository['full_name']}/actions/runners/remove-token"); + // $remove_token = $remove_token->json(); + // $runners_by_repository->put($repository['full_name'], [ + // 'token' => $token, + // 'remove_token' => $remove_token, + // 'runners' => $runners->json(), + // 'runners_downloads' => $runners_downloads->json() + // ]); + // } + + // ray($runners_by_repository); + // } public function mount() { $github_app_uuid = request()->github_app_uuid; diff --git a/app/View/Components/ResourceView.php b/app/View/Components/ResourceView.php new file mode 100644 index 000000000..7135385af --- /dev/null +++ b/app/View/Components/ResourceView.php @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + diff --git a/public/svgs/appwrite.svg b/public/svgs/appwrite.svg new file mode 100644 index 000000000..dc58a8110 --- /dev/null +++ b/public/svgs/appwrite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/svgs/babybuddy.png b/public/svgs/babybuddy.png new file mode 100644 index 0000000000000000000000000000000000000000..36623f744731a73965e0fe6a54bc692bb3f9235a GIT binary patch literal 27699 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 E51&!3yZ`_I literal 0 HcmV?d00001 diff --git a/public/svgs/code-server.svg b/public/svgs/code-server.svg new file mode 100644 index 000000000..8b589eef2 --- /dev/null +++ b/public/svgs/code-server.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/public/svgs/directus.svg b/public/svgs/directus.svg new file mode 100644 index 000000000..13dd08851 --- /dev/null +++ b/public/svgs/directus.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/svgs/docker-registry.png b/public/svgs/docker-registry.png new file mode 100644 index 0000000000000000000000000000000000000000..4fa75b2a7ad30dd168678a322e907a5c373fb8f3 GIT binary patch literal 7191 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 Z_QtO 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 KMNUMnLSTZihC~+t literal 0 HcmV?d00001 diff --git a/public/svgs/duplicati.webp b/public/svgs/duplicati.webp new file mode 100644 index 0000000000000000000000000000000000000000..5bc8037799ee4df4caa71a7dbcbf5b4e0563124b GIT binary patch literal 3780 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 Ld-Vrw6UF`yI}S(b literal 0 HcmV?d00001 diff --git a/public/svgs/emby.png b/public/svgs/emby.png new file mode 100644 index 0000000000000000000000000000000000000000..ca84b69649d0a5f81c73ec56a43a5c6cc7c56f0d GIT binary patch literal 869641 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

As`|3Y@=q6_-jYy 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 diff --git a/public/svgs/filebrowser.svg b/public/svgs/filebrowser.svg new file mode 100644 index 000000000..5e78eccff --- /dev/null +++ b/public/svgs/filebrowser.svg @@ -0,0 +1,147 @@ + +image/svg+xml + + + + + \ No newline at end of file diff --git a/public/svgs/formbricks.png b/public/svgs/formbricks.png new file mode 100644 index 0000000000000000000000000000000000000000..3f2194c209efd8e070866c631a8ca67bd3c9908b GIT binary patch literal 22089 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 Ls>oDInFaj^N&Cs0 literal 0 HcmV?d00001 diff --git a/public/svgs/ghost.svg b/public/svgs/ghost.svg new file mode 100644 index 000000000..682b10eda --- /dev/null +++ b/public/svgs/ghost.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/svgs/gitea.svg b/public/svgs/gitea.svg new file mode 100644 index 000000000..281c748ef --- /dev/null +++ b/public/svgs/gitea.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/public/svgs/glitchtip.png b/public/svgs/glitchtip.png new file mode 100644 index 0000000000000000000000000000000000000000..8663175287508894c3d03c9391358aca7af8b0d8 GIT binary patch literal 16211 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 BO(y^V literal 0 HcmV?d00001 diff --git a/public/svgs/grafana.svg b/public/svgs/grafana.svg new file mode 100644 index 000000000..038701973 --- /dev/null +++ b/public/svgs/grafana.svg @@ -0,0 +1 @@ + diff --git a/public/svgs/grocy.svg b/public/svgs/grocy.svg new file mode 100644 index 000000000..24bb0d252 --- /dev/null +++ b/public/svgs/grocy.svg @@ -0,0 +1,21 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + diff --git a/resources/views/components/resource-view.blade.php b/resources/views/components/resource-view.blade.php new file mode 100644 index 000000000..7d90d5dfd --- /dev/null +++ b/resources/views/components/resource-view.blade.php @@ -0,0 +1,23 @@ +

diff --git a/resources/views/livewire/project/new/select.blade.php b/resources/views/livewire/project/new/select.blade.php index ecb1c71ff..6564260b9 100644 --- a/resources/views/livewire/project/new/select.blade.php +++ b/resources/views/livewire/project/new/select.blade.php @@ -19,128 +19,85 @@

Applications

-
-
-
- Public Repository -
-
- You can deploy any kind of public repositories from the supported git providers. -
-
-
-
-
-
- Private Repository (with GitHub App) -
-
- You can deploy public & private repositories through your GitHub Apps. -
-
-
-
-
-
- Private Repository (with deploy key) -
-
- You can deploy public & private repositories with a simple deploy key (SSH key). -
-
-
+ + Public Repository + + You can deploy any kind of public repositories from the supported git providers. + + + + Private Repository (with GitHub App) + + You can deploy public & private repositories through your GitHub Apps. + + + + + Private Repository (with deploy key) + + You can deploy public & private repositories with a simple deploy key (SSH key). + +
-
-
-
- Based on a Dockerfile -
-
- You can deploy a simple Dockerfile, without Git. -
-
-
-
-
-
- Based on a Docker Compose -
-
- You can deploy complex application easily with Docker Compose, without Git. -
-
-
-
-
-
- Based on an existing Docker Image -
-
- You can deploy an existing Docker Image from any Registry, without Git. -
-
-
+ + Based on a Dockerfile + + You can deploy a simple Dockerfile, without Git. + + + + Based on a Docker Compose + + You can deploy complex application easily with Docker Compose, without Git. + + + + Based on an existing Docker Image + + You can deploy an existing Docker Image from any Registry, without Git. + +

Databases

-
-
-
-
- New PostgreSQL -
-
- PostgreSQL is an open-source, object-relational database management system known for its - robustness, advanced features, and strong standards compliance. -
-
-
-
-
-
- New Redis -
-
- Redis is an open-source, in-memory data structure store used as a database, cache, and - message broker, known for its high performance, flexibility, and rich data structures. -
-
-
-
-
-
- New MongoDB -
-
- MongoDB is a source-available, NoSQL database program that uses JSON-like documents with - optional schemas, known for its flexibility, scalability, and wide range of application use - cases. -
-
-
-
-
-
- New MySQL -
-
- MySQL is an open-source relational database management system known for its speed, - reliability, and flexibility in managing and accessing data. -
-
-
-
-
-
- New Mariadb -
-
- MariaDB is an open-source relational database management system that serves as a drop-in - replacement for MySQL, offering more robust, scalable, and reliable SQL server capabilities. -
-
-
- {{--
+
+ + New PostgreSQL + + PostgreSQL is an open-source, object-relational database management system known for its + robustness, advanced features, and strong standards compliance. + + + + New Redis + + Redis is an open-source, in-memory data structure store used as a database, cache, and message + broker, known for its high performance, flexibility, and rich data structures. + + + + New MongoDB + + MongoDB is a source-available, NoSQL database program that uses JSON-like documents with + optional schemas, known for its flexibility and scalability. + + + + New MySQL + + MySQL is an open-source relational database management system known for its speed, reliability, + and flexibility in managing and accessing data. + + + + New Mariadb + + MariaDB is an open-source relational database management system that serves as a drop-in + replacement for MySQL. + + + + {{--
Backup Existing PostgreSQL @@ -153,12 +110,12 @@

Services

- Reload Services List + Reload List
-
+
@if ($loadingServices) @else @@ -173,7 +130,25 @@ class="w-full text-white rounded input input-sm bg-coolgray-200 disabled:bg-cool
@else - + --}} @endif @empty -
No service found. Please try to reload the list!
+
No service found. Please try to reload the list!
@endforelse @endif
diff --git a/resources/views/livewire/source/github/change.blade.php b/resources/views/livewire/source/github/change.blade.php index 941d616c8..769c9cab9 100644 --- a/resources/views/livewire/source/github/change.blade.php +++ b/resources/views/livewire/source/github/change.blade.php @@ -16,6 +16,7 @@ This source will be deleted. It is not reversible.
Please think again.
+ {{-- Check --}}
Your Private GitHub App for private repositories.
diff --git a/templates/compose/appsmith.yaml b/templates/compose/appsmith.yaml index 81ac5fe3d..31c6531e6 100644 --- a/templates/compose/appsmith.yaml +++ b/templates/compose/appsmith.yaml @@ -1,6 +1,7 @@ # documentation: https://docs.appsmith.com -# slogan: Appsmith is an open-source, self-hosted application development platform that enables you to build powerful web applications with ease. +# slogan: Appsmith is an application development platform that enables you to build powerful web applications with ease. # tags: lowcode,nocode,no,low,platform +# logo: svgs/appsmith.svg services: appsmith: diff --git a/templates/compose/appwrite.yaml b/templates/compose/appwrite.yaml index bcb813266..793dacbf4 100644 --- a/templates/compose/appwrite.yaml +++ b/templates/compose/appwrite.yaml @@ -1,7 +1,8 @@ -# documentation: https://appwrite.io/docs -# slogan: Appwrite is a self-hosted backend-as-a-service platform that simplifies the development of web and mobile applications by providing a range of features and APIs. +# documentation: https://appwrite.io +# slogan: Appwrite is backend-as-a-service platform that simplifies the development of web and mobile applications. # env_file: appwrite.env # tags: backend-as-a-service, platform +# logo: svgs/appwrite.svg x-logging: &x-logging diff --git a/templates/compose/babybuddy.yaml b/templates/compose/babybuddy.yaml index 19b17037f..61fbdb5b5 100644 --- a/templates/compose/babybuddy.yaml +++ b/templates/compose/babybuddy.yaml @@ -1,6 +1,7 @@ # documentation: https://docs.baby-buddy.net -# slogan: Baby Buddy is an open-source web application that helps parents track their baby's daily activities, growth, and health with ease. +# slogan: Baby Buddy helps parents track their baby's daily activities, growth, and health with ease. # tags: baby, parents, health, growth, activities +# logo: svgs/babybuddy.png services: babybuddy: diff --git a/templates/compose/code-server.yaml b/templates/compose/code-server.yaml index 19858601a..65bb8872d 100644 --- a/templates/compose/code-server.yaml +++ b/templates/compose/code-server.yaml @@ -1,6 +1,7 @@ -# documentation: https://coder.com/docs/code-server/latest/guide -# slogan: Code-Server is a self-hosted, web-based code editor that enables remote coding and collaboration from any device, anywhere. +# documentation: https://coder.com/docs/code-server/latest +# slogan: Code-Server is a web-based code editor that enables remote coding and collaboration from any device, anywhere. # tags: code, editor, remote, collaboration +# logo: svgs/code-server.svg services: code-server: diff --git a/templates/compose/dashboard.yaml b/templates/compose/dashboard.yaml index ea2ae3489..f5ad26c4b 100644 --- a/templates/compose/dashboard.yaml +++ b/templates/compose/dashboard.yaml @@ -1,4 +1,4 @@ -# documentation: https://github.com/phntxx/dashboard/wiki/Installation#installation-using-docker +# documentation: https://github.com/phntxx/dashboard?tab=readme-ov-file#dashboard # slogan: A dashboard. Inspired by SUI, it offers simple customization through JSON-files and a handy search bar to help you browse the internet more efficiently. # tags: dashboard, web, search, bookmarks diff --git a/templates/compose/directus-with-postgresql.yaml b/templates/compose/directus-with-postgresql.yaml index 431f30f6a..dcd463fcb 100644 --- a/templates/compose/directus-with-postgresql.yaml +++ b/templates/compose/directus-with-postgresql.yaml @@ -1,6 +1,7 @@ -# documentation: https://docs.directus.io/self-hosted/quickstart.html -# slogan: Directus is an open-source tool that wraps custom SQL databases with a dynamic API, and provides an intuitive admin app for managing its content. +# documentation: https://directus.io +# slogan: Directus wraps custom SQL databases with a dynamic API, and provides an intuitive admin app for managing its content. # tags: directus, cms, database, sql +# logo: svgs/directus.svg services: directus: diff --git a/templates/compose/directus.yaml b/templates/compose/directus.yaml index 0dcb88330..0f6d58396 100644 --- a/templates/compose/directus.yaml +++ b/templates/compose/directus.yaml @@ -1,6 +1,8 @@ -# documentation: https://docs.directus.io/self-hosted/quickstart.html -# slogan: Directus is an open-source tool that wraps custom SQL databases with a dynamic API, and provides an intuitive admin app for managing its content. +# documentation: https://directus.io +# slogan: Directus wraps custom SQL databases with a dynamic API, and provides an intuitive admin app for managing its content. # tags: directus, cms, database, sql +# logo: svgs/directus.svg + services: directus: diff --git a/templates/compose/docker-registry.yaml b/templates/compose/docker-registry.yaml index 6874b2358..8929b1006 100644 --- a/templates/compose/docker-registry.yaml +++ b/templates/compose/docker-registry.yaml @@ -1,6 +1,7 @@ # documentation: https://docs.docker.com/registry/ # slogan: The Docker Registry is a stateless, highly scalable server side application that stores and lets you distribute Docker images. # tags: registry,images,docker +# logo: svgs/docker-registry.png services: registry: diff --git a/templates/compose/dokuwiki.yaml b/templates/compose/dokuwiki.yaml index 81f317c42..a3bd30e7b 100644 --- a/templates/compose/dokuwiki.yaml +++ b/templates/compose/dokuwiki.yaml @@ -1,6 +1,7 @@ -# documentation: https://www.dokuwiki.org/faq -# slogan: A lightweight and easy-to-use wiki platform for creating and managing documentation and knowledge bases with simplicity and flexibility. +# documentation: https://www.dokuwiki.org/ +# slogan: A lightweight and easy-to-use wiki platform for creating and managing documentation and knowledge bases. # tags: wiki, documentation, knowledge, base +# logo: svgs/dokuwiki.png services: dokuwiki: diff --git a/templates/compose/duplicati.yaml b/templates/compose/duplicati.yaml index 0314f82e7..435d6d860 100644 --- a/templates/compose/duplicati.yaml +++ b/templates/compose/duplicati.yaml @@ -1,6 +1,7 @@ -# documentation: https://duplicati.readthedocs.io/en/latest/02-installation/ -# slogan: Duplicati is an open-source backup solution, allowing you to safeguard your data with ease through scheduled backups and encryption. +# documentation: https://duplicati.readthedocs.io +# slogan: Duplicati is a backup solution, allowing you to make scheduled backups with encryption. # tags: backup, encryption +# logo: svgs/duplicati.webp services: duplicati: diff --git a/templates/compose/emby.yaml b/templates/compose/emby.yaml index b5e35b4d7..8f0241b66 100644 --- a/templates/compose/emby.yaml +++ b/templates/compose/emby.yaml @@ -1,6 +1,7 @@ # documentation: https://emby.media/support/articles/Home.html -# slogan: A media server software that allows you to organize, stream, and access your multimedia content effortlessly, making it easy to enjoy your favorite movies, TV shows, music, and more. +# slogan: A media server software that allows you to organize, stream, and access your multimedia content effortlessly. # tags: media, server, movies, tv, music +# logo: svgs/emby.png services: emby: diff --git a/templates/compose/embystat.yaml b/templates/compose/embystat.yaml index 0fffd1bf7..c80863645 100644 --- a/templates/compose/embystat.yaml +++ b/templates/compose/embystat.yaml @@ -1,5 +1,5 @@ -# documentation: https://github.com/mregni/EmbyStat/wiki/docker -# slogan: EmyStat is an open-source, self-hosted web analytics tool, designed to provide insight into website traffic and user behavior, of your local Emby deployment, all within your control. +# documentation: https://github.com/mregni/EmbyStat +# slogan: EmnyStat is a web analytics tool, designed to provide insight into website traffic and user behavior. # tags: media, server, movies, tv, music services: diff --git a/templates/compose/fider.yaml b/templates/compose/fider.yaml index b75ba68cd..dce414aef 100644 --- a/templates/compose/fider.yaml +++ b/templates/compose/fider.yaml @@ -1,6 +1,7 @@ -# documentation: https://fider.io/docs -# slogan: Fider is an open-source feedback platform for collecting and managing user feedback, helping you prioritize improvements to your products and services. +# documentation: https://fider.io +# slogan: Fider is a feedback platform for collecting and managing user feedback. # tags: feedback, user-feedback +# logo: svgs/fider.svg services: fider: diff --git a/templates/compose/filebrowser.yaml b/templates/compose/filebrowser.yaml index fb9263c22..81d25cd20 100644 --- a/templates/compose/filebrowser.yaml +++ b/templates/compose/filebrowser.yaml @@ -1,6 +1,7 @@ -# documentation: https://filebrowser.org/configuration -# slogan: FileBrowser is a self-hosted, web-based file manager and file explorer with a user-friendly interface. It allows you to manage and organize your files and directories directly from your web browser. +# documentation: https://filebrowser.org +# slogan: FileBrowser is a web-based file manager and file explorer with a user-friendly interface. # tags: file-management, storage-access, data-organization, file-utilization, administration-tool +# logo: svgs/filebrowser.svg services: filebrowser: diff --git a/templates/compose/formbricks.yaml b/templates/compose/formbricks.yaml index 7beed9de5..ac738f877 100644 --- a/templates/compose/formbricks.yaml +++ b/templates/compose/formbricks.yaml @@ -1,6 +1,7 @@ -# documentation: https://formbricks.com/docs/self-hosting/docker +# documentation: https://formbricks.com # slogan: Open Source Experience Management # tags: form, builder, forms, open source, experience, management, self-hosted, docker +# logo: svgs/formbricks.png services: formbricks: diff --git a/templates/compose/ghost.yaml b/templates/compose/ghost.yaml index d0d9c27a5..9c01e5cb4 100644 --- a/templates/compose/ghost.yaml +++ b/templates/compose/ghost.yaml @@ -1,6 +1,7 @@ -# documentation: https://ghost.org/docs -# slogan: Ghost is a popular open-source content management system (CMS) and blogging platform, known for its simplicity and focus on content creation. +# documentation: https://ghost.org +# slogan: Ghost is a content management system (CMS) and blogging platform. # tags: cms, blog, content, management, system +# logo: svgs/ghost.svg services: ghost: diff --git a/templates/compose/gitea-with-mariadb.yaml b/templates/compose/gitea-with-mariadb.yaml index f00f73ded..929810d94 100644 --- a/templates/compose/gitea-with-mariadb.yaml +++ b/templates/compose/gitea-with-mariadb.yaml @@ -1,6 +1,7 @@ # documentation: https://docs.gitea.com -# slogan: Gitea (with MariaDB) is a self-hosted, lightweight Git service, offering version control, collaboration, and code hosting. +# slogan: Gitea is a self-hosted, lightweight Git service, offering version control, collaboration, and code hosting. # tags: version control, collaboration, code, hosting, lightweight, mariadb +# logo: svgs/gitea.svg services: gitea: diff --git a/templates/compose/gitea-with-mysql.yaml b/templates/compose/gitea-with-mysql.yaml index d25d4952e..99a5714f1 100644 --- a/templates/compose/gitea-with-mysql.yaml +++ b/templates/compose/gitea-with-mysql.yaml @@ -1,6 +1,7 @@ # documentation: https://docs.gitea.com -# slogan: Gitea (with MySQL) is a self-hosted, lightweight Git service, offering version control, collaboration, and code hosting. +# slogan: Gitea is a self-hosted, lightweight Git service, offering version control, collaboration, and code hosting. # tags: version control, collaboration, code, hosting, lightweight, mysql +# logo: svgs/gitea.svg services: gitea: diff --git a/templates/compose/gitea-with-postgresql.yaml b/templates/compose/gitea-with-postgresql.yaml index d7e5f2a42..cd993c074 100644 --- a/templates/compose/gitea-with-postgresql.yaml +++ b/templates/compose/gitea-with-postgresql.yaml @@ -1,6 +1,7 @@ # documentation: https://docs.gitea.com -# slogan: Gitea (with PostgreSQL)vis a self-hosted, lightweight Git service, offering version control, collaboration, and code hosting. +# slogan: Gitea is a self-hosted, lightweight Git service, offering version control, collaboration, and code hosting. # tags: version control, collaboration, code, hosting, lightweight, postgresql +# logo: svgs/gitea.svg services: gitea: diff --git a/templates/compose/gitea.yaml b/templates/compose/gitea.yaml index 2d75675fa..f42ae9313 100644 --- a/templates/compose/gitea.yaml +++ b/templates/compose/gitea.yaml @@ -1,6 +1,7 @@ # documentation: https://docs.gitea.com # slogan: Gitea is a self-hosted, lightweight Git service, offering version control, collaboration, and code hosting. # tags: version control, collaboration, code, hosting, lightweight +# logo: svgs/gitea.svg services: gitea: diff --git a/templates/compose/glitchtip.yaml b/templates/compose/glitchtip.yaml index 1d497eb93..b2bdbf8ff 100644 --- a/templates/compose/glitchtip.yaml +++ b/templates/compose/glitchtip.yaml @@ -1,6 +1,7 @@ # documentation: https://glitchtip.com # slogan: GlitchTip is a self-hosted, open-source error tracking system. # tags: error, tracking, open-source, self-hosted, sentry +# logo: svgs/glitchtip.png version: "3.8" services: diff --git a/templates/compose/grafana-with-postgresql.yaml b/templates/compose/grafana-with-postgresql.yaml index 5e01be07c..cd76c10ce 100644 --- a/templates/compose/grafana-with-postgresql.yaml +++ b/templates/compose/grafana-with-postgresql.yaml @@ -1,6 +1,7 @@ # documentation: https://grafana.com/docs/grafana/latest/installation/docker/ # slogan: Grafana is the open source analytics & monitoring solution for every database. # tags: grafana,analytics,monitoring,dashboard +# logo: svgs/grafana.svg services: grafana: diff --git a/templates/compose/grafana.yaml b/templates/compose/grafana.yaml index b5fcbdf2e..9d8dbfcc4 100644 --- a/templates/compose/grafana.yaml +++ b/templates/compose/grafana.yaml @@ -1,6 +1,7 @@ # documentation: https://grafana.com/docs/grafana/latest/installation/docker/ # slogan: Grafana is the open source analytics & monitoring solution for every database. # tags: grafana,analytics,monitoring,dashboard +# logo: svgs/grafana.svg services: grafana: diff --git a/templates/compose/grocy.yaml b/templates/compose/grocy.yaml index 46edd984e..2b3b7ba2d 100644 --- a/templates/compose/grocy.yaml +++ b/templates/compose/grocy.yaml @@ -1,6 +1,7 @@ # documentation: https://github.com/grocy/grocy -# slogan: Grocy is a self-hosted, web-based household management and grocery list application, designed to simplify your household chores and grocery shopping. +# slogan: Grocy is a web-based household management and grocery list application. # tags: groceries, household, management, grocery, shopping +# logo: svgs/grocy.svg services: grocy: diff --git a/templates/compose/syncthing.yaml b/templates/compose/syncthing.yaml index 50d02b57d..50adea1f9 100644 --- a/templates/compose/syncthing.yaml +++ b/templates/compose/syncthing.yaml @@ -1,6 +1,7 @@ # documentation: https://syncthing.net/ -# slogan: Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers in real time, safely protected from prying eyes. Your data is your data alone and you deserve to choose where it is stored, whether it is shared with some third party, and how it’s transmitted over the internet. +# slogan: Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers in real time. # tags: filestorage, data, synchronization +# logo: svgs/syncthing.svg services: syncthing: diff --git a/templates/service-templates.json b/templates/service-templates.json index 7c28b9956..043ffa813 100644 --- a/templates/service-templates.json +++ b/templates/service-templates.json @@ -1,7 +1,7 @@ { "appsmith": { "documentation": "https:\/\/docs.appsmith.com", - "slogan": "Appsmith is an open-source, self-hosted application development platform that enables you to build powerful web applications with ease.", + "slogan": "Appsmith is an application development platform that enables you to build powerful web applications with ease.", "compose": "c2VydmljZXM6CiAgYXBwc21pdGg6CiAgICBpbWFnZTogJ2luZGV4LmRvY2tlci5pby9hcHBzbWl0aC9hcHBzbWl0aC1jZTpsYXRlc3QnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE4KICAgICAgLSBBUFBTTUlUSF9NQUlMX0VOQUJMRUQ9ZmFsc2UKICAgICAgLSBBUFBTTUlUSF9ESVNBQkxFX1RFTEVNRVRSWT10cnVlCiAgICAgIC0gQVBQU01JVEhfRElTQUJMRV9JTlRFUkNPTT10cnVlCiAgICAgIC0gQVBQU01JVEhfU0VOVFJZX0RTTj0KICAgICAgLSBBUFBTTUlUSF9TTUFSVF9MT09LX0lEPQogICAgdm9sdW1lczoKICAgICAgLSAnc3RhY2tzLWRhdGE6L2FwcHNtaXRoLXN0YWNrcycKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gTk9ORQo=", "tags": [ "lowcode", @@ -9,21 +9,23 @@ "no", "low", "platform" - ] + ], + "logo": "svgs\/appsmith.svg" }, "appwrite": { - "documentation": "https:\/\/appwrite.io\/docs", - "slogan": "Appwrite is a self-hosted backend-as-a-service platform that simplifies the development of web and mobile applications by providing a range of features and APIs.", + "documentation": "https:\/\/appwrite.io", + "slogan": "Appwrite is backend-as-a-service platform that simplifies the development of web and mobile applications.", "compose": "eC1sb2dnaW5nOgogIGxvZ2dpbmc6CiAgICBkcml2ZXI6IGpzb24tZmlsZQogICAgb3B0aW9uczoKICAgICAgbWF4LWZpbGU6ICc1JwogICAgICBtYXgtc2l6ZTogMTBtCnZlcnNpb246ICczJwpzZXJ2aWNlczoKICBhcHB3cml0ZToKICAgIGltYWdlOiAnYXBwd3JpdGUvYXBwd3JpdGU6MS40JwogICAgY29udGFpbmVyX25hbWU6IGFwcHdyaXRlCiAgICBsb2dnaW5nOgogICAgICBkcml2ZXI6IGpzb24tZmlsZQogICAgICBvcHRpb25zOgogICAgICAgIG1heC1maWxlOiAnNScKICAgICAgICBtYXgtc2l6ZTogMTBtCiAgICB2b2x1bWVzOgogICAgICAtICdhcHB3cml0ZS11cGxvYWRzOi9zdG9yYWdlL3VwbG9hZHM6cncnCiAgICAgIC0gJ2FwcHdyaXRlLWNhY2hlOi9zdG9yYWdlL2NhY2hlOnJ3JwogICAgICAtICdhcHB3cml0ZS1jb25maWc6L3N0b3JhZ2UvY29uZmlnOnJ3JwogICAgICAtICdhcHB3cml0ZS1jZXJ0aWZpY2F0ZXM6L3N0b3JhZ2UvY2VydGlmaWNhdGVzOnJ3JwogICAgICAtICdhcHB3cml0ZS1mdW5jdGlvbnM6L3N0b3JhZ2UvZnVuY3Rpb25zOnJ3JwogICAgZGVwZW5kc19vbjoKICAgICAgLSBhcHB3cml0ZS1tYXJpYWRiCiAgICAgIC0gYXBwd3JpdGUtcmVkaXMKICAgICAgLSBhcHB3cml0ZS1pbmZsdXhkYgogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX0FQUFdSSVRFPS8KICAgICAgLSBfQVBQX0VOVgogICAgICAtIF9BUFBfV09SS0VSX1BFUl9DT1JFCiAgICAgIC0gX0FQUF9MT0NBTEUKICAgICAgLSBfQVBQX0NPTlNPTEVfV0hJVEVMSVNUX1JPT1QKICAgICAgLSBfQVBQX0NPTlNPTEVfV0hJVEVMSVNUX0VNQUlMUwogICAgICAtIF9BUFBfQ09OU09MRV9XSElURUxJU1RfSVBTCiAgICAgIC0gX0FQUF9TWVNURU1fRU1BSUxfTkFNRQogICAgICAtIF9BUFBfU1lTVEVNX0VNQUlMX0FERFJFU1MKICAgICAgLSBfQVBQX1NZU1RFTV9TRUNVUklUWV9FTUFJTF9BRERSRVNTCiAgICAgIC0gX0FQUF9TWVNURU1fUkVTUE9OU0VfRk9STUFUCiAgICAgIC0gX0FQUF9PUFRJT05TX0FCVVNFCiAgICAgIC0gX0FQUF9PUFRJT05TX0ZPUkNFX0hUVFBTCiAgICAgIC0gX0FQUF9PUEVOU1NMX0tFWV9WMQogICAgICAtIF9BUFBfRE9NQUlOPSRTRVJWSUNFX0ZRRE5fQVBQV1JJVEUKICAgICAgLSBfQVBQX0RPTUFJTl9UQVJHRVQ9JFNFUlZJQ0VfRlFETl9BUFBXUklURQogICAgICAtIF9BUFBfRE9NQUlOX0ZVTkNUSU9OUz0kU0VSVklDRV9GUUROX0FQUFdSSVRFCiAgICAgIC0gX0FQUF9SRURJU19IT1NUCiAgICAgIC0gX0FQUF9SRURJU19QT1JUCiAgICAgIC0gX0FQUF9SRURJU19VU0VSCiAgICAgIC0gX0FQUF9SRURJU19QQVNTCiAgICAgIC0gX0FQUF9EQl9IT1NUCiAgICAgIC0gX0FQUF9EQl9QT1JUCiAgICAgIC0gX0FQUF9EQl9TQ0hFTUEKICAgICAgLSBfQVBQX0RCX1VTRVIKICAgICAgLSBfQVBQX0RCX1BBU1MKICAgICAgLSBfQVBQX1NNVFBfSE9TVAogICAgICAtIF9BUFBfU01UUF9QT1JUCiAgICAgIC0gX0FQUF9TTVRQX1NFQ1VSRQogICAgICAtIF9BUFBfU01UUF9VU0VSTkFNRQogICAgICAtIF9BUFBfU01UUF9QQVNTV09SRAogICAgICAtIF9BUFBfVVNBR0VfU1RBVFMKICAgICAgLSBfQVBQX0lORkxVWERCX0hPU1QKICAgICAgLSBfQVBQX0lORkxVWERCX1BPUlQKICAgICAgLSBfQVBQX1NUT1JBR0VfTElNSVQKICAgICAgLSBfQVBQX1NUT1JBR0VfUFJFVklFV19MSU1JVAogICAgICAtIF9BUFBfU1RPUkFHRV9BTlRJVklSVVMKICAgICAgLSBfQVBQX1NUT1JBR0VfQU5USVZJUlVTX0hPU1QKICAgICAgLSBfQVBQX1NUT1JBR0VfQU5USVZJUlVTX1BPUlQKICAgICAgLSBfQVBQX1NUT1JBR0VfREVWSUNFCiAgICAgIC0gX0FQUF9TVE9SQUdFX1MzX0FDQ0VTU19LRVkKICAgICAgLSBfQVBQX1NUT1JBR0VfUzNfU0VDUkVUCiAgICAgIC0gX0FQUF9TVE9SQUdFX1MzX1JFR0lPTgogICAgICAtIF9BUFBfU1RPUkFHRV9TM19CVUNLRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfRE9fU1BBQ0VTX0FDQ0VTU19LRVkKICAgICAgLSBfQVBQX1NUT1JBR0VfRE9fU1BBQ0VTX1NFQ1JFVAogICAgICAtIF9BUFBfU1RPUkFHRV9ET19TUEFDRVNfUkVHSU9OCiAgICAgIC0gX0FQUF9TVE9SQUdFX0RPX1NQQUNFU19CVUNLRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfQkFDS0JMQVpFX0FDQ0VTU19LRVkKICAgICAgLSBfQVBQX1NUT1JBR0VfQkFDS0JMQVpFX1NFQ1JFVAogICAgICAtIF9BUFBfU1RPUkFHRV9CQUNLQkxBWkVfUkVHSU9OCiAgICAgIC0gX0FQUF9TVE9SQUdFX0JBQ0tCTEFaRV9CVUNLRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfTElOT0RFX0FDQ0VTU19LRVkKICAgICAgLSBfQVBQX1NUT1JBR0VfTElOT0RFX1NFQ1JFVAogICAgICAtIF9BUFBfU1RPUkFHRV9MSU5PREVfUkVHSU9OCiAgICAgIC0gX0FQUF9TVE9SQUdFX0xJTk9ERV9CVUNLRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfV0FTQUJJX0FDQ0VTU19LRVkKICAgICAgLSBfQVBQX1NUT1JBR0VfV0FTQUJJX1NFQ1JFVAogICAgICAtIF9BUFBfU1RPUkFHRV9XQVNBQklfUkVHSU9OCiAgICAgIC0gX0FQUF9TVE9SQUdFX1dBU0FCSV9CVUNLRVQKICAgICAgLSBfQVBQX0ZVTkNUSU9OU19TSVpFX0xJTUlUCiAgICAgIC0gX0FQUF9GVU5DVElPTlNfVElNRU9VVAogICAgICAtIF9BUFBfRlVOQ1RJT05TX0JVSUxEX1RJTUVPVVQKICAgICAgLSBfQVBQX0ZVTkNUSU9OU19DUFVTCiAgICAgIC0gX0FQUF9GVU5DVElPTlNfTUVNT1JZCiAgICAgIC0gX0FQUF9GVU5DVElPTlNfUlVOVElNRVMKICAgICAgLSBfQVBQX0VYRUNVVE9SX1NFQ1JFVAogICAgICAtIF9BUFBfRVhFQ1VUT1JfSE9TVAogICAgICAtIF9BUFBfTE9HR0lOR19QUk9WSURFUgogICAgICAtIF9BUFBfTE9HR0lOR19DT05GSUcKICAgICAgLSBfQVBQX1NUQVRTRF9IT1NUCiAgICAgIC0gX0FQUF9TVEFUU0RfUE9SVAogICAgICAtIF9BUFBfTUFJTlRFTkFOQ0VfSU5URVJWQUwKICAgICAgLSBfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9FWEVDVVRJT04KICAgICAgLSBfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9DQUNIRQogICAgICAtIF9BUFBfTUFJTlRFTkFOQ0VfUkVURU5USU9OX0FCVVNFCiAgICAgIC0gX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fQVVESVQKICAgICAgLSBfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9VU0FHRV9IT1VSTFkKICAgICAgLSBfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9TQ0hFRFVMRVMKICAgICAgLSBfQVBQX1NNU19QUk9WSURFUgogICAgICAtIF9BUFBfU01TX0ZST00KICAgICAgLSBfQVBQX0dSQVBIUUxfTUFYX0JBVENIX1NJWkUKICAgICAgLSBfQVBQX0dSQVBIUUxfTUFYX0NPTVBMRVhJVFkKICAgICAgLSBfQVBQX0dSQVBIUUxfTUFYX0RFUFRICiAgICAgIC0gX0FQUF9WQ1NfR0lUSFVCX0FQUF9OQU1FCiAgICAgIC0gX0FQUF9WQ1NfR0lUSFVCX1BSSVZBVEVfS0VZCiAgICAgIC0gX0FQUF9WQ1NfR0lUSFVCX0FQUF9JRAogICAgICAtIF9BUFBfVkNTX0dJVEhVQl9XRUJIT09LX1NFQ1JFVAogICAgICAtIF9BUFBfVkNTX0dJVEhVQl9DTElFTlRfU0VDUkVUCiAgICAgIC0gX0FQUF9WQ1NfR0lUSFVCX0NMSUVOVF9JRAogICAgICAtIF9BUFBfTUlHUkFUSU9OU19GSVJFQkFTRV9DTElFTlRfSUQKICAgICAgLSBfQVBQX01JR1JBVElPTlNfRklSRUJBU0VfQ0xJRU5UX1NFQ1JFVAogICAgICAtIF9BUFBfQVNTSVNUQU5UX09QRU5BSV9BUElfS0VZCiAgYXBwd3JpdGUtcmVhbHRpbWU6CiAgICBpbWFnZTogJ2FwcHdyaXRlL2FwcHdyaXRlOjEuNCcKICAgIGVudHJ5cG9pbnQ6IHJlYWx0aW1lCiAgICBsb2dnaW5nOgogICAgICBkcml2ZXI6IGpzb24tZmlsZQogICAgICBvcHRpb25zOgogICAgICAgIG1heC1maWxlOiAnNScKICAgICAgICBtYXgtc2l6ZTogMTBtCiAgICBkZXBlbmRzX29uOgogICAgICAtIGFwcHdyaXRlLW1hcmlhZGIKICAgICAgLSBhcHB3cml0ZS1yZWRpcwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX0FQUFdSSVRFPS92MS9yZWFsdGltZQogICAgICAtIF9BUFBfRU5WCiAgICAgIC0gX0FQUF9XT1JLRVJfUEVSX0NPUkUKICAgICAgLSBfQVBQX09QVElPTlNfQUJVU0UKICAgICAgLSBfQVBQX09QRU5TU0xfS0VZX1YxCiAgICAgIC0gX0FQUF9SRURJU19IT1NUCiAgICAgIC0gX0FQUF9SRURJU19QT1JUCiAgICAgIC0gX0FQUF9SRURJU19VU0VSCiAgICAgIC0gX0FQUF9SRURJU19QQVNTCiAgICAgIC0gX0FQUF9EQl9IT1NUCiAgICAgIC0gX0FQUF9EQl9QT1JUCiAgICAgIC0gX0FQUF9EQl9TQ0hFTUEKICAgICAgLSBfQVBQX0RCX1VTRVIKICAgICAgLSBfQVBQX0RCX1BBU1MKICAgICAgLSBfQVBQX1VTQUdFX1NUQVRTCiAgICAgIC0gX0FQUF9MT0dHSU5HX1BST1ZJREVSCiAgICAgIC0gX0FQUF9MT0dHSU5HX0NPTkZJRwogIGFwcHdyaXRlLXdvcmtlci1hdWRpdHM6CiAgICBpbWFnZTogJ2FwcHdyaXRlL2FwcHdyaXRlOjEuNCcKICAgIGVudHJ5cG9pbnQ6IHdvcmtlci1hdWRpdHMKICAgIGxvZ2dpbmc6CiAgICAgIGRyaXZlcjoganNvbi1maWxlCiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LWZpbGU6ICc1JwogICAgICAgIG1heC1zaXplOiAxMG0KICAgIGNvbnRhaW5lcl9uYW1lOiBhcHB3cml0ZS13b3JrZXItYXVkaXRzCiAgICBkZXBlbmRzX29uOgogICAgICAtIGFwcHdyaXRlLXJlZGlzCiAgICAgIC0gYXBwd3JpdGUtbWFyaWFkYgogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gX0FQUF9FTlYKICAgICAgLSBfQVBQX1dPUktFUl9QRVJfQ09SRQogICAgICAtIF9BUFBfT1BFTlNTTF9LRVlfVjEKICAgICAgLSBfQVBQX1JFRElTX0hPU1QKICAgICAgLSBfQVBQX1JFRElTX1BPUlQKICAgICAgLSBfQVBQX1JFRElTX1VTRVIKICAgICAgLSBfQVBQX1JFRElTX1BBU1MKICAgICAgLSBfQVBQX0RCX0hPU1QKICAgICAgLSBfQVBQX0RCX1BPUlQKICAgICAgLSBfQVBQX0RCX1NDSEVNQQogICAgICAtIF9BUFBfREJfVVNFUgogICAgICAtIF9BUFBfREJfUEFTUwogICAgICAtIF9BUFBfTE9HR0lOR19QUk9WSURFUgogICAgICAtIF9BUFBfTE9HR0lOR19DT05GSUcKICBhcHB3cml0ZS13b3JrZXItd2ViaG9va3M6CiAgICBpbWFnZTogJ2FwcHdyaXRlL2FwcHdyaXRlOjEuNCcKICAgIGVudHJ5cG9pbnQ6IHdvcmtlci13ZWJob29rcwogICAgbG9nZ2luZzoKICAgICAgZHJpdmVyOiBqc29uLWZpbGUKICAgICAgb3B0aW9uczoKICAgICAgICBtYXgtZmlsZTogJzUnCiAgICAgICAgbWF4LXNpemU6IDEwbQogICAgY29udGFpbmVyX25hbWU6IGFwcHdyaXRlLXdvcmtlci13ZWJob29rcwogICAgZGVwZW5kc19vbjoKICAgICAgLSBhcHB3cml0ZS1yZWRpcwogICAgICAtIGFwcHdyaXRlLW1hcmlhZGIKICAgIGVudmlyb25tZW50OgogICAgICAtIF9BUFBfRU5WCiAgICAgIC0gX0FQUF9XT1JLRVJfUEVSX0NPUkUKICAgICAgLSBfQVBQX09QRU5TU0xfS0VZX1YxCiAgICAgIC0gX0FQUF9TWVNURU1fU0VDVVJJVFlfRU1BSUxfQUREUkVTUwogICAgICAtIF9BUFBfUkVESVNfSE9TVAogICAgICAtIF9BUFBfUkVESVNfUE9SVAogICAgICAtIF9BUFBfUkVESVNfVVNFUgogICAgICAtIF9BUFBfUkVESVNfUEFTUwogICAgICAtIF9BUFBfTE9HR0lOR19QUk9WSURFUgogICAgICAtIF9BUFBfTE9HR0lOR19DT05GSUcKICBhcHB3cml0ZS13b3JrZXItZGVsZXRlczoKICAgIGltYWdlOiAnYXBwd3JpdGUvYXBwd3JpdGU6MS40JwogICAgZW50cnlwb2ludDogd29ya2VyLWRlbGV0ZXMKICAgIGxvZ2dpbmc6CiAgICAgIGRyaXZlcjoganNvbi1maWxlCiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LWZpbGU6ICc1JwogICAgICAgIG1heC1zaXplOiAxMG0KICAgIGNvbnRhaW5lcl9uYW1lOiBhcHB3cml0ZS13b3JrZXItZGVsZXRlcwogICAgZGVwZW5kc19vbjoKICAgICAgLSBhcHB3cml0ZS1yZWRpcwogICAgICAtIGFwcHdyaXRlLW1hcmlhZGIKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2FwcHdyaXRlLXVwbG9hZHM6L3N0b3JhZ2UvdXBsb2FkczpydycKICAgICAgLSAnYXBwd3JpdGUtY2FjaGU6L3N0b3JhZ2UvY2FjaGU6cncnCiAgICAgIC0gJ2FwcHdyaXRlLWZ1bmN0aW9uczovc3RvcmFnZS9mdW5jdGlvbnM6cncnCiAgICAgIC0gJ2FwcHdyaXRlLWJ1aWxkczovc3RvcmFnZS9idWlsZHM6cncnCiAgICAgIC0gJ2FwcHdyaXRlLWNlcnRpZmljYXRlczovc3RvcmFnZS9jZXJ0aWZpY2F0ZXM6cncnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBfQVBQX0VOVgogICAgICAtIF9BUFBfV09SS0VSX1BFUl9DT1JFCiAgICAgIC0gX0FQUF9PUEVOU1NMX0tFWV9WMQogICAgICAtIF9BUFBfUkVESVNfSE9TVAogICAgICAtIF9BUFBfUkVESVNfUE9SVAogICAgICAtIF9BUFBfUkVESVNfVVNFUgogICAgICAtIF9BUFBfUkVESVNfUEFTUwogICAgICAtIF9BUFBfREJfSE9TVAogICAgICAtIF9BUFBfREJfUE9SVAogICAgICAtIF9BUFBfREJfU0NIRU1BCiAgICAgIC0gX0FQUF9EQl9VU0VSCiAgICAgIC0gX0FQUF9EQl9QQVNTCiAgICAgIC0gX0FQUF9TVE9SQUdFX0RFVklDRQogICAgICAtIF9BUFBfU1RPUkFHRV9TM19BQ0NFU1NfS0VZCiAgICAgIC0gX0FQUF9TVE9SQUdFX1MzX1NFQ1JFVAogICAgICAtIF9BUFBfU1RPUkFHRV9TM19SRUdJT04KICAgICAgLSBfQVBQX1NUT1JBR0VfUzNfQlVDS0VUCiAgICAgIC0gX0FQUF9TVE9SQUdFX0RPX1NQQUNFU19BQ0NFU1NfS0VZCiAgICAgIC0gX0FQUF9TVE9SQUdFX0RPX1NQQUNFU19TRUNSRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfRE9fU1BBQ0VTX1JFR0lPTgogICAgICAtIF9BUFBfU1RPUkFHRV9ET19TUEFDRVNfQlVDS0VUCiAgICAgIC0gX0FQUF9TVE9SQUdFX0JBQ0tCTEFaRV9BQ0NFU1NfS0VZCiAgICAgIC0gX0FQUF9TVE9SQUdFX0JBQ0tCTEFaRV9TRUNSRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfQkFDS0JMQVpFX1JFR0lPTgogICAgICAtIF9BUFBfU1RPUkFHRV9CQUNLQkxBWkVfQlVDS0VUCiAgICAgIC0gX0FQUF9TVE9SQUdFX0xJTk9ERV9BQ0NFU1NfS0VZCiAgICAgIC0gX0FQUF9TVE9SQUdFX0xJTk9ERV9TRUNSRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfTElOT0RFX1JFR0lPTgogICAgICAtIF9BUFBfU1RPUkFHRV9MSU5PREVfQlVDS0VUCiAgICAgIC0gX0FQUF9TVE9SQUdFX1dBU0FCSV9BQ0NFU1NfS0VZCiAgICAgIC0gX0FQUF9TVE9SQUdFX1dBU0FCSV9TRUNSRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfV0FTQUJJX1JFR0lPTgogICAgICAtIF9BUFBfU1RPUkFHRV9XQVNBQklfQlVDS0VUCiAgICAgIC0gX0FQUF9MT0dHSU5HX1BST1ZJREVSCiAgICAgIC0gX0FQUF9MT0dHSU5HX0NPTkZJRwogICAgICAtIF9BUFBfRVhFQ1VUT1JfU0VDUkVUCiAgICAgIC0gX0FQUF9FWEVDVVRPUl9IT1NUCiAgYXBwd3JpdGUtd29ya2VyLWRhdGFiYXNlczoKICAgIGltYWdlOiAnYXBwd3JpdGUvYXBwd3JpdGU6MS40JwogICAgZW50cnlwb2ludDogd29ya2VyLWRhdGFiYXNlcwogICAgbG9nZ2luZzoKICAgICAgZHJpdmVyOiBqc29uLWZpbGUKICAgICAgb3B0aW9uczoKICAgICAgICBtYXgtZmlsZTogJzUnCiAgICAgICAgbWF4LXNpemU6IDEwbQogICAgY29udGFpbmVyX25hbWU6IGFwcHdyaXRlLXdvcmtlci1kYXRhYmFzZXMKICAgIGRlcGVuZHNfb246CiAgICAgIC0gYXBwd3JpdGUtcmVkaXMKICAgICAgLSBhcHB3cml0ZS1tYXJpYWRiCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBfQVBQX0VOVgogICAgICAtIF9BUFBfV09SS0VSX1BFUl9DT1JFCiAgICAgIC0gX0FQUF9PUEVOU1NMX0tFWV9WMQogICAgICAtIF9BUFBfUkVESVNfSE9TVAogICAgICAtIF9BUFBfUkVESVNfUE9SVAogICAgICAtIF9BUFBfUkVESVNfVVNFUgogICAgICAtIF9BUFBfUkVESVNfUEFTUwogICAgICAtIF9BUFBfREJfSE9TVAogICAgICAtIF9BUFBfREJfUE9SVAogICAgICAtIF9BUFBfREJfU0NIRU1BCiAgICAgIC0gX0FQUF9EQl9VU0VSCiAgICAgIC0gX0FQUF9EQl9QQVNTCiAgICAgIC0gX0FQUF9MT0dHSU5HX1BST1ZJREVSCiAgICAgIC0gX0FQUF9MT0dHSU5HX0NPTkZJRwogIGFwcHdyaXRlLXdvcmtlci1idWlsZHM6CiAgICBpbWFnZTogJ2FwcHdyaXRlL2FwcHdyaXRlOjEuNCcKICAgIGVudHJ5cG9pbnQ6IHdvcmtlci1idWlsZHMKICAgIGxvZ2dpbmc6CiAgICAgIGRyaXZlcjoganNvbi1maWxlCiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LWZpbGU6ICc1JwogICAgICAgIG1heC1zaXplOiAxMG0KICAgIGNvbnRhaW5lcl9uYW1lOiBhcHB3cml0ZS13b3JrZXItYnVpbGRzCiAgICBkZXBlbmRzX29uOgogICAgICAtIGFwcHdyaXRlLXJlZGlzCiAgICAgIC0gYXBwd3JpdGUtbWFyaWFkYgogICAgdm9sdW1lczoKICAgICAgLSAnYXBwd3JpdGUtZnVuY3Rpb25zOi9zdG9yYWdlL2Z1bmN0aW9uczpydycKICAgICAgLSAnYXBwd3JpdGUtYnVpbGRzOi9zdG9yYWdlL2J1aWxkczpydycKICAgIGVudmlyb25tZW50OgogICAgICAtIF9BUFBfRU5WCiAgICAgIC0gX0FQUF9XT1JLRVJfUEVSX0NPUkUKICAgICAgLSBfQVBQX09QRU5TU0xfS0VZX1YxCiAgICAgIC0gX0FQUF9FWEVDVVRPUl9TRUNSRVQKICAgICAgLSBfQVBQX0VYRUNVVE9SX0hPU1QKICAgICAgLSBfQVBQX1JFRElTX0hPU1QKICAgICAgLSBfQVBQX1JFRElTX1BPUlQKICAgICAgLSBfQVBQX1JFRElTX1VTRVIKICAgICAgLSBfQVBQX1JFRElTX1BBU1MKICAgICAgLSBfQVBQX0RCX0hPU1QKICAgICAgLSBfQVBQX0RCX1BPUlQKICAgICAgLSBfQVBQX0RCX1NDSEVNQQogICAgICAtIF9BUFBfREJfVVNFUgogICAgICAtIF9BUFBfREJfUEFTUwogICAgICAtIF9BUFBfTE9HR0lOR19QUk9WSURFUgogICAgICAtIF9BUFBfTE9HR0lOR19DT05GSUcKICAgICAgLSBfQVBQX1ZDU19HSVRIVUJfQVBQX05BTUUKICAgICAgLSBfQVBQX1ZDU19HSVRIVUJfUFJJVkFURV9LRVkKICAgICAgLSBfQVBQX1ZDU19HSVRIVUJfQVBQX0lECiAgICAgIC0gX0FQUF9GVU5DVElPTlNfVElNRU9VVAogICAgICAtIF9BUFBfRlVOQ1RJT05TX0JVSUxEX1RJTUVPVVQKICAgICAgLSBfQVBQX0ZVTkNUSU9OU19DUFVTCiAgICAgIC0gX0FQUF9GVU5DVElPTlNfTUVNT1JZCiAgICAgIC0gX0FQUF9PUFRJT05TX0ZPUkNFX0hUVFBTCiAgICAgIC0gX0FQUF9ET01BSU4KICAgICAgLSBfQVBQX1NUT1JBR0VfREVWSUNFCiAgICAgIC0gX0FQUF9TVE9SQUdFX1MzX0FDQ0VTU19LRVkKICAgICAgLSBfQVBQX1NUT1JBR0VfUzNfU0VDUkVUCiAgICAgIC0gX0FQUF9TVE9SQUdFX1MzX1JFR0lPTgogICAgICAtIF9BUFBfU1RPUkFHRV9TM19CVUNLRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfRE9fU1BBQ0VTX0FDQ0VTU19LRVkKICAgICAgLSBfQVBQX1NUT1JBR0VfRE9fU1BBQ0VTX1NFQ1JFVAogICAgICAtIF9BUFBfU1RPUkFHRV9ET19TUEFDRVNfUkVHSU9OCiAgICAgIC0gX0FQUF9TVE9SQUdFX0RPX1NQQUNFU19CVUNLRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfQkFDS0JMQVpFX0FDQ0VTU19LRVkKICAgICAgLSBfQVBQX1NUT1JBR0VfQkFDS0JMQVpFX1NFQ1JFVAogICAgICAtIF9BUFBfU1RPUkFHRV9CQUNLQkxBWkVfUkVHSU9OCiAgICAgIC0gX0FQUF9TVE9SQUdFX0JBQ0tCTEFaRV9CVUNLRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfTElOT0RFX0FDQ0VTU19LRVkKICAgICAgLSBfQVBQX1NUT1JBR0VfTElOT0RFX1NFQ1JFVAogICAgICAtIF9BUFBfU1RPUkFHRV9MSU5PREVfUkVHSU9OCiAgICAgIC0gX0FQUF9TVE9SQUdFX0xJTk9ERV9CVUNLRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfV0FTQUJJX0FDQ0VTU19LRVkKICAgICAgLSBfQVBQX1NUT1JBR0VfV0FTQUJJX1NFQ1JFVAogICAgICAtIF9BUFBfU1RPUkFHRV9XQVNBQklfUkVHSU9OCiAgICAgIC0gX0FQUF9TVE9SQUdFX1dBU0FCSV9CVUNLRVQKICBhcHB3cml0ZS13b3JrZXItY2VydGlmaWNhdGVzOgogICAgaW1hZ2U6ICdhcHB3cml0ZS9hcHB3cml0ZToxLjQnCiAgICBlbnRyeXBvaW50OiB3b3JrZXItY2VydGlmaWNhdGVzCiAgICBsb2dnaW5nOgogICAgICBkcml2ZXI6IGpzb24tZmlsZQogICAgICBvcHRpb25zOgogICAgICAgIG1heC1maWxlOiAnNScKICAgICAgICBtYXgtc2l6ZTogMTBtCiAgICBjb250YWluZXJfbmFtZTogYXBwd3JpdGUtd29ya2VyLWNlcnRpZmljYXRlcwogICAgZGVwZW5kc19vbjoKICAgICAgLSBhcHB3cml0ZS1yZWRpcwogICAgICAtIGFwcHdyaXRlLW1hcmlhZGIKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2FwcHdyaXRlLWNvbmZpZzovc3RvcmFnZS9jb25maWc6cncnCiAgICAgIC0gJ2FwcHdyaXRlLWNlcnRpZmljYXRlczovc3RvcmFnZS9jZXJ0aWZpY2F0ZXM6cncnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBfQVBQX0VOVgogICAgICAtIF9BUFBfV09SS0VSX1BFUl9DT1JFCiAgICAgIC0gX0FQUF9PUEVOU1NMX0tFWV9WMQogICAgICAtIF9BUFBfRE9NQUlOCiAgICAgIC0gX0FQUF9ET01BSU5fVEFSR0VUCiAgICAgIC0gX0FQUF9ET01BSU5fRlVOQ1RJT05TCiAgICAgIC0gX0FQUF9TWVNURU1fU0VDVVJJVFlfRU1BSUxfQUREUkVTUwogICAgICAtIF9BUFBfUkVESVNfSE9TVAogICAgICAtIF9BUFBfUkVESVNfUE9SVAogICAgICAtIF9BUFBfUkVESVNfVVNFUgogICAgICAtIF9BUFBfUkVESVNfUEFTUwogICAgICAtIF9BUFBfREJfSE9TVAogICAgICAtIF9BUFBfREJfUE9SVAogICAgICAtIF9BUFBfREJfU0NIRU1BCiAgICAgIC0gX0FQUF9EQl9VU0VSCiAgICAgIC0gX0FQUF9EQl9QQVNTCiAgICAgIC0gX0FQUF9MT0dHSU5HX1BST1ZJREVSCiAgICAgIC0gX0FQUF9MT0dHSU5HX0NPTkZJRwogIGFwcHdyaXRlLXdvcmtlci1mdW5jdGlvbnM6CiAgICBpbWFnZTogJ2FwcHdyaXRlL2FwcHdyaXRlOjEuNCcKICAgIGVudHJ5cG9pbnQ6IHdvcmtlci1mdW5jdGlvbnMKICAgIGxvZ2dpbmc6CiAgICAgIGRyaXZlcjoganNvbi1maWxlCiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LWZpbGU6ICc1JwogICAgICAgIG1heC1zaXplOiAxMG0KICAgIGNvbnRhaW5lcl9uYW1lOiBhcHB3cml0ZS13b3JrZXItZnVuY3Rpb25zCiAgICBkZXBlbmRzX29uOgogICAgICAtIGFwcHdyaXRlLXJlZGlzCiAgICAgIC0gYXBwd3JpdGUtbWFyaWFkYgogICAgICAtIG9wZW5ydW50aW1lcy1leGVjdXRvcgogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gX0FQUF9FTlYKICAgICAgLSBfQVBQX1dPUktFUl9QRVJfQ09SRQogICAgICAtIF9BUFBfT1BFTlNTTF9LRVlfVjEKICAgICAgLSBfQVBQX1JFRElTX0hPU1QKICAgICAgLSBfQVBQX1JFRElTX1BPUlQKICAgICAgLSBfQVBQX1JFRElTX1VTRVIKICAgICAgLSBfQVBQX1JFRElTX1BBU1MKICAgICAgLSBfQVBQX0RCX0hPU1QKICAgICAgLSBfQVBQX0RCX1BPUlQKICAgICAgLSBfQVBQX0RCX1NDSEVNQQogICAgICAtIF9BUFBfREJfVVNFUgogICAgICAtIF9BUFBfREJfUEFTUwogICAgICAtIF9BUFBfRlVOQ1RJT05TX1RJTUVPVVQKICAgICAgLSBfQVBQX0ZVTkNUSU9OU19CVUlMRF9USU1FT1VUCiAgICAgIC0gX0FQUF9GVU5DVElPTlNfQ1BVUwogICAgICAtIF9BUFBfRlVOQ1RJT05TX01FTU9SWQogICAgICAtIF9BUFBfRVhFQ1VUT1JfU0VDUkVUCiAgICAgIC0gX0FQUF9FWEVDVVRPUl9IT1NUCiAgICAgIC0gX0FQUF9VU0FHRV9TVEFUUwogICAgICAtIF9BUFBfRE9DS0VSX0hVQl9VU0VSTkFNRQogICAgICAtIF9BUFBfRE9DS0VSX0hVQl9QQVNTV09SRAogICAgICAtIF9BUFBfTE9HR0lOR19DT05GSUcKICAgICAgLSBfQVBQX0xPR0dJTkdfUFJPVklERVIKICBhcHB3cml0ZS13b3JrZXItbWFpbHM6CiAgICBpbWFnZTogJ2FwcHdyaXRlL2FwcHdyaXRlOjEuNCcKICAgIGVudHJ5cG9pbnQ6IHdvcmtlci1tYWlscwogICAgbG9nZ2luZzoKICAgICAgZHJpdmVyOiBqc29uLWZpbGUKICAgICAgb3B0aW9uczoKICAgICAgICBtYXgtZmlsZTogJzUnCiAgICAgICAgbWF4LXNpemU6IDEwbQogICAgY29udGFpbmVyX25hbWU6IGFwcHdyaXRlLXdvcmtlci1tYWlscwogICAgZGVwZW5kc19vbjoKICAgICAgLSBhcHB3cml0ZS1yZWRpcwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gX0FQUF9FTlYKICAgICAgLSBfQVBQX1dPUktFUl9QRVJfQ09SRQogICAgICAtIF9BUFBfT1BFTlNTTF9LRVlfVjEKICAgICAgLSBfQVBQX1NZU1RFTV9FTUFJTF9OQU1FCiAgICAgIC0gX0FQUF9TWVNURU1fRU1BSUxfQUREUkVTUwogICAgICAtIF9BUFBfUkVESVNfSE9TVAogICAgICAtIF9BUFBfUkVESVNfUE9SVAogICAgICAtIF9BUFBfUkVESVNfVVNFUgogICAgICAtIF9BUFBfUkVESVNfUEFTUwogICAgICAtIF9BUFBfU01UUF9IT1NUCiAgICAgIC0gX0FQUF9TTVRQX1BPUlQKICAgICAgLSBfQVBQX1NNVFBfU0VDVVJFCiAgICAgIC0gX0FQUF9TTVRQX1VTRVJOQU1FCiAgICAgIC0gX0FQUF9TTVRQX1BBU1NXT1JECiAgICAgIC0gX0FQUF9MT0dHSU5HX1BST1ZJREVSCiAgICAgIC0gX0FQUF9MT0dHSU5HX0NPTkZJRwogIGFwcHdyaXRlLXdvcmtlci1tZXNzYWdpbmc6CiAgICBpbWFnZTogJ2FwcHdyaXRlL2FwcHdyaXRlOjEuNCcKICAgIGVudHJ5cG9pbnQ6IHdvcmtlci1tZXNzYWdpbmcKICAgIGxvZ2dpbmc6CiAgICAgIGRyaXZlcjoganNvbi1maWxlCiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LWZpbGU6ICc1JwogICAgICAgIG1heC1zaXplOiAxMG0KICAgIGNvbnRhaW5lcl9uYW1lOiBhcHB3cml0ZS13b3JrZXItbWVzc2FnaW5nCiAgICBkZXBlbmRzX29uOgogICAgICAtIGFwcHdyaXRlLXJlZGlzCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBfQVBQX0VOVgogICAgICAtIF9BUFBfV09SS0VSX1BFUl9DT1JFCiAgICAgIC0gX0FQUF9SRURJU19IT1NUCiAgICAgIC0gX0FQUF9SRURJU19QT1JUCiAgICAgIC0gX0FQUF9SRURJU19VU0VSCiAgICAgIC0gX0FQUF9SRURJU19QQVNTCiAgICAgIC0gX0FQUF9TTVNfUFJPVklERVIKICAgICAgLSBfQVBQX1NNU19GUk9NCiAgICAgIC0gX0FQUF9MT0dHSU5HX1BST1ZJREVSCiAgICAgIC0gX0FQUF9MT0dHSU5HX0NPTkZJRwogIGFwcHdyaXRlLXdvcmtlci1taWdyYXRpb25zOgogICAgaW1hZ2U6ICdhcHB3cml0ZS9hcHB3cml0ZToxLjQnCiAgICBlbnRyeXBvaW50OiB3b3JrZXItbWlncmF0aW9ucwogICAgbG9nZ2luZzoKICAgICAgZHJpdmVyOiBqc29uLWZpbGUKICAgICAgb3B0aW9uczoKICAgICAgICBtYXgtZmlsZTogJzUnCiAgICAgICAgbWF4LXNpemU6IDEwbQogICAgY29udGFpbmVyX25hbWU6IGFwcHdyaXRlLXdvcmtlci1taWdyYXRpb25zCiAgICBkZXBlbmRzX29uOgogICAgICAtIGFwcHdyaXRlLW1hcmlhZGIKICAgIGVudmlyb25tZW50OgogICAgICAtIF9BUFBfRU5WCiAgICAgIC0gX0FQUF9XT1JLRVJfUEVSX0NPUkUKICAgICAgLSBfQVBQX09QRU5TU0xfS0VZX1YxCiAgICAgIC0gX0FQUF9ET01BSU4KICAgICAgLSBfQVBQX0RPTUFJTl9UQVJHRVQKICAgICAgLSBfQVBQX1NZU1RFTV9TRUNVUklUWV9FTUFJTF9BRERSRVNTCiAgICAgIC0gX0FQUF9SRURJU19IT1NUCiAgICAgIC0gX0FQUF9SRURJU19QT1JUCiAgICAgIC0gX0FQUF9SRURJU19VU0VSCiAgICAgIC0gX0FQUF9SRURJU19QQVNTCiAgICAgIC0gX0FQUF9EQl9IT1NUCiAgICAgIC0gX0FQUF9EQl9QT1JUCiAgICAgIC0gX0FQUF9EQl9TQ0hFTUEKICAgICAgLSBfQVBQX0RCX1VTRVIKICAgICAgLSBfQVBQX0RCX1BBU1MKICAgICAgLSBfQVBQX0xPR0dJTkdfUFJPVklERVIKICAgICAgLSBfQVBQX0xPR0dJTkdfQ09ORklHCiAgICAgIC0gX0FQUF9NSUdSQVRJT05TX0ZJUkVCQVNFX0NMSUVOVF9JRAogICAgICAtIF9BUFBfTUlHUkFUSU9OU19GSVJFQkFTRV9DTElFTlRfU0VDUkVUCiAgYXBwd3JpdGUtbWFpbnRlbmFuY2U6CiAgICBpbWFnZTogJ2FwcHdyaXRlL2FwcHdyaXRlOjEuNCcKICAgIGVudHJ5cG9pbnQ6IG1haW50ZW5hbmNlCiAgICBsb2dnaW5nOgogICAgICBkcml2ZXI6IGpzb24tZmlsZQogICAgICBvcHRpb25zOgogICAgICAgIG1heC1maWxlOiAnNScKICAgICAgICBtYXgtc2l6ZTogMTBtCiAgICBjb250YWluZXJfbmFtZTogYXBwd3JpdGUtbWFpbnRlbmFuY2UKICAgIGRlcGVuZHNfb246CiAgICAgIC0gYXBwd3JpdGUtcmVkaXMKICAgIGVudmlyb25tZW50OgogICAgICAtIF9BUFBfRU5WCiAgICAgIC0gX0FQUF9XT1JLRVJfUEVSX0NPUkUKICAgICAgLSBfQVBQX0RPTUFJTgogICAgICAtIF9BUFBfRE9NQUlOX1RBUkdFVAogICAgICAtIF9BUFBfRE9NQUlOX0ZVTkNUSU9OUwogICAgICAtIF9BUFBfT1BFTlNTTF9LRVlfVjEKICAgICAgLSBfQVBQX1JFRElTX0hPU1QKICAgICAgLSBfQVBQX1JFRElTX1BPUlQKICAgICAgLSBfQVBQX1JFRElTX1VTRVIKICAgICAgLSBfQVBQX1JFRElTX1BBU1MKICAgICAgLSBfQVBQX0RCX0hPU1QKICAgICAgLSBfQVBQX0RCX1BPUlQKICAgICAgLSBfQVBQX0RCX1NDSEVNQQogICAgICAtIF9BUFBfREJfVVNFUgogICAgICAtIF9BUFBfREJfUEFTUwogICAgICAtIF9BUFBfTUFJTlRFTkFOQ0VfSU5URVJWQUwKICAgICAgLSBfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9FWEVDVVRJT04KICAgICAgLSBfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9DQUNIRQogICAgICAtIF9BUFBfTUFJTlRFTkFOQ0VfUkVURU5USU9OX0FCVVNFCiAgICAgIC0gX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fQVVESVQKICAgICAgLSBfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9VU0FHRV9IT1VSTFkKICAgICAgLSBfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9TQ0hFRFVMRVMKICBhcHB3cml0ZS11c2FnZToKICAgIGltYWdlOiAnYXBwd3JpdGUvYXBwd3JpdGU6MS40JwogICAgZW50cnlwb2ludDogdXNhZ2UKICAgIGNvbnRhaW5lcl9uYW1lOiBhcHB3cml0ZS11c2FnZQogICAgbG9nZ2luZzoKICAgICAgZHJpdmVyOiBqc29uLWZpbGUKICAgICAgb3B0aW9uczoKICAgICAgICBtYXgtZmlsZTogJzUnCiAgICAgICAgbWF4LXNpemU6IDEwbQogICAgZGVwZW5kc19vbjoKICAgICAgLSBhcHB3cml0ZS1pbmZsdXhkYgogICAgICAtIGFwcHdyaXRlLW1hcmlhZGIKICAgIGVudmlyb25tZW50OgogICAgICAtIF9BUFBfRU5WCiAgICAgIC0gX0FQUF9XT1JLRVJfUEVSX0NPUkUKICAgICAgLSBfQVBQX09QRU5TU0xfS0VZX1YxCiAgICAgIC0gX0FQUF9EQl9IT1NUCiAgICAgIC0gX0FQUF9EQl9QT1JUCiAgICAgIC0gX0FQUF9EQl9TQ0hFTUEKICAgICAgLSBfQVBQX0RCX1VTRVIKICAgICAgLSBfQVBQX0RCX1BBU1MKICAgICAgLSBfQVBQX0lORkxVWERCX0hPU1QKICAgICAgLSBfQVBQX0lORkxVWERCX1BPUlQKICAgICAgLSBfQVBQX1VTQUdFX0FHR1JFR0FUSU9OX0lOVEVSVkFMCiAgICAgIC0gX0FQUF9SRURJU19IT1NUCiAgICAgIC0gX0FQUF9SRURJU19QT1JUCiAgICAgIC0gX0FQUF9SRURJU19VU0VSCiAgICAgIC0gX0FQUF9SRURJU19QQVNTCiAgICAgIC0gX0FQUF9VU0FHRV9TVEFUUwogICAgICAtIF9BUFBfTE9HR0lOR19QUk9WSURFUgogICAgICAtIF9BUFBfTE9HR0lOR19DT05GSUcKICBhcHB3cml0ZS1zY2hlZHVsZToKICAgIGltYWdlOiAnYXBwd3JpdGUvYXBwd3JpdGU6MS40JwogICAgZW50cnlwb2ludDogc2NoZWR1bGUKICAgIGNvbnRhaW5lcl9uYW1lOiBhcHB3cml0ZS1zY2hlZHVsZQogICAgbG9nZ2luZzoKICAgICAgZHJpdmVyOiBqc29uLWZpbGUKICAgICAgb3B0aW9uczoKICAgICAgICBtYXgtZmlsZTogJzUnCiAgICAgICAgbWF4LXNpemU6IDEwbQogICAgZGVwZW5kc19vbjoKICAgICAgLSBhcHB3cml0ZS1tYXJpYWRiCiAgICAgIC0gYXBwd3JpdGUtcmVkaXMKICAgIGVudmlyb25tZW50OgogICAgICAtIF9BUFBfRU5WCiAgICAgIC0gX0FQUF9XT1JLRVJfUEVSX0NPUkUKICAgICAgLSBfQVBQX09QRU5TU0xfS0VZX1YxCiAgICAgIC0gX0FQUF9SRURJU19IT1NUCiAgICAgIC0gX0FQUF9SRURJU19QT1JUCiAgICAgIC0gX0FQUF9SRURJU19VU0VSCiAgICAgIC0gX0FQUF9SRURJU19QQVNTCiAgICAgIC0gX0FQUF9EQl9IT1NUCiAgICAgIC0gX0FQUF9EQl9QT1JUCiAgICAgIC0gX0FQUF9EQl9TQ0hFTUEKICAgICAgLSBfQVBQX0RCX1VTRVIKICAgICAgLSBfQVBQX0RCX1BBU1MKICBvcGVucnVudGltZXMtZXhlY3V0b3I6CiAgICBjb250YWluZXJfbmFtZTogb3BlbnJ1bnRpbWVzLWV4ZWN1dG9yCiAgICBob3N0bmFtZTogYXBwd3JpdGUtZXhlY3V0b3IKICAgIGxvZ2dpbmc6CiAgICAgIGRyaXZlcjoganNvbi1maWxlCiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LWZpbGU6ICc1JwogICAgICAgIG1heC1zaXplOiAxMG0KICAgIHN0b3Bfc2lnbmFsOiBTSUdJTlQKICAgIGltYWdlOiAnb3BlbnJ1bnRpbWVzL2V4ZWN1dG9yOjAuNC4xJwogICAgdm9sdW1lczoKICAgICAgLSAnL3Zhci9ydW4vZG9ja2VyLnNvY2s6L3Zhci9ydW4vZG9ja2VyLnNvY2snCiAgICAgIC0gJ2FwcHdyaXRlLWJ1aWxkczovc3RvcmFnZS9idWlsZHM6cncnCiAgICAgIC0gJ2FwcHdyaXRlLWZ1bmN0aW9uczovc3RvcmFnZS9mdW5jdGlvbnM6cncnCiAgICAgIC0gJy90bXA6L3RtcDpydycKICAgIGVudmlyb25tZW50OgogICAgICAtIE9QUl9FWEVDVVRPUl9JTkFDVElWRV9UUkVTSE9MRD0kX0FQUF9GVU5DVElPTlNfSU5BQ1RJVkVfVEhSRVNIT0xECiAgICAgIC0gT1BSX0VYRUNVVE9SX01BSU5URU5BTkNFX0lOVEVSVkFMPSRfQVBQX0ZVTkNUSU9OU19NQUlOVEVOQU5DRV9JTlRFUlZBTAogICAgICAtIE9QUl9FWEVDVVRPUl9ORVRXT1JLPSRfQVBQX0ZVTkNUSU9OU19SVU5USU1FU19ORVRXT1JLCiAgICAgIC0gT1BSX0VYRUNVVE9SX0RPQ0tFUl9IVUJfVVNFUk5BTUU9JF9BUFBfRE9DS0VSX0hVQl9VU0VSTkFNRQogICAgICAtIE9QUl9FWEVDVVRPUl9ET0NLRVJfSFVCX1BBU1NXT1JEPSRfQVBQX0RPQ0tFUl9IVUJfUEFTU1dPUkQKICAgICAgLSBPUFJfRVhFQ1VUT1JfRU5WPSRfQVBQX0VOVgogICAgICAtIE9QUl9FWEVDVVRPUl9SVU5USU1FUz0kX0FQUF9GVU5DVElPTlNfUlVOVElNRVMKICAgICAgLSBPUFJfRVhFQ1VUT1JfU0VDUkVUPSRfQVBQX0VYRUNVVE9SX1NFQ1JFVAogICAgICAtIE9QUl9FWEVDVVRPUl9MT0dHSU5HX1BST1ZJREVSPSRfQVBQX0xPR0dJTkdfUFJPVklERVIKICAgICAgLSBPUFJfRVhFQ1VUT1JfTE9HR0lOR19DT05GSUc9JF9BUFBfTE9HR0lOR19DT05GSUcKICAgICAgLSBPUFJfRVhFQ1VUT1JfU1RPUkFHRV9ERVZJQ0U9JF9BUFBfU1RPUkFHRV9ERVZJQ0UKICAgICAgLSBPUFJfRVhFQ1VUT1JfU1RPUkFHRV9TM19BQ0NFU1NfS0VZPSRfQVBQX1NUT1JBR0VfUzNfQUNDRVNTX0tFWQogICAgICAtIE9QUl9FWEVDVVRPUl9TVE9SQUdFX1MzX1NFQ1JFVD0kX0FQUF9TVE9SQUdFX1MzX1NFQ1JFVAogICAgICAtIE9QUl9FWEVDVVRPUl9TVE9SQUdFX1MzX1JFR0lPTj0kX0FQUF9TVE9SQUdFX1MzX1JFR0lPTgogICAgICAtIE9QUl9FWEVDVVRPUl9TVE9SQUdFX1MzX0JVQ0tFVD0kX0FQUF9TVE9SQUdFX1MzX0JVQ0tFVAogICAgICAtIE9QUl9FWEVDVVRPUl9TVE9SQUdFX0RPX1NQQUNFU19BQ0NFU1NfS0VZPSRfQVBQX1NUT1JBR0VfRE9fU1BBQ0VTX0FDQ0VTU19LRVkKICAgICAgLSBPUFJfRVhFQ1VUT1JfU1RPUkFHRV9ET19TUEFDRVNfU0VDUkVUPSRfQVBQX1NUT1JBR0VfRE9fU1BBQ0VTX1NFQ1JFVAogICAgICAtIE9QUl9FWEVDVVRPUl9TVE9SQUdFX0RPX1NQQUNFU19SRUdJT049JF9BUFBfU1RPUkFHRV9ET19TUEFDRVNfUkVHSU9OCiAgICAgIC0gT1BSX0VYRUNVVE9SX1NUT1JBR0VfRE9fU1BBQ0VTX0JVQ0tFVD0kX0FQUF9TVE9SQUdFX0RPX1NQQUNFU19CVUNLRVQKICAgICAgLSBPUFJfRVhFQ1VUT1JfU1RPUkFHRV9CQUNLQkxBWkVfQUNDRVNTX0tFWT0kX0FQUF9TVE9SQUdFX0JBQ0tCTEFaRV9BQ0NFU1NfS0VZCiAgICAgIC0gT1BSX0VYRUNVVE9SX1NUT1JBR0VfQkFDS0JMQVpFX1NFQ1JFVD0kX0FQUF9TVE9SQUdFX0JBQ0tCTEFaRV9TRUNSRVQKICAgICAgLSBPUFJfRVhFQ1VUT1JfU1RPUkFHRV9CQUNLQkxBWkVfUkVHSU9OPSRfQVBQX1NUT1JBR0VfQkFDS0JMQVpFX1JFR0lPTgogICAgICAtIE9QUl9FWEVDVVRPUl9TVE9SQUdFX0JBQ0tCTEFaRV9CVUNLRVQ9JF9BUFBfU1RPUkFHRV9CQUNLQkxBWkVfQlVDS0VUCiAgICAgIC0gT1BSX0VYRUNVVE9SX1NUT1JBR0VfTElOT0RFX0FDQ0VTU19LRVk9JF9BUFBfU1RPUkFHRV9MSU5PREVfQUNDRVNTX0tFWQogICAgICAtIE9QUl9FWEVDVVRPUl9TVE9SQUdFX0xJTk9ERV9TRUNSRVQ9JF9BUFBfU1RPUkFHRV9MSU5PREVfU0VDUkVUCiAgICAgIC0gT1BSX0VYRUNVVE9SX1NUT1JBR0VfTElOT0RFX1JFR0lPTj0kX0FQUF9TVE9SQUdFX0xJTk9ERV9SRUdJT04KICAgICAgLSBPUFJfRVhFQ1VUT1JfU1RPUkFHRV9MSU5PREVfQlVDS0VUPSRfQVBQX1NUT1JBR0VfTElOT0RFX0JVQ0tFVAogICAgICAtIE9QUl9FWEVDVVRPUl9TVE9SQUdFX1dBU0FCSV9BQ0NFU1NfS0VZPSRfQVBQX1NUT1JBR0VfV0FTQUJJX0FDQ0VTU19LRVkKICAgICAgLSBPUFJfRVhFQ1VUT1JfU1RPUkFHRV9XQVNBQklfU0VDUkVUPSRfQVBQX1NUT1JBR0VfV0FTQUJJX1NFQ1JFVAogICAgICAtIE9QUl9FWEVDVVRPUl9TVE9SQUdFX1dBU0FCSV9SRUdJT049JF9BUFBfU1RPUkFHRV9XQVNBQklfUkVHSU9OCiAgICAgIC0gT1BSX0VYRUNVVE9SX1NUT1JBR0VfV0FTQUJJX0JVQ0tFVD0kX0FQUF9TVE9SQUdFX1dBU0FCSV9CVUNLRVQKICBhcHB3cml0ZS1tYXJpYWRiOgogICAgaW1hZ2U6ICdtYXJpYWRiOjEwLjcnCiAgICBjb250YWluZXJfbmFtZTogYXBwd3JpdGUtbWFyaWFkYgogICAgbG9nZ2luZzoKICAgICAgZHJpdmVyOiBqc29uLWZpbGUKICAgICAgb3B0aW9uczoKICAgICAgICBtYXgtZmlsZTogJzUnCiAgICAgICAgbWF4LXNpemU6IDEwbQogICAgdm9sdW1lczoKICAgICAgLSAnYXBwd3JpdGUtbWFyaWFkYjovdmFyL2xpYi9teXNxbDpydycKICAgIGVudmlyb25tZW50OgogICAgICAtICdNWVNRTF9ST09UX1BBU1NXT1JEPSR7X0FQUF9EQl9ST09UX1BBU1N9JwogICAgICAtICdNWVNRTF9EQVRBQkFTRT0ke19BUFBfREJfU0NIRU1BfScKICAgICAgLSAnTVlTUUxfVVNFUj0ke19BUFBfREJfVVNFUn0nCiAgICAgIC0gJ01ZU1FMX1BBU1NXT1JEPSR7X0FQUF9EQl9QQVNTfScKICAgIGNvbW1hbmQ6ICdteXNxbGQgLS1pbm5vZGItZmx1c2gtbWV0aG9kPWZzeW5jJwogIGFwcHdyaXRlLXJlZGlzOgogICAgaW1hZ2U6ICdyZWRpczo3LjAuNC1hbHBpbmUnCiAgICBjb250YWluZXJfbmFtZTogYXBwd3JpdGUtcmVkaXMKICAgIGxvZ2dpbmc6CiAgICAgIGRyaXZlcjoganNvbi1maWxlCiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LWZpbGU6ICc1JwogICAgICAgIG1heC1zaXplOiAxMG0KICAgIGNvbW1hbmQ6ICJyZWRpcy1zZXJ2ZXIgLS1tYXhtZW1vcnkgICAgICAgICAgICA1MTJtYiAtLW1heG1lbW9yeS1wb2xpY3kgICAgIGFsbGtleXMtbHJ1IC0tbWF4bWVtb3J5LXNhbXBsZXMgICAgNVxuIgogICAgdm9sdW1lczoKICAgICAgLSAnYXBwd3JpdGUtcmVkaXM6L2RhdGE6cncnCiAgYXBwd3JpdGUtaW5mbHV4ZGI6CiAgICBpbWFnZTogJ2FwcHdyaXRlL2luZmx1eGRiOjEuNS4wJwogICAgY29udGFpbmVyX25hbWU6IGFwcHdyaXRlLWluZmx1eGRiCiAgICBsb2dnaW5nOgogICAgICBkcml2ZXI6IGpzb24tZmlsZQogICAgICBvcHRpb25zOgogICAgICAgIG1heC1maWxlOiAnNScKICAgICAgICBtYXgtc2l6ZTogMTBtCiAgICB2b2x1bWVzOgogICAgICAtICdhcHB3cml0ZS1pbmZsdXhkYjovdmFyL2xpYi9pbmZsdXhkYjpydycKICBhcHB3cml0ZS10ZWxlZ3JhZjoKICAgIGltYWdlOiAnYXBwd3JpdGUvdGVsZWdyYWY6MS40LjAnCiAgICBjb250YWluZXJfbmFtZTogYXBwd3JpdGUtdGVsZWdyYWYKICAgIGxvZ2dpbmc6CiAgICAgIGRyaXZlcjoganNvbi1maWxlCiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LWZpbGU6ICc1JwogICAgICAgIG1heC1zaXplOiAxMG0KICAgIGVudmlyb25tZW50OgogICAgICAtIF9BUFBfSU5GTFVYREJfSE9TVAogICAgICAtIF9BUFBfSU5GTFVYREJfUE9SVAp2b2x1bWVzOgogIGFwcHdyaXRlLW1hcmlhZGI6IG51bGwKICBhcHB3cml0ZS1yZWRpczogbnVsbAogIGFwcHdyaXRlLWNhY2hlOiBudWxsCiAgYXBwd3JpdGUtdXBsb2FkczogbnVsbAogIGFwcHdyaXRlLWNlcnRpZmljYXRlczogbnVsbAogIGFwcHdyaXRlLWZ1bmN0aW9uczogbnVsbAogIGFwcHdyaXRlLWJ1aWxkczogbnVsbAogIGFwcHdyaXRlLWluZmx1eGRiOiBudWxsCiAgYXBwd3JpdGUtY29uZmlnOiBudWxsCg==", "tags": [ "backend-as-a-service", "platform" ], + "logo": "svgs\/appwrite.svg", "envs": "X0FQUF9FTlY9cHJvZHVjdGlvbgpfQVBQX0xPQ0FMRT1lbgpfQVBQX09QVElPTlNfQUJVU0U9ZW5hYmxlZApfQVBQX09QVElPTlNfRk9SQ0VfSFRUUFM9ZGlzYWJsZWQKX0FQUF9PUEVOU1NMX0tFWV9WMT0KX0FQUF9ET01BSU49Cl9BUFBfRE9NQUlOX1RBUkdFVD0KX0FQUF9ET01BSU5fRlVOQ1RJT05TPQpfQVBQX0NPTlNPTEVfV0hJVEVMSVNUX1JPT1Q9ZW5hYmxlZApfQVBQX0NPTlNPTEVfV0hJVEVMSVNUX0VNQUlMUz0KX0FQUF9DT05TT0xFX1dISVRFTElTVF9JUFM9Cl9BUFBfU1lTVEVNX0VNQUlMX05BTUU9QXBwd3JpdGUKX0FQUF9TWVNURU1fRU1BSUxfQUREUkVTUz10ZWFtQGFwcHdyaXRlLmlvCl9BUFBfU1lTVEVNX1JFU1BPTlNFX0ZPUk1BVD0KX0FQUF9TWVNURU1fU0VDVVJJVFlfRU1BSUxfQUREUkVTUz1jZXJ0c0BhcHB3cml0ZS5pbwpfQVBQX1VTQUdFX1NUQVRTPWVuYWJsZWQKX0FQUF9MT0dHSU5HX1BST1ZJREVSPQpfQVBQX0xPR0dJTkdfQ09ORklHPQpfQVBQX1VTQUdFX0FHR1JFR0FUSU9OX0lOVEVSVkFMPTMwCl9BUFBfVVNBR0VfVElNRVNFUklFU19JTlRFUlZBTD0zMApfQVBQX1VTQUdFX0RBVEFCQVNFX0lOVEVSVkFMPTkwMApfQVBQX1dPUktFUl9QRVJfQ09SRT02Cl9BUFBfUkVESVNfSE9TVD1hcHB3cml0ZS1yZWRpcwpfQVBQX1JFRElTX1BPUlQ9NjM3OQpfQVBQX1JFRElTX1VTRVI9Cl9BUFBfUkVESVNfUEFTUz0KX0FQUF9EQl9IT1NUPWFwcHdyaXRlLW1hcmlhZGIKX0FQUF9EQl9QT1JUPTMzMDYKX0FQUF9EQl9TQ0hFTUE9YXBwd3JpdGUKX0FQUF9EQl9VU0VSPSRTRVJWSUNFX1VTRVJfTVlTUUwKX0FQUF9EQl9QQVNTPSRTRVJWSUNFX1BBU1NXT1JEX01ZU1FMCl9BUFBfREJfUk9PVF9QQVNTPSRTRVJWSUNFX1BBU1NXT1JEX1JPT1RNWVNRTApfQVBQX0lORkxVWERCX0hPU1Q9YXBwd3JpdGUtaW5mbHV4ZGIKX0FQUF9JTkZMVVhEQl9QT1JUPTgwODYKX0FQUF9TVEFUU0RfSE9TVD1hcHB3cml0ZS10ZWxlZ3JhZgpfQVBQX1NUQVRTRF9QT1JUPTgxMjUKX0FQUF9TTVRQX0hPU1Q9Cl9BUFBfU01UUF9QT1JUPQpfQVBQX1NNVFBfU0VDVVJFPQpfQVBQX1NNVFBfVVNFUk5BTUU9Cl9BUFBfU01UUF9QQVNTV09SRD0KX0FQUF9TTVNfUFJPVklERVI9Cl9BUFBfU01TX0ZST009Cl9BUFBfU1RPUkFHRV9MSU1JVD0zMDAwMDAwMApfQVBQX1NUT1JBR0VfUFJFVklFV19MSU1JVD0yMDAwMDAwMApfQVBQX1NUT1JBR0VfQU5USVZJUlVTPWRpc2FibGVkCl9BUFBfU1RPUkFHRV9BTlRJVklSVVNfSE9TVD1hcHB3cml0ZS1jbGFtYXYKX0FQUF9TVE9SQUdFX0FOVElWSVJVU19QT1JUPTMzMTAKX0FQUF9TVE9SQUdFX0RFVklDRT1sb2NhbApfQVBQX1NUT1JBR0VfUzNfQUNDRVNTX0tFWT0KX0FQUF9TVE9SQUdFX1MzX1NFQ1JFVD0KX0FQUF9TVE9SQUdFX1MzX1JFR0lPTj11cy1lYXN0LTEKX0FQUF9TVE9SQUdFX1MzX0JVQ0tFVD0KX0FQUF9TVE9SQUdFX0RPX1NQQUNFU19BQ0NFU1NfS0VZPQpfQVBQX1NUT1JBR0VfRE9fU1BBQ0VTX1NFQ1JFVD0KX0FQUF9TVE9SQUdFX0RPX1NQQUNFU19SRUdJT049dXMtZWFzdC0xCl9BUFBfU1RPUkFHRV9ET19TUEFDRVNfQlVDS0VUPQpfQVBQX1NUT1JBR0VfQkFDS0JMQVpFX0FDQ0VTU19LRVk9Cl9BUFBfU1RPUkFHRV9CQUNLQkxBWkVfU0VDUkVUPQpfQVBQX1NUT1JBR0VfQkFDS0JMQVpFX1JFR0lPTj11cy13ZXN0LTAwNApfQVBQX1NUT1JBR0VfQkFDS0JMQVpFX0JVQ0tFVD0KX0FQUF9TVE9SQUdFX0xJTk9ERV9BQ0NFU1NfS0VZPQpfQVBQX1NUT1JBR0VfTElOT0RFX1NFQ1JFVD0KX0FQUF9TVE9SQUdFX0xJTk9ERV9SRUdJT049ZXUtY2VudHJhbC0xCl9BUFBfU1RPUkFHRV9MSU5PREVfQlVDS0VUPQpfQVBQX1NUT1JBR0VfV0FTQUJJX0FDQ0VTU19LRVk9Cl9BUFBfU1RPUkFHRV9XQVNBQklfU0VDUkVUPQpfQVBQX1NUT1JBR0VfV0FTQUJJX1JFR0lPTj1ldS1jZW50cmFsLTEKX0FQUF9TVE9SQUdFX1dBU0FCSV9CVUNLRVQ9Cl9BUFBfRlVOQ1RJT05TX1NJWkVfTElNSVQ9MzAwMDAwMDAKX0FQUF9GVU5DVElPTlNfVElNRU9VVD05MDAKX0FQUF9GVU5DVElPTlNfQlVJTERfVElNRU9VVD05MDAKX0FQUF9GVU5DVElPTlNfQ09OVEFJTkVSUz0xMApfQVBQX0ZVTkNUSU9OU19DUFVTPTAKX0FQUF9GVU5DVElPTlNfTUVNT1JZPTAKX0FQUF9GVU5DVElPTlNfTUVNT1JZX1NXQVA9MApfQVBQX0ZVTkNUSU9OU19SVU5USU1FUz1ub2RlLTIwLjAscGhwLTguMixweXRob24tMy4xMSxydWJ5LTMuMgpfQVBQX0VYRUNVVE9SX1NFQ1JFVD0kU0VSVklDRV9QQVNTV09SRF82NF9BUFBXUklURQpfQVBQX0VYRUNVVE9SX0hPU1Q9aHR0cDovL2FwcHdyaXRlLWV4ZWN1dG9yL3YxCl9BUFBfRVhFQ1VUT1JfUlVOVElNRV9ORVRXT1JLPWFwcHdyaXRlX3J1bnRpbWVzCl9BUFBfRlVOQ1RJT05TX0lOQUNUSVZFX1RIUkVTSE9MRD02MApET0NLRVJIVUJfUFVMTF9VU0VSTkFNRT0KRE9DS0VSSFVCX1BVTExfUEFTU1dPUkQ9CkRPQ0tFUkhVQl9QVUxMX0VNQUlMPQpPUEVOX1JVTlRJTUVTX05FVFdPUks9YXBwd3JpdGVfcnVudGltZXMKX0FQUF9GVU5DVElPTlNfUlVOVElNRVNfTkVUV09SSz1ydW50aW1lcwpfQVBQX0RPQ0tFUl9IVUJfVVNFUk5BTUU9Cl9BUFBfRE9DS0VSX0hVQl9QQVNTV09SRD0KX0FQUF9GVU5DVElPTlNfTUFJTlRFTkFOQ0VfSU5URVJWQUw9MzYwMApfQVBQX1ZDU19HSVRIVUJfQVBQX05BTUU9Cl9BUFBfVkNTX0dJVEhVQl9QUklWQVRFX0tFWT0KX0FQUF9WQ1NfR0lUSFVCX0FQUF9JRD0KX0FQUF9WQ1NfR0lUSFVCX0NMSUVOVF9JRD0KX0FQUF9WQ1NfR0lUSFVCX0NMSUVOVF9TRUNSRVQ9Cl9BUFBfVkNTX0dJVEhVQl9XRUJIT09LX1NFQ1JFVD0KX0FQUF9NQUlOVEVOQU5DRV9JTlRFUlZBTD04NjQwMApfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9DQUNIRT0yNTkyMDAwCl9BUFBfTUFJTlRFTkFOQ0VfUkVURU5USU9OX0VYRUNVVElPTj0xMjA5NjAwCl9BUFBfTUFJTlRFTkFOQ0VfUkVURU5USU9OX0FVRElUPTEyMDk2MDAKX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fQUJVU0U9ODY0MDAKX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fVVNBR0VfSE9VUkxZPTg2NDAwMDAKX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fU0NIRURVTEVTPTg2NDAwCl9BUFBfR1JBUEhRTF9NQVhfQkFUQ0hfU0laRT0xMApfQVBQX0dSQVBIUUxfTUFYX0NPTVBMRVhJVFk9MjUwCl9BUFBfR1JBUEhRTF9NQVhfREVQVEg9MwpfQVBQX01JR1JBVElPTlNfRklSRUJBU0VfQ0xJRU5UX0lEPQpfQVBQX01JR1JBVElPTlNfRklSRUJBU0VfQ0xJRU5UX1NFQ1JFVD0KX0FQUF9BU1NJU1RBTlRfT1BFTkFJX0FQSV9LRVk9Cg==" }, "babybuddy": { "documentation": "https:\/\/docs.baby-buddy.net", - "slogan": "Baby Buddy is an open-source web application that helps parents track their baby's daily activities, growth, and health with ease.", + "slogan": "Baby Buddy helps parents track their baby's daily activities, growth, and health with ease.", "compose": "c2VydmljZXM6CiAgYmFieWJ1ZGR5OgogICAgaW1hZ2U6ICdsc2NyLmlvL2xpbnV4c2VydmVyL2JhYnlidWRkeTpsYXRlc3QnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fQkFCWUJVRERZCiAgICAgIC0gUFVJRD0xMDAwCiAgICAgIC0gUEdJRD0xMDAwCiAgICAgIC0gVFo9RXVyb3BlL01hZHJpZAogICAgICAtIENTUkZfVFJVU1RFRF9PUklHSU5TPSRTRVJWSUNFX0ZRRE5fQkFCWUJVRERZCiAgICB2b2x1bWVzOgogICAgICAtICdiYWJ5YnVkZHktY29uZmlnOi9jb25maWcnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy1mJwogICAgICAgIC0gJ2h0dHA6Ly9sb2NhbGhvc3Q6ODAwMCcKICAgICAgaW50ZXJ2YWw6IDJzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAxNQo=", "tags": [ "baby", @@ -31,7 +33,8 @@ "health", "growth", "activities" - ] + ], + "logo": "svgs\/babybuddy.png" }, "budge": { "documentation": "https:\/\/github.com\/linuxserver\/budge", @@ -41,21 +44,23 @@ "personal finance", "budgeting", "expense tracking" - ] + ], + "logo": [] }, "code-server": { - "documentation": "https:\/\/coder.com\/docs\/code-server\/latest\/guide", - "slogan": "Code-Server is a self-hosted, web-based code editor that enables remote coding and collaboration from any device, anywhere.", + "documentation": "https:\/\/coder.com\/docs\/code-server\/latest", + "slogan": "Code-Server is a web-based code editor that enables remote coding and collaboration from any device, anywhere.", "compose": "c2VydmljZXM6CiAgY29kZS1zZXJ2ZXI6CiAgICBpbWFnZTogJ2xzY3IuaW8vbGludXhzZXJ2ZXIvY29kZS1zZXJ2ZXI6bGF0ZXN0JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX0NPREVTRVJWRVIKICAgICAgLSBQVUlEPTEwMDAKICAgICAgLSBQR0lEPTEwMDAKICAgICAgLSBUWj1FdXJvcGUvTWFkcmlkCiAgICAgIC0gUEFTU1dPUkQ9JFNFUlZJQ0VfUEFTU1dPUkRfNjRfUEFTU1dPUkRDT0RFU0VSVkVSCiAgICAgIC0gU1VET19QQVNTV09SRD0kU0VSVklDRV9QQVNTV09SRF9TVURPQ09ERVNFUlZFUgogICAgICAtIERFRkFVTFRfV09SS1NQQUNFPS9jb25maWcvd29ya3NwYWNlCiAgICB2b2x1bWVzOgogICAgICAtICdjb2RlLXNlcnZlci1jb25maWc6L2NvbmZpZycKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBjdXJsCiAgICAgICAgLSAnLWYnCiAgICAgICAgLSAnaHR0cDovL2xvY2FsaG9zdDo4NDQzJwogICAgICBpbnRlcnZhbDogMnMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDE1Cg==", "tags": [ "code", "editor", "remote", "collaboration" - ] + ], + "logo": "svgs\/code-server.svg" }, "dashboard": { - "documentation": "https:\/\/github.com\/phntxx\/dashboard\/wiki\/Installation#installation-using-docker", + "documentation": "https:\/\/github.com\/phntxx\/dashboard?tab=readme-ov-file#dashboard", "slogan": "A dashboard. Inspired by SUI, it offers simple customization through JSON-files and a handy search bar to help you browse the internet more efficiently.", "compose": "c2VydmljZXM6CiAgZGFzaGJvYXJkOgogICAgaW1hZ2U6ICdwaG50eHgvZGFzaGJvYXJkOmxhdGVzdCcKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9EQVNIQk9BUkQKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2Rhc2hib2FyZC1kYXRhOi9hcHAvZGF0YScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBjdXJsCiAgICAgICAgLSAnLWYnCiAgICAgICAgLSAnaHR0cDovL2xvY2FsaG9zdDo4MDgwJwogICAgICBpbnRlcnZhbDogMnMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDE1Cg==", "tags": [ @@ -63,29 +68,32 @@ "web", "search", "bookmarks" - ] + ], + "logo": [] }, "directus-with-postgresql": { - "documentation": "https:\/\/docs.directus.io\/self-hosted\/quickstart.html", - "slogan": "Directus is an open-source tool that wraps custom SQL databases with a dynamic API, and provides an intuitive admin app for managing its content.", + "documentation": "https:\/\/directus.io", + "slogan": "Directus wraps custom SQL databases with a dynamic API, and provides an intuitive admin app for managing its content.", "compose": "c2VydmljZXM6CiAgZGlyZWN0dXM6CiAgICBpbWFnZTogJ2RpcmVjdHVzL2RpcmVjdHVzOjEwJwogICAgdm9sdW1lczoKICAgICAgLSAnZGlyZWN0dXMtdXBsb2FkczovZGlyZWN0dXMvdXBsb2FkcycKICAgICAgLSAnZGlyZWN0dXMtZXh0ZW5zaW9uczovZGlyZWN0dXMvZXh0ZW5zaW9ucycKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9ESVJFQ1RVUwogICAgICAtIEtFWT0kU0VSVklDRV9CQVNFNjRfNjRfS0VZCiAgICAgIC0gU0VDUkVUPSRTRVJWSUNFX0JBU0U2NF82NF9TRUNSRVQKICAgICAgLSAnQURNSU5fRU1BSUw9JHtBRE1JTl9FTUFJTDotYWRtaW5AZXhhbXBsZS5jb219JwogICAgICAtIEFETUlOX1BBU1NXT1JEPSRTRVJWSUNFX1BBU1NXT1JEX0FETUlOCiAgICAgIC0gREJfQ0xJRU5UPXBvc3RncmVzCiAgICAgIC0gREJfSE9TVD1wb3N0Z3Jlc3FsCiAgICAgIC0gREJfUE9SVD01NDMyCiAgICAgIC0gJ0RCX0RBVEFCQVNFPSR7UE9TVEdSRVNRTF9EQVRBQkFTRTotZGlyZWN0dXN9JwogICAgICAtIERCX1VTRVI9JFNFUlZJQ0VfVVNFUl9QT1NUR1JFU1FMCiAgICAgIC0gREJfUEFTU1dPUkQ9JFNFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVNRTAogICAgICAtIFJFRElTX0hPU1Q9cmVkaXMKICAgICAgLSBSRURJU19QT1JUPTYzNzkKICAgICAgLSBXRUJTT0NLRVRTX0VOQUJMRUQ9dHJ1ZQogIHBvc3RncmVzcWw6CiAgICBpbWFnZTogJ3Bvc3RncmVzOjE2LWFscGluZScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2RpcmVjdHVzLXBvc3RncmVzcWwtZGF0YTovdmFyL2xpYi9wb3N0Z3Jlc3FsL2RhdGEnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnUE9TVEdSRVNfVVNFUj0ke1NFUlZJQ0VfVVNFUl9QT1NUR1JFU1FMfScKICAgICAgLSAnUE9TVEdSRVNfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTUUx9JwogICAgICAtICdQT1NUR1JFU19EQj0ke1BPU1RHUkVTUUxfREFUQUJBU0U6LWRpcmVjdHVzfScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAncGdfaXNyZWFkeSAtVSAkJHtQT1NUR1JFU19VU0VSfSAtZCAkJHtQT1NUR1JFU19EQn0nCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAKICByZWRpczoKICAgIGltYWdlOiAncmVkaXM6Ny1hbHBpbmUnCiAgICBjb21tYW5kOiAncmVkaXMtc2VydmVyIC0tYXBwZW5kb25seSB5ZXMnCiAgICB2b2x1bWVzOgogICAgICAtICdkaXJlY3R1cy1yZWRpcy1kYXRhOi9kYXRhJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIHJlZGlzLWNsaQogICAgICAgIC0gcGluZwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCg==", "tags": [ "directus", "cms", "database", "sql" - ] + ], + "logo": "svgs\/directus.svg" }, "directus": { - "documentation": "https:\/\/docs.directus.io\/self-hosted\/quickstart.html", - "slogan": "Directus is an open-source tool that wraps custom SQL databases with a dynamic API, and provides an intuitive admin app for managing its content.", + "documentation": "https:\/\/directus.io", + "slogan": "Directus wraps custom SQL databases with a dynamic API, and provides an intuitive admin app for managing its content.", "compose": "c2VydmljZXM6CiAgZGlyZWN0dXM6CiAgICBpbWFnZTogJ2RpcmVjdHVzL2RpcmVjdHVzOjEwLjcnCiAgICB2b2x1bWVzOgogICAgICAtICdkaXJlY3R1cy1kYXRhYmFzZTovZGlyZWN0dXMvZGF0YWJhc2UnCiAgICAgIC0gJ2RpcmVjdHVzLXVwbG9hZHM6L2RpcmVjdHVzL3VwbG9hZHMnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fRElSRUNUVVMKICAgICAgLSBLRVk9JFNFUlZJQ0VfQkFTRTY0XzY0X0tFWQogICAgICAtIFNFQ1JFVD0kU0VSVklDRV9CQVNFNjRfNjRfU0VDUkVUCiAgICAgIC0gJ0FETUlOX0VNQUlMPSR7QURNSU5fRU1BSUw6LWFkbWluQGV4YW1wbGUuY29tfScKICAgICAgLSBBRE1JTl9QQVNTV09SRD0kU0VSVklDRV9QQVNTV09SRF9BRE1JTgogICAgICAtIERCX0NMSUVOVD1zcWxpdGUzCiAgICAgIC0gREJfRklMRU5BTUU9L2RpcmVjdHVzL2RhdGFiYXNlL2RhdGEuZGIKICAgICAgLSBXRUJTT0NLRVRTX0VOQUJMRUQ9dHJ1ZQo=", "tags": [ "directus", "cms", "database", "sql" - ] + ], + "logo": "svgs\/directus.svg" }, "docker-registry": { "documentation": "https:\/\/docs.docker.com\/registry\/", @@ -95,31 +103,34 @@ "registry", "images", "docker" - ] + ], + "logo": "svgs\/docker-registry.png" }, "dokuwiki": { - "documentation": "https:\/\/www.dokuwiki.org\/faq", - "slogan": "A lightweight and easy-to-use wiki platform for creating and managing documentation and knowledge bases with simplicity and flexibility.", + "documentation": "https:\/\/www.dokuwiki.org\/", + "slogan": "A lightweight and easy-to-use wiki platform for creating and managing documentation and knowledge bases.", "compose": "c2VydmljZXM6CiAgZG9rdXdpa2k6CiAgICBpbWFnZTogJ2xzY3IuaW8vbGludXhzZXJ2ZXIvZG9rdXdpa2k6bGF0ZXN0JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX0RPS1VXSUtJCiAgICAgIC0gUFVJRD0xMDAwCiAgICAgIC0gUEdJRD0xMDAwCiAgICAgIC0gVFo9RXVyb3BlL01hZHJpZAogICAgdm9sdW1lczoKICAgICAgLSAnZG9rdXdpa2ktY29uZmlnOi9jb25maWcnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy1mJwogICAgICAgIC0gJ2h0dHA6Ly9sb2NhbGhvc3Q6ODAnCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMTUK", "tags": [ "wiki", "documentation", "knowledge", "base" - ] + ], + "logo": "svgs\/dokuwiki.png" }, "duplicati": { - "documentation": "https:\/\/duplicati.readthedocs.io\/en\/latest\/02-installation\/", - "slogan": "Duplicati is an open-source backup solution, allowing you to safeguard your data with ease through scheduled backups and encryption.", + "documentation": "https:\/\/duplicati.readthedocs.io", + "slogan": "Duplicati is a backup solution, allowing you to make scheduled backups with encryption.", "compose": "c2VydmljZXM6CiAgZHVwbGljYXRpOgogICAgaW1hZ2U6ICdsc2NyLmlvL2xpbnV4c2VydmVyL2R1cGxpY2F0aTpsYXRlc3QnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fRFVQTElDQVRJCiAgICAgIC0gUFVJRD0xMDAwCiAgICAgIC0gUEdJRD0xMDAwCiAgICAgIC0gVFo9RXVyb3BlL01hZHJpZAogICAgdm9sdW1lczoKICAgICAgLSAnZHVwbGljYXRpLWNvbmZpZzovY29uZmlnJwogICAgICAtICdkdXBsaWNhdGktYmFja3VwczovYmFja3VwcycKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBjdXJsCiAgICAgICAgLSAnLWYnCiAgICAgICAgLSAnaHR0cDovL2xvY2FsaG9zdDo4MjAwJwogICAgICBpbnRlcnZhbDogMnMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDE1Cg==", "tags": [ "backup", "encryption" - ] + ], + "logo": "svgs\/duplicati.webp" }, "emby": { "documentation": "https:\/\/emby.media\/support\/articles\/Home.html", - "slogan": "A media server software that allows you to organize, stream, and access your multimedia content effortlessly, making it easy to enjoy your favorite movies, TV shows, music, and more.", + "slogan": "A media server software that allows you to organize, stream, and access your multimedia content effortlessly.", "compose": "c2VydmljZXM6CiAgZW1ieToKICAgIGltYWdlOiAnbHNjci5pby9saW51eHNlcnZlci9lbWJ5OmxhdGVzdCcKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9FTUJZCiAgICAgIC0gUFVJRD0xMDAwCiAgICAgIC0gUEdJRD0xMDAwCiAgICAgIC0gVFo9RXVyb3BlL01hZHJpZAogICAgdm9sdW1lczoKICAgICAgLSAnZW1ieS1jb25maWc6L2NvbmZpZycKICAgICAgLSAnZW1ieS10dnNob3dzOi90dnNob3dzJwogICAgICAtICdlbWJ5LW1vdmllczovbW92aWVzJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGN1cmwKICAgICAgICAtICctZicKICAgICAgICAtICdodHRwOi8vbG9jYWxob3N0OjgwOTYnCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMTUK", "tags": [ "media", @@ -127,11 +138,12 @@ "movies", "tv", "music" - ] + ], + "logo": "svgs\/emby.png" }, "embystat": { - "documentation": "https:\/\/github.com\/mregni\/EmbyStat\/wiki\/docker", - "slogan": "EmyStat is an open-source, self-hosted web analytics tool, designed to provide insight into website traffic and user behavior, of your local Emby deployment, all within your control.", + "documentation": "https:\/\/github.com\/mregni\/EmbyStat", + "slogan": "EmnyStat is a web analytics tool, designed to provide insight into website traffic and user behavior.", "compose": "c2VydmljZXM6CiAgZW1ieXN0YXQ6CiAgICBpbWFnZTogJ2xzY3IuaW8vbGludXhzZXJ2ZXIvZW1ieXN0YXQ6bGF0ZXN0JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX0VNQllTVEFUCiAgICAgIC0gUFVJRD0xMDAwCiAgICAgIC0gUEdJRD0xMDAwCiAgICAgIC0gVFo9RXVyb3BlL01hZHJpZAogICAgdm9sdW1lczoKICAgICAgLSAnZW1ieXN0YXQtY29uZmlnOi9jb25maWcnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy1mJwogICAgICAgIC0gJ2h0dHA6Ly9sb2NhbGhvc3Q6NjU1NScKICAgICAgaW50ZXJ2YWw6IDJzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAxNQo=", "tags": [ "media", @@ -139,20 +151,22 @@ "movies", "tv", "music" - ] + ], + "logo": [] }, "fider": { - "documentation": "https:\/\/fider.io\/docs", - "slogan": "Fider is an open-source feedback platform for collecting and managing user feedback, helping you prioritize improvements to your products and services.", + "documentation": "https:\/\/fider.io", + "slogan": "Fider is a feedback platform for collecting and managing user feedback.", "compose": "c2VydmljZXM6CiAgZmlkZXI6CiAgICBpbWFnZTogJ2dldGZpZGVyL2ZpZGVyOnN0YWJsZScKICAgIGVudmlyb25tZW50OgogICAgICBCQVNFX1VSTDogJFNFUlZJQ0VfRlFETl9GSURFUgogICAgICBEQVRBQkFTRV9VUkw6ICdwb3N0Z3JlczovLyRTRVJWSUNFX1VTRVJfTVlTUUw6JFNFUlZJQ0VfUEFTU1dPUkRfTVlTUUxAZGF0YWJhc2U6NTQzMi9maWRlcj9zc2xtb2RlPWRpc2FibGUnCiAgICAgIEpXVF9TRUNSRVQ6ICRTRVJWSUNFX1BBU1NXT1JEXzY0X0ZJREVSCiAgICAgIEVNQUlMX05PUkVQTFk6ICcke0VNQUlMX05PUkVQTFk6LW5vcmVwbHlAZXhhbXBsZS5jb219JwogICAgICBFTUFJTF9NQUlMR1VOX0FQSTogJEVNQUlMX01BSUxHVU5fQVBJCiAgICAgIEVNQUlMX01BSUxHVU5fRE9NQUlOOiAkRU1BSUxfTUFJTEdVTl9ET01BSU4KICAgICAgRU1BSUxfTUFJTEdVTl9SRUdJT046ICRFTUFJTF9NQUlMR1VOX1JFR0lPTgogICAgICBFTUFJTF9TTVRQX0hPU1Q6ICcke0VNQUlMX1NNVFBfSE9TVDotc210cC5tYWlsZ3VuLmNvbX0nCiAgICAgIEVNQUlMX1NNVFBfUE9SVDogJyR7RU1BSUxfU01UUF9QT1JUOi01ODd9JwogICAgICBFTUFJTF9TTVRQX1VTRVJOQU1FOiAnJHtFTUFJTF9TTVRQX1VTRVJOQU1FOi1wb3N0bWFzdGVyQG1haWxndW4uY29tfScKICAgICAgRU1BSUxfU01UUF9QQVNTV09SRDogJEVNQUlMX1NNVFBfUEFTU1dPUkQKICAgICAgRU1BSUxfU01UUF9FTkFCTEVfU1RBUlRUTFM6ICRFTUFJTF9TTVRQX0VOQUJMRV9TVEFSVFRMUwogICAgICBFTUFJTF9BV1NTRVNfUkVHSU9OOiAkRU1BSUxfQVdTU0VTX1JFR0lPTgogICAgICBFTUFJTF9BV1NTRVNfQUNDRVNTX0tFWV9JRDogJEVNQUlMX0FXU1NFU19BQ0NFU1NfS0VZX0lECiAgICAgIEVNQUlMX0FXU1NFU19TRUNSRVRfQUNDRVNTX0tFWTogJEVNQUlMX0FXU1NFU19TRUNSRVRfQUNDRVNTX0tFWQogIGRhdGFiYXNlOgogICAgaW1hZ2U6ICdwb3N0Z3JlczoxMicKICAgIHZvbHVtZXM6CiAgICAgIC0gJ3BnX2RhdGE6L3Zhci9saWIvcG9zdGdyZXNxbC9kYXRhJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIFBPU1RHUkVTX1VTRVI6ICRTRVJWSUNFX1VTRVJfTVlTUUwKICAgICAgUE9TVEdSRVNfUEFTU1dPUkQ6ICRTRVJWSUNFX1BBU1NXT1JEX01ZU1FMCiAgICAgIFBPU1RHUkVTX0RCOiAnJHtQT1NUR1JFU19EQjotZmlkZXJ9Jwo=", "tags": [ "feedback", "user-feedback" - ] + ], + "logo": "svgs\/fider.svg" }, "filebrowser": { - "documentation": "https:\/\/filebrowser.org\/configuration", - "slogan": "FileBrowser is a self-hosted, web-based file manager and file explorer with a user-friendly interface. It allows you to manage and organize your files and directories directly from your web browser.", + "documentation": "https:\/\/filebrowser.org", + "slogan": "FileBrowser is a web-based file manager and file explorer with a user-friendly interface.", "compose": "c2VydmljZXM6CiAgZmlsZWJyb3dzZXI6CiAgICBpbWFnZTogJ2ZpbGVicm93c2VyL2ZpbGVicm93c2VyOmxhdGVzdCcKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9GSUxFQlJPV1NFUgogICAgdm9sdW1lczoKICAgICAgLQogICAgICAgIHR5cGU6IGJpbmQKICAgICAgICBzb3VyY2U6IC4vc3J2CiAgICAgICAgdGFyZ2V0OiAvc3J2CiAgICAgICAgaXNEaXJlY3Rvcnk6IHRydWUKICAgICAgLSAnLi9kYXRhYmFzZS5kYjovZGF0YWJhc2UuZGInCiAgICAgIC0KICAgICAgICB0eXBlOiBiaW5kCiAgICAgICAgc291cmNlOiAuL2ZpbGVicm93c2VyLmpzb24KICAgICAgICB0YXJnZXQ6IC8uZmlsZWJyb3dzZXIuanNvbgogICAgICAgIHJlYWRfb25seTogdHJ1ZQogICAgICAgIGNvbnRlbnQ6ICd7fScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBjdXJsCiAgICAgICAgLSAnLWYnCiAgICAgICAgLSAnaHR0cDovL2xvY2FsaG9zdDo4MCcKICAgICAgaW50ZXJ2YWw6IDJzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAxNQo=", "tags": [ "file-management", @@ -160,10 +174,11 @@ "data-organization", "file-utilization", "administration-tool" - ] + ], + "logo": "svgs\/filebrowser.svg" }, "formbricks": { - "documentation": "https:\/\/formbricks.com\/docs\/self-hosting\/docker", + "documentation": "https:\/\/formbricks.com", "slogan": "Open Source Experience Management", "compose": "c2VydmljZXM6CiAgZm9ybWJyaWNrczoKICAgIGltYWdlOiAnZm9ybWJyaWNrcy9mb3JtYnJpY2tzOmxhdGVzdCcKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9GT1JNQlJJQ0tTCiAgICAgIC0gV0VCQVBQX1VSTD0kU0VSVklDRV9GUUROX0ZPUk1CUklDS1MKICAgICAgLSAnREFUQUJBU0VfVVJMPXBvc3RncmVzOi8vJFNFUlZJQ0VfVVNFUl9QT1NUR1JFU1FMOiRTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTUUxAcG9zdGdyZXNxbDo1NDMyLyR7UE9TVEdSRVNRTF9EQVRBQkFTRTotZm9ybWJyaWNrc30nCiAgICAgIC0gTkVYVEFVVEhfU0VDUkVUPSRTRVJWSUNFX0JBU0U2NF82NF9ORVhUQVVUSAogICAgICAtIE5FWFRBVVRIX1VSTD0kU0VSVklDRV9GUUROX0ZPUk1CUklDS1MKICAgICAgLSBFTkNSWVBUSU9OX0tFWT0kU0VSVklDRV9CQVNFNjRfNjRfRU5DUllQVElPTgogICAgICAtICdQT1NUR1JFU19QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVNRTH0nCiAgICAgIC0gJ01BSUxfRlJPTT0ke01BSUxfRlJPTTotdGVzdEBleGFtcGxlLmNvbX0nCiAgICAgIC0gJ1NNVFBfSE9TVD0ke1NNVFBfSE9TVDotdGVzdC5leGFtcGxlLmNvbX0nCiAgICAgIC0gJ1NNVFBfUE9SVD0ke1NNVFBfUE9SVDotNTg3fScKICAgICAgLSAnU01UUF9VU0VSPSR7U01UUF9VU0VSOi10ZXN0fScKICAgICAgLSAnU01UUF9QQVNTV09SRD0ke1NNVFBfUEFTU1dPUkQ6LXRlc3R9JwogICAgICAtICdTTVRQX1NFQ1VSRV9FTkFCTEVEPSR7U01UUF9TRUNVUkVfRU5BQkxFRDotMH0nCiAgICAgIC0gJ1NIT1JUX1VSTF9CQVNFPSR7U0hPUlRfVVJMX0JBU0V9JwogICAgICAtICdFTUFJTF9WRVJJRklDQVRJT05fRElTQUJMRUQ9JHtFTUFJTF9WRVJJRklDQVRJT05fRElTQUJMRUQ6LTF9JwogICAgICAtICdQQVNTV09SRF9SRVNFVF9ESVNBQkxFRD0ke1BBU1NXT1JEX1JFU0VUX0RJU0FCTEVEOi0xfScKICAgICAgLSAnU0lHTlVQX0RJU0FCTEVEPSR7U0lHTlVQX0RJU0FCTEVEOi0wfScKICAgICAgLSAnSU5WSVRFX0RJU0FCTEVEPSR7SU5WSVRFX0RJU0FCTEVEOi0wfScKICAgICAgLSAnUFJJVkFDWV9VUkw9JHtQUklWQUNZX1VSTH0nCiAgICAgIC0gJ1RFUk1TX1VSTD0ke1RFUk1TX1VSTH0nCiAgICAgIC0gJ0lNUFJJTlRfVVJMPSR7SU1QUklOVF9VUkx9JwogICAgICAtICdHSVRIVUJfQVVUSF9FTkFCTEVEPSR7R0lUSFVCX0FVVEhfRU5BQkxFRDotMH0nCiAgICAgIC0gJ0dJVEhVQl9JRD0ke0dJVEhVQl9JRH0nCiAgICAgIC0gJ0dJVEhVQl9TRUNSRVQ9JHtHSVRIVUJfU0VDUkVUfScKICAgICAgLSAnR09PR0xFX0FVVEhfRU5BQkxFRD0ke0dPT0dMRV9BVVRIX0VOQUJMRUQ6LTB9JwogICAgICAtICdHT09HTEVfQ0xJRU5UX0lEPSR7R09PR0xFX0NMSUVOVF9JRH0nCiAgICAgIC0gJ0dPT0dMRV9DTElFTlRfU0VDUkVUPSR7R09PR0xFX0NMSUVOVF9TRUNSRVR9JwogICAgICAtICdBU1NFVF9QUkVGSVhfVVJMPSR7QVNTRVRfUFJFRklYX1VSTH0nCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JtYnJpY2tzLXVwbG9hZHM6L2FwcHMvd2ViL3VwbG9hZHMvJwogICAgZGVwZW5kc19vbjoKICAgICAgcG9zdGdyZXNxbDoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGN1cmwKICAgICAgICAtICctZicKICAgICAgICAtICdodHRwOi8vbG9jYWxob3N0OjMwMDAnCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMTUKICBwb3N0Z3Jlc3FsOgogICAgaW1hZ2U6ICdwb3N0Z3JlczoxNi1hbHBpbmUnCiAgICB2b2x1bWVzOgogICAgICAtICdmb3JtYnJpY2tzLXBvc3RncmVzcWwtZGF0YTovdmFyL2xpYi9wb3N0Z3Jlc3FsL2RhdGEnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnUE9TVEdSRVNfVVNFUj0ke1NFUlZJQ0VfVVNFUl9QT1NUR1JFU1FMfScKICAgICAgLSAnUE9TVEdSRVNfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTUUx9JwogICAgICAtICdQT1NUR1JFU19EQj0ke1BPU1RHUkVTUUxfREFUQUJBU0U6LWZvcm1icmlja3N9JwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdwZ19pc3JlYWR5IC1VICQke1BPU1RHUkVTX1VTRVJ9IC1kICQke1BPU1RHUkVTX0RCfScKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAo=", "tags": [ @@ -175,11 +190,12 @@ "management", "self-hosted", "docker" - ] + ], + "logo": "svgs\/formbricks.png" }, "ghost": { - "documentation": "https:\/\/ghost.org\/docs", - "slogan": "Ghost is a popular open-source content management system (CMS) and blogging platform, known for its simplicity and focus on content creation.", + "documentation": "https:\/\/ghost.org", + "slogan": "Ghost is a content management system (CMS) and blogging platform.", "compose": "c2VydmljZXM6CiAgZ2hvc3Q6CiAgICBpbWFnZTogJ2dob3N0OjUnCiAgICB2b2x1bWVzOgogICAgICAtICdnaG9zdC1jb250ZW50LWRhdGE6L3Zhci9saWIvZ2hvc3QvY29udGVudCcKICAgIGVudmlyb25tZW50OgogICAgICAtIHVybD0kU0VSVklDRV9GUUROX0dIT1NUCiAgICAgIC0gZGF0YWJhc2VfX2NsaWVudD1teXNxbAogICAgICAtIGRhdGFiYXNlX19jb25uZWN0aW9uX19ob3N0PW15c3FsCiAgICAgIC0gZGF0YWJhc2VfX2Nvbm5lY3Rpb25fX3VzZXI9JFNFUlZJQ0VfVVNFUl9NWVNRTAogICAgICAtIGRhdGFiYXNlX19jb25uZWN0aW9uX19wYXNzd29yZD0kU0VSVklDRV9QQVNTV09SRF9NWVNRTAogICAgICAtICdkYXRhYmFzZV9fY29ubmVjdGlvbl9fZGF0YWJhc2U9JHtNWVNRTF9EQVRBQkFTRS1naG9zdH0nCiAgICAgIC0gbWFpbF9fdHJhbnNwb3J0PVNNVFAKICAgICAgLSAnbWFpbF9fb3B0aW9uc19fYXV0aF9fcGFzcz0ke01BSUxfT1BUSU9OU19BVVRIX1BBU1N9JwogICAgICAtICdtYWlsX19vcHRpb25zX19hdXRoX191c2VyPSR7TUFJTF9PUFRJT05TX0FVVEhfVVNFUn0nCiAgICAgIC0gJ21haWxfX29wdGlvbnNfX3NlY3VyZT0ke01BSUxfT1BUSU9OU19TRUNVUkU6LXRydWV9JwogICAgICAtICdtYWlsX19vcHRpb25zX19wb3J0PSR7TUFJTF9PUFRJT05TX1BPUlQ6LTQ2NX0nCiAgICAgIC0gJ21haWxfX29wdGlvbnNfX3NlcnZpY2U9JHtNQUlMX09QVElPTlNfU0VSVklDRTotTWFpbGd1bn0nCiAgICAgIC0gJ21haWxfX29wdGlvbnNfX2hvc3Q9JHtNQUlMX09QVElPTlNfSE9TVH0nCiAgICBkZXBlbmRzX29uOgogICAgICBteXNxbDoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogIG15c3FsOgogICAgaW1hZ2U6ICdteXNxbDo4LjAnCiAgICB2b2x1bWVzOgogICAgICAtICdnaG9zdC1teXNxbC1kYXRhOi92YXIvbGliL215c3FsJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ01ZU1FMX1VTRVI9JHtTRVJWSUNFX1VTRVJfTVlTUUx9JwogICAgICAtICdNWVNRTF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUx9JwogICAgICAtICdNWVNRTF9EQVRBQkFTRT0ke01ZU1FMX0RBVEFCQVNFfScKICAgICAgLSAnTVlTUUxfUk9PVF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUxST09UfScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBteXNxbGFkbWluCiAgICAgICAgLSBwaW5nCiAgICAgICAgLSAnLWgnCiAgICAgICAgLSBsb2NhbGhvc3QKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAo=", "tags": [ "cms", @@ -187,11 +203,12 @@ "content", "management", "system" - ] + ], + "logo": "svgs\/ghost.svg" }, "gitea-with-mariadb": { "documentation": "https:\/\/docs.gitea.com", - "slogan": "Gitea (with MariaDB) is a self-hosted, lightweight Git service, offering version control, collaboration, and code hosting.", + "slogan": "Gitea is a self-hosted, lightweight Git service, offering version control, collaboration, and code hosting.", "compose": "c2VydmljZXM6CiAgZ2l0ZWE6CiAgICBpbWFnZTogJ2dpdGVhL2dpdGVhOmxhdGVzdCcKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9HSVRFQV8zMDAwCiAgICAgIC0gVVNFUl9VSUQ9MTAwMAogICAgICAtIFVTRVJfR0lEPTEwMDAKICAgICAgLSBHSVRFQV9fZGF0YWJhc2VfX0RCX1RZUEU9bXlzcWwKICAgICAgLSBHSVRFQV9fZGF0YWJhc2VfX0hPU1Q9bWFyaWFkYgogICAgICAtICdHSVRFQV9fZGF0YWJhc2VfX05BTUU9JHtNWVNRTF9EQVRBQkFTRS1naXRlYX0nCiAgICAgIC0gR0lURUFfX2RhdGFiYXNlX19VU0VSPSRTRVJWSUNFX1VTRVJfTVlTUUwKICAgICAgLSBHSVRFQV9fZGF0YWJhc2VfX1BBU1NXRD0kU0VSVklDRV9QQVNTV09SRF9NWVNRTAogICAgdm9sdW1lczoKICAgICAgLSAnZ2l0ZWEtZGF0YTovdmFyL2xpYi9naXRlYScKICAgICAgLSAnZ2l0ZWEtdGltZXpvbmU6L2V0Yy90aW1lem9uZTpybycKICAgICAgLSAnZ2l0ZWEtbG9jYWx0aW1lOi9ldGMvbG9jYWx0aW1lOnJvJwogICAgcG9ydHM6CiAgICAgIC0gJzIyMjIyOjIyJwogICAgZGVwZW5kc19vbjoKICAgICAgbWFyaWFkYjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGN1cmwKICAgICAgICAtICctZicKICAgICAgICAtICdodHRwOi8vbG9jYWxob3N0OjMwMDAnCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMTUKICBtYXJpYWRiOgogICAgaW1hZ2U6ICdtYXJpYWRiOjExJwogICAgdm9sdW1lczoKICAgICAgLSAnZ2l0ZWEtbWFyaWFkYi1kYXRhOi92YXIvbGliL215c3FsJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ01ZU1FMX1VTRVI9JHtTRVJWSUNFX1VTRVJfTVlTUUx9JwogICAgICAtICdNWVNRTF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUx9JwogICAgICAtICdNWVNRTF9EQVRBQkFTRT0ke01ZU1FMX0RBVEFCQVNFfScKICAgICAgLSAnTVlTUUxfUk9PVF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUxST09UfScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBoZWFsdGhjaGVjay5zaAogICAgICAgIC0gJy0tY29ubmVjdCcKICAgICAgICAtICctLWlubm9kYl9pbml0aWFsaXplZCcKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAo=", "tags": [ "version control", @@ -200,11 +217,12 @@ "hosting", "lightweight", "mariadb" - ] + ], + "logo": "svgs\/gitea.svg" }, "gitea-with-mysql": { "documentation": "https:\/\/docs.gitea.com", - "slogan": "Gitea (with MySQL) is a self-hosted, lightweight Git service, offering version control, collaboration, and code hosting.", + "slogan": "Gitea is a self-hosted, lightweight Git service, offering version control, collaboration, and code hosting.", "compose": "c2VydmljZXM6CiAgZ2l0ZWE6CiAgICBpbWFnZTogJ2dpdGVhL2dpdGVhOmxhdGVzdCcKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9HSVRFQV8zMDAwCiAgICAgIC0gVVNFUl9VSUQ9MTAwMAogICAgICAtIFVTRVJfR0lEPTEwMDAKICAgICAgLSBHSVRFQV9fZGF0YWJhc2VfX0RCX1RZUEU9bXlzcWwKICAgICAgLSBHSVRFQV9fZGF0YWJhc2VfX0hPU1Q9bXlzcWwKICAgICAgLSAnR0lURUFfX2RhdGFiYXNlX19OQU1FPSR7TVlTUUxfREFUQUJBU0UtZ2l0ZWF9JwogICAgICAtIEdJVEVBX19kYXRhYmFzZV9fVVNFUj0kU0VSVklDRV9VU0VSX01ZU1FMCiAgICAgIC0gR0lURUFfX2RhdGFiYXNlX19QQVNTV0Q9JFNFUlZJQ0VfUEFTU1dPUkRfTVlTUUwKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2dpdGVhLWRhdGE6L3Zhci9saWIvZ2l0ZWEnCiAgICAgIC0gJ2dpdGVhLXRpbWV6b25lOi9ldGMvdGltZXpvbmU6cm8nCiAgICAgIC0gJ2dpdGVhLWxvY2FsdGltZTovZXRjL2xvY2FsdGltZTpybycKICAgIHBvcnRzOgogICAgICAtICcyMjIyMjoyMicKICAgIGRlcGVuZHNfb246CiAgICAgIG15c3FsOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy1mJwogICAgICAgIC0gJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCcKICAgICAgaW50ZXJ2YWw6IDJzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAxNQogIG15c3FsOgogICAgaW1hZ2U6ICdteXNxbDo4LjAnCiAgICB2b2x1bWVzOgogICAgICAtICdnaXRlYS1teXNxbC1kYXRhOi92YXIvbGliL215c3FsJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ01ZU1FMX1VTRVI9JHtTRVJWSUNFX1VTRVJfTVlTUUx9JwogICAgICAtICdNWVNRTF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUx9JwogICAgICAtICdNWVNRTF9EQVRBQkFTRT0ke01ZU1FMX0RBVEFCQVNFfScKICAgICAgLSAnTVlTUUxfUk9PVF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUxST09UfScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBteXNxbGFkbWluCiAgICAgICAgLSBwaW5nCiAgICAgICAgLSAnLWgnCiAgICAgICAgLSBsb2NhbGhvc3QKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAo=", "tags": [ "version control", @@ -213,11 +231,12 @@ "hosting", "lightweight", "mysql" - ] + ], + "logo": "svgs\/gitea.svg" }, "gitea-with-postgresql": { "documentation": "https:\/\/docs.gitea.com", - "slogan": "Gitea (with PostgreSQL)vis a self-hosted, lightweight Git service, offering version control, collaboration, and code hosting.", + "slogan": "Gitea is a self-hosted, lightweight Git service, offering version control, collaboration, and code hosting.", "compose": "c2VydmljZXM6CiAgZ2l0ZWE6CiAgICBpbWFnZTogJ2dpdGVhL2dpdGVhOmxhdGVzdCcKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9HSVRFQV8zMDAwCiAgICAgIC0gVVNFUl9VSUQ9MTAwMAogICAgICAtIFVTRVJfR0lEPTEwMDAKICAgICAgLSBHSVRFQV9fZGF0YWJhc2VfX0RCX1RZUEU9cG9zdGdyZXMKICAgICAgLSBHSVRFQV9fZGF0YWJhc2VfX0hPU1Q9cG9zdGdyZXNxbAogICAgICAtICdHSVRFQV9fZGF0YWJhc2VfX05BTUU9JHtQT1NUR1JFU1FMX0RBVEFCQVNFLWdpdGVhfScKICAgICAgLSBHSVRFQV9fZGF0YWJhc2VfX1VTRVI9JFNFUlZJQ0VfVVNFUl9QT1NUR1JFU1FMCiAgICAgIC0gR0lURUFfX2RhdGFiYXNlX19QQVNTV0Q9JFNFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVNRTAogICAgdm9sdW1lczoKICAgICAgLSAnZ2l0ZWEtZGF0YTovdmFyL2xpYi9naXRlYScKICAgICAgLSAnZ2l0ZWEtdGltZXpvbmU6L2V0Yy90aW1lem9uZTpybycKICAgICAgLSAnZ2l0ZWEtbG9jYWx0aW1lOi9ldGMvbG9jYWx0aW1lOnJvJwogICAgcG9ydHM6CiAgICAgIC0gJzIyMjIyOjIyJwogICAgZGVwZW5kc19vbjoKICAgICAgcG9zdGdyZXNxbDoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGN1cmwKICAgICAgICAtICctZicKICAgICAgICAtICdodHRwOi8vbG9jYWxob3N0OjMwMDAnCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMTUKICBwb3N0Z3Jlc3FsOgogICAgaW1hZ2U6ICdwb3N0Z3JlczoxNi1hbHBpbmUnCiAgICB2b2x1bWVzOgogICAgICAtICdnaXRlYS1wb3N0Z3Jlc3FsLWRhdGE6L3Zhci9saWIvcG9zdGdyZXNxbC9kYXRhJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ1BPU1RHUkVTX1VTRVI9JHtTRVJWSUNFX1VTRVJfUE9TVEdSRVNRTH0nCiAgICAgIC0gJ1BPU1RHUkVTX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU1FMfScKICAgICAgLSAnUE9TVEdSRVNfREI9JHtQT1NUR1JFU1FMX0RBVEFCQVNFfScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAncGdfaXNyZWFkeSAtVSAkJHtQT1NUR1JFU19VU0VSfSAtZCAkJHtQT1NUR1JFU19EQn0nCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAK", "tags": [ "version control", @@ -226,7 +245,8 @@ "hosting", "lightweight", "postgresql" - ] + ], + "logo": "svgs\/gitea.svg" }, "gitea": { "documentation": "https:\/\/docs.gitea.com", @@ -238,7 +258,8 @@ "code", "hosting", "lightweight" - ] + ], + "logo": "svgs\/gitea.svg" }, "glitchtip": { "documentation": "https:\/\/glitchtip.com", @@ -250,7 +271,8 @@ "open-source", "self-hosted", "sentry" - ] + ], + "logo": "svgs\/glitchtip.png" }, "grafana-with-postgresql": { "documentation": "https:\/\/grafana.com\/docs\/grafana\/latest\/installation\/docker\/", @@ -261,7 +283,8 @@ "analytics", "monitoring", "dashboard" - ] + ], + "logo": "svgs\/grafana.svg" }, "grafana": { "documentation": "https:\/\/grafana.com\/docs\/grafana\/latest\/installation\/docker\/", @@ -272,11 +295,12 @@ "analytics", "monitoring", "dashboard" - ] + ], + "logo": "svgs\/grafana.svg" }, "grocy": { "documentation": "https:\/\/github.com\/grocy\/grocy", - "slogan": "Grocy is a self-hosted, web-based household management and grocery list application, designed to simplify your household chores and grocery shopping.", + "slogan": "Grocy is a web-based household management and grocery list application.", "compose": "c2VydmljZXM6CiAgZ3JvY3k6CiAgICBpbWFnZTogJ2xzY3IuaW8vbGludXhzZXJ2ZXIvZ3JvY3k6bGF0ZXN0JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX0dST0NZCiAgICAgIC0gUFVJRD0xMDAwCiAgICAgIC0gUEdJRD0xMDAwCiAgICAgIC0gVFo9RXVyb3BlL01hZHJpZAogICAgdm9sdW1lczoKICAgICAgLSAnZ3JvY3ktY29uZmlnOi9jb25maWcnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy1mJwogICAgICAgIC0gJ2h0dHA6Ly9sb2NhbGhvc3Q6ODAnCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMTUK", "tags": [ "groceries", @@ -284,7 +308,8 @@ "management", "grocery", "shopping" - ] + ], + "logo": "svgs\/grocy.svg" }, "heimdall": { "documentation": "https:\/\/github.com\/linuxserver\/Heimdall", @@ -295,7 +320,8 @@ "server", "applications", "interface" - ] + ], + "logo": [] }, "jellyfin": { "documentation": "https:\/\/jellyfin.org\/docs\/", @@ -307,7 +333,8 @@ "movies", "tv", "music" - ] + ], + "logo": [] }, "kuzzle": { "documentation": "https:\/\/docs.kuzzle.io\/", @@ -324,7 +351,8 @@ "iot", "geofencing", "low-code" - ] + ], + "logo": [] }, "meilisearch": { "documentation": "https:\/\/www.meilisearch.com\/docs\/learn\/configuration\/instance_options", @@ -337,7 +365,8 @@ "full", "text", "meilisearch" - ] + ], + "logo": [] }, "metabase": { "documentation": "https:\/\/www.metabase.com\/docs\/latest\/installation-and-operation\/running-metabase-on-docker", @@ -348,7 +377,8 @@ "bi", "business", "intelligence" - ] + ], + "logo": [] }, "metube": { "documentation": "https:\/\/github.com\/alexta69\/metube", @@ -359,7 +389,8 @@ "download", "videos", "playlist" - ] + ], + "logo": [] }, "minio": { "documentation": "https:\/\/docs.min.io\/docs\/minio-docker-quickstart-guide.html", @@ -371,7 +402,8 @@ "server", "s3", "api" - ] + ], + "logo": [] }, "moodle": { "documentation": "https:\/\/moodle.org", @@ -387,7 +419,8 @@ "source", "low", "code" - ] + ], + "logo": [] }, "n8n-with-postgresql": { "documentation": "https:\/\/docs.n8n.io\/hosting\/", @@ -401,7 +434,8 @@ "source", "low", "code" - ] + ], + "logo": [] }, "n8n": { "documentation": "https:\/\/docs.n8n.io\/hosting\/", @@ -415,7 +449,8 @@ "source", "low", "code" - ] + ], + "logo": [] }, "nextcloud": { "documentation": "https:\/\/docs.nextcloud.com", @@ -427,7 +462,8 @@ "communication", "filestorage", "data" - ] + ], + "logo": [] }, "nocodb": { "documentation": "https:\/\/docs.nocodb.com\/", @@ -441,7 +477,8 @@ "sqlserver", "sqlite", "mariadb" - ] + ], + "logo": [] }, "openblocks": { "documentation": "https:\/\/docs.openblocks.dev\/self-hosting", @@ -456,7 +493,8 @@ "source", "low", "code" - ] + ], + "logo": [] }, "pairdrop": { "documentation": "https:\/\/github.com\/schlagmichdoch\/PairDrop", @@ -467,7 +505,8 @@ "sharing", "collaboration", "teamwork" - ] + ], + "logo": [] }, "phpmyadmin": { "documentation": "https:\/\/docs.phpmyadmin.net\/en\/latest\/", @@ -475,7 +514,8 @@ "compose": "c2VydmljZXM6CiAgcGhwbXlhZG1pbjoKICAgIGltYWdlOiAnbHNjci5pby9saW51eHNlcnZlci9waHBteWFkbWluOmxhdGVzdCcKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9QSFBNWUFETUlOCiAgICAgIC0gUFVJRD0xMDAwCiAgICAgIC0gUEdJRD0xMDAwCiAgICAgIC0gVFo9RXVyb3BlL01hZHJpZAogICAgICAtIFBNQV9BUkJJVFJBUlk9MQogICAgICAtIFBNQV9BQlNPTFVURV9VUkk9JFNFUlZJQ0VfRlFETl9QSFBNWUFETUlOCiAgICB2b2x1bWVzOgogICAgICAtICdwaHBteWFkbWluLWNvbmZpZzovY29uZmlnJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGN1cmwKICAgICAgICAtICctZicKICAgICAgICAtICdodHRwOi8vbG9jYWxob3N0OjgwJwogICAgICBpbnRlcnZhbDogMnMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDE1Cg==", "tags": [ "database management" - ] + ], + "logo": [] }, "pocketbase": { "documentation": "https:\/\/pocketbase.io\/docs\/", @@ -487,7 +527,8 @@ "saas", "mobile", "api" - ] + ], + "logo": [] }, "snapdrop": { "documentation": "https:\/\/github.com\/RobinLinus\/snapdrop", @@ -500,7 +541,8 @@ "local", "network", "internet" - ] + ], + "logo": [] }, "stirling-pdf": { "documentation": "https:\/\/github.com\/Stirling-Tools\/Stirling-PDF", @@ -511,17 +553,19 @@ "manipulation", "web", "tool" - ] + ], + "logo": [] }, "syncthing": { "documentation": "https:\/\/syncthing.net\/", - "slogan": "Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers in real time, safely protected from prying eyes. Your data is your data alone and you deserve to choose where it is stored, whether it is shared with some third party, and how it\u2019s transmitted over the internet.", + "slogan": "Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers in real time.", "compose": "c2VydmljZXM6CiAgc3luY3RoaW5nOgogICAgaW1hZ2U6ICdsc2NyLmlvL2xpbnV4c2VydmVyL3N5bmN0aGluZzpsYXRlc3QnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fU1lOQ1RISU5HCiAgICAgIC0gUFVJRD0xMDAwCiAgICAgIC0gUEdJRD0xMDAwCiAgICAgIC0gVFo9RXRjL1VUQwogICAgdm9sdW1lczoKICAgICAgLSAnc3luY3RoaW5nLWNvbmZpZzovY29uZmlnJwogICAgICAtICdzeW5jdGhpbmctZGF0YTE6L2RhdGExJwogICAgICAtICdzeW5jdGhpbmctZGF0YTI6L2RhdGEyJwogICAgcG9ydHM6CiAgICAgIC0gJzIyMDAwOjIyMDAwL3RjcCcKICAgICAgLSAnMjIwMDA6MjIwMDAvdWRwJwogICAgICAtICcyMTAyNzoyMTAyNy91ZHAnCg==", "tags": [ "filestorage", "data", "synchronization" - ] + ], + "logo": "svgs\/syncthing.svg" }, "trigger-with-external-database": { "documentation": "https:\/\/trigger.dev\/docs\/documentation\/guides\/self-hosting", @@ -535,7 +579,8 @@ "jobs", "cron", "scheduler" - ] + ], + "logo": [] }, "trigger": { "documentation": "https:\/\/trigger.dev\/docs\/documentation\/guides\/self-hosting", @@ -549,7 +594,8 @@ "jobs", "cron", "scheduler" - ] + ], + "logo": [] }, "umami": { "documentation": "https:\/\/umami.is\/docs\/getting-started", @@ -559,7 +605,8 @@ "analytics", "insights", "privacy" - ] + ], + "logo": [] }, "uptime-kuma": { "documentation": "https:\/\/github.com\/louislam\/uptime-kuma\/wiki", @@ -573,7 +620,8 @@ "services", "applications", "real-time" - ] + ], + "logo": [] }, "vaultwarden": { "documentation": "https:\/\/github.com\/dani-garcia\/vaultwarden\/wiki\/FAQs", @@ -582,7 +630,8 @@ "tags": [ "password manager", "security" - ] + ], + "logo": [] }, "weblate": { "documentation": "https:\/\/docs.weblate.org\/en\/latest\/admin\/install\/docker.html", @@ -596,7 +645,8 @@ "continuous", "libre", "software" - ] + ], + "logo": [] }, "whoogle": { "documentation": "https:\/\/github.com\/benbusby\/whoogle-search#install", @@ -605,7 +655,8 @@ "tags": [ "privacy", "search engine" - ] + ], + "logo": [] }, "wordpress-with-mariadb": { "documentation": "https:\/\/wordpress.org\/documentation\/", @@ -617,7 +668,8 @@ "content", "management", "mariadb" - ] + ], + "logo": [] }, "wordpress-with-mysql": { "documentation": "https:\/\/wordpress.org\/documentation\/", @@ -629,7 +681,8 @@ "content", "management", "mysql" - ] + ], + "logo": [] }, "wordpress-without-database": { "documentation": "https:\/\/wordpress.org\/documentation\/", @@ -640,6 +693,7 @@ "blog", "content", "management" - ] + ], + "logo": [] } } \ No newline at end of file From cd7244b3d7e67a16ef9df6a2445940a3ce8d3644 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Tue, 20 Feb 2024 15:42:30 +0100 Subject: [PATCH 04/26] Add logos for various services --- public/svgs/docker.svg | 1 + public/svgs/git.svg | 1 + public/svgs/github.svg | 1 + public/svgs/jellyfin.svg | 15 ++++ public/svgs/mariadb.svg | 1 + public/svgs/meilisearch.svg | 19 +++++ public/svgs/metabase.svg | 1 + public/svgs/minio.svg | 1 + public/svgs/mongodb.svg | 1 + public/svgs/mysql.svg | 1 + public/svgs/n8n.png | Bin 0 -> 7690 bytes public/svgs/postgres.svg | 1 + public/svgs/redis.svg | 1 + public/svgs/unknown.svg | 3 + .../livewire/project/new/select.blade.php | 73 +++++++++++++++--- templates/compose/appsmith.yaml | 6 +- templates/compose/appwrite.yaml | 2 +- templates/compose/budge.yaml | 3 +- templates/compose/dashboard.yaml | 3 +- templates/compose/docker-registry.yaml | 4 +- templates/compose/embystat.yaml | 2 + templates/compose/heimdall.yaml | 4 +- templates/compose/jellyfin.yaml | 5 +- templates/compose/kuzzle.yaml | 3 +- templates/compose/meilisearch.yaml | 3 +- templates/compose/metabase.yaml | 1 + templates/compose/minio.yaml | 3 +- templates/compose/n8n-with-postgresql.yaml | 5 +- templates/compose/n8n.yaml | 5 +- templates/service-templates.json | 54 ++++++------- 30 files changed, 169 insertions(+), 54 deletions(-) create mode 100644 public/svgs/docker.svg create mode 100644 public/svgs/git.svg create mode 100644 public/svgs/github.svg create mode 100644 public/svgs/jellyfin.svg create mode 100644 public/svgs/mariadb.svg create mode 100644 public/svgs/meilisearch.svg create mode 100644 public/svgs/metabase.svg create mode 100644 public/svgs/minio.svg create mode 100644 public/svgs/mongodb.svg create mode 100644 public/svgs/mysql.svg create mode 100644 public/svgs/n8n.png create mode 100644 public/svgs/postgres.svg create mode 100644 public/svgs/redis.svg create mode 100644 public/svgs/unknown.svg diff --git a/public/svgs/docker.svg b/public/svgs/docker.svg new file mode 100644 index 000000000..2d16448f1 --- /dev/null +++ b/public/svgs/docker.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/svgs/git.svg b/public/svgs/git.svg new file mode 100644 index 000000000..93f25f923 --- /dev/null +++ b/public/svgs/git.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/svgs/github.svg b/public/svgs/github.svg new file mode 100644 index 000000000..6c77b4144 --- /dev/null +++ b/public/svgs/github.svg @@ -0,0 +1 @@ + diff --git a/public/svgs/jellyfin.svg b/public/svgs/jellyfin.svg new file mode 100644 index 000000000..fbf03077c --- /dev/null +++ b/public/svgs/jellyfin.svg @@ -0,0 +1,15 @@ + diff --git a/public/svgs/mariadb.svg b/public/svgs/mariadb.svg new file mode 100644 index 000000000..57a42132d --- /dev/null +++ b/public/svgs/mariadb.svg @@ -0,0 +1 @@ + diff --git a/public/svgs/meilisearch.svg b/public/svgs/meilisearch.svg new file mode 100644 index 000000000..85c35a455 --- /dev/null +++ b/public/svgs/meilisearch.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/public/svgs/metabase.svg b/public/svgs/metabase.svg new file mode 100644 index 000000000..255d169db --- /dev/null +++ b/public/svgs/metabase.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/svgs/minio.svg b/public/svgs/minio.svg new file mode 100644 index 000000000..0496de20f --- /dev/null +++ b/public/svgs/minio.svg @@ -0,0 +1 @@ + diff --git a/public/svgs/mongodb.svg b/public/svgs/mongodb.svg new file mode 100644 index 000000000..423069be8 --- /dev/null +++ b/public/svgs/mongodb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/svgs/mysql.svg b/public/svgs/mysql.svg new file mode 100644 index 000000000..9dfe677e9 --- /dev/null +++ b/public/svgs/mysql.svg @@ -0,0 +1 @@ + diff --git a/public/svgs/n8n.png b/public/svgs/n8n.png new file mode 100644 index 0000000000000000000000000000000000000000..6ef98587b412f1405ccf9bea9ed8208c468bd2a8 GIT binary patch literal 7690 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 literal 0 HcmV?d00001 diff --git a/public/svgs/postgres.svg b/public/svgs/postgres.svg new file mode 100644 index 000000000..af195d491 --- /dev/null +++ b/public/svgs/postgres.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/svgs/redis.svg b/public/svgs/redis.svg new file mode 100644 index 000000000..7b84ba84d --- /dev/null +++ b/public/svgs/redis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/svgs/unknown.svg b/public/svgs/unknown.svg new file mode 100644 index 000000000..d7752c454 --- /dev/null +++ b/public/svgs/unknown.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/views/livewire/project/new/select.blade.php b/resources/views/livewire/project/new/select.blade.php index 6564260b9..70178a64d 100644 --- a/resources/views/livewire/project/new/select.blade.php +++ b/resources/views/livewire/project/new/select.blade.php @@ -24,12 +24,22 @@ You can deploy any kind of public repositories from the supported git providers. + + + Private Repository (with GitHub App) You can deploy public & private repositories through your GitHub Apps. + + + @@ -37,6 +47,11 @@ You can deploy public & private repositories with a simple deploy key (SSH key). + + +
@@ -45,18 +60,33 @@ You can deploy a simple Dockerfile, without Git. + + + Based on a Docker Compose You can deploy complex application easily with Docker Compose, without Git. + + + Based on an existing Docker Image You can deploy an existing Docker Image from any Registry, without Git. + + +

Databases

@@ -64,37 +94,62 @@ New PostgreSQL - PostgreSQL is an open-source, object-relational database management system known for its + PostgreSQL is an object-relational database known for its robustness, advanced features, and strong standards compliance. + + + New Redis - Redis is an open-source, in-memory data structure store used as a database, cache, and message - broker, known for its high performance, flexibility, and rich data structures. + Redis is an open-source, in-memory data structure store, used as a database, cache, and message + broker. + + + New MongoDB - MongoDB is a source-available, NoSQL database program that uses JSON-like documents with - optional schemas, known for its flexibility and scalability. + MongoDB is a source-available, NoSQL database that uses JSON-like documents with + optional schemas. + + + - New MySQL + New MySQL - MySQL is an open-source relational database management system known for its speed, reliability, - and flexibility in managing and accessing data. + MySQL is a relational database known for its speed, reliability, and + flexibility. + + + New Mariadb - MariaDB is an open-source relational database management system that serves as a drop-in + MariaDB is a relational database that serves as a drop-in replacement for MySQL. + + + {{--
diff --git a/templates/compose/appsmith.yaml b/templates/compose/appsmith.yaml index 31c6531e6..65861db9f 100644 --- a/templates/compose/appsmith.yaml +++ b/templates/compose/appsmith.yaml @@ -1,5 +1,5 @@ -# documentation: https://docs.appsmith.com -# slogan: Appsmith is an application development platform that enables you to build powerful web applications with ease. +# documentation: https://appsmith.com +# slogan: Appsmith is low-code application platform for building internal tools. # tags: lowcode,nocode,no,low,platform # logo: svgs/appsmith.svg @@ -11,7 +11,7 @@ services: - APPSMITH_MAIL_ENABLED=false - APPSMITH_DISABLE_TELEMETRY=true - APPSMITH_DISABLE_INTERCOM=true - - APPSMITH_SENTRY_DSN= + - APPSMITH_SENTRY_DSN= - APPSMITH_SMART_LOOK_ID= volumes: - stacks-data:/appsmith-stacks diff --git a/templates/compose/appwrite.yaml b/templates/compose/appwrite.yaml index 793dacbf4..ecc7fddc5 100644 --- a/templates/compose/appwrite.yaml +++ b/templates/compose/appwrite.yaml @@ -1,5 +1,5 @@ # documentation: https://appwrite.io -# slogan: Appwrite is backend-as-a-service platform that simplifies the development of web and mobile applications. +# slogan: Appwrite is backend-as-a-service platform that simplifies the web & mobile app development. # env_file: appwrite.env # tags: backend-as-a-service, platform # logo: svgs/appwrite.svg diff --git a/templates/compose/budge.yaml b/templates/compose/budge.yaml index 379b5a6c3..7e2e18d62 100644 --- a/templates/compose/budge.yaml +++ b/templates/compose/budge.yaml @@ -1,6 +1,7 @@ # documentation: https://github.com/linuxserver/budge -# slogan: BudgE is an open-source 'budgeting with envelopes' personal finance app, helping you manage your finances effectively. +# slogan: Budge is a budgeting personal finance app. # tags: personal finance, budgeting, expense tracking +# logo: svgs/unknown.svg services: budge: diff --git a/templates/compose/dashboard.yaml b/templates/compose/dashboard.yaml index f5ad26c4b..bc400b436 100644 --- a/templates/compose/dashboard.yaml +++ b/templates/compose/dashboard.yaml @@ -1,6 +1,7 @@ # documentation: https://github.com/phntxx/dashboard?tab=readme-ov-file#dashboard -# slogan: A dashboard. Inspired by SUI, it offers simple customization through JSON-files and a handy search bar to help you browse the internet more efficiently. +# slogan: A dashboard, inspired by SUI. # tags: dashboard, web, search, bookmarks +# logo: svgs/unknown.svg services: dashboard: diff --git a/templates/compose/docker-registry.yaml b/templates/compose/docker-registry.yaml index 8929b1006..67f551f2b 100644 --- a/templates/compose/docker-registry.yaml +++ b/templates/compose/docker-registry.yaml @@ -1,7 +1,7 @@ # documentation: https://docs.docker.com/registry/ -# slogan: The Docker Registry is a stateless, highly scalable server side application that stores and lets you distribute Docker images. +# slogan: The Docker Registry is lets you distribute Docker images. # tags: registry,images,docker -# logo: svgs/docker-registry.png +# logo: svgs/docker-registry.png services: registry: diff --git a/templates/compose/embystat.yaml b/templates/compose/embystat.yaml index c80863645..a274be5d0 100644 --- a/templates/compose/embystat.yaml +++ b/templates/compose/embystat.yaml @@ -1,6 +1,8 @@ # documentation: https://github.com/mregni/EmbyStat # slogan: EmnyStat is a web analytics tool, designed to provide insight into website traffic and user behavior. # tags: media, server, movies, tv, music +# logo: svgs/unknown.svg + services: embystat: diff --git a/templates/compose/heimdall.yaml b/templates/compose/heimdall.yaml index dcae08feb..0e1931fcb 100644 --- a/templates/compose/heimdall.yaml +++ b/templates/compose/heimdall.yaml @@ -1,6 +1,8 @@ # documentation: https://github.com/linuxserver/Heimdall -# slogan: Heimdall is a self-hosted dashboard for managing and organizing your server applications, providing a centralized and efficient interface. +# slogan: Heimdall is a dashboard for managing and organizing your server applications. # tags: dashboard, server, applications, interface +# logo: svgs/unknown.svg + services: heimdall: diff --git a/templates/compose/jellyfin.yaml b/templates/compose/jellyfin.yaml index c3cb90541..ab093cc76 100644 --- a/templates/compose/jellyfin.yaml +++ b/templates/compose/jellyfin.yaml @@ -1,6 +1,7 @@ -# documentation: https://jellyfin.org/docs/ -# slogan: Jellyfin is an open-source media server for hosting and streaming your media collection, providing an alternative to proprietary media platforms. +# documentation: https://jellyfin.org +# slogan: Jellyfin is a media server for hosting and streaming your media collection. # tags: media, server, movies, tv, music +# logo: svgs/jellyfin.svg services: jellyfin: diff --git a/templates/compose/kuzzle.yaml b/templates/compose/kuzzle.yaml index 520d3fc06..a306cb7a8 100644 --- a/templates/compose/kuzzle.yaml +++ b/templates/compose/kuzzle.yaml @@ -1,6 +1,7 @@ -# documentation: https://docs.kuzzle.io/ +# documentation: https://kuzzle.io # slogan: Kuzzle is a generic backend offering the basic building blocks common to every application. # tags: backend, api, realtime, websocket, mqtt, rest, sdk, iot, geofencing, low-code +# logo: svgs/unknown.svg services: redis: diff --git a/templates/compose/meilisearch.yaml b/templates/compose/meilisearch.yaml index eb401f009..0932e7d86 100644 --- a/templates/compose/meilisearch.yaml +++ b/templates/compose/meilisearch.yaml @@ -1,6 +1,7 @@ # documentation: https://www.meilisearch.com/docs/learn/configuration/instance_options -# slogan: MeiliSearch is a powerful, fast, open-source, easy to use and deploy search engine. +# slogan: MeiliSearch is a powerful, fast, easy to use and deploy search engine. # tags: search,engine,fulltext,full,text,meilisearch +# logo: svgs/meilisearch.svg services: meilisearch: diff --git a/templates/compose/metabase.yaml b/templates/compose/metabase.yaml index b038269e5..dd891a4a9 100644 --- a/templates/compose/metabase.yaml +++ b/templates/compose/metabase.yaml @@ -1,6 +1,7 @@ # documentation: https://www.metabase.com/docs/latest/installation-and-operation/running-metabase-on-docker # slogan: Fast analytics with the friendly UX and integrated tooling to let your company explore data on their own. # tags: analytics,bi,business,intelligence +# logo: svgs/metabase.svg services: metabase: diff --git a/templates/compose/minio.yaml b/templates/compose/minio.yaml index dcc68bc53..b24eeae93 100644 --- a/templates/compose/minio.yaml +++ b/templates/compose/minio.yaml @@ -1,6 +1,7 @@ -# documentation: https://docs.min.io/docs/minio-docker-quickstart-guide.html +# documentation: https://min.io/docs/minio/container/index.html # slogan: MinIO is a high performance object storage server compatible with Amazon S3 APIs. # tags: object, storage, server, s3, api +# logo: svgs/minio.svg services: minio: diff --git a/templates/compose/n8n-with-postgresql.yaml b/templates/compose/n8n-with-postgresql.yaml index 4de32d60a..b529cd093 100644 --- a/templates/compose/n8n-with-postgresql.yaml +++ b/templates/compose/n8n-with-postgresql.yaml @@ -1,6 +1,7 @@ -# documentation: https://docs.n8n.io/hosting/ -# slogan: n8n is an extendable workflow automation tool which enables you to connect anything to everything via its open, fair-code model. +# documentation: https://n8n.io +# slogan: n8n is an extendable workflow automation tool. # tags: n8n,workflow,automation,open,source,low,code +# logo: svgs/n8n.png services: n8n: diff --git a/templates/compose/n8n.yaml b/templates/compose/n8n.yaml index 99a795cf8..ed31a641a 100644 --- a/templates/compose/n8n.yaml +++ b/templates/compose/n8n.yaml @@ -1,6 +1,7 @@ -# documentation: https://docs.n8n.io/hosting/ -# slogan: n8n is an extendable workflow automation tool which enables you to connect anything to everything via its open, fair-code model. +# documentation: https://n8n.io +# slogan: n8n is an extendable workflow automation tool. # tags: n8n,workflow,automation,open,source,low,code +# logo: svgs/n8n.png services: n8n: diff --git a/templates/service-templates.json b/templates/service-templates.json index 043ffa813..d9772beac 100644 --- a/templates/service-templates.json +++ b/templates/service-templates.json @@ -1,7 +1,7 @@ { "appsmith": { - "documentation": "https:\/\/docs.appsmith.com", - "slogan": "Appsmith is an application development platform that enables you to build powerful web applications with ease.", + "documentation": "https:\/\/appsmith.com", + "slogan": "Appsmith is low-code application platform for building internal tools.", "compose": "c2VydmljZXM6CiAgYXBwc21pdGg6CiAgICBpbWFnZTogJ2luZGV4LmRvY2tlci5pby9hcHBzbWl0aC9hcHBzbWl0aC1jZTpsYXRlc3QnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE4KICAgICAgLSBBUFBTTUlUSF9NQUlMX0VOQUJMRUQ9ZmFsc2UKICAgICAgLSBBUFBTTUlUSF9ESVNBQkxFX1RFTEVNRVRSWT10cnVlCiAgICAgIC0gQVBQU01JVEhfRElTQUJMRV9JTlRFUkNPTT10cnVlCiAgICAgIC0gQVBQU01JVEhfU0VOVFJZX0RTTj0KICAgICAgLSBBUFBTTUlUSF9TTUFSVF9MT09LX0lEPQogICAgdm9sdW1lczoKICAgICAgLSAnc3RhY2tzLWRhdGE6L2FwcHNtaXRoLXN0YWNrcycKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gTk9ORQo=", "tags": [ "lowcode", @@ -14,7 +14,7 @@ }, "appwrite": { "documentation": "https:\/\/appwrite.io", - "slogan": "Appwrite is backend-as-a-service platform that simplifies the development of web and mobile applications.", + "slogan": "Appwrite is backend-as-a-service platform that simplifies the web & mobile app development.", "compose": "eC1sb2dnaW5nOgogIGxvZ2dpbmc6CiAgICBkcml2ZXI6IGpzb24tZmlsZQogICAgb3B0aW9uczoKICAgICAgbWF4LWZpbGU6ICc1JwogICAgICBtYXgtc2l6ZTogMTBtCnZlcnNpb246ICczJwpzZXJ2aWNlczoKICBhcHB3cml0ZToKICAgIGltYWdlOiAnYXBwd3JpdGUvYXBwd3JpdGU6MS40JwogICAgY29udGFpbmVyX25hbWU6IGFwcHdyaXRlCiAgICBsb2dnaW5nOgogICAgICBkcml2ZXI6IGpzb24tZmlsZQogICAgICBvcHRpb25zOgogICAgICAgIG1heC1maWxlOiAnNScKICAgICAgICBtYXgtc2l6ZTogMTBtCiAgICB2b2x1bWVzOgogICAgICAtICdhcHB3cml0ZS11cGxvYWRzOi9zdG9yYWdlL3VwbG9hZHM6cncnCiAgICAgIC0gJ2FwcHdyaXRlLWNhY2hlOi9zdG9yYWdlL2NhY2hlOnJ3JwogICAgICAtICdhcHB3cml0ZS1jb25maWc6L3N0b3JhZ2UvY29uZmlnOnJ3JwogICAgICAtICdhcHB3cml0ZS1jZXJ0aWZpY2F0ZXM6L3N0b3JhZ2UvY2VydGlmaWNhdGVzOnJ3JwogICAgICAtICdhcHB3cml0ZS1mdW5jdGlvbnM6L3N0b3JhZ2UvZnVuY3Rpb25zOnJ3JwogICAgZGVwZW5kc19vbjoKICAgICAgLSBhcHB3cml0ZS1tYXJpYWRiCiAgICAgIC0gYXBwd3JpdGUtcmVkaXMKICAgICAgLSBhcHB3cml0ZS1pbmZsdXhkYgogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX0FQUFdSSVRFPS8KICAgICAgLSBfQVBQX0VOVgogICAgICAtIF9BUFBfV09SS0VSX1BFUl9DT1JFCiAgICAgIC0gX0FQUF9MT0NBTEUKICAgICAgLSBfQVBQX0NPTlNPTEVfV0hJVEVMSVNUX1JPT1QKICAgICAgLSBfQVBQX0NPTlNPTEVfV0hJVEVMSVNUX0VNQUlMUwogICAgICAtIF9BUFBfQ09OU09MRV9XSElURUxJU1RfSVBTCiAgICAgIC0gX0FQUF9TWVNURU1fRU1BSUxfTkFNRQogICAgICAtIF9BUFBfU1lTVEVNX0VNQUlMX0FERFJFU1MKICAgICAgLSBfQVBQX1NZU1RFTV9TRUNVUklUWV9FTUFJTF9BRERSRVNTCiAgICAgIC0gX0FQUF9TWVNURU1fUkVTUE9OU0VfRk9STUFUCiAgICAgIC0gX0FQUF9PUFRJT05TX0FCVVNFCiAgICAgIC0gX0FQUF9PUFRJT05TX0ZPUkNFX0hUVFBTCiAgICAgIC0gX0FQUF9PUEVOU1NMX0tFWV9WMQogICAgICAtIF9BUFBfRE9NQUlOPSRTRVJWSUNFX0ZRRE5fQVBQV1JJVEUKICAgICAgLSBfQVBQX0RPTUFJTl9UQVJHRVQ9JFNFUlZJQ0VfRlFETl9BUFBXUklURQogICAgICAtIF9BUFBfRE9NQUlOX0ZVTkNUSU9OUz0kU0VSVklDRV9GUUROX0FQUFdSSVRFCiAgICAgIC0gX0FQUF9SRURJU19IT1NUCiAgICAgIC0gX0FQUF9SRURJU19QT1JUCiAgICAgIC0gX0FQUF9SRURJU19VU0VSCiAgICAgIC0gX0FQUF9SRURJU19QQVNTCiAgICAgIC0gX0FQUF9EQl9IT1NUCiAgICAgIC0gX0FQUF9EQl9QT1JUCiAgICAgIC0gX0FQUF9EQl9TQ0hFTUEKICAgICAgLSBfQVBQX0RCX1VTRVIKICAgICAgLSBfQVBQX0RCX1BBU1MKICAgICAgLSBfQVBQX1NNVFBfSE9TVAogICAgICAtIF9BUFBfU01UUF9QT1JUCiAgICAgIC0gX0FQUF9TTVRQX1NFQ1VSRQogICAgICAtIF9BUFBfU01UUF9VU0VSTkFNRQogICAgICAtIF9BUFBfU01UUF9QQVNTV09SRAogICAgICAtIF9BUFBfVVNBR0VfU1RBVFMKICAgICAgLSBfQVBQX0lORkxVWERCX0hPU1QKICAgICAgLSBfQVBQX0lORkxVWERCX1BPUlQKICAgICAgLSBfQVBQX1NUT1JBR0VfTElNSVQKICAgICAgLSBfQVBQX1NUT1JBR0VfUFJFVklFV19MSU1JVAogICAgICAtIF9BUFBfU1RPUkFHRV9BTlRJVklSVVMKICAgICAgLSBfQVBQX1NUT1JBR0VfQU5USVZJUlVTX0hPU1QKICAgICAgLSBfQVBQX1NUT1JBR0VfQU5USVZJUlVTX1BPUlQKICAgICAgLSBfQVBQX1NUT1JBR0VfREVWSUNFCiAgICAgIC0gX0FQUF9TVE9SQUdFX1MzX0FDQ0VTU19LRVkKICAgICAgLSBfQVBQX1NUT1JBR0VfUzNfU0VDUkVUCiAgICAgIC0gX0FQUF9TVE9SQUdFX1MzX1JFR0lPTgogICAgICAtIF9BUFBfU1RPUkFHRV9TM19CVUNLRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfRE9fU1BBQ0VTX0FDQ0VTU19LRVkKICAgICAgLSBfQVBQX1NUT1JBR0VfRE9fU1BBQ0VTX1NFQ1JFVAogICAgICAtIF9BUFBfU1RPUkFHRV9ET19TUEFDRVNfUkVHSU9OCiAgICAgIC0gX0FQUF9TVE9SQUdFX0RPX1NQQUNFU19CVUNLRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfQkFDS0JMQVpFX0FDQ0VTU19LRVkKICAgICAgLSBfQVBQX1NUT1JBR0VfQkFDS0JMQVpFX1NFQ1JFVAogICAgICAtIF9BUFBfU1RPUkFHRV9CQUNLQkxBWkVfUkVHSU9OCiAgICAgIC0gX0FQUF9TVE9SQUdFX0JBQ0tCTEFaRV9CVUNLRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfTElOT0RFX0FDQ0VTU19LRVkKICAgICAgLSBfQVBQX1NUT1JBR0VfTElOT0RFX1NFQ1JFVAogICAgICAtIF9BUFBfU1RPUkFHRV9MSU5PREVfUkVHSU9OCiAgICAgIC0gX0FQUF9TVE9SQUdFX0xJTk9ERV9CVUNLRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfV0FTQUJJX0FDQ0VTU19LRVkKICAgICAgLSBfQVBQX1NUT1JBR0VfV0FTQUJJX1NFQ1JFVAogICAgICAtIF9BUFBfU1RPUkFHRV9XQVNBQklfUkVHSU9OCiAgICAgIC0gX0FQUF9TVE9SQUdFX1dBU0FCSV9CVUNLRVQKICAgICAgLSBfQVBQX0ZVTkNUSU9OU19TSVpFX0xJTUlUCiAgICAgIC0gX0FQUF9GVU5DVElPTlNfVElNRU9VVAogICAgICAtIF9BUFBfRlVOQ1RJT05TX0JVSUxEX1RJTUVPVVQKICAgICAgLSBfQVBQX0ZVTkNUSU9OU19DUFVTCiAgICAgIC0gX0FQUF9GVU5DVElPTlNfTUVNT1JZCiAgICAgIC0gX0FQUF9GVU5DVElPTlNfUlVOVElNRVMKICAgICAgLSBfQVBQX0VYRUNVVE9SX1NFQ1JFVAogICAgICAtIF9BUFBfRVhFQ1VUT1JfSE9TVAogICAgICAtIF9BUFBfTE9HR0lOR19QUk9WSURFUgogICAgICAtIF9BUFBfTE9HR0lOR19DT05GSUcKICAgICAgLSBfQVBQX1NUQVRTRF9IT1NUCiAgICAgIC0gX0FQUF9TVEFUU0RfUE9SVAogICAgICAtIF9BUFBfTUFJTlRFTkFOQ0VfSU5URVJWQUwKICAgICAgLSBfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9FWEVDVVRJT04KICAgICAgLSBfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9DQUNIRQogICAgICAtIF9BUFBfTUFJTlRFTkFOQ0VfUkVURU5USU9OX0FCVVNFCiAgICAgIC0gX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fQVVESVQKICAgICAgLSBfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9VU0FHRV9IT1VSTFkKICAgICAgLSBfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9TQ0hFRFVMRVMKICAgICAgLSBfQVBQX1NNU19QUk9WSURFUgogICAgICAtIF9BUFBfU01TX0ZST00KICAgICAgLSBfQVBQX0dSQVBIUUxfTUFYX0JBVENIX1NJWkUKICAgICAgLSBfQVBQX0dSQVBIUUxfTUFYX0NPTVBMRVhJVFkKICAgICAgLSBfQVBQX0dSQVBIUUxfTUFYX0RFUFRICiAgICAgIC0gX0FQUF9WQ1NfR0lUSFVCX0FQUF9OQU1FCiAgICAgIC0gX0FQUF9WQ1NfR0lUSFVCX1BSSVZBVEVfS0VZCiAgICAgIC0gX0FQUF9WQ1NfR0lUSFVCX0FQUF9JRAogICAgICAtIF9BUFBfVkNTX0dJVEhVQl9XRUJIT09LX1NFQ1JFVAogICAgICAtIF9BUFBfVkNTX0dJVEhVQl9DTElFTlRfU0VDUkVUCiAgICAgIC0gX0FQUF9WQ1NfR0lUSFVCX0NMSUVOVF9JRAogICAgICAtIF9BUFBfTUlHUkFUSU9OU19GSVJFQkFTRV9DTElFTlRfSUQKICAgICAgLSBfQVBQX01JR1JBVElPTlNfRklSRUJBU0VfQ0xJRU5UX1NFQ1JFVAogICAgICAtIF9BUFBfQVNTSVNUQU5UX09QRU5BSV9BUElfS0VZCiAgYXBwd3JpdGUtcmVhbHRpbWU6CiAgICBpbWFnZTogJ2FwcHdyaXRlL2FwcHdyaXRlOjEuNCcKICAgIGVudHJ5cG9pbnQ6IHJlYWx0aW1lCiAgICBsb2dnaW5nOgogICAgICBkcml2ZXI6IGpzb24tZmlsZQogICAgICBvcHRpb25zOgogICAgICAgIG1heC1maWxlOiAnNScKICAgICAgICBtYXgtc2l6ZTogMTBtCiAgICBkZXBlbmRzX29uOgogICAgICAtIGFwcHdyaXRlLW1hcmlhZGIKICAgICAgLSBhcHB3cml0ZS1yZWRpcwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX0FQUFdSSVRFPS92MS9yZWFsdGltZQogICAgICAtIF9BUFBfRU5WCiAgICAgIC0gX0FQUF9XT1JLRVJfUEVSX0NPUkUKICAgICAgLSBfQVBQX09QVElPTlNfQUJVU0UKICAgICAgLSBfQVBQX09QRU5TU0xfS0VZX1YxCiAgICAgIC0gX0FQUF9SRURJU19IT1NUCiAgICAgIC0gX0FQUF9SRURJU19QT1JUCiAgICAgIC0gX0FQUF9SRURJU19VU0VSCiAgICAgIC0gX0FQUF9SRURJU19QQVNTCiAgICAgIC0gX0FQUF9EQl9IT1NUCiAgICAgIC0gX0FQUF9EQl9QT1JUCiAgICAgIC0gX0FQUF9EQl9TQ0hFTUEKICAgICAgLSBfQVBQX0RCX1VTRVIKICAgICAgLSBfQVBQX0RCX1BBU1MKICAgICAgLSBfQVBQX1VTQUdFX1NUQVRTCiAgICAgIC0gX0FQUF9MT0dHSU5HX1BST1ZJREVSCiAgICAgIC0gX0FQUF9MT0dHSU5HX0NPTkZJRwogIGFwcHdyaXRlLXdvcmtlci1hdWRpdHM6CiAgICBpbWFnZTogJ2FwcHdyaXRlL2FwcHdyaXRlOjEuNCcKICAgIGVudHJ5cG9pbnQ6IHdvcmtlci1hdWRpdHMKICAgIGxvZ2dpbmc6CiAgICAgIGRyaXZlcjoganNvbi1maWxlCiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LWZpbGU6ICc1JwogICAgICAgIG1heC1zaXplOiAxMG0KICAgIGNvbnRhaW5lcl9uYW1lOiBhcHB3cml0ZS13b3JrZXItYXVkaXRzCiAgICBkZXBlbmRzX29uOgogICAgICAtIGFwcHdyaXRlLXJlZGlzCiAgICAgIC0gYXBwd3JpdGUtbWFyaWFkYgogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gX0FQUF9FTlYKICAgICAgLSBfQVBQX1dPUktFUl9QRVJfQ09SRQogICAgICAtIF9BUFBfT1BFTlNTTF9LRVlfVjEKICAgICAgLSBfQVBQX1JFRElTX0hPU1QKICAgICAgLSBfQVBQX1JFRElTX1BPUlQKICAgICAgLSBfQVBQX1JFRElTX1VTRVIKICAgICAgLSBfQVBQX1JFRElTX1BBU1MKICAgICAgLSBfQVBQX0RCX0hPU1QKICAgICAgLSBfQVBQX0RCX1BPUlQKICAgICAgLSBfQVBQX0RCX1NDSEVNQQogICAgICAtIF9BUFBfREJfVVNFUgogICAgICAtIF9BUFBfREJfUEFTUwogICAgICAtIF9BUFBfTE9HR0lOR19QUk9WSURFUgogICAgICAtIF9BUFBfTE9HR0lOR19DT05GSUcKICBhcHB3cml0ZS13b3JrZXItd2ViaG9va3M6CiAgICBpbWFnZTogJ2FwcHdyaXRlL2FwcHdyaXRlOjEuNCcKICAgIGVudHJ5cG9pbnQ6IHdvcmtlci13ZWJob29rcwogICAgbG9nZ2luZzoKICAgICAgZHJpdmVyOiBqc29uLWZpbGUKICAgICAgb3B0aW9uczoKICAgICAgICBtYXgtZmlsZTogJzUnCiAgICAgICAgbWF4LXNpemU6IDEwbQogICAgY29udGFpbmVyX25hbWU6IGFwcHdyaXRlLXdvcmtlci13ZWJob29rcwogICAgZGVwZW5kc19vbjoKICAgICAgLSBhcHB3cml0ZS1yZWRpcwogICAgICAtIGFwcHdyaXRlLW1hcmlhZGIKICAgIGVudmlyb25tZW50OgogICAgICAtIF9BUFBfRU5WCiAgICAgIC0gX0FQUF9XT1JLRVJfUEVSX0NPUkUKICAgICAgLSBfQVBQX09QRU5TU0xfS0VZX1YxCiAgICAgIC0gX0FQUF9TWVNURU1fU0VDVVJJVFlfRU1BSUxfQUREUkVTUwogICAgICAtIF9BUFBfUkVESVNfSE9TVAogICAgICAtIF9BUFBfUkVESVNfUE9SVAogICAgICAtIF9BUFBfUkVESVNfVVNFUgogICAgICAtIF9BUFBfUkVESVNfUEFTUwogICAgICAtIF9BUFBfTE9HR0lOR19QUk9WSURFUgogICAgICAtIF9BUFBfTE9HR0lOR19DT05GSUcKICBhcHB3cml0ZS13b3JrZXItZGVsZXRlczoKICAgIGltYWdlOiAnYXBwd3JpdGUvYXBwd3JpdGU6MS40JwogICAgZW50cnlwb2ludDogd29ya2VyLWRlbGV0ZXMKICAgIGxvZ2dpbmc6CiAgICAgIGRyaXZlcjoganNvbi1maWxlCiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LWZpbGU6ICc1JwogICAgICAgIG1heC1zaXplOiAxMG0KICAgIGNvbnRhaW5lcl9uYW1lOiBhcHB3cml0ZS13b3JrZXItZGVsZXRlcwogICAgZGVwZW5kc19vbjoKICAgICAgLSBhcHB3cml0ZS1yZWRpcwogICAgICAtIGFwcHdyaXRlLW1hcmlhZGIKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2FwcHdyaXRlLXVwbG9hZHM6L3N0b3JhZ2UvdXBsb2FkczpydycKICAgICAgLSAnYXBwd3JpdGUtY2FjaGU6L3N0b3JhZ2UvY2FjaGU6cncnCiAgICAgIC0gJ2FwcHdyaXRlLWZ1bmN0aW9uczovc3RvcmFnZS9mdW5jdGlvbnM6cncnCiAgICAgIC0gJ2FwcHdyaXRlLWJ1aWxkczovc3RvcmFnZS9idWlsZHM6cncnCiAgICAgIC0gJ2FwcHdyaXRlLWNlcnRpZmljYXRlczovc3RvcmFnZS9jZXJ0aWZpY2F0ZXM6cncnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBfQVBQX0VOVgogICAgICAtIF9BUFBfV09SS0VSX1BFUl9DT1JFCiAgICAgIC0gX0FQUF9PUEVOU1NMX0tFWV9WMQogICAgICAtIF9BUFBfUkVESVNfSE9TVAogICAgICAtIF9BUFBfUkVESVNfUE9SVAogICAgICAtIF9BUFBfUkVESVNfVVNFUgogICAgICAtIF9BUFBfUkVESVNfUEFTUwogICAgICAtIF9BUFBfREJfSE9TVAogICAgICAtIF9BUFBfREJfUE9SVAogICAgICAtIF9BUFBfREJfU0NIRU1BCiAgICAgIC0gX0FQUF9EQl9VU0VSCiAgICAgIC0gX0FQUF9EQl9QQVNTCiAgICAgIC0gX0FQUF9TVE9SQUdFX0RFVklDRQogICAgICAtIF9BUFBfU1RPUkFHRV9TM19BQ0NFU1NfS0VZCiAgICAgIC0gX0FQUF9TVE9SQUdFX1MzX1NFQ1JFVAogICAgICAtIF9BUFBfU1RPUkFHRV9TM19SRUdJT04KICAgICAgLSBfQVBQX1NUT1JBR0VfUzNfQlVDS0VUCiAgICAgIC0gX0FQUF9TVE9SQUdFX0RPX1NQQUNFU19BQ0NFU1NfS0VZCiAgICAgIC0gX0FQUF9TVE9SQUdFX0RPX1NQQUNFU19TRUNSRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfRE9fU1BBQ0VTX1JFR0lPTgogICAgICAtIF9BUFBfU1RPUkFHRV9ET19TUEFDRVNfQlVDS0VUCiAgICAgIC0gX0FQUF9TVE9SQUdFX0JBQ0tCTEFaRV9BQ0NFU1NfS0VZCiAgICAgIC0gX0FQUF9TVE9SQUdFX0JBQ0tCTEFaRV9TRUNSRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfQkFDS0JMQVpFX1JFR0lPTgogICAgICAtIF9BUFBfU1RPUkFHRV9CQUNLQkxBWkVfQlVDS0VUCiAgICAgIC0gX0FQUF9TVE9SQUdFX0xJTk9ERV9BQ0NFU1NfS0VZCiAgICAgIC0gX0FQUF9TVE9SQUdFX0xJTk9ERV9TRUNSRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfTElOT0RFX1JFR0lPTgogICAgICAtIF9BUFBfU1RPUkFHRV9MSU5PREVfQlVDS0VUCiAgICAgIC0gX0FQUF9TVE9SQUdFX1dBU0FCSV9BQ0NFU1NfS0VZCiAgICAgIC0gX0FQUF9TVE9SQUdFX1dBU0FCSV9TRUNSRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfV0FTQUJJX1JFR0lPTgogICAgICAtIF9BUFBfU1RPUkFHRV9XQVNBQklfQlVDS0VUCiAgICAgIC0gX0FQUF9MT0dHSU5HX1BST1ZJREVSCiAgICAgIC0gX0FQUF9MT0dHSU5HX0NPTkZJRwogICAgICAtIF9BUFBfRVhFQ1VUT1JfU0VDUkVUCiAgICAgIC0gX0FQUF9FWEVDVVRPUl9IT1NUCiAgYXBwd3JpdGUtd29ya2VyLWRhdGFiYXNlczoKICAgIGltYWdlOiAnYXBwd3JpdGUvYXBwd3JpdGU6MS40JwogICAgZW50cnlwb2ludDogd29ya2VyLWRhdGFiYXNlcwogICAgbG9nZ2luZzoKICAgICAgZHJpdmVyOiBqc29uLWZpbGUKICAgICAgb3B0aW9uczoKICAgICAgICBtYXgtZmlsZTogJzUnCiAgICAgICAgbWF4LXNpemU6IDEwbQogICAgY29udGFpbmVyX25hbWU6IGFwcHdyaXRlLXdvcmtlci1kYXRhYmFzZXMKICAgIGRlcGVuZHNfb246CiAgICAgIC0gYXBwd3JpdGUtcmVkaXMKICAgICAgLSBhcHB3cml0ZS1tYXJpYWRiCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBfQVBQX0VOVgogICAgICAtIF9BUFBfV09SS0VSX1BFUl9DT1JFCiAgICAgIC0gX0FQUF9PUEVOU1NMX0tFWV9WMQogICAgICAtIF9BUFBfUkVESVNfSE9TVAogICAgICAtIF9BUFBfUkVESVNfUE9SVAogICAgICAtIF9BUFBfUkVESVNfVVNFUgogICAgICAtIF9BUFBfUkVESVNfUEFTUwogICAgICAtIF9BUFBfREJfSE9TVAogICAgICAtIF9BUFBfREJfUE9SVAogICAgICAtIF9BUFBfREJfU0NIRU1BCiAgICAgIC0gX0FQUF9EQl9VU0VSCiAgICAgIC0gX0FQUF9EQl9QQVNTCiAgICAgIC0gX0FQUF9MT0dHSU5HX1BST1ZJREVSCiAgICAgIC0gX0FQUF9MT0dHSU5HX0NPTkZJRwogIGFwcHdyaXRlLXdvcmtlci1idWlsZHM6CiAgICBpbWFnZTogJ2FwcHdyaXRlL2FwcHdyaXRlOjEuNCcKICAgIGVudHJ5cG9pbnQ6IHdvcmtlci1idWlsZHMKICAgIGxvZ2dpbmc6CiAgICAgIGRyaXZlcjoganNvbi1maWxlCiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LWZpbGU6ICc1JwogICAgICAgIG1heC1zaXplOiAxMG0KICAgIGNvbnRhaW5lcl9uYW1lOiBhcHB3cml0ZS13b3JrZXItYnVpbGRzCiAgICBkZXBlbmRzX29uOgogICAgICAtIGFwcHdyaXRlLXJlZGlzCiAgICAgIC0gYXBwd3JpdGUtbWFyaWFkYgogICAgdm9sdW1lczoKICAgICAgLSAnYXBwd3JpdGUtZnVuY3Rpb25zOi9zdG9yYWdlL2Z1bmN0aW9uczpydycKICAgICAgLSAnYXBwd3JpdGUtYnVpbGRzOi9zdG9yYWdlL2J1aWxkczpydycKICAgIGVudmlyb25tZW50OgogICAgICAtIF9BUFBfRU5WCiAgICAgIC0gX0FQUF9XT1JLRVJfUEVSX0NPUkUKICAgICAgLSBfQVBQX09QRU5TU0xfS0VZX1YxCiAgICAgIC0gX0FQUF9FWEVDVVRPUl9TRUNSRVQKICAgICAgLSBfQVBQX0VYRUNVVE9SX0hPU1QKICAgICAgLSBfQVBQX1JFRElTX0hPU1QKICAgICAgLSBfQVBQX1JFRElTX1BPUlQKICAgICAgLSBfQVBQX1JFRElTX1VTRVIKICAgICAgLSBfQVBQX1JFRElTX1BBU1MKICAgICAgLSBfQVBQX0RCX0hPU1QKICAgICAgLSBfQVBQX0RCX1BPUlQKICAgICAgLSBfQVBQX0RCX1NDSEVNQQogICAgICAtIF9BUFBfREJfVVNFUgogICAgICAtIF9BUFBfREJfUEFTUwogICAgICAtIF9BUFBfTE9HR0lOR19QUk9WSURFUgogICAgICAtIF9BUFBfTE9HR0lOR19DT05GSUcKICAgICAgLSBfQVBQX1ZDU19HSVRIVUJfQVBQX05BTUUKICAgICAgLSBfQVBQX1ZDU19HSVRIVUJfUFJJVkFURV9LRVkKICAgICAgLSBfQVBQX1ZDU19HSVRIVUJfQVBQX0lECiAgICAgIC0gX0FQUF9GVU5DVElPTlNfVElNRU9VVAogICAgICAtIF9BUFBfRlVOQ1RJT05TX0JVSUxEX1RJTUVPVVQKICAgICAgLSBfQVBQX0ZVTkNUSU9OU19DUFVTCiAgICAgIC0gX0FQUF9GVU5DVElPTlNfTUVNT1JZCiAgICAgIC0gX0FQUF9PUFRJT05TX0ZPUkNFX0hUVFBTCiAgICAgIC0gX0FQUF9ET01BSU4KICAgICAgLSBfQVBQX1NUT1JBR0VfREVWSUNFCiAgICAgIC0gX0FQUF9TVE9SQUdFX1MzX0FDQ0VTU19LRVkKICAgICAgLSBfQVBQX1NUT1JBR0VfUzNfU0VDUkVUCiAgICAgIC0gX0FQUF9TVE9SQUdFX1MzX1JFR0lPTgogICAgICAtIF9BUFBfU1RPUkFHRV9TM19CVUNLRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfRE9fU1BBQ0VTX0FDQ0VTU19LRVkKICAgICAgLSBfQVBQX1NUT1JBR0VfRE9fU1BBQ0VTX1NFQ1JFVAogICAgICAtIF9BUFBfU1RPUkFHRV9ET19TUEFDRVNfUkVHSU9OCiAgICAgIC0gX0FQUF9TVE9SQUdFX0RPX1NQQUNFU19CVUNLRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfQkFDS0JMQVpFX0FDQ0VTU19LRVkKICAgICAgLSBfQVBQX1NUT1JBR0VfQkFDS0JMQVpFX1NFQ1JFVAogICAgICAtIF9BUFBfU1RPUkFHRV9CQUNLQkxBWkVfUkVHSU9OCiAgICAgIC0gX0FQUF9TVE9SQUdFX0JBQ0tCTEFaRV9CVUNLRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfTElOT0RFX0FDQ0VTU19LRVkKICAgICAgLSBfQVBQX1NUT1JBR0VfTElOT0RFX1NFQ1JFVAogICAgICAtIF9BUFBfU1RPUkFHRV9MSU5PREVfUkVHSU9OCiAgICAgIC0gX0FQUF9TVE9SQUdFX0xJTk9ERV9CVUNLRVQKICAgICAgLSBfQVBQX1NUT1JBR0VfV0FTQUJJX0FDQ0VTU19LRVkKICAgICAgLSBfQVBQX1NUT1JBR0VfV0FTQUJJX1NFQ1JFVAogICAgICAtIF9BUFBfU1RPUkFHRV9XQVNBQklfUkVHSU9OCiAgICAgIC0gX0FQUF9TVE9SQUdFX1dBU0FCSV9CVUNLRVQKICBhcHB3cml0ZS13b3JrZXItY2VydGlmaWNhdGVzOgogICAgaW1hZ2U6ICdhcHB3cml0ZS9hcHB3cml0ZToxLjQnCiAgICBlbnRyeXBvaW50OiB3b3JrZXItY2VydGlmaWNhdGVzCiAgICBsb2dnaW5nOgogICAgICBkcml2ZXI6IGpzb24tZmlsZQogICAgICBvcHRpb25zOgogICAgICAgIG1heC1maWxlOiAnNScKICAgICAgICBtYXgtc2l6ZTogMTBtCiAgICBjb250YWluZXJfbmFtZTogYXBwd3JpdGUtd29ya2VyLWNlcnRpZmljYXRlcwogICAgZGVwZW5kc19vbjoKICAgICAgLSBhcHB3cml0ZS1yZWRpcwogICAgICAtIGFwcHdyaXRlLW1hcmlhZGIKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2FwcHdyaXRlLWNvbmZpZzovc3RvcmFnZS9jb25maWc6cncnCiAgICAgIC0gJ2FwcHdyaXRlLWNlcnRpZmljYXRlczovc3RvcmFnZS9jZXJ0aWZpY2F0ZXM6cncnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBfQVBQX0VOVgogICAgICAtIF9BUFBfV09SS0VSX1BFUl9DT1JFCiAgICAgIC0gX0FQUF9PUEVOU1NMX0tFWV9WMQogICAgICAtIF9BUFBfRE9NQUlOCiAgICAgIC0gX0FQUF9ET01BSU5fVEFSR0VUCiAgICAgIC0gX0FQUF9ET01BSU5fRlVOQ1RJT05TCiAgICAgIC0gX0FQUF9TWVNURU1fU0VDVVJJVFlfRU1BSUxfQUREUkVTUwogICAgICAtIF9BUFBfUkVESVNfSE9TVAogICAgICAtIF9BUFBfUkVESVNfUE9SVAogICAgICAtIF9BUFBfUkVESVNfVVNFUgogICAgICAtIF9BUFBfUkVESVNfUEFTUwogICAgICAtIF9BUFBfREJfSE9TVAogICAgICAtIF9BUFBfREJfUE9SVAogICAgICAtIF9BUFBfREJfU0NIRU1BCiAgICAgIC0gX0FQUF9EQl9VU0VSCiAgICAgIC0gX0FQUF9EQl9QQVNTCiAgICAgIC0gX0FQUF9MT0dHSU5HX1BST1ZJREVSCiAgICAgIC0gX0FQUF9MT0dHSU5HX0NPTkZJRwogIGFwcHdyaXRlLXdvcmtlci1mdW5jdGlvbnM6CiAgICBpbWFnZTogJ2FwcHdyaXRlL2FwcHdyaXRlOjEuNCcKICAgIGVudHJ5cG9pbnQ6IHdvcmtlci1mdW5jdGlvbnMKICAgIGxvZ2dpbmc6CiAgICAgIGRyaXZlcjoganNvbi1maWxlCiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LWZpbGU6ICc1JwogICAgICAgIG1heC1zaXplOiAxMG0KICAgIGNvbnRhaW5lcl9uYW1lOiBhcHB3cml0ZS13b3JrZXItZnVuY3Rpb25zCiAgICBkZXBlbmRzX29uOgogICAgICAtIGFwcHdyaXRlLXJlZGlzCiAgICAgIC0gYXBwd3JpdGUtbWFyaWFkYgogICAgICAtIG9wZW5ydW50aW1lcy1leGVjdXRvcgogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gX0FQUF9FTlYKICAgICAgLSBfQVBQX1dPUktFUl9QRVJfQ09SRQogICAgICAtIF9BUFBfT1BFTlNTTF9LRVlfVjEKICAgICAgLSBfQVBQX1JFRElTX0hPU1QKICAgICAgLSBfQVBQX1JFRElTX1BPUlQKICAgICAgLSBfQVBQX1JFRElTX1VTRVIKICAgICAgLSBfQVBQX1JFRElTX1BBU1MKICAgICAgLSBfQVBQX0RCX0hPU1QKICAgICAgLSBfQVBQX0RCX1BPUlQKICAgICAgLSBfQVBQX0RCX1NDSEVNQQogICAgICAtIF9BUFBfREJfVVNFUgogICAgICAtIF9BUFBfREJfUEFTUwogICAgICAtIF9BUFBfRlVOQ1RJT05TX1RJTUVPVVQKICAgICAgLSBfQVBQX0ZVTkNUSU9OU19CVUlMRF9USU1FT1VUCiAgICAgIC0gX0FQUF9GVU5DVElPTlNfQ1BVUwogICAgICAtIF9BUFBfRlVOQ1RJT05TX01FTU9SWQogICAgICAtIF9BUFBfRVhFQ1VUT1JfU0VDUkVUCiAgICAgIC0gX0FQUF9FWEVDVVRPUl9IT1NUCiAgICAgIC0gX0FQUF9VU0FHRV9TVEFUUwogICAgICAtIF9BUFBfRE9DS0VSX0hVQl9VU0VSTkFNRQogICAgICAtIF9BUFBfRE9DS0VSX0hVQl9QQVNTV09SRAogICAgICAtIF9BUFBfTE9HR0lOR19DT05GSUcKICAgICAgLSBfQVBQX0xPR0dJTkdfUFJPVklERVIKICBhcHB3cml0ZS13b3JrZXItbWFpbHM6CiAgICBpbWFnZTogJ2FwcHdyaXRlL2FwcHdyaXRlOjEuNCcKICAgIGVudHJ5cG9pbnQ6IHdvcmtlci1tYWlscwogICAgbG9nZ2luZzoKICAgICAgZHJpdmVyOiBqc29uLWZpbGUKICAgICAgb3B0aW9uczoKICAgICAgICBtYXgtZmlsZTogJzUnCiAgICAgICAgbWF4LXNpemU6IDEwbQogICAgY29udGFpbmVyX25hbWU6IGFwcHdyaXRlLXdvcmtlci1tYWlscwogICAgZGVwZW5kc19vbjoKICAgICAgLSBhcHB3cml0ZS1yZWRpcwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gX0FQUF9FTlYKICAgICAgLSBfQVBQX1dPUktFUl9QRVJfQ09SRQogICAgICAtIF9BUFBfT1BFTlNTTF9LRVlfVjEKICAgICAgLSBfQVBQX1NZU1RFTV9FTUFJTF9OQU1FCiAgICAgIC0gX0FQUF9TWVNURU1fRU1BSUxfQUREUkVTUwogICAgICAtIF9BUFBfUkVESVNfSE9TVAogICAgICAtIF9BUFBfUkVESVNfUE9SVAogICAgICAtIF9BUFBfUkVESVNfVVNFUgogICAgICAtIF9BUFBfUkVESVNfUEFTUwogICAgICAtIF9BUFBfU01UUF9IT1NUCiAgICAgIC0gX0FQUF9TTVRQX1BPUlQKICAgICAgLSBfQVBQX1NNVFBfU0VDVVJFCiAgICAgIC0gX0FQUF9TTVRQX1VTRVJOQU1FCiAgICAgIC0gX0FQUF9TTVRQX1BBU1NXT1JECiAgICAgIC0gX0FQUF9MT0dHSU5HX1BST1ZJREVSCiAgICAgIC0gX0FQUF9MT0dHSU5HX0NPTkZJRwogIGFwcHdyaXRlLXdvcmtlci1tZXNzYWdpbmc6CiAgICBpbWFnZTogJ2FwcHdyaXRlL2FwcHdyaXRlOjEuNCcKICAgIGVudHJ5cG9pbnQ6IHdvcmtlci1tZXNzYWdpbmcKICAgIGxvZ2dpbmc6CiAgICAgIGRyaXZlcjoganNvbi1maWxlCiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LWZpbGU6ICc1JwogICAgICAgIG1heC1zaXplOiAxMG0KICAgIGNvbnRhaW5lcl9uYW1lOiBhcHB3cml0ZS13b3JrZXItbWVzc2FnaW5nCiAgICBkZXBlbmRzX29uOgogICAgICAtIGFwcHdyaXRlLXJlZGlzCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBfQVBQX0VOVgogICAgICAtIF9BUFBfV09SS0VSX1BFUl9DT1JFCiAgICAgIC0gX0FQUF9SRURJU19IT1NUCiAgICAgIC0gX0FQUF9SRURJU19QT1JUCiAgICAgIC0gX0FQUF9SRURJU19VU0VSCiAgICAgIC0gX0FQUF9SRURJU19QQVNTCiAgICAgIC0gX0FQUF9TTVNfUFJPVklERVIKICAgICAgLSBfQVBQX1NNU19GUk9NCiAgICAgIC0gX0FQUF9MT0dHSU5HX1BST1ZJREVSCiAgICAgIC0gX0FQUF9MT0dHSU5HX0NPTkZJRwogIGFwcHdyaXRlLXdvcmtlci1taWdyYXRpb25zOgogICAgaW1hZ2U6ICdhcHB3cml0ZS9hcHB3cml0ZToxLjQnCiAgICBlbnRyeXBvaW50OiB3b3JrZXItbWlncmF0aW9ucwogICAgbG9nZ2luZzoKICAgICAgZHJpdmVyOiBqc29uLWZpbGUKICAgICAgb3B0aW9uczoKICAgICAgICBtYXgtZmlsZTogJzUnCiAgICAgICAgbWF4LXNpemU6IDEwbQogICAgY29udGFpbmVyX25hbWU6IGFwcHdyaXRlLXdvcmtlci1taWdyYXRpb25zCiAgICBkZXBlbmRzX29uOgogICAgICAtIGFwcHdyaXRlLW1hcmlhZGIKICAgIGVudmlyb25tZW50OgogICAgICAtIF9BUFBfRU5WCiAgICAgIC0gX0FQUF9XT1JLRVJfUEVSX0NPUkUKICAgICAgLSBfQVBQX09QRU5TU0xfS0VZX1YxCiAgICAgIC0gX0FQUF9ET01BSU4KICAgICAgLSBfQVBQX0RPTUFJTl9UQVJHRVQKICAgICAgLSBfQVBQX1NZU1RFTV9TRUNVUklUWV9FTUFJTF9BRERSRVNTCiAgICAgIC0gX0FQUF9SRURJU19IT1NUCiAgICAgIC0gX0FQUF9SRURJU19QT1JUCiAgICAgIC0gX0FQUF9SRURJU19VU0VSCiAgICAgIC0gX0FQUF9SRURJU19QQVNTCiAgICAgIC0gX0FQUF9EQl9IT1NUCiAgICAgIC0gX0FQUF9EQl9QT1JUCiAgICAgIC0gX0FQUF9EQl9TQ0hFTUEKICAgICAgLSBfQVBQX0RCX1VTRVIKICAgICAgLSBfQVBQX0RCX1BBU1MKICAgICAgLSBfQVBQX0xPR0dJTkdfUFJPVklERVIKICAgICAgLSBfQVBQX0xPR0dJTkdfQ09ORklHCiAgICAgIC0gX0FQUF9NSUdSQVRJT05TX0ZJUkVCQVNFX0NMSUVOVF9JRAogICAgICAtIF9BUFBfTUlHUkFUSU9OU19GSVJFQkFTRV9DTElFTlRfU0VDUkVUCiAgYXBwd3JpdGUtbWFpbnRlbmFuY2U6CiAgICBpbWFnZTogJ2FwcHdyaXRlL2FwcHdyaXRlOjEuNCcKICAgIGVudHJ5cG9pbnQ6IG1haW50ZW5hbmNlCiAgICBsb2dnaW5nOgogICAgICBkcml2ZXI6IGpzb24tZmlsZQogICAgICBvcHRpb25zOgogICAgICAgIG1heC1maWxlOiAnNScKICAgICAgICBtYXgtc2l6ZTogMTBtCiAgICBjb250YWluZXJfbmFtZTogYXBwd3JpdGUtbWFpbnRlbmFuY2UKICAgIGRlcGVuZHNfb246CiAgICAgIC0gYXBwd3JpdGUtcmVkaXMKICAgIGVudmlyb25tZW50OgogICAgICAtIF9BUFBfRU5WCiAgICAgIC0gX0FQUF9XT1JLRVJfUEVSX0NPUkUKICAgICAgLSBfQVBQX0RPTUFJTgogICAgICAtIF9BUFBfRE9NQUlOX1RBUkdFVAogICAgICAtIF9BUFBfRE9NQUlOX0ZVTkNUSU9OUwogICAgICAtIF9BUFBfT1BFTlNTTF9LRVlfVjEKICAgICAgLSBfQVBQX1JFRElTX0hPU1QKICAgICAgLSBfQVBQX1JFRElTX1BPUlQKICAgICAgLSBfQVBQX1JFRElTX1VTRVIKICAgICAgLSBfQVBQX1JFRElTX1BBU1MKICAgICAgLSBfQVBQX0RCX0hPU1QKICAgICAgLSBfQVBQX0RCX1BPUlQKICAgICAgLSBfQVBQX0RCX1NDSEVNQQogICAgICAtIF9BUFBfREJfVVNFUgogICAgICAtIF9BUFBfREJfUEFTUwogICAgICAtIF9BUFBfTUFJTlRFTkFOQ0VfSU5URVJWQUwKICAgICAgLSBfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9FWEVDVVRJT04KICAgICAgLSBfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9DQUNIRQogICAgICAtIF9BUFBfTUFJTlRFTkFOQ0VfUkVURU5USU9OX0FCVVNFCiAgICAgIC0gX0FQUF9NQUlOVEVOQU5DRV9SRVRFTlRJT05fQVVESVQKICAgICAgLSBfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9VU0FHRV9IT1VSTFkKICAgICAgLSBfQVBQX01BSU5URU5BTkNFX1JFVEVOVElPTl9TQ0hFRFVMRVMKICBhcHB3cml0ZS11c2FnZToKICAgIGltYWdlOiAnYXBwd3JpdGUvYXBwd3JpdGU6MS40JwogICAgZW50cnlwb2ludDogdXNhZ2UKICAgIGNvbnRhaW5lcl9uYW1lOiBhcHB3cml0ZS11c2FnZQogICAgbG9nZ2luZzoKICAgICAgZHJpdmVyOiBqc29uLWZpbGUKICAgICAgb3B0aW9uczoKICAgICAgICBtYXgtZmlsZTogJzUnCiAgICAgICAgbWF4LXNpemU6IDEwbQogICAgZGVwZW5kc19vbjoKICAgICAgLSBhcHB3cml0ZS1pbmZsdXhkYgogICAgICAtIGFwcHdyaXRlLW1hcmlhZGIKICAgIGVudmlyb25tZW50OgogICAgICAtIF9BUFBfRU5WCiAgICAgIC0gX0FQUF9XT1JLRVJfUEVSX0NPUkUKICAgICAgLSBfQVBQX09QRU5TU0xfS0VZX1YxCiAgICAgIC0gX0FQUF9EQl9IT1NUCiAgICAgIC0gX0FQUF9EQl9QT1JUCiAgICAgIC0gX0FQUF9EQl9TQ0hFTUEKICAgICAgLSBfQVBQX0RCX1VTRVIKICAgICAgLSBfQVBQX0RCX1BBU1MKICAgICAgLSBfQVBQX0lORkxVWERCX0hPU1QKICAgICAgLSBfQVBQX0lORkxVWERCX1BPUlQKICAgICAgLSBfQVBQX1VTQUdFX0FHR1JFR0FUSU9OX0lOVEVSVkFMCiAgICAgIC0gX0FQUF9SRURJU19IT1NUCiAgICAgIC0gX0FQUF9SRURJU19QT1JUCiAgICAgIC0gX0FQUF9SRURJU19VU0VSCiAgICAgIC0gX0FQUF9SRURJU19QQVNTCiAgICAgIC0gX0FQUF9VU0FHRV9TVEFUUwogICAgICAtIF9BUFBfTE9HR0lOR19QUk9WSURFUgogICAgICAtIF9BUFBfTE9HR0lOR19DT05GSUcKICBhcHB3cml0ZS1zY2hlZHVsZToKICAgIGltYWdlOiAnYXBwd3JpdGUvYXBwd3JpdGU6MS40JwogICAgZW50cnlwb2ludDogc2NoZWR1bGUKICAgIGNvbnRhaW5lcl9uYW1lOiBhcHB3cml0ZS1zY2hlZHVsZQogICAgbG9nZ2luZzoKICAgICAgZHJpdmVyOiBqc29uLWZpbGUKICAgICAgb3B0aW9uczoKICAgICAgICBtYXgtZmlsZTogJzUnCiAgICAgICAgbWF4LXNpemU6IDEwbQogICAgZGVwZW5kc19vbjoKICAgICAgLSBhcHB3cml0ZS1tYXJpYWRiCiAgICAgIC0gYXBwd3JpdGUtcmVkaXMKICAgIGVudmlyb25tZW50OgogICAgICAtIF9BUFBfRU5WCiAgICAgIC0gX0FQUF9XT1JLRVJfUEVSX0NPUkUKICAgICAgLSBfQVBQX09QRU5TU0xfS0VZX1YxCiAgICAgIC0gX0FQUF9SRURJU19IT1NUCiAgICAgIC0gX0FQUF9SRURJU19QT1JUCiAgICAgIC0gX0FQUF9SRURJU19VU0VSCiAgICAgIC0gX0FQUF9SRURJU19QQVNTCiAgICAgIC0gX0FQUF9EQl9IT1NUCiAgICAgIC0gX0FQUF9EQl9QT1JUCiAgICAgIC0gX0FQUF9EQl9TQ0hFTUEKICAgICAgLSBfQVBQX0RCX1VTRVIKICAgICAgLSBfQVBQX0RCX1BBU1MKICBvcGVucnVudGltZXMtZXhlY3V0b3I6CiAgICBjb250YWluZXJfbmFtZTogb3BlbnJ1bnRpbWVzLWV4ZWN1dG9yCiAgICBob3N0bmFtZTogYXBwd3JpdGUtZXhlY3V0b3IKICAgIGxvZ2dpbmc6CiAgICAgIGRyaXZlcjoganNvbi1maWxlCiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LWZpbGU6ICc1JwogICAgICAgIG1heC1zaXplOiAxMG0KICAgIHN0b3Bfc2lnbmFsOiBTSUdJTlQKICAgIGltYWdlOiAnb3BlbnJ1bnRpbWVzL2V4ZWN1dG9yOjAuNC4xJwogICAgdm9sdW1lczoKICAgICAgLSAnL3Zhci9ydW4vZG9ja2VyLnNvY2s6L3Zhci9ydW4vZG9ja2VyLnNvY2snCiAgICAgIC0gJ2FwcHdyaXRlLWJ1aWxkczovc3RvcmFnZS9idWlsZHM6cncnCiAgICAgIC0gJ2FwcHdyaXRlLWZ1bmN0aW9uczovc3RvcmFnZS9mdW5jdGlvbnM6cncnCiAgICAgIC0gJy90bXA6L3RtcDpydycKICAgIGVudmlyb25tZW50OgogICAgICAtIE9QUl9FWEVDVVRPUl9JTkFDVElWRV9UUkVTSE9MRD0kX0FQUF9GVU5DVElPTlNfSU5BQ1RJVkVfVEhSRVNIT0xECiAgICAgIC0gT1BSX0VYRUNVVE9SX01BSU5URU5BTkNFX0lOVEVSVkFMPSRfQVBQX0ZVTkNUSU9OU19NQUlOVEVOQU5DRV9JTlRFUlZBTAogICAgICAtIE9QUl9FWEVDVVRPUl9ORVRXT1JLPSRfQVBQX0ZVTkNUSU9OU19SVU5USU1FU19ORVRXT1JLCiAgICAgIC0gT1BSX0VYRUNVVE9SX0RPQ0tFUl9IVUJfVVNFUk5BTUU9JF9BUFBfRE9DS0VSX0hVQl9VU0VSTkFNRQogICAgICAtIE9QUl9FWEVDVVRPUl9ET0NLRVJfSFVCX1BBU1NXT1JEPSRfQVBQX0RPQ0tFUl9IVUJfUEFTU1dPUkQKICAgICAgLSBPUFJfRVhFQ1VUT1JfRU5WPSRfQVBQX0VOVgogICAgICAtIE9QUl9FWEVDVVRPUl9SVU5USU1FUz0kX0FQUF9GVU5DVElPTlNfUlVOVElNRVMKICAgICAgLSBPUFJfRVhFQ1VUT1JfU0VDUkVUPSRfQVBQX0VYRUNVVE9SX1NFQ1JFVAogICAgICAtIE9QUl9FWEVDVVRPUl9MT0dHSU5HX1BST1ZJREVSPSRfQVBQX0xPR0dJTkdfUFJPVklERVIKICAgICAgLSBPUFJfRVhFQ1VUT1JfTE9HR0lOR19DT05GSUc9JF9BUFBfTE9HR0lOR19DT05GSUcKICAgICAgLSBPUFJfRVhFQ1VUT1JfU1RPUkFHRV9ERVZJQ0U9JF9BUFBfU1RPUkFHRV9ERVZJQ0UKICAgICAgLSBPUFJfRVhFQ1VUT1JfU1RPUkFHRV9TM19BQ0NFU1NfS0VZPSRfQVBQX1NUT1JBR0VfUzNfQUNDRVNTX0tFWQogICAgICAtIE9QUl9FWEVDVVRPUl9TVE9SQUdFX1MzX1NFQ1JFVD0kX0FQUF9TVE9SQUdFX1MzX1NFQ1JFVAogICAgICAtIE9QUl9FWEVDVVRPUl9TVE9SQUdFX1MzX1JFR0lPTj0kX0FQUF9TVE9SQUdFX1MzX1JFR0lPTgogICAgICAtIE9QUl9FWEVDVVRPUl9TVE9SQUdFX1MzX0JVQ0tFVD0kX0FQUF9TVE9SQUdFX1MzX0JVQ0tFVAogICAgICAtIE9QUl9FWEVDVVRPUl9TVE9SQUdFX0RPX1NQQUNFU19BQ0NFU1NfS0VZPSRfQVBQX1NUT1JBR0VfRE9fU1BBQ0VTX0FDQ0VTU19LRVkKICAgICAgLSBPUFJfRVhFQ1VUT1JfU1RPUkFHRV9ET19TUEFDRVNfU0VDUkVUPSRfQVBQX1NUT1JBR0VfRE9fU1BBQ0VTX1NFQ1JFVAogICAgICAtIE9QUl9FWEVDVVRPUl9TVE9SQUdFX0RPX1NQQUNFU19SRUdJT049JF9BUFBfU1RPUkFHRV9ET19TUEFDRVNfUkVHSU9OCiAgICAgIC0gT1BSX0VYRUNVVE9SX1NUT1JBR0VfRE9fU1BBQ0VTX0JVQ0tFVD0kX0FQUF9TVE9SQUdFX0RPX1NQQUNFU19CVUNLRVQKICAgICAgLSBPUFJfRVhFQ1VUT1JfU1RPUkFHRV9CQUNLQkxBWkVfQUNDRVNTX0tFWT0kX0FQUF9TVE9SQUdFX0JBQ0tCTEFaRV9BQ0NFU1NfS0VZCiAgICAgIC0gT1BSX0VYRUNVVE9SX1NUT1JBR0VfQkFDS0JMQVpFX1NFQ1JFVD0kX0FQUF9TVE9SQUdFX0JBQ0tCTEFaRV9TRUNSRVQKICAgICAgLSBPUFJfRVhFQ1VUT1JfU1RPUkFHRV9CQUNLQkxBWkVfUkVHSU9OPSRfQVBQX1NUT1JBR0VfQkFDS0JMQVpFX1JFR0lPTgogICAgICAtIE9QUl9FWEVDVVRPUl9TVE9SQUdFX0JBQ0tCTEFaRV9CVUNLRVQ9JF9BUFBfU1RPUkFHRV9CQUNLQkxBWkVfQlVDS0VUCiAgICAgIC0gT1BSX0VYRUNVVE9SX1NUT1JBR0VfTElOT0RFX0FDQ0VTU19LRVk9JF9BUFBfU1RPUkFHRV9MSU5PREVfQUNDRVNTX0tFWQogICAgICAtIE9QUl9FWEVDVVRPUl9TVE9SQUdFX0xJTk9ERV9TRUNSRVQ9JF9BUFBfU1RPUkFHRV9MSU5PREVfU0VDUkVUCiAgICAgIC0gT1BSX0VYRUNVVE9SX1NUT1JBR0VfTElOT0RFX1JFR0lPTj0kX0FQUF9TVE9SQUdFX0xJTk9ERV9SRUdJT04KICAgICAgLSBPUFJfRVhFQ1VUT1JfU1RPUkFHRV9MSU5PREVfQlVDS0VUPSRfQVBQX1NUT1JBR0VfTElOT0RFX0JVQ0tFVAogICAgICAtIE9QUl9FWEVDVVRPUl9TVE9SQUdFX1dBU0FCSV9BQ0NFU1NfS0VZPSRfQVBQX1NUT1JBR0VfV0FTQUJJX0FDQ0VTU19LRVkKICAgICAgLSBPUFJfRVhFQ1VUT1JfU1RPUkFHRV9XQVNBQklfU0VDUkVUPSRfQVBQX1NUT1JBR0VfV0FTQUJJX1NFQ1JFVAogICAgICAtIE9QUl9FWEVDVVRPUl9TVE9SQUdFX1dBU0FCSV9SRUdJT049JF9BUFBfU1RPUkFHRV9XQVNBQklfUkVHSU9OCiAgICAgIC0gT1BSX0VYRUNVVE9SX1NUT1JBR0VfV0FTQUJJX0JVQ0tFVD0kX0FQUF9TVE9SQUdFX1dBU0FCSV9CVUNLRVQKICBhcHB3cml0ZS1tYXJpYWRiOgogICAgaW1hZ2U6ICdtYXJpYWRiOjEwLjcnCiAgICBjb250YWluZXJfbmFtZTogYXBwd3JpdGUtbWFyaWFkYgogICAgbG9nZ2luZzoKICAgICAgZHJpdmVyOiBqc29uLWZpbGUKICAgICAgb3B0aW9uczoKICAgICAgICBtYXgtZmlsZTogJzUnCiAgICAgICAgbWF4LXNpemU6IDEwbQogICAgdm9sdW1lczoKICAgICAgLSAnYXBwd3JpdGUtbWFyaWFkYjovdmFyL2xpYi9teXNxbDpydycKICAgIGVudmlyb25tZW50OgogICAgICAtICdNWVNRTF9ST09UX1BBU1NXT1JEPSR7X0FQUF9EQl9ST09UX1BBU1N9JwogICAgICAtICdNWVNRTF9EQVRBQkFTRT0ke19BUFBfREJfU0NIRU1BfScKICAgICAgLSAnTVlTUUxfVVNFUj0ke19BUFBfREJfVVNFUn0nCiAgICAgIC0gJ01ZU1FMX1BBU1NXT1JEPSR7X0FQUF9EQl9QQVNTfScKICAgIGNvbW1hbmQ6ICdteXNxbGQgLS1pbm5vZGItZmx1c2gtbWV0aG9kPWZzeW5jJwogIGFwcHdyaXRlLXJlZGlzOgogICAgaW1hZ2U6ICdyZWRpczo3LjAuNC1hbHBpbmUnCiAgICBjb250YWluZXJfbmFtZTogYXBwd3JpdGUtcmVkaXMKICAgIGxvZ2dpbmc6CiAgICAgIGRyaXZlcjoganNvbi1maWxlCiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LWZpbGU6ICc1JwogICAgICAgIG1heC1zaXplOiAxMG0KICAgIGNvbW1hbmQ6ICJyZWRpcy1zZXJ2ZXIgLS1tYXhtZW1vcnkgICAgICAgICAgICA1MTJtYiAtLW1heG1lbW9yeS1wb2xpY3kgICAgIGFsbGtleXMtbHJ1IC0tbWF4bWVtb3J5LXNhbXBsZXMgICAgNVxuIgogICAgdm9sdW1lczoKICAgICAgLSAnYXBwd3JpdGUtcmVkaXM6L2RhdGE6cncnCiAgYXBwd3JpdGUtaW5mbHV4ZGI6CiAgICBpbWFnZTogJ2FwcHdyaXRlL2luZmx1eGRiOjEuNS4wJwogICAgY29udGFpbmVyX25hbWU6IGFwcHdyaXRlLWluZmx1eGRiCiAgICBsb2dnaW5nOgogICAgICBkcml2ZXI6IGpzb24tZmlsZQogICAgICBvcHRpb25zOgogICAgICAgIG1heC1maWxlOiAnNScKICAgICAgICBtYXgtc2l6ZTogMTBtCiAgICB2b2x1bWVzOgogICAgICAtICdhcHB3cml0ZS1pbmZsdXhkYjovdmFyL2xpYi9pbmZsdXhkYjpydycKICBhcHB3cml0ZS10ZWxlZ3JhZjoKICAgIGltYWdlOiAnYXBwd3JpdGUvdGVsZWdyYWY6MS40LjAnCiAgICBjb250YWluZXJfbmFtZTogYXBwd3JpdGUtdGVsZWdyYWYKICAgIGxvZ2dpbmc6CiAgICAgIGRyaXZlcjoganNvbi1maWxlCiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LWZpbGU6ICc1JwogICAgICAgIG1heC1zaXplOiAxMG0KICAgIGVudmlyb25tZW50OgogICAgICAtIF9BUFBfSU5GTFVYREJfSE9TVAogICAgICAtIF9BUFBfSU5GTFVYREJfUE9SVAp2b2x1bWVzOgogIGFwcHdyaXRlLW1hcmlhZGI6IG51bGwKICBhcHB3cml0ZS1yZWRpczogbnVsbAogIGFwcHdyaXRlLWNhY2hlOiBudWxsCiAgYXBwd3JpdGUtdXBsb2FkczogbnVsbAogIGFwcHdyaXRlLWNlcnRpZmljYXRlczogbnVsbAogIGFwcHdyaXRlLWZ1bmN0aW9uczogbnVsbAogIGFwcHdyaXRlLWJ1aWxkczogbnVsbAogIGFwcHdyaXRlLWluZmx1eGRiOiBudWxsCiAgYXBwd3JpdGUtY29uZmlnOiBudWxsCg==", "tags": [ "backend-as-a-service", @@ -38,14 +38,14 @@ }, "budge": { "documentation": "https:\/\/github.com\/linuxserver\/budge", - "slogan": "BudgE is an open-source 'budgeting with envelopes' personal finance app, helping you manage your finances effectively.", + "slogan": "Budge is a budgeting personal finance app.", "compose": "c2VydmljZXM6CiAgYnVkZ2U6CiAgICBpbWFnZTogJ2xzY3IuaW8vbGludXhzZXJ2ZXIvYnVkZ2U6bGF0ZXN0JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX0JVREdFCiAgICAgIC0gUFVJRD0xMDAwCiAgICAgIC0gUEdJRD0xMDAwCiAgICAgIC0gVFo9RXVyb3BlL01hZHJpZAogICAgdm9sdW1lczoKICAgICAgLSAnYnVkZ2UtY29uZmlnOi9jb25maWcnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy1mJwogICAgICAgIC0gJ2h0dHA6Ly9sb2NhbGhvc3Q6ODAnCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMTUK", "tags": [ "personal finance", "budgeting", "expense tracking" ], - "logo": [] + "logo": "svgs\/unknown.svg" }, "code-server": { "documentation": "https:\/\/coder.com\/docs\/code-server\/latest", @@ -61,7 +61,7 @@ }, "dashboard": { "documentation": "https:\/\/github.com\/phntxx\/dashboard?tab=readme-ov-file#dashboard", - "slogan": "A dashboard. Inspired by SUI, it offers simple customization through JSON-files and a handy search bar to help you browse the internet more efficiently.", + "slogan": "A dashboard, inspired by SUI.", "compose": "c2VydmljZXM6CiAgZGFzaGJvYXJkOgogICAgaW1hZ2U6ICdwaG50eHgvZGFzaGJvYXJkOmxhdGVzdCcKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9EQVNIQk9BUkQKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2Rhc2hib2FyZC1kYXRhOi9hcHAvZGF0YScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBjdXJsCiAgICAgICAgLSAnLWYnCiAgICAgICAgLSAnaHR0cDovL2xvY2FsaG9zdDo4MDgwJwogICAgICBpbnRlcnZhbDogMnMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDE1Cg==", "tags": [ "dashboard", @@ -69,7 +69,7 @@ "search", "bookmarks" ], - "logo": [] + "logo": "svgs\/unknown.svg" }, "directus-with-postgresql": { "documentation": "https:\/\/directus.io", @@ -97,7 +97,7 @@ }, "docker-registry": { "documentation": "https:\/\/docs.docker.com\/registry\/", - "slogan": "The Docker Registry is a stateless, highly scalable server side application that stores and lets you distribute Docker images.", + "slogan": "The Docker Registry is lets you distribute Docker images.", "compose": "c2VydmljZXM6CiAgcmVnaXN0cnk6CiAgICBpbWFnZTogJ3JlZ2lzdHJ5OjInCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fUkVHSVNUUlkKICAgICAgLSBSRUdJU1RSWV9BVVRIPWh0cGFzc3dkCiAgICAgIC0gUkVHSVNUUllfQVVUSF9IVFBBU1NXRF9SRUFMTT1SZWdpc3RyeQogICAgICAtIFJFR0lTVFJZX0FVVEhfSFRQQVNTV0RfUEFUSD0vYXV0aC9yZWdpc3RyeS5wYXNzd29yZAogICAgICAtIFJFR0lTVFJZX1NUT1JBR0VfRklMRVNZU1RFTV9ST09URElSRUNUT1JZPS9kYXRhCiAgICB2b2x1bWVzOgogICAgICAtCiAgICAgICAgdHlwZTogYmluZAogICAgICAgIHNvdXJjZTogLi9hdXRoL3JlZ2lzdHJ5LnBhc3N3b3JkCiAgICAgICAgdGFyZ2V0OiAvYXV0aC9yZWdpc3RyeS5wYXNzd29yZAogICAgICAgIGlzRGlyZWN0b3J5OiBmYWxzZQogICAgICAgIGNvbnRlbnQ6ICd0ZXN0dXNlcjokMnkkMDUkL28ySnZtSTJiaEV4WEl0Nk9xeGE3ZWtZQjd2M3NjajF3RkVmNnRCc2xKdkpPTW9QUUwuR3knCiAgICAgIC0KICAgICAgICB0eXBlOiBiaW5kCiAgICAgICAgc291cmNlOiAuL2NvbmZpZy9jb25maWcueW1sCiAgICAgICAgdGFyZ2V0OiAvZXRjL2RvY2tlci9yZWdpc3RyeS9jb25maWcueW1sCiAgICAgICAgaXNEaXJlY3Rvcnk6IGZhbHNlCiAgICAgICAgY29udGVudDogInZlcnNpb246IDAuMVxubG9nOlxuICBmaWVsZHM6XG4gICAgc2VydmljZTogcmVnaXN0cnlcbnN0b3JhZ2U6XG4gIGNhY2hlOlxuICAgIGJsb2JkZXNjcmlwdG9yOiBpbm1lbW9yeVxuICBmaWxlc3lzdGVtOlxuICAgIHJvb3RkaXJlY3Rvcnk6IC92YXIvbGliL3JlZ2lzdHJ5XG5odHRwOlxuICBhZGRyOiA6NTAwMFxuICBoZWFkZXJzOlxuICAgIFgtQ29udGVudC1UeXBlLU9wdGlvbnM6IFtub3NuaWZmXVxuaGVhbHRoOlxuICBzdG9yYWdlZHJpdmVyOlxuICAgIGVuYWJsZWQ6IHRydWVcbiAgICBpbnRlcnZhbDogMTBzXG4gICAgdGhyZXNob2xkOiAzIgogICAgICAtCiAgICAgICAgdHlwZTogYmluZAogICAgICAgIHNvdXJjZTogLi9kYXRhCiAgICAgICAgdGFyZ2V0OiAvZGF0YQogICAgICAgIGlzRGlyZWN0b3J5OiB0cnVlCg==", "tags": [ "registry", @@ -152,7 +152,7 @@ "tv", "music" ], - "logo": [] + "logo": "svgs\/unknown.svg" }, "fider": { "documentation": "https:\/\/fider.io", @@ -313,7 +313,7 @@ }, "heimdall": { "documentation": "https:\/\/github.com\/linuxserver\/Heimdall", - "slogan": "Heimdall is a self-hosted dashboard for managing and organizing your server applications, providing a centralized and efficient interface.", + "slogan": "Heimdall is a dashboard for managing and organizing your server applications.", "compose": "c2VydmljZXM6CiAgaGVpbWRhbGw6CiAgICBpbWFnZTogJ2xzY3IuaW8vbGludXhzZXJ2ZXIvaGVpbWRhbGw6bGF0ZXN0JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX0hFSU1EQUxMCiAgICAgIC0gUFVJRD0xMDAwCiAgICAgIC0gUEdJRD0xMDAwCiAgICAgIC0gVFo9RXVyb3BlL01hZHJpZAogICAgdm9sdW1lczoKICAgICAgLSAnaGVpbWRhbGwtY29uZmlnOi9jb25maWcnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy1mJwogICAgICAgIC0gJ2h0dHA6Ly9sb2NhbGhvc3Q6ODAnCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMTUK", "tags": [ "dashboard", @@ -321,11 +321,11 @@ "applications", "interface" ], - "logo": [] + "logo": "svgs\/unknown.svg" }, "jellyfin": { - "documentation": "https:\/\/jellyfin.org\/docs\/", - "slogan": "Jellyfin is an open-source media server for hosting and streaming your media collection, providing an alternative to proprietary media platforms.", + "documentation": "https:\/\/jellyfin.org", + "slogan": "Jellyfin is a media server for hosting and streaming your media collection.", "compose": "c2VydmljZXM6CiAgamVsbHlmaW46CiAgICBpbWFnZTogJ2xzY3IuaW8vbGludXhzZXJ2ZXIvamVsbHlmaW46bGF0ZXN0JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX0pFTExZRklOCiAgICAgIC0gUFVJRD0xMDAwCiAgICAgIC0gUEdJRD0xMDAwCiAgICAgIC0gVFo9RXVyb3BlL01hZHJpZAogICAgICAtIEpFTExZRklOX1B1Ymxpc2hlZFNlcnZlclVybD0kU0VSVklDRV9GUUROX0pFTExZRklOCiAgICB2b2x1bWVzOgogICAgICAtICdqZWxseWZpbi1jb25maWc6L2NvbmZpZycKICAgICAgLSAnamVsbHlmaW4tdHZzaG93czovZGF0YS90dnNob3dzJwogICAgICAtICdqZWxseWZpbi1tb3ZpZXM6L2RhdGEvbW92aWVzJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGN1cmwKICAgICAgICAtICctZicKICAgICAgICAtICdodHRwOi8vbG9jYWxob3N0OjgwOTYnCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMTUK", "tags": [ "media", @@ -334,10 +334,10 @@ "tv", "music" ], - "logo": [] + "logo": "svgs\/jellyfin.svg" }, "kuzzle": { - "documentation": "https:\/\/docs.kuzzle.io\/", + "documentation": "https:\/\/kuzzle.io", "slogan": "Kuzzle is a generic backend offering the basic building blocks common to every application.", "compose": "c2VydmljZXM6CiAgcmVkaXM6CiAgICBpbWFnZTogJ3JlZGlzOjctYWxwaW5lJwogICAgY29tbWFuZDogJ3JlZGlzLXNlcnZlciAtLWFwcGVuZG9ubHkgeWVzJwogICAgdm9sdW1lczoKICAgICAgLSAnZWxhc3RpYy1yZWRpcy1kYXRhOi9kYXRhJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIHJlZGlzLWNsaQogICAgICAgIC0gcGluZwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCiAgZWxhc3RpY3NlYXJjaDoKICAgIGltYWdlOiAna3V6emxlaW8vZWxhc3RpY3NlYXJjaDo3JwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGN1cmwKICAgICAgICAtICctZicKICAgICAgICAtICdodHRwOi8vbG9jYWxob3N0OjkyMDAnCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAycwogICAgICByZXRyaWVzOiAxMAogICAgdWxpbWl0czoKICAgICAgbm9maWxlOiA2NTUzNgogIGt1enpsZToKICAgIGltYWdlOiAna3V6emxlaW8va3V6emxlOmxhdGVzdCcKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9LVVpaTEVfNzUxMgogICAgICAtICdrdXp6bGVfc2VydmljZXNfX3N0b3JhZ2VFbmdpbmVfX2NsaWVudF9fbm9kZT1odHRwOi8vZWxhc3RpY3NlYXJjaDo5MjAwJwogICAgICAtIGt1enpsZV9zZXJ2aWNlc19fc3RvcmFnZUVuZ2luZV9fY29tbW9uTWFwcGluZ19fZHluYW1pYz10cnVlCiAgICAgIC0ga3V6emxlX3NlcnZpY2VzX19pbnRlcm5hbENhY2hlX19ub2RlX19ob3N0PXJlZGlzCiAgICAgIC0ga3V6emxlX3NlcnZpY2VzX19tZW1vcnlTdG9yYWdlX19ub2RlX19ob3N0PXJlZGlzCiAgICAgIC0ga3V6emxlX3NlcnZlcl9fcHJvdG9jb2xzX19tcXR0X19lbmFibGVkPXRydWUKICAgICAgLSBrdXp6bGVfc2VydmVyX19wcm90b2NvbHNfX21xdHRfX2RldmVsb3BtZW50TW9kZT1mYWxzZQogICAgICAtIGt1enpsZV9saW1pdHNfX2xvZ2luc1BlclNlY29uZD01MAogICAgICAtIE5PREVfRU5WPXByb2R1Y3Rpb24KICAgICAgLSAnREVCVUc9JHtERUJVRzota3V6emxlOmNsdXN0ZXI6c3luY30nCiAgICAgIC0gJ0RFQlVHX0RFUFRIPSR7REVCVUdfREVQVEg6LTB9JwogICAgICAtICdERUJVR19NQVhfQVJSQVlfTEVOR1RIPSR7REVCVUdfTUFYX0FSUkFZOi0xMDB9JwogICAgICAtICdERUJVR19FWFBBTkQ9JHtERUJVR19FWFBBTkQ6LW9mZn0nCiAgICAgIC0gJ0RFQlVHX1NIT1dfSElEREVOPXskREVCVUdfU0hPV19ISURERU46LW9ufScKICAgICAgLSAnREVCVUdfQ09MT1JTPSR7REVCVUdfQ09MT1JTOi1vbn0nCiAgICBjYXBfYWRkOgogICAgICAtIFNZU19QVFJBQ0UKICAgIHVsaW1pdHM6CiAgICAgIG5vZmlsZTogNjU1MzYKICAgIHN5c2N0bHM6CiAgICAgIC0gbmV0LmNvcmUuc29tYXhjb25uPTgxOTIKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBjdXJsCiAgICAgICAgLSAnLWYnCiAgICAgICAgLSAnaHR0cDovL2xvY2FsaG9zdDo3NTEyL19oZWFsdGhjaGVjaycKICAgICAgdGltZW91dDogMXMKICAgICAgaW50ZXJ2YWw6IDJzCiAgICAgIHJldHJpZXM6IDMwCiAgICBkZXBlbmRzX29uOgogICAgICByZWRpczoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgICBlbGFzdGljc2VhcmNoOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5Cg==", "tags": [ @@ -352,11 +352,11 @@ "geofencing", "low-code" ], - "logo": [] + "logo": "svgs\/unknown.svg" }, "meilisearch": { "documentation": "https:\/\/www.meilisearch.com\/docs\/learn\/configuration\/instance_options", - "slogan": "MeiliSearch is a powerful, fast, open-source, easy to use and deploy search engine.", + "slogan": "MeiliSearch is a powerful, fast, easy to use and deploy search engine.", "compose": "c2VydmljZXM6CiAgbWVpbGlzZWFyY2g6CiAgICBpbWFnZTogJ2dldG1laWxpL21laWxpc2VhcmNoOmxhdGVzdCcKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9NRUlMSVNFQVJDSAogICAgICAtICdNRUlMSV9OT19BTkFMWVRJQ1M9JHtNRUlMSV9OT19BTkFMWVRJQ1M6LXRydWV9JwogICAgICAtICdNRUlMSV9FTlY9JHtNRUlMSV9FTlY6LXByb2R1Y3Rpb259JwogICAgICAtICdNRUlMSV9NQVNURVJfS0VZPSR7U0VSVklDRV9QQVNTV09SRF9NRUlMSVNFQVJDSH0nCiAgICB2b2x1bWVzOgogICAgICAtICdtZWlsaXNlYXJjaC1kYXRhOi9tZWlsaV9kYXRhJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGN1cmwKICAgICAgICAtICctZicKICAgICAgICAtICdodHRwOi8vbG9jYWxob3N0Ojc3MDAvaGVhbHRoJwogICAgICBpbnRlcnZhbDogMnMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDE1Cg==", "tags": [ "search", @@ -366,7 +366,7 @@ "text", "meilisearch" ], - "logo": [] + "logo": "svgs\/meilisearch.svg" }, "metabase": { "documentation": "https:\/\/www.metabase.com\/docs\/latest\/installation-and-operation\/running-metabase-on-docker", @@ -378,7 +378,7 @@ "business", "intelligence" ], - "logo": [] + "logo": "svgs\/metabase.svg" }, "metube": { "documentation": "https:\/\/github.com\/alexta69\/metube", @@ -393,7 +393,7 @@ "logo": [] }, "minio": { - "documentation": "https:\/\/docs.min.io\/docs\/minio-docker-quickstart-guide.html", + "documentation": "https:\/\/min.io\/docs\/minio\/container\/index.html", "slogan": "MinIO is a high performance object storage server compatible with Amazon S3 APIs.", "compose": "c2VydmljZXM6CiAgbWluaW86CiAgICBpbWFnZTogJ3F1YXkuaW8vbWluaW8vbWluaW86bGF0ZXN0JwogICAgY29tbWFuZDogJ3NlcnZlciAvZGF0YSAtLWNvbnNvbGUtYWRkcmVzcyAiOjkwMDEiJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gTUlOSU9fU0VSVkVSX1VSTD0kTUlOSU9fU0VSVkVSX1VSTAogICAgICAtIE1JTklPX0JST1dTRVJfUkVESVJFQ1RfVVJMPSRNSU5JT19CUk9XU0VSX1JFRElSRUNUX1VSTAogICAgICAtIE1JTklPX1JPT1RfVVNFUj0kU0VSVklDRV9VU0VSX01JTklPCiAgICAgIC0gTUlOSU9fUk9PVF9QQVNTV09SRD0kU0VSVklDRV9QQVNTV09SRF9NSU5JTwogICAgdm9sdW1lczoKICAgICAgLSAnbWluaW8tZGF0YTovZGF0YScK", "tags": [ @@ -403,7 +403,7 @@ "s3", "api" ], - "logo": [] + "logo": "svgs\/minio.svg" }, "moodle": { "documentation": "https:\/\/moodle.org", @@ -423,8 +423,8 @@ "logo": [] }, "n8n-with-postgresql": { - "documentation": "https:\/\/docs.n8n.io\/hosting\/", - "slogan": "n8n is an extendable workflow automation tool which enables you to connect anything to everything via its open, fair-code model.", + "documentation": "https:\/\/n8n.io", + "slogan": "n8n is an extendable workflow automation tool.", "compose": "c2VydmljZXM6CiAgbjhuOgogICAgaW1hZ2U6IGRvY2tlci5uOG4uaW8vbjhuaW8vbjhuCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fTjhOCiAgICAgIC0gJ044Tl9FRElUT1JfQkFTRV9VUkw9JHtTRVJWSUNFX0ZRRE5fTjhOfScKICAgICAgLSAnV0VCSE9PS19VUkw9JHtTRVJWSUNFX0ZRRE5fTjhOfScKICAgICAgLSAnTjhOX0hPU1Q9JHtTRVJWSUNFX1VSTF9OOE59JwogICAgICAtICdHRU5FUklDX1RJTUVaT05FPSJFdXJvcGUvQmVybGluIicKICAgICAgLSAnVFo9IkV1cm9wZS9CZXJsaW4iJwogICAgICAtIERCX1RZUEU9cG9zdGdyZXNkYgogICAgICAtICdEQl9QT1NUR1JFU0RCX0RBVEFCQVNFPSR7UE9TVEdSRVNfREI6LW44bn0nCiAgICAgIC0gREJfUE9TVEdSRVNEQl9IT1NUPXBvc3RncmVzcWwKICAgICAgLSBEQl9QT1NUR1JFU0RCX1BPUlQ9NTQzMgogICAgICAtIERCX1BPU1RHUkVTREJfVVNFUj0kU0VSVklDRV9VU0VSX1BPU1RHUkVTCiAgICAgIC0gREJfUE9TVEdSRVNEQl9TQ0hFTUE9cHVibGljCiAgICAgIC0gREJfUE9TVEdSRVNEQl9QQVNTV09SRD0kU0VSVklDRV9QQVNTV09SRF9QT1NUR1JFUwogICAgdm9sdW1lczoKICAgICAgLSAnbjhuLWRhdGE6L2hvbWUvbm9kZS8ubjhuJwogICAgZGVwZW5kc19vbjoKICAgICAgLSBwb3N0Z3Jlc3FsCiAgcG9zdGdyZXNxbDoKICAgIGltYWdlOiAncG9zdGdyZXM6MTYtYWxwaW5lJwogICAgdm9sdW1lczoKICAgICAgLSAncG9zdGdyZXNxbC1kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YScKICAgIGVudmlyb25tZW50OgogICAgICAtIFBPU1RHUkVTX1VTRVI9JFNFUlZJQ0VfVVNFUl9QT1NUR1JFUwogICAgICAtIFBPU1RHUkVTX1BBU1NXT1JEPSRTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTCiAgICAgIC0gJ1BPU1RHUkVTX0RCPSR7UE9TVEdSRVNfREI6LW44bn0nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ3BnX2lzcmVhZHkgLVUgJCR7UE9TVEdSRVNfVVNFUn0gLWQgJCR7UE9TVEdSRVNfREJ9JwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCg==", "tags": [ "n8n", @@ -435,11 +435,11 @@ "low", "code" ], - "logo": [] + "logo": "svgs\/n8n.png" }, "n8n": { - "documentation": "https:\/\/docs.n8n.io\/hosting\/", - "slogan": "n8n is an extendable workflow automation tool which enables you to connect anything to everything via its open, fair-code model.", + "documentation": "https:\/\/n8n.io", + "slogan": "n8n is an extendable workflow automation tool.", "compose": "c2VydmljZXM6CiAgbjhuOgogICAgaW1hZ2U6IGRvY2tlci5uOG4uaW8vbjhuaW8vbjhuCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fTjhOCiAgICAgIC0gJ044Tl9FRElUT1JfQkFTRV9VUkw9JHtTRVJWSUNFX0ZRRE5fTjhOfScKICAgICAgLSAnV0VCSE9PS19VUkw9JHtTRVJWSUNFX0ZRRE5fTjhOfScKICAgICAgLSAnTjhOX0hPU1Q9JHtTRVJWSUNFX1VSTF9OOE59JwogICAgICAtICdHRU5FUklDX1RJTUVaT05FPSJFdXJvcGUvQmVybGluIicKICAgICAgLSAnVFo9IkV1cm9wZS9CZXJsaW4iJwogICAgdm9sdW1lczoKICAgICAgLSAnbjhuLWRhdGE6L2hvbWUvbm9kZS8ubjhuJwo=", "tags": [ "n8n", @@ -450,7 +450,7 @@ "low", "code" ], - "logo": [] + "logo": "svgs\/n8n.png" }, "nextcloud": { "documentation": "https:\/\/docs.nextcloud.com", From 59ac22aa05ec4f0965853a5b04339a5a03147497 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Tue, 20 Feb 2024 15:45:30 +0100 Subject: [PATCH 05/26] Update redis.svg icon --- public/svgs/docker.svg | 2 +- public/svgs/mariadb.svg | 2 +- public/svgs/mongodb.svg | 2 +- public/svgs/mysql.svg | 2 +- public/svgs/postgres.svg | 2 +- public/svgs/redis.svg | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/public/svgs/docker.svg b/public/svgs/docker.svg index 2d16448f1..48b4b4a27 100644 --- a/public/svgs/docker.svg +++ b/public/svgs/docker.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/public/svgs/mariadb.svg b/public/svgs/mariadb.svg index 57a42132d..ed5b44104 100644 --- a/public/svgs/mariadb.svg +++ b/public/svgs/mariadb.svg @@ -1 +1 @@ - + diff --git a/public/svgs/mongodb.svg b/public/svgs/mongodb.svg index 423069be8..2cfad65e1 100644 --- a/public/svgs/mongodb.svg +++ b/public/svgs/mongodb.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/public/svgs/mysql.svg b/public/svgs/mysql.svg index 9dfe677e9..2b393ca07 100644 --- a/public/svgs/mysql.svg +++ b/public/svgs/mysql.svg @@ -1 +1 @@ - + diff --git a/public/svgs/postgres.svg b/public/svgs/postgres.svg index af195d491..ad4d4d224 100644 --- a/public/svgs/postgres.svg +++ b/public/svgs/postgres.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/public/svgs/redis.svg b/public/svgs/redis.svg index 7b84ba84d..3c7d88737 100644 --- a/public/svgs/redis.svg +++ b/public/svgs/redis.svg @@ -1 +1 @@ - \ No newline at end of file + From a102099ac189be17ba87b5cfbf06fec8cdef33b1 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Tue, 20 Feb 2024 17:08:16 +0100 Subject: [PATCH 06/26] icons --- public/svgs/bitwarden.svg | 59 ++++++++++++++ public/svgs/moodle.png | Bin 0 -> 48836 bytes public/svgs/nextcloud.svg | 73 ++++++++++++++++++ public/svgs/nocodb.svg | 10 +++ public/svgs/openblocks.svg | 12 +++ public/svgs/phpmyadmin.svg | 1 + public/svgs/pocketbase.svg | 9 +++ public/svgs/stirling.png | Bin 0 -> 8860 bytes public/svgs/syncthing.svg | 32 ++++++++ public/svgs/trigger.avif | Bin 0 -> 6465 bytes public/svgs/trigger.png | Bin 0 -> 1918 bytes public/svgs/umami.svg | 1 + public/svgs/uptime-kuma.svg | 9 +++ public/svgs/weblate.webp | Bin 0 -> 4050 bytes public/svgs/whoogle-search.png | Bin 0 -> 23518 bytes public/svgs/wordpress.svg | 1 + .../compose/grafana-with-postgresql.yaml | 2 +- templates/compose/grafana.yaml | 2 +- templates/compose/meilisearch.yaml | 2 +- templates/compose/metabase.yaml | 2 +- templates/compose/metube.yaml | 1 + templates/compose/moodle.yaml | 1 + templates/compose/nextcloud.yaml | 1 + templates/compose/nocodb.yaml | 3 +- templates/compose/openblocks.yaml | 3 +- templates/compose/pairdrop.yaml | 3 +- templates/compose/phpmyadmin.yaml | 3 +- templates/compose/pocketbase.yaml | 1 + templates/compose/snapdrop.yaml | 1 + templates/compose/stirling-pdf.yaml | 1 + .../trigger-with-external-database.yaml | 3 +- templates/compose/trigger.yaml | 3 +- templates/compose/umami.yaml | 3 +- templates/compose/uptime-kuma.yaml | 3 +- templates/compose/vaultwarden.yaml | 3 +- templates/compose/weblate.yaml | 3 +- templates/compose/whoogle.yaml | 3 +- templates/compose/wordpress-with-mariadb.yaml | 3 +- templates/compose/wordpress-with-mysql.yaml | 3 +- .../compose/wordpress-without-database.yaml | 3 +- templates/service-templates.json | 42 +++++----- 41 files changed, 266 insertions(+), 39 deletions(-) create mode 100644 public/svgs/bitwarden.svg create mode 100644 public/svgs/moodle.png create mode 100644 public/svgs/nextcloud.svg create mode 100644 public/svgs/nocodb.svg create mode 100644 public/svgs/openblocks.svg create mode 100644 public/svgs/phpmyadmin.svg create mode 100644 public/svgs/pocketbase.svg create mode 100644 public/svgs/stirling.png create mode 100644 public/svgs/syncthing.svg create mode 100644 public/svgs/trigger.avif create mode 100644 public/svgs/trigger.png create mode 100644 public/svgs/umami.svg create mode 100644 public/svgs/uptime-kuma.svg create mode 100644 public/svgs/weblate.webp create mode 100644 public/svgs/whoogle-search.png create mode 100644 public/svgs/wordpress.svg diff --git a/public/svgs/bitwarden.svg b/public/svgs/bitwarden.svg new file mode 100644 index 000000000..888e50b2b --- /dev/null +++ b/public/svgs/bitwarden.svg @@ -0,0 +1,59 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/public/svgs/moodle.png b/public/svgs/moodle.png new file mode 100644 index 0000000000000000000000000000000000000000..340f425b11c191693bc3430bb91872b7993cd297 GIT binary patch literal 48836 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 *;>(W zO-EzSU{x>mB`2C}IY$@g3?n%hDyFuQve=C9(Biv(Fl-HQ@vLu(M)*$D=-JQBhg4 zAh=STadb)DWnL8K$eD+T9*-8)OrJjEiNMRqRtjx-(b$laDeUp_ue(QJqbs5EbqOrz zbXt-LwjCI1iOnSeT!^h`Hm7ih-VFq#`+Tzq)2e6Z&vj3-To@aTr2*)yi7mmYAQ}}M zN=m46rg!vNc3Yl=FCUm(p@lo~k@p|x?KM!lnLa_$STlWr^L)sMQxpa*dJ#T>%8x*5 z3GKTvPDN3T$(ScY@h>qSBWty&)bz$03T;0!?E4(ReChfV-(Pwx3+Z$cs_x!#R4`bY{uAOQFo^7jjDmr=qo; zXndyWk~ku_jCA20{D_JmBRFwI0<%5wk~UcFeA(aukXVb%qy~lnMxz;HDrsY(;;#{c zhwn@C#NTu-;OlCP3IV^t?TE8LvSke#S>o~j9@i>>bB`hcT8-8?b-@LM+YPT2I*;nx zgtqBS_?btIevi`QT+hU6;N4?j2po1ijWIJ1qS4Jo@22Lb6iF76v)Dvm#woMu>MS^ zEV%GkF42gGd41Ryqs1eaEPps98vF#`gqDO%aaa(j&(uTgl(B|L#6o9VFA&=B`&_vc zlL5b}AT1!00@+XU{H%@Uy`{rQn!E9r`nDz+apDsad<}~4zXEMwd69I?Kk~1^h`$=% z8ra^$f-n!9d-h%-$rR4IdS@~6%bq%pMS*1FB?NSM17J<$Qg6#r)c7+6Zkr$XlUBX` z+BNt}Y^Zw+D13S@t!iBf4-;B7!df6s+(C&M7oV@2#eJYho}rU(BOKOSegTjUXy z5-4skkMe3m&a=!wt5ITSV#GkWr^*#=Id^&^iC!P=w=7mkE*CVSN@%_#&Qo>(bXxm# zNoRPnk%_Y%Jrnq9W8|W74x&T#4+P$Bfjt3P$-7-?v`9XZy3nvKx^Peovp3Kd%)Ku&JJZDj{ z-Wm+-V>AFAX9hbDD^+!(JqGhL)EL&i5;c$XNER|l?4MBr)KrX=*7LDEl$G$5T5)jH zIpHxGta!`H=B67TI6MSxpqg{T%EnI7#O~SqrBSuj?H`NH=0Ei`ZD|*7hz-n#EDzco KC^kPE`F{Xgz%(EL literal 0 HcmV?d00001 diff --git a/public/svgs/nextcloud.svg b/public/svgs/nextcloud.svg new file mode 100644 index 000000000..c9938c99f --- /dev/null +++ b/public/svgs/nextcloud.svg @@ -0,0 +1,73 @@ + + + +image/svg+xml + + + + + + \ No newline at end of file diff --git a/public/svgs/nocodb.svg b/public/svgs/nocodb.svg new file mode 100644 index 000000000..d4c96f9be --- /dev/null +++ b/public/svgs/nocodb.svg @@ -0,0 +1,10 @@ + + + NocoDB + + + + + + + \ No newline at end of file diff --git a/public/svgs/openblocks.svg b/public/svgs/openblocks.svg new file mode 100644 index 000000000..2de5ee88f --- /dev/null +++ b/public/svgs/openblocks.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/public/svgs/phpmyadmin.svg b/public/svgs/phpmyadmin.svg new file mode 100644 index 000000000..1e32d14f3 --- /dev/null +++ b/public/svgs/phpmyadmin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/svgs/pocketbase.svg b/public/svgs/pocketbase.svg new file mode 100644 index 000000000..5b5de956b --- /dev/null +++ b/public/svgs/pocketbase.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/svgs/stirling.png b/public/svgs/stirling.png new file mode 100644 index 0000000000000000000000000000000000000000..5edc6eae26832dfa8d113dc54db899515d7c1fc2 GIT binary patch literal 8860 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 aJFjz2q?ldh(5nyMk6D=57=Jv05B)#XI~864 literal 0 HcmV?d00001 diff --git a/public/svgs/syncthing.svg b/public/svgs/syncthing.svg new file mode 100644 index 000000000..6a036026b --- /dev/null +++ b/public/svgs/syncthing.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/svgs/trigger.avif b/public/svgs/trigger.avif new file mode 100644 index 0000000000000000000000000000000000000000..66500da9f9ee4bb382ddef5ddc8379186be215e7 GIT binary patch literal 6465 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 z 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 literal 0 HcmV?d00001 diff --git a/public/svgs/trigger.png b/public/svgs/trigger.png new file mode 100644 index 0000000000000000000000000000000000000000..72999559b853319c33b3be7513128cfa03cd5764 GIT binary patch literal 1918 zcmV-^2Z8vBP)n|r$8BsUe$+uUvC>o}At52e6n;RVRZ&SLT7(1@f+F~XP=6pKR1=^G zf+8V-#6Q#u6(RV;L#R;E#*I{~G>#Hex1uc&JJ81QBiFum?!Df-2hHrx?!5NeL>;ZJ z*Yh~%n{UoJbI$r+eg_}`!Im2VUtqOVh;u^5Ds7biviRTsqh-jY_7j|)q>u7n)?RjY z&!!r;vP%a_U#>(&P#bQu8VNC|K)ER)k|7k!Z9xX5E)nL!Xg{bg-vopzgvEf; zyzLubt06l&w*B4*d&EoEOJ}RD`Icf$h^Ca8_|e#nbCanDFb|$My$1mi@QKrVm=`T0 zFvaNXYFpB1W9lL_!wF?jmKysbkM@lo*cSaWdSKflkM^OpX`2QBB!|av-!g2-+KLv$ zl_6n&o!fI0(+79lnoDLZUfUSE^L+LCh71H-Z!u3E^UBs%T*ixXEBtU60z+iqJT?5m zd%DzF<%*XtcoWZ6#deVs;nwY>F!r);w|Y|)aRnTQScz=(&dTr4?a$@RwZR76cYJzg zdJTv;OB4!=X#+)Tj7;MKH`_d7d58?rL-ZK3Q)h;4G(7g_@YI>xnV1&M=W8+9sJ=

Z5a%uKBb`HzrDK)zdgUVSk@xy^@SDyboF>@ zXMH_9dFb_b=IRkif~Qve4#s7iHm00Qic+&Dc~TL&QpJCDy3qh=0MzC0&z@ZR>61&M z6O$n*v&X*E&jUo{n~9SmW~7w7*>Olg1t<+U^_S{W_{U$a%)S-8=U}PO$pXMP|K2?F zjm0-EH4oog>A1}g0Oe8Q;Aru}+1j-$O+~B2fz=m}`DGnu%47_MCC-&v(!XEZ_`_4H zL5L%F7k>2B#jCR|0-Sv_82e161t=emX?TC>*{7C>2;(bE^-EOZFgh91uN8S%DHO)} zk5IM(oIclh_UZMxe+1E-`Po+gzI^W;In}y5`*I6&&3|3Ik>EhnbTngf=G4lWMc6UI z7r&#tJpkFt5cWQV(#TGJyRX#gN2Y^rM}{nh)Jc*XW<*7%9HN)> zM?lxBAr@ieXd$8}5RbpjV;;Qv{0a{^lpGmYrjnFF4r;XjcMKNxj&(r9QF`8zusCeS zk@HVKS)G5o75Q57ocPMEw~Z8HvNas4O3Y%2;61 zEx9tAo2rK!B7&zj5najRVkdfgrZI9)snYMO*4_Qy;y))=moL||bNn?vIS`wrs;d<}8C!yfpgh9eu|; z41;*%?0UW05@^zkGrm4$=apA(O#OP*Sh(}Zw!IH_rwozfWZJkr_(eSN-62EhYAyWh z_&iU(DCGu1@kHsXnWdfQW^MDf2K5~6{P+uZ8z?ueYPJrDfc`ReVR3TBR&44*6zzQD&FE_YZB z#V(1$UC!4&NPxnMRRn9-1+R&W^53@^&~I6abIz!?r{oS28qwZ>#7@cQ0I>F)%17%o ze3J%HN@=nxZ$me!Ae^5ljAn1Zv<(KjOmnM{m6o`gDMUZYO}>4R1Y}2JD}}YRIqafM z&SimfLP=Cz0RJX#fBK07*qoM6N<$ Eg2fxV3IG5A literal 0 HcmV?d00001 diff --git a/public/svgs/umami.svg b/public/svgs/umami.svg new file mode 100644 index 000000000..b900e2976 --- /dev/null +++ b/public/svgs/umami.svg @@ -0,0 +1 @@ +Created by potrace 1.11, written by Peter Selinger 2001-2013 diff --git a/public/svgs/uptime-kuma.svg b/public/svgs/uptime-kuma.svg new file mode 100644 index 000000000..c4217915d --- /dev/null +++ b/public/svgs/uptime-kuma.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/svgs/weblate.webp b/public/svgs/weblate.webp new file mode 100644 index 0000000000000000000000000000000000000000..fae61d6029bf032c9b3bbbb6e78c03b03e450bde GIT binary patch literal 4050 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 E03OtoPXGV_ literal 0 HcmV?d00001 diff --git a/public/svgs/whoogle-search.png b/public/svgs/whoogle-search.png new file mode 100644 index 0000000000000000000000000000000000000000..2b895c194e82ac393c562059a66ae4838dd9714a GIT binary patch literal 23518 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 QZq9Ma`m9y0h0m@306G$ \ No newline at end of file diff --git a/templates/compose/grafana-with-postgresql.yaml b/templates/compose/grafana-with-postgresql.yaml index cd76c10ce..3aa326d68 100644 --- a/templates/compose/grafana-with-postgresql.yaml +++ b/templates/compose/grafana-with-postgresql.yaml @@ -1,4 +1,4 @@ -# documentation: https://grafana.com/docs/grafana/latest/installation/docker/ +# documentation: https://grafana.com # slogan: Grafana is the open source analytics & monitoring solution for every database. # tags: grafana,analytics,monitoring,dashboard # logo: svgs/grafana.svg diff --git a/templates/compose/grafana.yaml b/templates/compose/grafana.yaml index 9d8dbfcc4..a4e5b4042 100644 --- a/templates/compose/grafana.yaml +++ b/templates/compose/grafana.yaml @@ -1,4 +1,4 @@ -# documentation: https://grafana.com/docs/grafana/latest/installation/docker/ +# documentation: https://grafana.com # slogan: Grafana is the open source analytics & monitoring solution for every database. # tags: grafana,analytics,monitoring,dashboard # logo: svgs/grafana.svg diff --git a/templates/compose/meilisearch.yaml b/templates/compose/meilisearch.yaml index 0932e7d86..4daab4f9a 100644 --- a/templates/compose/meilisearch.yaml +++ b/templates/compose/meilisearch.yaml @@ -1,4 +1,4 @@ -# documentation: https://www.meilisearch.com/docs/learn/configuration/instance_options +# documentation: https://www.meilisearch.com # slogan: MeiliSearch is a powerful, fast, easy to use and deploy search engine. # tags: search,engine,fulltext,full,text,meilisearch # logo: svgs/meilisearch.svg diff --git a/templates/compose/metabase.yaml b/templates/compose/metabase.yaml index dd891a4a9..a9df49dc7 100644 --- a/templates/compose/metabase.yaml +++ b/templates/compose/metabase.yaml @@ -1,4 +1,4 @@ -# documentation: https://www.metabase.com/docs/latest/installation-and-operation/running-metabase-on-docker +# documentation: https://www.metabase.com # slogan: Fast analytics with the friendly UX and integrated tooling to let your company explore data on their own. # tags: analytics,bi,business,intelligence # logo: svgs/metabase.svg diff --git a/templates/compose/metube.yaml b/templates/compose/metube.yaml index 9a39e4959..28501ee84 100644 --- a/templates/compose/metube.yaml +++ b/templates/compose/metube.yaml @@ -1,6 +1,7 @@ # documentation: https://github.com/alexta69/metube # slogan: A web GUI for youtube-dl with playlist support. It enables you to effortlessly download videos from YouTube and dozens of other sites. # tags: youtube, download, videos, playlist +# logo: svgs/unknown.svg services: metube: diff --git a/templates/compose/moodle.yaml b/templates/compose/moodle.yaml index df5bce6f1..ee3504518 100644 --- a/templates/compose/moodle.yaml +++ b/templates/compose/moodle.yaml @@ -1,6 +1,7 @@ # documentation: https://moodle.org # slogan: Moodle is the world’s most customisable and trusted eLearning solution that empowers educators to improve our world. # tags: moodle, elearning, education, lms, cms, open, source, low, code +# logo: svgs/moodle.png services: mariadb: diff --git a/templates/compose/nextcloud.yaml b/templates/compose/nextcloud.yaml index 218f06e53..b684c7944 100644 --- a/templates/compose/nextcloud.yaml +++ b/templates/compose/nextcloud.yaml @@ -1,6 +1,7 @@ # documentation: https://docs.nextcloud.com # slogan: NextCloud is a self-hosted, open-source platform that provides file storage, collaboration, and communication tools for seamless data management. # tags: cloud, collaboration, communication, filestorage, data +# logo: svgs/nextcloud.svg services: nextcloud: diff --git a/templates/compose/nocodb.yaml b/templates/compose/nocodb.yaml index 4e772b3db..f3b33c731 100644 --- a/templates/compose/nocodb.yaml +++ b/templates/compose/nocodb.yaml @@ -1,6 +1,7 @@ -# documentation: https://docs.nocodb.com/ +# documentation: https://nocodb.com/ # slogan: NocoDB is an open source Airtable alternative. Turns any MySQL, PostgreSQL, SQL Server, SQLite & MariaDB into a smart-spreadsheet. # tags: nocodb,airtable,mysql,postgresql,sqlserver,sqlite,mariadb +# logo: svgs/nocodb.svg services: nocodb: diff --git a/templates/compose/openblocks.yaml b/templates/compose/openblocks.yaml index f79598d74..082d817cc 100644 --- a/templates/compose/openblocks.yaml +++ b/templates/compose/openblocks.yaml @@ -1,6 +1,7 @@ -# documentation: https://docs.openblocks.dev/self-hosting +# documentation: https://openblocks.dev # slogan: OpenBlocks is a self-hosted, open-source, low-code platform for building internal tools. # tags: openblocks,low,code,platform,open,source,low,code +# logo: svgs/openblocks.svg services: openblocks: diff --git a/templates/compose/pairdrop.yaml b/templates/compose/pairdrop.yaml index 57e32afc0..e692e7aaa 100644 --- a/templates/compose/pairdrop.yaml +++ b/templates/compose/pairdrop.yaml @@ -1,6 +1,7 @@ -# documentation: https://github.com/schlagmichdoch/PairDrop +# documentation: https://pairdrop.net/ # slogan: Pairdrop is a self-hosted file sharing and collaboration platform, offering secure file sharing and collaboration capabilities for efficient teamwork. # tags: file, sharing, collaboration, teamwork +# logo: svgs/unknown.svg services: pairdrop: diff --git a/templates/compose/phpmyadmin.yaml b/templates/compose/phpmyadmin.yaml index 4243362c0..5fe43bfb3 100644 --- a/templates/compose/phpmyadmin.yaml +++ b/templates/compose/phpmyadmin.yaml @@ -1,6 +1,7 @@ -# documentation: https://docs.phpmyadmin.net/en/latest/ +# documentation: https://phpmyadmin.net # slogan: phpMyAdmin is a web-based database management tool for administering your MySQL and MariaDB databases through a user-friendly interface. # tags: database management +# logo: svgs/phpmyadmin.svg services: phpmyadmin: diff --git a/templates/compose/pocketbase.yaml b/templates/compose/pocketbase.yaml index 3f77bf83f..27272813c 100644 --- a/templates/compose/pocketbase.yaml +++ b/templates/compose/pocketbase.yaml @@ -1,6 +1,7 @@ # documentation: https://pocketbase.io/docs/ # slogan: Open Source backend for your next SaaS and Mobile app in 1 file # tags: pocketbase,backend,saas,mobile,api +# logo: svgs/pocketbase.svg services: pocketbase: diff --git a/templates/compose/snapdrop.yaml b/templates/compose/snapdrop.yaml index 652eb1bbb..813bdc513 100644 --- a/templates/compose/snapdrop.yaml +++ b/templates/compose/snapdrop.yaml @@ -1,6 +1,7 @@ # documentation: https://github.com/RobinLinus/snapdrop # slogan: A self-hosted file-sharing service for secure and convenient file transfers, whether on a local network or the internet. # tags: file, sharing, transfer, local, network, internet +# logo: svgs/unknown.svg services: snapdrop: diff --git a/templates/compose/stirling-pdf.yaml b/templates/compose/stirling-pdf.yaml index ac9af519f..bdc15ab66 100644 --- a/templates/compose/stirling-pdf.yaml +++ b/templates/compose/stirling-pdf.yaml @@ -1,6 +1,7 @@ # documentation: https://github.com/Stirling-Tools/Stirling-PDF # slogan: Stirling is a powerful web based PDF manipulation tool # tags: pdf, manipulation, web, tool +# logo: svgs/stirling.png services: stirling-pdf: diff --git a/templates/compose/trigger-with-external-database.yaml b/templates/compose/trigger-with-external-database.yaml index 53fa7ffd0..ee76ec9c3 100644 --- a/templates/compose/trigger-with-external-database.yaml +++ b/templates/compose/trigger-with-external-database.yaml @@ -1,6 +1,7 @@ -# documentation: https://trigger.dev/docs/documentation/guides/self-hosting +# documentation: https://trigger.dev # slogan: The open source Background Jobs framework for TypeScript # tags: trigger.dev, background jobs, typescript, trigger, jobs, cron, scheduler +# logo: svgs/trigger.png services: trigger: diff --git a/templates/compose/trigger.yaml b/templates/compose/trigger.yaml index dbe95df76..6c15eed86 100644 --- a/templates/compose/trigger.yaml +++ b/templates/compose/trigger.yaml @@ -1,6 +1,7 @@ -# documentation: https://trigger.dev/docs/documentation/guides/self-hosting +# documentation: https://trigger.dev # slogan: The open source Background Jobs framework for TypeScript # tags: trigger.dev, background jobs, typescript, trigger, jobs, cron, scheduler +# logo: svgs/trigger.png services: trigger: diff --git a/templates/compose/umami.yaml b/templates/compose/umami.yaml index 563ec72fd..7ce6d1e11 100644 --- a/templates/compose/umami.yaml +++ b/templates/compose/umami.yaml @@ -1,6 +1,7 @@ -# documentation: https://umami.is/docs/getting-started +# documentation: https://umami.is # slogan: Umami is a lightweight, self-hosted web analytics platform designed to provide website owners with insights into visitor behavior without compromising user privacy. # tags: analytics, insights, privacy +# logo: svgs/umami.svg services: umami: diff --git a/templates/compose/uptime-kuma.yaml b/templates/compose/uptime-kuma.yaml index a1a02f91f..53d3c2648 100644 --- a/templates/compose/uptime-kuma.yaml +++ b/templates/compose/uptime-kuma.yaml @@ -1,6 +1,7 @@ -# documentation: https://github.com/louislam/uptime-kuma/wiki +# documentation: https://github.com/louislam/uptime-kuma?tab=readme-ov-file # slogan: Uptime Kuma is a free, self-hosted monitoring tool for tracking the status and performance of your web services and applications in real-time. # tags: monitoring, status, performance, web, services, applications, real-time +# logo: svgs/uptime-kuma.svg services: uptime-kuma: diff --git a/templates/compose/vaultwarden.yaml b/templates/compose/vaultwarden.yaml index 5ced66f43..cf0d02dbd 100644 --- a/templates/compose/vaultwarden.yaml +++ b/templates/compose/vaultwarden.yaml @@ -1,6 +1,7 @@ -# documentation: https://github.com/dani-garcia/vaultwarden/wiki/FAQs +# documentation: https://github.com/dani-garcia/vaultwarden # slogan: Vaultwarden is an open-source password manager that allows you to securely store and manage your passwords, helping you stay organized and protected. # tags: password manager, security +# logo: svgs/bitwarden.svg services: vaultwarden: diff --git a/templates/compose/weblate.yaml b/templates/compose/weblate.yaml index 524896e71..927033622 100644 --- a/templates/compose/weblate.yaml +++ b/templates/compose/weblate.yaml @@ -1,6 +1,7 @@ -# documentation: https://docs.weblate.org/en/latest/admin/install/docker.html +# documentation: https://weblate.org # slogan: Weblate is a libre software web-based continuous localization system. # tags: localization, translation, web, web-based, continuous, libre, software +# logo: svgs/weblate.webp services: weblate: diff --git a/templates/compose/whoogle.yaml b/templates/compose/whoogle.yaml index bb9fcf223..8e28ff0c4 100644 --- a/templates/compose/whoogle.yaml +++ b/templates/compose/whoogle.yaml @@ -1,6 +1,7 @@ -# documentation: https://github.com/benbusby/whoogle-search#install +# documentation: https://github.com/benbusby/whoogle-search?tab=readme-ov-file # slogan: Whoogle is a self-hosted, privacy-focused search engine front-end for accessing Google search results without tracking and data collection. # tags: privacy, search engine +# logo: svgs/unknown.svg services: whoogle: diff --git a/templates/compose/wordpress-with-mariadb.yaml b/templates/compose/wordpress-with-mariadb.yaml index b0205f952..a908fbfd4 100644 --- a/templates/compose/wordpress-with-mariadb.yaml +++ b/templates/compose/wordpress-with-mariadb.yaml @@ -1,6 +1,7 @@ -# documentation: https://wordpress.org/documentation/ +# documentation: https://wordpress.org # slogan: WordPress with MariaDB. Wordpress is open source software you can use to create a beautiful website, blog, or app. # tags: cms, blog, content, management, mariadb +# logo: svgs/wordpress.svg services: wordpress: diff --git a/templates/compose/wordpress-with-mysql.yaml b/templates/compose/wordpress-with-mysql.yaml index a64952150..b0a6cdffc 100644 --- a/templates/compose/wordpress-with-mysql.yaml +++ b/templates/compose/wordpress-with-mysql.yaml @@ -1,6 +1,7 @@ -# documentation: https://wordpress.org/documentation/ +# documentation: https://wordpress.org # slogan: WordPress with MySQL. Wordpress is open source software you can use to create a beautiful website, blog, or app. # tags: cms, blog, content, management, mysql +# logo: svgs/wordpress.svg services: wordpress: diff --git a/templates/compose/wordpress-without-database.yaml b/templates/compose/wordpress-without-database.yaml index 203af0978..0ce628168 100644 --- a/templates/compose/wordpress-without-database.yaml +++ b/templates/compose/wordpress-without-database.yaml @@ -1,6 +1,7 @@ -# documentation: https://wordpress.org/documentation/ +# documentation: https://wordpress.org # slogan: WordPress with external database. Wordpress is open source software you can use to create a beautiful website, blog, or app. # tags: cms, blog, content, management +# logo: svgs/wordpress.svg services: wordpress: diff --git a/templates/service-templates.json b/templates/service-templates.json index d9772beac..584d5c978 100644 --- a/templates/service-templates.json +++ b/templates/service-templates.json @@ -390,7 +390,7 @@ "videos", "playlist" ], - "logo": [] + "logo": "svgs\/unknown.svg" }, "minio": { "documentation": "https:\/\/min.io\/docs\/minio\/container\/index.html", @@ -420,7 +420,7 @@ "low", "code" ], - "logo": [] + "logo": "svgs\/moodle.png" }, "n8n-with-postgresql": { "documentation": "https:\/\/n8n.io", @@ -463,7 +463,7 @@ "filestorage", "data" ], - "logo": [] + "logo": "svgs\/nextcloud.svg" }, "nocodb": { "documentation": "https:\/\/docs.nocodb.com\/", @@ -478,7 +478,7 @@ "sqlite", "mariadb" ], - "logo": [] + "logo": "svgs\/nocodb.svg" }, "openblocks": { "documentation": "https:\/\/docs.openblocks.dev\/self-hosting", @@ -494,10 +494,10 @@ "low", "code" ], - "logo": [] + "logo": "svgs\/openblocks.svg" }, "pairdrop": { - "documentation": "https:\/\/github.com\/schlagmichdoch\/PairDrop", + "documentation": "https:\/\/pairdrop.net\/", "slogan": "Pairdrop is a self-hosted file sharing and collaboration platform, offering secure file sharing and collaboration capabilities for efficient teamwork.", "compose": "c2VydmljZXM6CiAgcGFpcmRyb3A6CiAgICBpbWFnZTogJ2xzY3IuaW8vbGludXhzZXJ2ZXIvcGFpcmRyb3A6bGF0ZXN0JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX1BBSVJEUk9QCiAgICAgIC0gUFVJRD0xMDAwCiAgICAgIC0gUEdJRD0xMDAwCiAgICAgIC0gVFo9RXVyb3BlL01hZHJpZAogICAgICAtIERFQlVHX01PREU9ZmFsc2UKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBjdXJsCiAgICAgICAgLSAnLWYnCiAgICAgICAgLSAnaHR0cDovL2xvY2FsaG9zdDozMDAwJwogICAgICBpbnRlcnZhbDogMnMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDE1Cg==", "tags": [ @@ -506,7 +506,7 @@ "collaboration", "teamwork" ], - "logo": [] + "logo": "svgs\/unknown.svg" }, "phpmyadmin": { "documentation": "https:\/\/docs.phpmyadmin.net\/en\/latest\/", @@ -515,7 +515,7 @@ "tags": [ "database management" ], - "logo": [] + "logo": "svgs\/phpmyadmin.svg" }, "pocketbase": { "documentation": "https:\/\/pocketbase.io\/docs\/", @@ -528,7 +528,7 @@ "mobile", "api" ], - "logo": [] + "logo": "svgs\/pocketbase.svg" }, "snapdrop": { "documentation": "https:\/\/github.com\/RobinLinus\/snapdrop", @@ -542,7 +542,7 @@ "network", "internet" ], - "logo": [] + "logo": "svgs\/unknown.svg" }, "stirling-pdf": { "documentation": "https:\/\/github.com\/Stirling-Tools\/Stirling-PDF", @@ -554,7 +554,7 @@ "web", "tool" ], - "logo": [] + "logo": "svgs\/stirling.png" }, "syncthing": { "documentation": "https:\/\/syncthing.net\/", @@ -580,7 +580,7 @@ "cron", "scheduler" ], - "logo": [] + "logo": "svgs\/trigger.png" }, "trigger": { "documentation": "https:\/\/trigger.dev\/docs\/documentation\/guides\/self-hosting", @@ -595,7 +595,7 @@ "cron", "scheduler" ], - "logo": [] + "logo": "svgs\/trigger.png" }, "umami": { "documentation": "https:\/\/umami.is\/docs\/getting-started", @@ -606,7 +606,7 @@ "insights", "privacy" ], - "logo": [] + "logo": "svgs\/umami.svg" }, "uptime-kuma": { "documentation": "https:\/\/github.com\/louislam\/uptime-kuma\/wiki", @@ -621,7 +621,7 @@ "applications", "real-time" ], - "logo": [] + "logo": "svgs\/uptime-kuma.svg" }, "vaultwarden": { "documentation": "https:\/\/github.com\/dani-garcia\/vaultwarden\/wiki\/FAQs", @@ -631,7 +631,7 @@ "password manager", "security" ], - "logo": [] + "logo": "svgs\/bitwarden.svg" }, "weblate": { "documentation": "https:\/\/docs.weblate.org\/en\/latest\/admin\/install\/docker.html", @@ -646,7 +646,7 @@ "libre", "software" ], - "logo": [] + "logo": "svgs\/weblate.webp" }, "whoogle": { "documentation": "https:\/\/github.com\/benbusby\/whoogle-search#install", @@ -656,7 +656,7 @@ "privacy", "search engine" ], - "logo": [] + "logo": "svgs\/unknown.svg" }, "wordpress-with-mariadb": { "documentation": "https:\/\/wordpress.org\/documentation\/", @@ -669,7 +669,7 @@ "management", "mariadb" ], - "logo": [] + "logo": "svgs\/wordpress.svg" }, "wordpress-with-mysql": { "documentation": "https:\/\/wordpress.org\/documentation\/", @@ -682,7 +682,7 @@ "management", "mysql" ], - "logo": [] + "logo": "svgs\/wordpress.svg" }, "wordpress-without-database": { "documentation": "https:\/\/wordpress.org\/documentation\/", @@ -694,6 +694,6 @@ "content", "management" ], - "logo": [] + "logo": "svgs\/wordpress.svg" } } \ No newline at end of file From f7ebc8a88cddf748bb274bfb23383bface4ff7b0 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Tue, 20 Feb 2024 18:14:47 +0100 Subject: [PATCH 07/26] feat: save github app permission locally --- app/Console/Kernel.php | 1 - app/Jobs/GithubAppPermissionJob.php | 59 ++++++++++++++ app/Livewire/Source/Github/Change.php | 20 ++++- ...0_165045_add_permissions_to_github_app.php | 34 ++++++++ .../livewire/source/github/change.blade.php | 77 +++++++++++-------- 5 files changed, 157 insertions(+), 34 deletions(-) create mode 100644 app/Jobs/GithubAppPermissionJob.php create mode 100644 database/migrations/2024_02_20_165045_add_permissions_to_github_app.php diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index bba2da818..76fcbfc1f 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -4,7 +4,6 @@ use App\Jobs\CheckLogDrainContainerJob; use App\Jobs\CleanupInstanceStuffsJob; -use App\Jobs\ComplexContainerStatusJob; use App\Jobs\DatabaseBackupJob; use App\Jobs\ScheduledTaskJob; use App\Jobs\InstanceAutoUpdateJob; diff --git a/app/Jobs/GithubAppPermissionJob.php b/app/Jobs/GithubAppPermissionJob.php new file mode 100644 index 000000000..deb414a13 --- /dev/null +++ b/app/Jobs/GithubAppPermissionJob.php @@ -0,0 +1,59 @@ +github_app->uuid))]; + } + + public function uniqueId(): int + { + return $this->github_app->uuid; + } + + public function handle() + { + try { + $github_access_token = generate_github_jwt_token($this->github_app); + $response = Http::withHeaders([ + 'Authorization' => "Bearer $github_access_token", + 'Accept' => 'application/vnd.github+json' + ])->get("{$this->github_app->api_url}/app"); + $response = $response->json(); + $permissions = data_get($response, 'permissions'); + $this->github_app->contents = data_get($permissions, 'contents'); + $this->github_app->metadata = data_get($permissions, 'metadata'); + $this->github_app->pull_requests = data_get($permissions, 'pull_requests'); + $this->github_app->administration = data_get($permissions, 'administration'); + $this->github_app->save(); + $this->github_app->makeVisible('client_secret')->makeVisible('webhook_secret'); + } catch (\Throwable $e) { + send_internal_notification('GithubAppPermissionJob failed with: ' . $e->getMessage()); + ray($e->getMessage()); + throw $e; + } + } +} diff --git a/app/Livewire/Source/Github/Change.php b/app/Livewire/Source/Github/Change.php index cdbec6486..e4baa36d0 100644 --- a/app/Livewire/Source/Github/Change.php +++ b/app/Livewire/Source/Github/Change.php @@ -2,6 +2,7 @@ namespace App\Livewire\Source\Github; +use App\Jobs\GithubAppPermissionJob; use App\Models\GithubApp; use App\Models\InstanceSettings; use Illuminate\Support\Facades\Http; @@ -35,8 +36,18 @@ class Change extends Component 'github_app.client_secret' => 'required|string', 'github_app.webhook_secret' => 'required|string', 'github_app.is_system_wide' => 'required|bool', + 'github_app.contents' => 'nullable|string', + 'github_app.metadata' => 'nullable|string', + 'github_app.pull_requests' => 'nullable|string', + 'github_app.administration' => 'nullable|string', ]; + public function checkPermissions() + { + GithubAppPermissionJob::dispatchSync($this->github_app); + $this->github_app->refresh()->makeVisible('client_secret')->makeVisible('webhook_secret'); + $this->dispatch('success', 'Success', 'Github App permissions updated.'); + } // public function check() // { @@ -138,7 +149,7 @@ public function submit() 'github_app.is_system_wide' => 'required|bool', ]); $this->github_app->save(); - $this->dispatch('success', 'Github App updated successfully.'); + $this->dispatch('success', 'Success', 'Github App updated.'); } catch (\Throwable $e) { return handleError($e, $this); } @@ -146,6 +157,13 @@ public function submit() public function instantSave() { + try { + $this->github_app->makeVisible('client_secret')->makeVisible('webhook_secret'); + $this->github_app->save(); + $this->dispatch('success', 'Success', 'Github App updated.'); + } catch (\Throwable $e) { + return handleError($e, $this); + } } public function delete() diff --git a/database/migrations/2024_02_20_165045_add_permissions_to_github_app.php b/database/migrations/2024_02_20_165045_add_permissions_to_github_app.php new file mode 100644 index 000000000..fedb7395f --- /dev/null +++ b/database/migrations/2024_02_20_165045_add_permissions_to_github_app.php @@ -0,0 +1,34 @@ +string('contents')->nullable(); + $table->string('metadata')->nullable(); + $table->string('pull_requests')->nullable(); + $table->string('administration')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('github_apps', function (Blueprint $table) { + $table->dropColumn('contents'); + $table->dropColumn('metadata'); + $table->dropColumn('pull_requests'); + $table->dropColumn('administration'); + }); + } +}; diff --git a/resources/views/livewire/source/github/change.blade.php b/resources/views/livewire/source/github/change.blade.php index 769c9cab9..171111794 100644 --- a/resources/views/livewire/source/github/change.blade.php +++ b/resources/views/livewire/source/github/change.blade.php @@ -16,7 +16,6 @@ This source will be deleted. It is not reversible.
Please think again.
- {{-- Check --}}

Your Private GitHub App for private repositories.
@@ -33,39 +32,53 @@ Install Repositories on GitHub
@else - @if (!isCloud()) -
- +
+
+ +
- @endif -
- - -
-
- - -
-
- @if ($github_app->html_url === 'https://github.com') - - - @else - - + @if (!isCloud()) +
+ +
@endif -
-
- - -
-
- - - +
+ + +
+
+ @if ($github_app->html_url === 'https://github.com') + + + @else + + + @endif +
+
+ + +
+
+ + + +
+
+

Permissions

+ Check Permissions +
+
+ + + + +
@endif From 1ca0464957ac17c3caf399461eb892a997ec8b67 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Tue, 20 Feb 2024 20:17:04 +0100 Subject: [PATCH 08/26] fix: permission change updates from webhook --- app/Livewire/Source/Github/Change.php | 1 + bootstrap/helpers/github.php | 5 +++ .../livewire/source/github/change.blade.php | 42 +++++++++++++------ routes/webhooks.php | 15 ++++--- 4 files changed, 45 insertions(+), 18 deletions(-) diff --git a/app/Livewire/Source/Github/Change.php b/app/Livewire/Source/Github/Change.php index e4baa36d0..d03f7c08f 100644 --- a/app/Livewire/Source/Github/Change.php +++ b/app/Livewire/Source/Github/Change.php @@ -17,6 +17,7 @@ class Change extends Component public ?bool $default_permissions = true; public ?bool $preview_deployment_permissions = true; + public ?bool $administration = false; public $parameters; public ?GithubApp $github_app; diff --git a/bootstrap/helpers/github.php b/bootstrap/helpers/github.php index 16633168f..5d759e651 100644 --- a/bootstrap/helpers/github.php +++ b/bootstrap/helpers/github.php @@ -86,3 +86,8 @@ function get_installation_path(GithubApp $source) $installation_path = $github->html_url === 'https://github.com' ? 'apps' : 'github-apps'; return "$github->html_url/$installation_path/$name/installations/new"; } +function get_permissions_path(GithubApp $source) { + $github = GithubApp::where('uuid', $source->uuid)->first(); + $name = Str::of(Str::kebab($github->name)); + return "$github->html_url/settings/apps/$name/permissions"; +} diff --git a/resources/views/livewire/source/github/change.blade.php b/resources/views/livewire/source/github/change.blade.php index 171111794..163a9b2b1 100644 --- a/resources/views/livewire/source/github/change.blade.php +++ b/resources/views/livewire/source/github/change.blade.php @@ -70,14 +70,25 @@

Permissions

- Check Permissions + Refetch + + + Update + + +
- - - - + + + +
@endif @@ -103,7 +114,7 @@

Register a GitHub App

+ x-on:click.prevent="createGithubApp('{{ $webhook_endpoint }}','{{ $preview_deployment_permissions }}',{{ $administration }})"> Register Now
@@ -128,17 +139,18 @@
@endif -
- + - +
+ - function toggleScroll() { - this.alwaysScroll = !this.alwaysScroll; - - if (this.alwaysScroll) { - this.intervalId = setInterval(() => { - const screen = document.getElementById('screen'); - const logs = document.getElementById('logs'); - if (screen.scrollTop !== logs.scrollHeight) { - screen.scrollTop = logs.scrollHeight; - } - }, 100); - } else { - clearInterval(this.intervalId); - this.intervalId = null; - } - } - - function goTop() { - this.alwaysScroll = false; - clearInterval(this.intervalId); - const screen = document.getElementById('screen'); - screen.scrollTop = 0; - } - diff --git a/resources/views/livewire/server/proxy/dynamic-configuration-navbar.blade.php b/resources/views/livewire/server/proxy/dynamic-configuration-navbar.blade.php new file mode 100644 index 000000000..c2a5dade9 --- /dev/null +++ b/resources/views/livewire/server/proxy/dynamic-configuration-navbar.blade.php @@ -0,0 +1,15 @@ +
+

File: {{ str_replace('|', '.', $fileName) }}

+
+ + Edit Configuration + + + + + +
+ Delete +
diff --git a/resources/views/livewire/server/proxy/dynamic-configurations.blade.php b/resources/views/livewire/server/proxy/dynamic-configurations.blade.php new file mode 100644 index 000000000..9cc1c505b --- /dev/null +++ b/resources/views/livewire/server/proxy/dynamic-configurations.blade.php @@ -0,0 +1,53 @@ +
+ +
+ +
+ @if ($server->isFunctional()) +
+
+
+

Dynamic Configurations

+ Reload + + New Dynamic Configuration + + + + + +
+
You can add dynamic Traefik configurations here.
+
+
+
+ +
+
+ @if ($contents?->isNotEmpty()) + @foreach ($contents as $fileName => $value) +
+ @if (str_replace('|', '.', $fileName) === 'coolify.yaml') +
+

File: {{ str_replace('|', '.', $fileName) }}

+
+ + @else + + + @endif +
+ @endforeach + @endif +
+ + @endif +
+
+
diff --git a/resources/views/livewire/server/proxy/logs.blade.php b/resources/views/livewire/server/proxy/logs.blade.php index 58e718424..496464541 100644 --- a/resources/views/livewire/server/proxy/logs.blade.php +++ b/resources/views/livewire/server/proxy/logs.blade.php @@ -3,6 +3,7 @@
+

Logs

diff --git a/resources/views/livewire/server/proxy/new-dynamic-configuration.blade.php b/resources/views/livewire/server/proxy/new-dynamic-configuration.blade.php new file mode 100644 index 000000000..9e98b0ed4 --- /dev/null +++ b/resources/views/livewire/server/proxy/new-dynamic-configuration.blade.php @@ -0,0 +1,5 @@ +
+ + + Save + diff --git a/routes/web.php b/routes/web.php index 9a6a6bbef..a4998aaff 100644 --- a/routes/web.php +++ b/routes/web.php @@ -67,6 +67,7 @@ use App\Livewire\Server\Destination\Show as DestinationShow; use App\Livewire\Server\LogDrains; use App\Livewire\Server\PrivateKey\Show as PrivateKeyShow; +use App\Livewire\Server\Proxy\DynamicConfigurations as ProxyDynamicConfigurations; use App\Livewire\Server\Proxy\Show as ProxyShow; use App\Livewire\Server\Proxy\Logs as ProxyLogs; use App\Livewire\Source\Github\Change as GitHubChange; @@ -177,6 +178,7 @@ Route::get('/', ServerShow::class)->name('server.show'); Route::get('/resources', ResourcesShow::class)->name('server.resources'); Route::get('/proxy', ProxyShow::class)->name('server.proxy'); + Route::get('/proxy/dynamic', ProxyDynamicConfigurations::class)->name('server.proxy.dynamic-confs'); Route::get('/proxy/logs', ProxyLogs::class)->name('server.proxy.logs'); Route::get('/private-key', PrivateKeyShow::class)->name('server.private-key'); Route::get('/destinations', DestinationShow::class)->name('server.destinations'); From 7233c86f3d035257be2b5a211d7a5cfe1b7a5c7f Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Thu, 22 Feb 2024 14:45:41 +0100 Subject: [PATCH 22/26] fix: use latest image if nothing is specified --- app/Jobs/ApplicationDeploymentJob.php | 6 +++++- app/Livewire/Project/Application/General.php | 1 - 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/Jobs/ApplicationDeploymentJob.php b/app/Jobs/ApplicationDeploymentJob.php index f37ee5e49..f3e8c4129 100644 --- a/app/Jobs/ApplicationDeploymentJob.php +++ b/app/Jobs/ApplicationDeploymentJob.php @@ -333,7 +333,11 @@ private function deploy_simple_dockerfile() private function deploy_dockerimage_buildpack() { $this->dockerImage = $this->application->docker_registry_image_name; - $this->dockerImageTag = $this->application->docker_registry_image_tag; + if (str($this->application->docker_registry_image_tag)->isEmpty()) { + $this->dockerImageTag = 'latest'; + } else { + $this->dockerImageTag = $this->application->docker_registry_image_tag; + } ray("echo 'Starting deployment of {$this->dockerImage}:{$this->dockerImageTag} to {$this->server->name}.'"); $this->application_deployment_queue->addLogEntry("Starting deployment of {$this->dockerImage}:{$this->dockerImageTag} to {$this->server->name}."); $this->generate_image_names(); diff --git a/app/Livewire/Project/Application/General.php b/app/Livewire/Project/Application/General.php index 732be62d0..37b650281 100644 --- a/app/Livewire/Project/Application/General.php +++ b/app/Livewire/Project/Application/General.php @@ -232,7 +232,6 @@ public function submit($showToaster = true) if (data_get($this->application, 'build_pack') === 'dockerimage') { $this->validate([ 'application.docker_registry_image_name' => 'required', - 'application.docker_registry_image_tag' => 'required', ]); } if (data_get($this->application, 'fqdn')) { From 836458ad85a5e31f8e5889bf5a59559567522a9f Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Thu, 22 Feb 2024 14:45:56 +0100 Subject: [PATCH 23/26] fix: no coolify.yaml found --- app/Livewire/Server/Proxy/DynamicConfigurations.php | 4 +++- app/Livewire/Server/Proxy/NewDynamicConfiguration.php | 1 + .../livewire/server/proxy/dynamic-configurations.blade.php | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/Livewire/Server/Proxy/DynamicConfigurations.php b/app/Livewire/Server/Proxy/DynamicConfigurations.php index 9e7a89780..6e52f9d4a 100644 --- a/app/Livewire/Server/Proxy/DynamicConfigurations.php +++ b/app/Livewire/Server/Proxy/DynamicConfigurations.php @@ -22,7 +22,9 @@ public function loadDynamicConfigurations() $files = collect(explode("\n", $files))->filter(fn ($file) => !empty($file)); $files = $files->map(fn ($file) => trim($file)); $files = $files->sort(); - $files = $files->filter(fn ($file) => $file !== 'coolify.yaml')->prepend('coolify.yaml'); + if ($files->contains('coolify.yaml')) { + $files = $files->filter(fn ($file) => $file !== 'coolify.yaml')->prepend('coolify.yaml'); + } $contents = collect([]); foreach ($files as $file) { $without_extension = str_replace('.', '|', $file); diff --git a/app/Livewire/Server/Proxy/NewDynamicConfiguration.php b/app/Livewire/Server/Proxy/NewDynamicConfiguration.php index cf9c88160..28b083ca8 100644 --- a/app/Livewire/Server/Proxy/NewDynamicConfiguration.php +++ b/app/Livewire/Server/Proxy/NewDynamicConfiguration.php @@ -62,6 +62,7 @@ public function addDynamicConfiguration() instant_remote_process(["echo '{$base64_value}' | base64 -d > {$file}"], $this->server); $this->dispatch('loadDynamicConfigurations'); $this->dispatch('dynamic-configuration-added'); + $this->dispatch('success', 'Success', 'Dynamic configuration saved.'); } catch (\Throwable $e) { return handleError($e, $this); } diff --git a/resources/views/livewire/server/proxy/dynamic-configurations.blade.php b/resources/views/livewire/server/proxy/dynamic-configurations.blade.php index 9cc1c505b..c89c4274f 100644 --- a/resources/views/livewire/server/proxy/dynamic-configurations.blade.php +++ b/resources/views/livewire/server/proxy/dynamic-configurations.blade.php @@ -44,6 +44,8 @@ class="font-normal text-white normal-case border-none rounded btn btn-primary bt @endif @endforeach + @else +
No dynamic configurations found.
@endif From 592221b4bff7503c474f6f97e26e0672cb934a11 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Thu, 22 Feb 2024 14:46:11 +0100 Subject: [PATCH 24/26] fix: server validation --- app/Livewire/Server/ValidateAndInstall.php | 4 ++-- app/Models/Server.php | 2 +- .../views/livewire/server/form.blade.php | 20 ++++++++++--------- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/app/Livewire/Server/ValidateAndInstall.php b/app/Livewire/Server/ValidateAndInstall.php index bc2af95d2..4fa92644d 100644 --- a/app/Livewire/Server/ValidateAndInstall.php +++ b/app/Livewire/Server/ValidateAndInstall.php @@ -11,7 +11,7 @@ class ValidateAndInstall extends Component { public Server $server; public int $number_of_tries = 0; - public int $max_tries = 2; + public int $max_tries = 1; public bool $install = true; public $uptime = null; public $supported_os_type = null; @@ -99,7 +99,7 @@ public function validateDockerEngine() $this->error = 'Docker Engine could not be installed. Please install Docker manually before continuing: documentation.'; return; } else { - if ($this->number_of_tries == 0 ) { + if ($this->number_of_tries == 0) { $activity = $this->server->installDocker(); $this->number_of_tries++; $this->dispatch('newActivityMonitor', $activity->id, 'init'); diff --git a/app/Models/Server.php b/app/Models/Server.php index 27f0432a3..016efd5f7 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -469,7 +469,7 @@ public function validateDockerEngine($throwError = false) return false; } try { - $dockerRunning = instant_remote_process(["docker version"], $this); + instant_remote_process(["docker version"], $this); } catch (\Throwable $e) { $this->settings->is_usable = false; $this->settings->save(); diff --git a/resources/views/livewire/server/form.blade.php b/resources/views/livewire/server/form.blade.php index 9d97a88fa..4e4e11845 100644 --- a/resources/views/livewire/server/form.blade.php +++ b/resources/views/livewire/server/form.blade.php @@ -10,15 +10,17 @@ @else Save - - Validate & configure - - - - - Revalidate server - - + @if ($server->isFunctional()) + + Validate & configure + + + + + Revalidate server + + + @endif @endif @if ($server->isFunctional()) From c7218f2856db81d7d47c3cf0defd243bc56ddff6 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Thu, 22 Feb 2024 14:53:42 +0100 Subject: [PATCH 25/26] Update success messages --- app/Livewire/Notifications/EmailSettings.php | 10 +++++----- app/Livewire/Profile/Index.php | 2 +- app/Livewire/Project/Application/Preview/Form.php | 2 +- app/Livewire/Project/Database/BackupExecutions.php | 2 +- app/Livewire/Project/Database/Heading.php | 2 +- app/Livewire/Project/Database/Mariadb/General.php | 4 ++-- app/Livewire/Project/Database/Mongodb/General.php | 4 ++-- app/Livewire/Project/Database/Mysql/General.php | 4 ++-- .../Project/Database/Postgresql/General.php | 10 +++++----- app/Livewire/Project/Database/Redis/General.php | 4 ++-- app/Livewire/Project/Database/ScheduledBackups.php | 2 +- app/Livewire/Project/Service/Database.php | 2 +- app/Livewire/Project/Service/FileStorage.php | 2 +- app/Livewire/Project/Service/Navbar.php | 4 ++-- .../Project/Service/ServiceApplicationView.php | 4 ++-- app/Livewire/Project/Service/StackForm.php | 4 ++-- .../Project/Shared/EnvironmentVariable/All.php | 4 ++-- .../Project/Shared/EnvironmentVariable/Show.php | 2 +- app/Livewire/Project/Shared/ResourceLimits.php | 2 +- app/Livewire/Project/Shared/ScheduledTask/All.php | 2 +- app/Livewire/Project/Shared/ScheduledTask/Show.php | 2 +- app/Livewire/Server/Form.php | 4 ++-- app/Livewire/Server/LogDrains.php | 4 ++-- .../Server/Proxy/DynamicConfigurationNavbar.php | 2 +- .../Server/Proxy/NewDynamicConfiguration.php | 6 +++--- app/Livewire/Server/ValidateAndInstall.php | 2 +- app/Livewire/Settings/Backup.php | 2 +- app/Livewire/Settings/Email.php | 6 +++--- app/Livewire/Source/Github/Change.php | 6 +++--- app/Livewire/Team/Index.php | 2 +- app/Livewire/Team/InviteLink.php | 2 +- resources/views/layouts/base.blade.php | 14 ++++++++++++-- 32 files changed, 67 insertions(+), 57 deletions(-) diff --git a/app/Livewire/Notifications/EmailSettings.php b/app/Livewire/Notifications/EmailSettings.php index cdbaef051..b6152907d 100644 --- a/app/Livewire/Notifications/EmailSettings.php +++ b/app/Livewire/Notifications/EmailSettings.php @@ -63,7 +63,7 @@ public function submitFromFields() ]); $this->team->save(); refreshSession(); - $this->dispatch('success', 'Settings saved successfully.'); + $this->dispatch('success', 'Settings saved.'); } catch (\Throwable $e) { return handleError($e, $this); } @@ -71,7 +71,7 @@ public function submitFromFields() public function sendTestNotification() { $this->team?->notify(new Test($this->emails)); - $this->dispatch('success', 'Test Email sent successfully.'); + $this->dispatch('success', 'Test Email sent.'); } public function instantSaveInstance() { @@ -83,7 +83,7 @@ public function instantSaveInstance() $this->team->resend_enabled = false; $this->team->save(); refreshSession(); - $this->dispatch('success', 'Settings saved successfully.'); + $this->dispatch('success', 'Settings saved.'); } catch (\Throwable $e) { return handleError($e, $this); } @@ -131,7 +131,7 @@ public function submit() ]); $this->team->save(); refreshSession(); - $this->dispatch('success', 'Settings saved successfully.'); + $this->dispatch('success', 'Settings saved.'); } catch (\Throwable $e) { $this->team->smtp_enabled = false; return handleError($e, $this); @@ -148,7 +148,7 @@ public function submitResend() ]); $this->team->save(); refreshSession(); - $this->dispatch('success', 'Settings saved successfully.'); + $this->dispatch('success', 'Settings saved.'); } catch (\Throwable $e) { $this->team->resend_enabled = false; return handleError($e, $this); diff --git a/app/Livewire/Profile/Index.php b/app/Livewire/Profile/Index.php index 0a2a34766..3499d4ff9 100644 --- a/app/Livewire/Profile/Index.php +++ b/app/Livewire/Profile/Index.php @@ -27,7 +27,7 @@ public function submit() 'name' => $this->name, ]); - $this->dispatch('success', 'Profile updated successfully.'); + $this->dispatch('success', 'Profile updated'); } catch (\Throwable $e) { return handleError($e, $this); } diff --git a/app/Livewire/Project/Application/Preview/Form.php b/app/Livewire/Project/Application/Preview/Form.php index 0da8b1d76..6826e154b 100644 --- a/app/Livewire/Project/Application/Preview/Form.php +++ b/app/Livewire/Project/Application/Preview/Form.php @@ -46,7 +46,7 @@ public function submit() $this->validate(); $this->application->preview_url_template = str_replace(' ', '', $this->application->preview_url_template); $this->application->save(); - $this->dispatch('success', 'Preview url template updated successfully.'); + $this->dispatch('success', 'Preview url template updated.'); $this->generate_real_url(); } } diff --git a/app/Livewire/Project/Database/BackupExecutions.php b/app/Livewire/Project/Database/BackupExecutions.php index f1918f990..c78a8cbee 100644 --- a/app/Livewire/Project/Database/BackupExecutions.php +++ b/app/Livewire/Project/Database/BackupExecutions.php @@ -33,7 +33,7 @@ public function deleteBackup($exeuctionId) delete_backup_locally($execution->filename, $execution->scheduledDatabaseBackup->database->destination->server); } $execution->delete(); - $this->dispatch('success', 'Backup deleted successfully.'); + $this->dispatch('success', 'Backup deleted.'); $this->dispatch('refreshBackupExecutions'); } public function download($exeuctionId) diff --git a/app/Livewire/Project/Database/Heading.php b/app/Livewire/Project/Database/Heading.php index ed31f8cae..303166227 100644 --- a/app/Livewire/Project/Database/Heading.php +++ b/app/Livewire/Project/Database/Heading.php @@ -38,7 +38,7 @@ public function check_status($showNotification = false) { dispatch_sync(new ContainerStatusJob($this->database->destination->server)); $this->database->refresh(); - if ($showNotification) $this->dispatch('success', 'Success', 'Database status updated.'); + if ($showNotification) $this->dispatch('success', 'Database status updated.'); } public function mount() diff --git a/app/Livewire/Project/Database/Mariadb/General.php b/app/Livewire/Project/Database/Mariadb/General.php index 305633cba..9b15c6c3c 100644 --- a/app/Livewire/Project/Database/Mariadb/General.php +++ b/app/Livewire/Project/Database/Mariadb/General.php @@ -59,7 +59,7 @@ public function instantSaveAdvanced() { return; } $this->database->save(); - $this->dispatch('success', 'Database updated successfully.'); + $this->dispatch('success', 'Database updated.'); $this->dispatch('success', 'You need to restart the service for the changes to take effect.'); } catch (Exception $e) { return handleError($e, $this); @@ -73,7 +73,7 @@ public function submit() } $this->validate(); $this->database->save(); - $this->dispatch('success', 'Database updated successfully.'); + $this->dispatch('success', 'Database updated.'); } catch (Exception $e) { return handleError($e, $this); } diff --git a/app/Livewire/Project/Database/Mongodb/General.php b/app/Livewire/Project/Database/Mongodb/General.php index 70f54cc3f..cd3ea0630 100644 --- a/app/Livewire/Project/Database/Mongodb/General.php +++ b/app/Livewire/Project/Database/Mongodb/General.php @@ -58,7 +58,7 @@ public function instantSaveAdvanced() return; } $this->database->save(); - $this->dispatch('success', 'Database updated successfully.'); + $this->dispatch('success', 'Database updated.'); $this->dispatch('success', 'You need to restart the service for the changes to take effect.'); } catch (Exception $e) { return handleError($e, $this); @@ -75,7 +75,7 @@ public function submit() } $this->validate(); $this->database->save(); - $this->dispatch('success', 'Database updated successfully.'); + $this->dispatch('success', 'Database updated.'); } catch (Exception $e) { return handleError($e, $this); } diff --git a/app/Livewire/Project/Database/Mysql/General.php b/app/Livewire/Project/Database/Mysql/General.php index 98b16a112..2470a934b 100644 --- a/app/Livewire/Project/Database/Mysql/General.php +++ b/app/Livewire/Project/Database/Mysql/General.php @@ -60,7 +60,7 @@ public function instantSaveAdvanced() return; } $this->database->save(); - $this->dispatch('success', 'Database updated successfully.'); + $this->dispatch('success', 'Database updated.'); $this->dispatch('success', 'You need to restart the service for the changes to take effect.'); } catch (Exception $e) { return handleError($e, $this); @@ -74,7 +74,7 @@ public function submit() } $this->validate(); $this->database->save(); - $this->dispatch('success', 'Database updated successfully.'); + $this->dispatch('success', 'Database updated.'); } catch (Exception $e) { return handleError($e, $this); } diff --git a/app/Livewire/Project/Database/Postgresql/General.php b/app/Livewire/Project/Database/Postgresql/General.php index 6fa5df97c..43f559140 100644 --- a/app/Livewire/Project/Database/Postgresql/General.php +++ b/app/Livewire/Project/Database/Postgresql/General.php @@ -66,7 +66,7 @@ public function instantSaveAdvanced() { return; } $this->database->save(); - $this->dispatch('success', 'Database updated successfully.'); + $this->dispatch('success', 'Database updated.'); $this->dispatch('success', 'You need to restart the service for the changes to take effect.'); } catch (Exception $e) { return handleError($e, $this); @@ -105,7 +105,7 @@ public function save_init_script($script) $this->database->init_scripts = filter($this->database->init_scripts, fn ($s) => $s['filename'] !== $script['filename']); $this->database->init_scripts = array_merge($this->database->init_scripts, [$script]); $this->database->save(); - $this->dispatch('success', 'Init script saved successfully.'); + $this->dispatch('success', 'Init script saved.'); } public function delete_init_script($script) @@ -116,7 +116,7 @@ public function delete_init_script($script) $this->database->init_scripts = $collection->filter(fn ($s) => $s['filename'] !== $script['filename'])->toArray(); $this->database->save(); $this->refresh(); - $this->dispatch('success', 'Init script deleted successfully.'); + $this->dispatch('success', 'Init script deleted.'); return; } } @@ -148,7 +148,7 @@ public function save_new_init_script() ] ]); $this->database->save(); - $this->dispatch('success', 'Init script added successfully.'); + $this->dispatch('success', 'Init script added.'); $this->new_content = ''; $this->new_filename = ''; } @@ -161,7 +161,7 @@ public function submit() } $this->validate(); $this->database->save(); - $this->dispatch('success', 'Database updated successfully.'); + $this->dispatch('success', 'Database updated.'); } catch (Exception $e) { return handleError($e, $this); } diff --git a/app/Livewire/Project/Database/Redis/General.php b/app/Livewire/Project/Database/Redis/General.php index c328a6195..07c161de5 100644 --- a/app/Livewire/Project/Database/Redis/General.php +++ b/app/Livewire/Project/Database/Redis/General.php @@ -52,7 +52,7 @@ public function instantSaveAdvanced() { return; } $this->database->save(); - $this->dispatch('success', 'Database updated successfully.'); + $this->dispatch('success', 'Database updated.'); $this->dispatch('success', 'You need to restart the service for the changes to take effect.'); } catch (Exception $e) { return handleError($e, $this); @@ -66,7 +66,7 @@ public function submit() $this->database->redis_conf = null; } $this->database->save(); - $this->dispatch('success', 'Database updated successfully.'); + $this->dispatch('success', 'Database updated.'); } catch (Exception $e) { return handleError($e, $this); } diff --git a/app/Livewire/Project/Database/ScheduledBackups.php b/app/Livewire/Project/Database/ScheduledBackups.php index 2fc4d069e..399fddac4 100644 --- a/app/Livewire/Project/Database/ScheduledBackups.php +++ b/app/Livewire/Project/Database/ScheduledBackups.php @@ -38,7 +38,7 @@ public function setSelectedBackup($backupId) { public function delete($scheduled_backup_id): void { $this->database->scheduledBackups->find($scheduled_backup_id)->delete(); - $this->dispatch('success', 'Scheduled backup deleted successfully.'); + $this->dispatch('success', 'Scheduled backup deleted.'); $this->refreshScheduledBackups(); } diff --git a/app/Livewire/Project/Service/Database.php b/app/Livewire/Project/Service/Database.php index e7be1ff2e..8dec97852 100644 --- a/app/Livewire/Project/Service/Database.php +++ b/app/Livewire/Project/Service/Database.php @@ -77,7 +77,7 @@ public function submit() $this->validate(); $this->database->save(); updateCompose($this->database); - $this->dispatch('success', 'Database saved successfully.'); + $this->dispatch('success', 'Database saved.'); } catch (\Throwable $e) { ray($e); } finally { diff --git a/app/Livewire/Project/Service/FileStorage.php b/app/Livewire/Project/Service/FileStorage.php index da85a1a6e..2abfcdf5e 100644 --- a/app/Livewire/Project/Service/FileStorage.php +++ b/app/Livewire/Project/Service/FileStorage.php @@ -42,7 +42,7 @@ public function submit() } $this->fileStorage->save(); $this->fileStorage->saveStorageOnServer(); - $this->dispatch('success', 'File updated successfully.'); + $this->dispatch('success', 'File updated.'); } catch (\Throwable $e) { $this->fileStorage->setRawAttributes($original); $this->fileStorage->save(); diff --git a/app/Livewire/Project/Service/Navbar.php b/app/Livewire/Project/Service/Navbar.php index 2eb9f938c..fda86321b 100644 --- a/app/Livewire/Project/Service/Navbar.php +++ b/app/Livewire/Project/Service/Navbar.php @@ -64,9 +64,9 @@ public function stop(bool $forceCleanup = false) StopService::run($this->service); $this->service->refresh(); if ($forceCleanup) { - $this->dispatch('success', 'Force cleanup service successfully.'); + $this->dispatch('success', 'Force cleanup service.'); } else { - $this->dispatch('success', 'Service stopped successfully.'); + $this->dispatch('success', 'Service stopped.'); } ServiceStatusChanged::dispatch(); } diff --git a/app/Livewire/Project/Service/ServiceApplicationView.php b/app/Livewire/Project/Service/ServiceApplicationView.php index 53532a855..2bae41a80 100644 --- a/app/Livewire/Project/Service/ServiceApplicationView.php +++ b/app/Livewire/Project/Service/ServiceApplicationView.php @@ -41,7 +41,7 @@ public function delete() { try { $this->application->delete(); - $this->dispatch('success', 'Application deleted successfully.'); + $this->dispatch('success', 'Application deleted.'); return redirect()->route('project.service.configuration', $this->parameters); } catch (\Throwable $e) { return handleError($e, $this); @@ -58,7 +58,7 @@ public function submit() $this->validate(); $this->application->save(); updateCompose($this->application); - $this->dispatch('success', 'Application saved successfully.'); + $this->dispatch('success', 'Application saved.'); } catch (\Throwable $e) { return handleError($e, $this); } finally { diff --git a/app/Livewire/Project/Service/StackForm.php b/app/Livewire/Project/Service/StackForm.php index 44672fe64..1ec63a761 100644 --- a/app/Livewire/Project/Service/StackForm.php +++ b/app/Livewire/Project/Service/StackForm.php @@ -48,7 +48,7 @@ public function saveCompose($raw) public function instantSave() { $this->service->save(); - $this->dispatch('success', 'Service settings saved successfully.'); + $this->dispatch('success', 'Service settings saved.'); } public function submit() @@ -62,7 +62,7 @@ public function submit() $this->service->saveComposeConfigs(); $this->dispatch('refreshStacks'); $this->dispatch('refreshEnvs'); - $this->dispatch('success', 'Service saved successfully.'); + $this->dispatch('success', 'Service saved.'); } catch (\Throwable $e) { return handleError($e, $this); } diff --git a/app/Livewire/Project/Shared/EnvironmentVariable/All.php b/app/Livewire/Project/Shared/EnvironmentVariable/All.php index 28aac7ce3..3a304d3e9 100644 --- a/app/Livewire/Project/Shared/EnvironmentVariable/All.php +++ b/app/Livewire/Project/Shared/EnvironmentVariable/All.php @@ -120,9 +120,9 @@ public function saveVariables($isPreview) } } if ($isPreview) { - $this->dispatch('success', 'Preview environment variables updated successfully.'); + $this->dispatch('success', 'Preview environment variables updated.'); } else { - $this->dispatch('success', 'Environment variables updated successfully.'); + $this->dispatch('success', 'Environment variables updated.'); } $this->refreshEnvs(); } diff --git a/app/Livewire/Project/Shared/EnvironmentVariable/Show.php b/app/Livewire/Project/Shared/EnvironmentVariable/Show.php index 1494707e7..9252c44f8 100644 --- a/app/Livewire/Project/Shared/EnvironmentVariable/Show.php +++ b/app/Livewire/Project/Shared/EnvironmentVariable/Show.php @@ -90,7 +90,7 @@ public function submit() } $this->serialize(); $this->env->save(); - $this->dispatch('success', 'Environment variable updated successfully.'); + $this->dispatch('success', 'Environment variable updated.'); $this->dispatch('refreshEnvs'); } catch (\Exception $e) { return handleError($e); diff --git a/app/Livewire/Project/Shared/ResourceLimits.php b/app/Livewire/Project/Shared/ResourceLimits.php index 8b010530c..a326a9a0b 100644 --- a/app/Livewire/Project/Shared/ResourceLimits.php +++ b/app/Livewire/Project/Shared/ResourceLimits.php @@ -52,7 +52,7 @@ public function submit() } $this->validate(); $this->resource->save(); - $this->dispatch('success', 'Resource limits updated successfully.'); + $this->dispatch('success', 'Resource limits updated.'); } catch (\Throwable $e) { return handleError($e, $this); } diff --git a/app/Livewire/Project/Shared/ScheduledTask/All.php b/app/Livewire/Project/Shared/ScheduledTask/All.php index 4a876e72a..975d695fa 100644 --- a/app/Livewire/Project/Shared/ScheduledTask/All.php +++ b/app/Livewire/Project/Shared/ScheduledTask/All.php @@ -48,7 +48,7 @@ public function submit($data) } $task->save(); $this->refreshTasks(); - $this->dispatch('success', 'Scheduled task added successfully.'); + $this->dispatch('success', 'Scheduled task added.'); } catch (\Throwable $e) { return handleError($e, $this); } diff --git a/app/Livewire/Project/Shared/ScheduledTask/Show.php b/app/Livewire/Project/Shared/ScheduledTask/Show.php index 23cb0e41a..87b752509 100644 --- a/app/Livewire/Project/Shared/ScheduledTask/Show.php +++ b/app/Livewire/Project/Shared/ScheduledTask/Show.php @@ -49,7 +49,7 @@ public function submit() { $this->validate(); $this->task->save(); - $this->dispatch('success', 'Scheduled task updated successfully.'); + $this->dispatch('success', 'Scheduled task updated.'); $this->dispatch('refreshTasks'); } diff --git a/app/Livewire/Server/Form.php b/app/Livewire/Server/Form.php index 75e65c319..098a7c1ff 100644 --- a/app/Livewire/Server/Form.php +++ b/app/Livewire/Server/Form.php @@ -64,7 +64,7 @@ public function instantSave() refresh_server_connection($this->server->privateKey); $this->validateServer(false); $this->server->settings->save(); - $this->dispatch('success', 'Server updated successfully.'); + $this->dispatch('success', 'Server updated.'); } catch (\Throwable $e) { return handleError($e, $this); } @@ -113,6 +113,6 @@ public function submit() $this->server->settings->cleanup_after_percentage = $this->cleanup_after_percentage; $this->server->settings->save(); $this->server->save(); - $this->dispatch('success', 'Server updated successfully.'); + $this->dispatch('success', 'Server updated.'); } } diff --git a/app/Livewire/Server/LogDrains.php b/app/Livewire/Server/LogDrains.php index b922cc0c9..4eca682d4 100644 --- a/app/Livewire/Server/LogDrains.php +++ b/app/Livewire/Server/LogDrains.php @@ -60,7 +60,7 @@ public function configureLogDrain() return; } $this->dispatch('serverRefresh'); - $this->dispatch('success', 'Log drain service started successfully.'); + $this->dispatch('success', 'Log drain service started.'); } catch (\Throwable $e) { return handleError($e, $this); } @@ -126,7 +126,7 @@ public function submit(string $type) ]); } $this->server->settings->save(); - $this->dispatch('success', 'Settings saved successfully.'); + $this->dispatch('success', 'Settings saved.'); return true; } catch (\Throwable $e) { if ($type === 'newrelic') { diff --git a/app/Livewire/Server/Proxy/DynamicConfigurationNavbar.php b/app/Livewire/Server/Proxy/DynamicConfigurationNavbar.php index acff38ccb..ee46a3fff 100644 --- a/app/Livewire/Server/Proxy/DynamicConfigurationNavbar.php +++ b/app/Livewire/Server/Proxy/DynamicConfigurationNavbar.php @@ -17,7 +17,7 @@ public function delete(string $fileName) $proxy_path = get_proxy_path(); $file = str_replace('|', '.', $fileName); instant_remote_process(["rm -f {$proxy_path}/dynamic/{$file}"], $server); - $this->dispatch('success', 'Success', 'File deleted.'); + $this->dispatch('success', 'File deleted.'); $this->dispatch('loadDynamicConfigurations'); $this->dispatch('refresh'); } diff --git a/app/Livewire/Server/Proxy/NewDynamicConfiguration.php b/app/Livewire/Server/Proxy/NewDynamicConfiguration.php index 28b083ca8..c9ceb41ee 100644 --- a/app/Livewire/Server/Proxy/NewDynamicConfiguration.php +++ b/app/Livewire/Server/Proxy/NewDynamicConfiguration.php @@ -43,7 +43,7 @@ public function addDynamicConfiguration() $this->fileName = "{$this->fileName}.yaml"; } if ($this->fileName === 'coolify.yaml') { - $this->dispatch('error', 'Error', 'File name is reserved.'); + $this->dispatch('error', 'File name is reserved.'); return; } $proxy_path = get_proxy_path(); @@ -51,7 +51,7 @@ public function addDynamicConfiguration() if ($this->newFile) { $exists = instant_remote_process(["test -f $file && echo 1 || echo 0"], $this->server); if ($exists == 1) { - $this->dispatch('error', 'Error', 'File already exists'); + $this->dispatch('error', 'File already exists'); return; } } @@ -62,7 +62,7 @@ public function addDynamicConfiguration() instant_remote_process(["echo '{$base64_value}' | base64 -d > {$file}"], $this->server); $this->dispatch('loadDynamicConfigurations'); $this->dispatch('dynamic-configuration-added'); - $this->dispatch('success', 'Success', 'Dynamic configuration saved.'); + $this->dispatch('success', 'Dynamic configuration saved.'); } catch (\Throwable $e) { return handleError($e, $this); } diff --git a/app/Livewire/Server/ValidateAndInstall.php b/app/Livewire/Server/ValidateAndInstall.php index 4fa92644d..ff623e972 100644 --- a/app/Livewire/Server/ValidateAndInstall.php +++ b/app/Livewire/Server/ValidateAndInstall.php @@ -124,7 +124,7 @@ public function validateDockerVersion() $this->docker_version = $this->server->validateDockerEngineVersion(); if ($this->docker_version) { $this->dispatch('serverInstalled'); - $this->dispatch('success', 'Server validated successfully.'); + $this->dispatch('success', 'Server validated.'); } else { $this->error = 'Docker Engine version is not 22+. Please install Docker manually before continuing: documentation.'; return; diff --git a/app/Livewire/Settings/Backup.php b/app/Livewire/Settings/Backup.php index 519fe1bd8..67a457774 100644 --- a/app/Livewire/Settings/Backup.php +++ b/app/Livewire/Settings/Backup.php @@ -81,6 +81,6 @@ public function backup_now() } public function submit() { - $this->dispatch('success', 'Backup updated successfully.'); + $this->dispatch('success', 'Backup updated.'); } } diff --git a/app/Livewire/Settings/Email.php b/app/Livewire/Settings/Email.php index 471c18e9c..3563e2e64 100644 --- a/app/Livewire/Settings/Email.php +++ b/app/Livewire/Settings/Email.php @@ -49,7 +49,7 @@ public function submitFromFields() { 'settings.smtp_from_name' => 'required', ]); $this->settings->save(); - $this->dispatch('success', 'Settings saved successfully.'); + $this->dispatch('success', 'Settings saved.'); } catch (\Throwable $e) { return handleError($e, $this); } @@ -61,7 +61,7 @@ public function submitResend() { 'settings.resend_api_key' => 'required' ]); $this->settings->save(); - $this->dispatch('success', 'Settings saved successfully.'); + $this->dispatch('success', 'Settings saved.'); } catch (\Throwable $e) { $this->settings->resend_enabled = false; return handleError($e, $this); @@ -98,7 +98,7 @@ public function submit() 'settings.smtp_timeout' => 'nullable', ]); $this->settings->save(); - $this->dispatch('success', 'Settings saved successfully.'); + $this->dispatch('success', 'Settings saved.'); } catch (\Throwable $e) { return handleError($e, $this); } diff --git a/app/Livewire/Source/Github/Change.php b/app/Livewire/Source/Github/Change.php index d03f7c08f..61c4ffcda 100644 --- a/app/Livewire/Source/Github/Change.php +++ b/app/Livewire/Source/Github/Change.php @@ -47,7 +47,7 @@ public function checkPermissions() { GithubAppPermissionJob::dispatchSync($this->github_app); $this->github_app->refresh()->makeVisible('client_secret')->makeVisible('webhook_secret'); - $this->dispatch('success', 'Success', 'Github App permissions updated.'); + $this->dispatch('success', 'Github App permissions updated.'); } // public function check() // { @@ -150,7 +150,7 @@ public function submit() 'github_app.is_system_wide' => 'required|bool', ]); $this->github_app->save(); - $this->dispatch('success', 'Success', 'Github App updated.'); + $this->dispatch('success', 'Github App updated.'); } catch (\Throwable $e) { return handleError($e, $this); } @@ -161,7 +161,7 @@ public function instantSave() try { $this->github_app->makeVisible('client_secret')->makeVisible('webhook_secret'); $this->github_app->save(); - $this->dispatch('success', 'Success', 'Github App updated.'); + $this->dispatch('success', 'Github App updated.'); } catch (\Throwable $e) { return handleError($e, $this); } diff --git a/app/Livewire/Team/Index.php b/app/Livewire/Team/Index.php index b7482e671..1822620f8 100644 --- a/app/Livewire/Team/Index.php +++ b/app/Livewire/Team/Index.php @@ -37,7 +37,7 @@ public function submit() try { $this->team->save(); refreshSession(); - $this->dispatch('success', 'Team updated successfully.'); + $this->dispatch('success', 'Team updated.'); } catch (\Throwable $e) { return handleError($e, $this); } diff --git a/app/Livewire/Team/InviteLink.php b/app/Livewire/Team/InviteLink.php index 5f9db3f84..cc9054888 100644 --- a/app/Livewire/Team/InviteLink.php +++ b/app/Livewire/Team/InviteLink.php @@ -79,7 +79,7 @@ private function generate_invite_link(bool $sendEmail = false) ]); $mail->subject('You have been invited to ' . currentTeam()->name . ' on ' . config('app.name') . '.'); send_user_an_email($mail, $this->email); - $this->dispatch('success', 'Invitation sent via email successfully.'); + $this->dispatch('success', 'Invitation sent via email.'); $this->dispatch('refreshInvitations'); return; } else { diff --git a/resources/views/layouts/base.blade.php b/resources/views/layouts/base.blade.php index d12d30d86..675c0d0af 100644 --- a/resources/views/layouts/base.blade.php +++ b/resources/views/layouts/base.blade.php @@ -146,7 +146,12 @@ function copyToClipboard(text) { } }) window.Livewire.on('error', (message) => { - if (message.length > 0) { + if (message.length == 1) { + window.toast('Error', { + type: 'danger', + description: message[0], + }) + } else if (message.length == 2) { window.toast(message[0], { type: 'danger', description: message[1], @@ -162,7 +167,12 @@ function copyToClipboard(text) { } }) window.Livewire.on('success', (message) => { - if (message.length > 0) { + if (message.length == 1) { + window.toast('Success', { + type: 'success', + description: message[0], + }) + } else if (message.length == 2) { window.toast(message[0], { type: 'success', description: message[1], From 01ab8204591a031dd76eee500a45850a9ee374e6 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Thu, 22 Feb 2024 14:56:41 +0100 Subject: [PATCH 26/26] Fix error message formatting in handleError function --- bootstrap/helpers/shared.php | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/bootstrap/helpers/shared.php b/bootstrap/helpers/shared.php index ed5819494..4a49f34a2 100644 --- a/bootstrap/helpers/shared.php +++ b/bootstrap/helpers/shared.php @@ -104,13 +104,13 @@ function handleError(?Throwable $error = null, ?Livewire\Component $livewire = n ray($error); if ($error instanceof TooManyRequestsException) { if (isset($livewire)) { - return $livewire->dispatch('error', "Error", "Too many requests. Please try again in {$error->secondsUntilAvailable} seconds."); + return $livewire->dispatch('error', 'Too many requests. Please try again in {$error->secondsUntilAvailable} seconds.'); } return "Too many requests. Please try again in {$error->secondsUntilAvailable} seconds."; } if ($error instanceof UniqueConstraintViolationException) { if (isset($livewire)) { - return $livewire->dispatch('error', "Error", "Duplicate entry found. Please use a different name."); + return $livewire->dispatch('error', 'Duplicate entry found. Please use a different name.'); } return "Duplicate entry found. Please use a different name."; } @@ -125,9 +125,6 @@ function handleError(?Throwable $error = null, ?Livewire\Component $livewire = n } if (isset($livewire)) { - if (str($message)->length() > 20) { - return $livewire->dispatch('error', 'Error', $message); - } return $livewire->dispatch('error', $message); } throw new Exception($message);