Commit graph

13161 commits

Author SHA1 Message Date
Andras Bacsai
9d672c1583 chore: add category field to siyuan.yaml 2025-10-24 13:24:48 +02:00
Andras Bacsai
3db792b756
Merge branch 'v4.x' into next 2025-10-24 13:23:29 +02:00
Andras Bacsai
0138d3b965
Merge pull request #6975 from coollabsio/fix-cron-validation-errors
Fix stale lock issue causing scheduled tasks to stop (#4539)
2025-10-24 13:22:42 +02:00
Andras Bacsai
9f87d499dd
Update app/Console/Commands/CleanupRedis.php
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-24 13:20:24 +02:00
Andras Bacsai
340006db75
Merge pull request #6983 from coollabsio/andrasbacsai/fix-dark-mode-flicker
Fix dark mode white screen flicker on page transitions
2025-10-24 13:18:39 +02:00
Andras Bacsai
6c9b2bfb35
Merge pull request #6990 from coollabsio/andrasbacsai/fix-auto-check-icon
Fix loading icon showing during automatic status checks
2025-10-24 13:17:34 +02:00
Andras Bacsai
9d0d8c6729 Fix loading icon showing during automatic status checks
The loading icon was appearing during automatic background status checks
(every 10 seconds) even when users didn't click anything, which caused
confusion and made it seem like something was running unexpectedly.

Changes:
- Added manualCheckStatus() method to Application, Database, and Service
  Heading components that wraps the checkStatus() call
- Updated status component buttons to call manualCheckStatus() instead
  of checkStatus()
- Added wire:target="manualCheckStatus" to loading directives so the
  loading icon only appears when users explicitly click the refresh button
- Added delay.shortest to prevent flickering on fast operations

The automatic wire:poll.10000ms="checkStatus" now runs silently in the
background without showing the loading icon, while manual refreshes
still provide visual feedback to the user.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-24 12:58:52 +02:00
Andras Bacsai
bfa40214ce
Merge pull request #6985 from coollabsio/filter-services-by-category
feat: add category filter dropdown to service selection
2025-10-23 21:07:13 +02:00
Andras Bacsai
4ef0a50e09 feat: add category filter dropdown to service selection
Add a searchable category dropdown filter on the new resource page to help users filter services by category.

Features:
- Category dropdown positioned next to search input
- Auto-focus on search field when dropdown opens
- Case-insensitive category filtering
- Proper acronym formatting (AI, API, CI, etc. displayed in uppercase)
- Loading/disabled state while categories are being fetched
- Category search/filter within dropdown
- Alphabetical sorting (case-insensitive)

Backend changes:
- Extract unique categories from service templates
- Handle comma-separated categories
- Format common acronyms to uppercase
- Case-insensitive natural sorting

Frontend changes:
- Searchable dropdown component with Alpine.js
- Category filter integration with existing search
- Disabled state placeholder during loading
- Auto-focus behavior for better UX

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-23 21:02:12 +02:00
Andras Bacsai
ffd3c9136c
Merge pull request #6982 from coollabsio/andrasbacsai/fix-compose-modal-height
Fix inconsistent modal height in Edit Docker Compose dialog
2025-10-23 20:47:07 +02:00
Andras Bacsai
630fac4318 fix: eliminate dark mode white screen flicker on page transitions
- Add minimal blocking script immediately after <html> tag to apply dark class before any rendering
- Move theme detection from body to run before <head> parsing
- Add color-scheme meta tag for browser-level dark mode support
- Update theme-color meta tag dynamically based on theme
- Improve queryTheme() logic in settings dropdown for consistent behavior
- Remove duplicate theme detection code from body script

This eliminates the white "flashbang" effect that occurs during Livewire page
navigation, especially noticeable for users with high latency connections.

The solution uses an ultra-minimal (~100 bytes) script that runs before <head>
parsing, preventing FOUC while maintaining optimal performance (~0.1ms impact).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-23 20:46:58 +02:00
Andras Bacsai
f4b5244126
Merge pull request #6981 from coollabsio/andrasbacsai/docker-compose-corruption
Fix: Preserve clean docker_compose_raw without Coolify additions
2025-10-23 19:24:05 +02:00
Andras Bacsai
ecada60c78 Fix inconsistent modal height in Edit Docker Compose dialog
The modal height was changing when switching between "Source Compose"
and "Deployable Compose" views due to different heights between the
Monaco editor and regular textareas.

Changes:
- Set fixed height (512px) for Monaco editor via CSS
- Increased textarea rows to 25 to match Monaco editor height
- Wrapped both views in a container with consistent styling
- Modal now maintains same height regardless of view

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-23 19:18:50 +02:00
Andras Bacsai
5b9146d8df Fix: Preserve clean docker_compose_raw without Coolify additions
The previous fix (a956e11b3) incorrectly set docker_compose_raw to the
fully processed compose file, which included all Coolify additions like
labels, environment variables, networks, and modified container names.

This broke the separation between user input (docker_compose_raw) and
Coolify's processed output (docker_compose).

Changes:
- Store original compose at parser start before any processing
- Only remove content/isDirectory fields from original compose
- Save clean version to docker_compose_raw
- Save fully processed version to docker_compose

Now docker_compose_raw contains:
✓ Original user input with only content fields removed
✓ User's template variables ($SERVICE_FQDN_*, $SERVICE_URL_*)
✓ User's original labels and environment variables

And docker_compose contains:
✓ All Coolify additions (labels, networks, COOLIFY_* env vars)
✓ Modified container names with UUIDs
✓ Resolved template variables

Added comprehensive unit tests to verify the fix.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-23 19:07:12 +02:00
Andras Bacsai
2d3a980594
Merge pull request #6977 from coollabsio/andrasbacsai/fix-hetzner-redirect
Fix Hetzner server redirect in onboarding flow
2025-10-23 16:21:44 +02:00
Andras Bacsai
e49809d54b
Merge pull request #6978 from coollabsio/add-onboarding-to-search
feat: add onboarding guide link to global search no results state
2025-10-23 16:20:49 +02:00
Andras Bacsai
188c86ca45 Improve SSH key filtering and datalist component
- Add ownedAndOnlySShKeys() method to filter out git-related keys
- Update Boarding component to use new filtering method
- Enhance datalist component with better multi-select and single-select handling
- Fix Alpine.js reactivity and improve UI interactions

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-23 16:18:20 +02:00
Andras Bacsai
1298286832 feat: add onboarding guide link to global search no results state
Add a prominent call-to-action button linking to the onboarding guide when users don't find any search results. This helps guide new users to helpful documentation when they're searching but not finding what they need.
2025-10-23 16:17:58 +02:00
Andras Bacsai
2e71ef4f11 Fix Hetzner server redirect in onboarding flow
When creating a Hetzner server from the onboarding view, the redirect
to the server details page was not working properly due to modal context.
The standard redirect() call doesn't handle navigation from within modals.

Changes:
- Add from_onboarding flag to ByHetzner component
- Use wire:navigate redirect when in onboarding mode
- Pass from_onboarding=true from boarding view

This ensures proper navigation to the newly created server page instead
of staying on the onboarding view.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-23 16:17:01 +02:00
Andras Bacsai
2b3892beee Remove temporary documentation file 2025-10-23 10:18:31 +02:00
Andras Bacsai
c6a2d1fe0a Fix stale lock issue causing scheduled tasks to stop (#4539)
## Problem
Scheduled tasks, backups, and auto-updates stopped working after 1-2 months
with error: MaxAttemptsExceededException: App\Jobs\ScheduledJobManager has
been attempted too many times.

Root cause: ScheduledJobManager used WithoutOverlapping with only
releaseAfter(60), causing locks without expiration (TTL=-1) that persisted
indefinitely when jobs hung or processes crashed.

## Solution

### Part 1: Prevention (Future Locks)
- Added expireAfter(60) to ScheduledJobManager middleware
- Lock now auto-expires after 60 seconds (matches everyMinute schedule)
- Changed from releaseAfter(60) to expireAfter(60)->dontRelease()
- Follows Laravel best practices and matches other Coolify jobs

### Part 2: Recovery (Existing Locks)
- Enhanced cleanup:redis command with --clear-locks flag
- Scans Redis for stale locks (TTL=-1) and removes them
- Called automatically during app:init on startup/upgrade
- Provides immediate recovery for affected instances

## Changes
- app/Jobs/ScheduledJobManager.php: Added expireAfter(60)->dontRelease()
- app/Console/Commands/CleanupRedis.php: Added cleanupCacheLocks() method
- app/Console/Commands/Init.php: Auto-clear locks on startup
- tests/Unit/ScheduledJobManagerLockTest.php: Test to prevent regression
- STALE_LOCK_FIX.md: Complete documentation

## Testing
- Unit tests pass (2 tests, 8 assertions)
- Code formatted with Pint
- Matches pattern used by CleanupInstanceStuffsJob

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-23 10:07:33 +02:00
Andras Bacsai
f0fc7af78c
Merge pull request #6961 from YaRissi/fix/hetzner-deprecated
fix: deprecated hetzner servers
2025-10-22 21:42:24 +02:00
Andras Bacsai
414e762dfa
Merge pull request #6913 from yipfram/add/home-assistant
Add Home Assistant template
2025-10-22 21:41:44 +02:00
Andras Bacsai
cb4c26007d
Merge pull request #6914 from ShadowArcanist/shadow/new-service-redisinsight
feat(service): add Redis Insight
2025-10-22 21:39:15 +02:00
Andras Bacsai
acbea6db60
Merge pull request #6920 from StellarRounin/template/add-siyuan-service
feat(servide): Add siyuan template
2025-10-22 21:38:56 +02:00
Andras Bacsai
bb0f497255
Merge pull request #6924 from yipfram/yipfram/pocket-id-template
Add Pocket ID template
2025-10-22 21:38:28 +02:00
Andras Bacsai
cbddfbce15
Merge pull request #6925 from ariqpradipa/feat/sparkyfitness
feat(templates): add sparkyfitness compose template and logo
2025-10-22 21:38:13 +02:00
Andras Bacsai
8b9c26a566
Merge pull request #6930 from rosano/patch-1
Fix typo
2025-10-22 21:37:55 +02:00
Andras Bacsai
802f4647b8
Merge pull request #6953 from ShadowArcanist/patch-6
disable(service): pingvinshare
2025-10-22 21:37:00 +02:00
Andras Bacsai
a9a7c8df88
Merge pull request #6954 from ShadowArcanist/patch-7
disable(service): pingvinshare with clamav
2025-10-22 21:36:47 +02:00
Andras Bacsai
286a36420a
Merge pull request #6963 from yipfram/add/rivet-dev
Add Rivet template
2025-10-22 21:36:32 +02:00
Andras Bacsai
a02341fb55
Merge pull request #6550 from yipfram/template/metamcp
Add Metamcp app template
2025-10-22 21:36:06 +02:00
Andras Bacsai
dea8fdfb77
Merge pull request #6970 from coollabsio/andrasbacsai/readonly-compose-files
Fix: Remove content from docker_compose_raw to prevent file overwrites
2025-10-22 21:00:26 +02:00
Andras Bacsai
a956e11b3e Fix: Remove content from docker_compose_raw to prevent file overwrites
When users define volumes with content: in compose files, the content
was being removed from docker_compose but not docker_compose_raw.
This caused files to be overwritten on every deployment/save when
users edited the compose file.

Now both docker_compose and docker_compose_raw are updated with the
cleaned version (without content:), allowing users to freely edit
files in the persistent storage view without them being overwritten.

The content: field now acts as an initial value only - it creates
the file on first deployment, then is removed so users have full
control over file contents.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-22 17:09:36 +02:00
Andras Bacsai
b0026b3be8
Merge pull request #6967 from coollabsio/healthcheck-removal-fix
Fix healthcheck removal detection
2025-10-22 16:12:45 +02:00
Romain ROCHAS
f2510684c2
Update templates/compose/rivet-engine.yaml
Co-authored-by: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com>
2025-10-22 16:07:42 +02:00
Andras Bacsai
e8851ff5cd Update healthcheck commands for MinIO services across multiple YAML files 2025-10-22 16:05:17 +02:00
Andras Bacsai
c9ca702edf
Merge pull request #6965 from ShadowArcanist/shadow/replace-minio
Replace vulnerable minio docker images with Coollabs Minio
2025-10-22 16:02:45 +02:00
Andras Bacsai
8a4de87986
Merge pull request #6966 from ShadowArcanist/patch-8
feat(service): Add MinIO community edition
2025-10-22 13:17:19 +02:00
Andras Bacsai
587517394b Changes auto-committed by Conductor 2025-10-22 13:03:17 +02:00
Andras Bacsai
466772f61a Changes auto-committed by Conductor 2025-10-22 12:41:17 +02:00
Romain ROCHAS
439ecc277d
Merge branch 'next' into add/rivet-dev 2025-10-22 11:51:53 +02:00
Romain ROCHAS
e47524f5bd
Update templates/compose/rivet-engine.yaml
Co-authored-by: ShadowArcanist <162910371+ShadowArcanist@users.noreply.github.com>
2025-10-22 11:51:38 +02:00
ShadowArcanist
92390ff250 Added coollabs/minio to the SPECIFIC SERVICES lists 2025-10-22 13:18:55 +05:30
ShadowArcanist
7bd2edfacc
Added MinIO community edition one click service 2025-10-22 13:06:04 +05:30
ShadowArcanist
13759b7104 Added coollabs minio to the SPECIFIC_SERVICES constants 2025-10-22 12:51:52 +05:30
ShadowArcanist
bad2c139c2 Replace minio with coollabs minio on ente photos with s3 service template 2025-10-22 12:41:45 +05:30
ShadowArcanist
3e76bdd59e Replace minio with coollabs minio on huly service template 2025-10-22 12:39:06 +05:30
ShadowArcanist
d17ba873aa Replace minio with coollabs minio on coolify dev compose file 2025-10-22 12:36:49 +05:30
ShadowArcanist
b88a70fde5 Replace minio with coollabs minio on supabase service template 2025-10-22 12:35:24 +05:30