diff --git a/app/Http/Livewire/Project/Application/Deploy.php b/app/Http/Livewire/Project/Application/Deploy.php
index f78ad8e23..c37e33913 100644
--- a/app/Http/Livewire/Project/Application/Deploy.php
+++ b/app/Http/Livewire/Project/Application/Deploy.php
@@ -21,7 +21,7 @@ class Deploy extends Component
protected $source;
protected $listeners = [
- 'applicationStatusChanged' => 'applicationStatusChanged',
+ 'applicationStatusChanged',
];
public function mount()
@@ -40,8 +40,12 @@ protected function set_deployment_uuid()
$this->deployment_uuid = new Cuid2(7);
$this->parameters['deployment_uuid'] = $this->deployment_uuid;
}
- public function deploy(bool $force = false)
+ public function deploy(bool $force = false, bool|null $debug = null)
{
+ if ($debug && !$this->application->settings->is_debug_enabled) {
+ $this->application->settings->is_debug_enabled = true;
+ $this->application->settings->save();
+ }
$this->set_deployment_uuid();
queue_application_deployment(
@@ -62,5 +66,6 @@ public function stop()
instant_remote_process(["docker rm -f {$this->application->uuid}"], $this->application->destination->server);
$this->application->status = get_container_status(server: $this->application->destination->server, container_id: $this->application->uuid);
$this->application->save();
+ $this->emit('applicationStatusChanged');
}
}
diff --git a/app/Http/Livewire/Project/Application/EnvironmentVariable/Add.php b/app/Http/Livewire/Project/Application/EnvironmentVariable/Add.php
index 6c3eebb28..8d6830834 100644
--- a/app/Http/Livewire/Project/Application/EnvironmentVariable/Add.php
+++ b/app/Http/Livewire/Project/Application/EnvironmentVariable/Add.php
@@ -2,15 +2,12 @@
namespace App\Http\Livewire\Project\Application\EnvironmentVariable;
-use App\Models\Application;
-use App\Models\EnvironmentVariable;
-use Illuminate\Database\QueryException;
-use Illuminate\Support\Facades\Route;
use Livewire\Component;
class Add extends Component
{
public $parameters;
+ public bool $is_preview = false;
public string $key;
public string $value;
public bool $is_build_time = false;
@@ -32,6 +29,7 @@ public function submit()
'key' => $this->key,
'value' => $this->value,
'is_build_time' => $this->is_build_time,
+ 'is_preview' => $this->is_preview,
]);
}
public function clear()
diff --git a/app/Http/Livewire/Project/Application/EnvironmentVariable/All.php b/app/Http/Livewire/Project/Application/EnvironmentVariable/All.php
index 99366e5e8..f2d6f9a64 100644
--- a/app/Http/Livewire/Project/Application/EnvironmentVariable/All.php
+++ b/app/Http/Livewire/Project/Application/EnvironmentVariable/All.php
@@ -21,6 +21,7 @@ public function submit($data)
'key' => $data['key'],
'value' => $data['value'],
'is_build_time' => $data['is_build_time'],
+ 'is_preview' => $data['is_preview'],
'application_id' => $this->application->id,
]);
$this->application->refresh();
diff --git a/app/Http/Livewire/Project/Application/Status.php b/app/Http/Livewire/Project/Application/Status.php
index 34a33b348..107cce4ae 100644
--- a/app/Http/Livewire/Project/Application/Status.php
+++ b/app/Http/Livewire/Project/Application/Status.php
@@ -11,7 +11,7 @@ class Status extends Component
public function applicationStatusChanged()
{
- $this->emit('applicationStatusChanged');
$this->application->refresh();
+ $this->emit('applicationStatusChanged');
}
}
diff --git a/app/Http/Livewire/Project/New/PublicGitRepository.php b/app/Http/Livewire/Project/New/PublicGitRepository.php
index 2b68f24e2..89032ed0b 100644
--- a/app/Http/Livewire/Project/New/PublicGitRepository.php
+++ b/app/Http/Livewire/Project/New/PublicGitRepository.php
@@ -14,16 +14,22 @@
class PublicGitRepository extends Component
{
public string $repository_url;
+ private object $repository_url_parsed;
+
public int $port = 3000;
public string $type;
public $parameters;
public $query;
- public $github_apps;
- public $gitlab_apps;
-
+ public $branches = [];
+ public string $selected_branch = 'main';
public bool $is_static = false;
- public null|string $publish_directory = null;
+ public string|null $publish_directory = null;
+
+ private GithubApp|GitlabApp $git_source;
+ private string $git_host;
+ private string $git_repository;
+ private string $git_branch;
protected $rules = [
'repository_url' => 'required|url',
@@ -34,7 +40,7 @@ class PublicGitRepository extends Component
public function mount()
{
if (config('app.env') === 'local') {
- $this->repository_url = 'https://github.com/coollabsio/coolify-examples/tree/nodejs-fastify';
+ $this->repository_url = 'https://github.com/coollabsio/coolify-examples';
$this->port = 3000;
}
$this->parameters = get_parameters();
@@ -52,18 +58,43 @@ public function instantSave()
}
$this->emit('saved', 'Application settings updated!');
}
+ public function load_branches()
+ {
+ $this->get_git_source();
+ try {
+ ['data' => $data] = get_from_git_api($this->git_source, "/repos/{$this->git_repository}/branches");
+ $this->branches = collect($data)->pluck('name')->toArray();
+ } catch (\Throwable $th) {
+ return general_error_handler($th, $this);
+ }
+ }
+ private function get_git_source()
+ {
+ $this->repository_url_parsed = Url::fromString($this->repository_url);
+ $this->git_host = $this->repository_url_parsed->getHost();
+ $this->git_repository = $this->repository_url_parsed->getSegment(1) . '/' . $this->repository_url_parsed->getSegment(2);
+ $this->git_branch = $this->repository_url_parsed->getSegment(4) ?? 'main';
+
+ if ($this->git_host == 'github.com') {
+ $this->git_source = GithubApp::where('name', 'Public GitHub')->first();
+ } elseif ($this->git_host == 'gitlab.com') {
+ $this->git_source = GitlabApp::where('name', 'Public GitLab')->first();
+ } elseif ($this->git_host == 'bitbucket.org') {
+ // Not supported yet
+ }
+ }
public function submit()
{
try {
$this->validate();
-
- $url = Url::fromString($this->repository_url);
- $git_host = $url->getHost();
- $git_repository = $url->getSegment(1) . '/' . $url->getSegment(2);
- $git_branch = $url->getSegment(4) ?? 'main';
-
$destination_uuid = $this->query['destination'];
+ $project_uuid = $this->parameters['project_uuid'];
+ $environment_name = $this->parameters['environment_name'];
+
+ $this->get_git_source();
+ $this->git_branch = $this->selected_branch ?? $this->git_branch;
+
$destination = StandaloneDocker::where('uuid', $destination_uuid)->first();
if (!$destination) {
$destination = SwarmDocker::where('uuid', $destination_uuid)->first();
@@ -73,29 +104,24 @@ public function submit()
}
$destination_class = $destination->getMorphClass();
- $project = Project::where('uuid', $this->parameters['project_uuid'])->first();
- $environment = $project->load(['environments'])->environments->where('name', $this->parameters['environment_name'])->first();
+ $project = Project::where('uuid', $project_uuid)->first();
+ $environment = $project->load(['environments'])->environments->where('name', $environment_name)->first();
$application_init = [
- 'name' => generate_application_name($git_repository, $git_branch),
- 'git_repository' => $git_repository,
- 'git_branch' => $git_branch,
+ 'name' => generate_application_name($this->git_repository, $this->git_branch),
+ 'git_repository' => $this->git_repository,
+ 'git_branch' => $this->git_branch,
'build_pack' => 'nixpacks',
'ports_exposes' => $this->port,
'publish_directory' => $this->publish_directory,
'environment_id' => $environment->id,
'destination_id' => $destination->id,
'destination_type' => $destination_class,
+ 'source_id' => $this->git_source->id,
+ 'source_type' => $this->git_source->getMorphClass()
];
- if ($git_host == 'github.com') {
- $application_init['source_id'] = GithubApp::where('name', 'Public GitHub')->first()->id;
- $application_init['source_type'] = GithubApp::class;
- } elseif ($git_host == 'gitlab.com') {
- $application_init['source_id'] = GitlabApp::where('name', 'Public GitLab')->first()->id;
- $application_init['source_type'] = GitlabApp::class;
- } elseif ($git_host == 'bitbucket.org') {
- }
+
$application = Application::create($application_init);
$application->settings->is_static = $this->is_static;
$application->settings->save();
@@ -106,7 +132,7 @@ public function submit()
'application_uuid' => $application->uuid,
]);
} catch (\Exception $e) {
- return general_error_handler($e);
+ return general_error_handler($e, $this);
}
}
}
diff --git a/app/Jobs/ApplicationDeploymentJob.php b/app/Jobs/ApplicationDeploymentJob.php
index 296f5237b..45dd0dcea 100644
--- a/app/Jobs/ApplicationDeploymentJob.php
+++ b/app/Jobs/ApplicationDeploymentJob.php
@@ -63,7 +63,7 @@ public function __construct(
$this->application = Application::find($this->application_id);
- if ($this->pull_request_id) {
+ if ($this->pull_request_id !== 0) {
$this->preview = ApplicationPreview::findPreviewByApplicationAndPullId($this->application->id, $this->pull_request_id);
}
@@ -97,7 +97,7 @@ public function handle(): void
}
$this->workdir = "/artifacts/{$this->deployment_uuid}";
- if ($this->pull_request_id) {
+ if ($this->pull_request_id !== 0) {
ray('Deploying pull/' . $this->pull_request_id . '/head for application: ' . $this->application->name);
$this->deploy_pull_request();
} else {
@@ -177,7 +177,7 @@ private function build_image()
"echo -n 'Building image... '",
]);
- if ($this->application->settings->is_static) {
+ if ($this->application->settings->is_static && isset($this->application->build_command)) {
$this->execute_now([
$this->execute_in_builder("docker build -f {$this->workdir}/Dockerfile {$this->build_args} --progress plain -t { $this->build_image_name {$this->workdir}"),
], isDebuggable: true);
@@ -292,9 +292,17 @@ private function execute_in_builder(string $command)
private function generate_environment_variables($ports)
{
$environment_variables = collect();
-
- foreach ($this->application->runtime_environment_variables as $env) {
- $environment_variables->push("$env->key=$env->value");
+ ray('Generate Environment Variables');
+ if ($this->pull_request_id === 0) {
+ ray($this->application->runtime_environment_variables);
+ foreach ($this->application->runtime_environment_variables as $env) {
+ $environment_variables->push("$env->key=$env->value");
+ }
+ } else {
+ ray($this->application->runtime_environment_variables_preview);
+ foreach ($this->application->runtime_environment_variables_preview as $env) {
+ $environment_variables->push("$env->key=$env->value");
+ }
}
// Add PORT if not exists, use the first port as default
if ($environment_variables->filter(fn ($env) => Str::of($env)->contains('PORT'))->isEmpty()) {
@@ -305,17 +313,31 @@ private function generate_environment_variables($ports)
private function generate_env_variables()
{
$this->env_args = collect([]);
- foreach ($this->application->nixpacks_environment_variables as $env) {
- $this->env_args->push("--env {$env->key}={$env->value}");
+ if ($this->pull_request_id === 0) {
+ foreach ($this->application->nixpacks_environment_variables as $env) {
+ $this->env_args->push("--env {$env->key}={$env->value}");
+ }
+ } else {
+ foreach ($this->application->nixpacks_environment_variables_preview as $env) {
+ $this->env_args->push("--env {$env->key}={$env->value}");
+ }
}
+
$this->env_args = $this->env_args->implode(' ');
}
private function generate_build_env_variables()
{
$this->build_args = collect(["--build-arg SOURCE_COMMIT={$this->git_commit}"]);
- foreach ($this->application->build_environment_variables as $env) {
- $this->build_args->push("--build-arg {$env->key}={$env->value}");
+ if ($this->pull_request_id === 0) {
+ foreach ($this->application->build_environment_variables as $env) {
+ $this->build_args->push("--build-arg {$env->key}={$env->value}");
+ }
+ } else {
+ foreach ($this->application->build_environment_variables_preview as $env) {
+ $this->build_args->push("--build-arg {$env->key}={$env->value}");
+ }
}
+
$this->build_args = $this->build_args->implode(' ');
}
private function add_build_env_variables_to_dockerfile()
@@ -336,15 +358,11 @@ private function add_build_env_variables_to_dockerfile()
private function generate_docker_compose()
{
$ports = $this->application->settings->is_static ? [80] : $this->application->ports_exposes_array;
- if ($this->pull_request_id) {
- $persistent_storages = [];
- $volume_names = [];
- $environment_variables = [];
- } else {
- $persistent_storages = $this->generate_local_persistent_volumes();
- $volume_names = $this->generate_local_persistent_volumes_only_volume_names();
- $environment_variables = $this->generate_environment_variables($ports);
- }
+
+ $persistent_storages = $this->generate_local_persistent_volumes();
+ $volume_names = $this->generate_local_persistent_volumes_only_volume_names();
+ $environment_variables = $this->generate_environment_variables($ports);
+
$docker_compose = [
'version' => '3.8',
'services' => [
@@ -385,7 +403,7 @@ private function generate_docker_compose()
]
]
];
- if (count($this->application->ports_mappings_array) > 0 && !$this->pull_request_id) {
+ if (count($this->application->ports_mappings_array) > 0 && $this->pull_request_id === 0) {
$docker_compose['services'][$this->container_name]['ports'] = $this->application->ports_mappings_array;
}
if (count($persistent_storages) > 0) {
@@ -400,8 +418,12 @@ private function generate_local_persistent_volumes()
{
foreach ($this->application->persistentStorages as $persistentStorage) {
$volume_name = $persistentStorage->host_path ?? $persistentStorage->name;
+ if ($this->pull_request_id !== 0) {
+ $volume_name = $volume_name . '-pr-' . $this->pull_request_id;
+ }
$local_persistent_volumes[] = $volume_name . ':' . $persistentStorage->mount_path;
}
+ ray('local_persistent_volumes', $local_persistent_volumes);
return $local_persistent_volumes ?? [];
}
@@ -411,8 +433,14 @@ private function generate_local_persistent_volumes_only_volume_names()
if ($persistentStorage->host_path) {
continue;
}
- $local_persistent_volumes_names[$persistentStorage->name] = [
- 'name' => $persistentStorage->name,
+ $name = $persistentStorage->name;
+
+ if ($this->pull_request_id !== 0) {
+ $name = $name . '-pr-' . $this->pull_request_id;
+ }
+
+ $local_persistent_volumes_names[$name] = [
+ 'name' => $name,
'external' => false,
];
}
@@ -443,11 +471,11 @@ private function set_labels_for_applications()
$labels[] = 'coolify.applicationId=' . $this->application->id;
$labels[] = 'coolify.type=application';
$labels[] = 'coolify.name=' . $this->application->name;
- if ($this->pull_request_id) {
+ if ($this->pull_request_id !== 0) {
$labels[] = 'coolify.pullRequestId=' . $this->pull_request_id;
}
if ($this->application->fqdn) {
- if ($this->pull_request_id) {
+ if ($this->pull_request_id !== 0) {
$preview_fqdn = data_get($this->preview, 'fqdn');
$template = $this->application->preview_url_template;
$url = Url::fromString($this->application->fqdn);
@@ -566,7 +594,7 @@ private function set_git_import_settings($git_clone_command)
private function importing_git_repository()
{
$git_clone_command = "git clone -q -b {$this->application->git_branch}";
- if ($this->pull_request_id) {
+ if ($this->pull_request_id !== 0) {
$pr_branch_name = "pr-{$this->pull_request_id}-coolify";
}
@@ -583,7 +611,7 @@ private function importing_git_repository()
$commands = [$this->execute_in_builder($git_clone_command)];
- if ($this->pull_request_id) {
+ if ($this->pull_request_id !== 0) {
$commands[] = $this->execute_in_builder("cd {$this->workdir} && git fetch origin pull/{$this->pull_request_id}/head:$pr_branch_name >/dev/null 2>&1 && git checkout $pr_branch_name >/dev/null 2>&1");
}
return $commands;
@@ -592,7 +620,7 @@ private function importing_git_repository()
$commands = [
$this->execute_in_builder("git clone -q -b {$this->application->git_branch} $source_html_url_scheme://x-access-token:$github_access_token@$source_html_url_host/{$this->application->git_repository}.git {$this->workdir}")
];
- if ($this->pull_request_id) {
+ if ($this->pull_request_id !== 0) {
$commands[] = $this->execute_in_builder("cd {$this->workdir} && git fetch origin pull/{$this->pull_request_id}/head:$pr_branch_name && git checkout $pr_branch_name");
}
return $commands;
diff --git a/app/Models/Application.php b/app/Models/Application.php
index da41e4056..2b0fc8c36 100644
--- a/app/Models/Application.php
+++ b/app/Models/Application.php
@@ -99,21 +99,39 @@ public function portsExposesArray(): Attribute
: explode(',', $this->ports_exposes)
);
}
+ // Normal Deployments
public function environment_variables(): HasMany
{
- return $this->hasMany(EnvironmentVariable::class);
+ return $this->hasMany(EnvironmentVariable::class)->where('is_preview', false);
}
public function runtime_environment_variables(): HasMany
{
- return $this->hasMany(EnvironmentVariable::class)->where('key', 'not like', 'NIXPACKS_%');
+ return $this->hasMany(EnvironmentVariable::class)->where('is_preview', false)->where('key', 'not like', 'NIXPACKS_%');
}
public function build_environment_variables(): HasMany
{
- return $this->hasMany(EnvironmentVariable::class)->where('is_build_time', true)->where('key', 'not like', 'NIXPACKS_%');
+ return $this->hasMany(EnvironmentVariable::class)->where('is_preview', false)->where('is_build_time', true)->where('key', 'not like', 'NIXPACKS_%');
}
public function nixpacks_environment_variables(): HasMany
{
- return $this->hasMany(EnvironmentVariable::class)->where('key', 'like', 'NIXPACKS_%');
+ return $this->hasMany(EnvironmentVariable::class)->where('is_preview', false)->where('key', 'like', 'NIXPACKS_%');
+ }
+ // Preview Deployments
+ public function environment_variables_preview(): HasMany
+ {
+ return $this->hasMany(EnvironmentVariable::class)->where('is_preview', true);
+ }
+ public function runtime_environment_variables_preview(): HasMany
+ {
+ return $this->hasMany(EnvironmentVariable::class)->where('is_preview', true)->where('key', 'not like', 'NIXPACKS_%');
+ }
+ public function build_environment_variables_preview(): HasMany
+ {
+ return $this->hasMany(EnvironmentVariable::class)->where('is_preview', true)->where('is_build_time', true)->where('key', 'not like', 'NIXPACKS_%');
+ }
+ public function nixpacks_environment_variables_preview(): HasMany
+ {
+ return $this->hasMany(EnvironmentVariable::class)->where('is_preview', true)->where('key', 'like', 'NIXPACKS_%');
}
public function private_key()
{
diff --git a/app/Models/EnvironmentVariable.php b/app/Models/EnvironmentVariable.php
index 807cadb34..3847e1700 100644
--- a/app/Models/EnvironmentVariable.php
+++ b/app/Models/EnvironmentVariable.php
@@ -2,13 +2,28 @@
namespace App\Models;
+use App\Models\EnvironmentVariable as ModelsEnvironmentVariable;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;
class EnvironmentVariable extends Model
{
- protected $fillable = ['key', 'value', 'is_build_time', 'application_id'];
+ protected static function booted()
+ {
+ static::created(function ($environment_variable) {
+ if (!$environment_variable->is_preview) {
+ ModelsEnvironmentVariable::create([
+ 'key' => $environment_variable->key,
+ 'value' => $environment_variable->value,
+ 'is_build_time' => $environment_variable->is_build_time,
+ 'application_id' => $environment_variable->application_id,
+ 'is_preview' => true,
+ ]);
+ }
+ });
+ }
+ protected $fillable = ['key', 'value', 'is_build_time', 'application_id', 'is_preview'];
protected $casts = [
"key" => 'string',
'value' => 'encrypted',
diff --git a/database/migrations/2023_05_04_194548_create_environment_variables_table.php b/database/migrations/2023_05_04_194548_create_environment_variables_table.php
index 758e74227..4a03ead55 100644
--- a/database/migrations/2023_05_04_194548_create_environment_variables_table.php
+++ b/database/migrations/2023_05_04_194548_create_environment_variables_table.php
@@ -17,14 +17,15 @@ public function up(): void
$table->string('key');
$table->string('value')->nullable();
$table->boolean('is_build_time')->default(false);
+ $table->boolean('is_preview')->default(false);
$table->foreignId('application_id')->nullable();
$table->foreignId('service_id')->nullable();
$table->foreignId('database_id')->nullable();
- $table->unique(['key', 'application_id', 'is_build_time']);
- $table->unique(['key', 'service_id', 'is_build_time']);
- $table->unique(['key', 'database_id', 'is_build_time']);
+ $table->unique(['key', 'application_id', 'is_build_time', 'is_preview']);
+ $table->unique(['key', 'service_id', 'is_build_time', 'is_preview']);
+ $table->unique(['key', 'database_id', 'is_build_time', 'is_preview']);
$table->timestamps();
});
}
diff --git a/package-lock.json b/package-lock.json
index bbeb9a0bc..3c31ddffc 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7,7 +7,7 @@
"dependencies": {
"@tailwindcss/typography": "0.5.9",
"alpinejs": "3.12.2",
- "daisyui": "3.0.0",
+ "daisyui": "3.0.3",
"tailwindcss-scrollbar": "0.1.0"
},
"devDependencies": {
@@ -941,9 +941,9 @@
"dev": true
},
"node_modules/daisyui": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-3.0.0.tgz",
- "integrity": "sha512-EuNK9JQd5yrPLDynAPQkG/29vjZXFWhBK4HXvM83d9oJU0EmF35UNLLs0cslBFfLK4b+bOuhgoYPJ4BjytOxNQ==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-3.0.3.tgz",
+ "integrity": "sha512-RSbXsEBj2LonvjOKEI0I64F5xFJrFrthPgxRNeAZKmACQ3NoIoP45lO6UXLW3bm8PVOUGpKf1Br2SWwc1NqnHQ==",
"dependencies": {
"colord": "^2.9",
"css-selector-tokenizer": "^0.8",
diff --git a/package.json b/package.json
index a31243014..2884c7466 100644
--- a/package.json
+++ b/package.json
@@ -17,7 +17,7 @@
"dependencies": {
"@tailwindcss/typography": "0.5.9",
"alpinejs": "3.12.2",
- "daisyui": "3.0.0",
+ "daisyui": "3.0.3",
"tailwindcss-scrollbar": "0.1.0"
}
}
\ No newline at end of file
diff --git a/resources/css/app.css b/resources/css/app.css
index 69b7bffe0..10ca8377e 100644
--- a/resources/css/app.css
+++ b/resources/css/app.css
@@ -14,14 +14,14 @@ body {
@apply scrollbar min-h-screen bg-coolgray-100 text-neutral-400 antialiased ;
}
main {
- @apply px-32 xl:px-14 mx-auto max-w-screen-xl;
+ @apply px-32 xl:px-14 mx-auto max-w-screen-xl pt-10;
}
input[type="checkbox"] {
@apply toggle toggle-warning toggle-xs rounded;
}
input {
- @apply input input-sm placeholder:text-neutral-700 text-white rounded-none;
+ @apply input input-sm h-7 outline-none placeholder:text-neutral-700 text-white rounded-none;
}
input[type="text"],[type="number"],[type="email"],[type="password"] {
@apply read-only:opacity-40;
@@ -34,7 +34,7 @@ textarea {
@apply textarea placeholder:text-neutral-700 text-white rounded-none;
}
select {
- @apply select select-sm disabled:opacity-40 font-normal placeholder:text-neutral-700 text-white rounded-none;
+ @apply select select-sm disabled:bg-coolgray-200 border-none disabled:opacity-50 font-normal placeholder:text-neutral-700 text-white rounded-none;
}
.breadcrumbs > ul > li::before {
@apply text-warning opacity-100;
@@ -47,7 +47,7 @@ button[type="button"] {
@apply hover:bg-coolgray-400 btn h-7 btn-xs border-none bg-coolgray-200 no-animation normal-case text-white rounded;
}
button[type="submit"] {
- @apply btn btn-xs no-animation h-7 normal-case text-white btn-primary rounded;
+ @apply hover:bg-coolgray-400 btn h-7 btn-xs border-none bg-coolgray-200 no-animation normal-case text-white rounded;
}
button[isWarning] {
@apply bg-error;
diff --git a/resources/views/components/applications/navbar.blade.php b/resources/views/components/applications/navbar.blade.php
index fd6ba61e7..82615b657 100644
--- a/resources/views/components/applications/navbar.blade.php
+++ b/resources/views/components/applications/navbar.blade.php
@@ -15,23 +15,32 @@
]) }}">
-