Commit graph

15190 commits

Author SHA1 Message Date
rosslh
0aaba04396 style(branding): replace gray-50 with stone-50 and darken base to stone-800
All checks were successful
Build MapleDeploy Coolify Image / build (push) Successful in 57s
2026-04-06 14:04:20 -04:00
rosslh
870356de61 fix(sentinel): pull sentinel image from ghcr.io and fall back to latest tag 2026-04-06 14:04:19 -04:00
rosslh
349b7043af feat(branding): disable FQDN and IP fields instead of hiding/leaving editable 2026-04-06 14:03:55 -04:00
rosslh
15b4650728 fix(versioning): move version bumping to CI build time
Version was never bumped because git rebase doesn't run pre-commit
hooks. CI now appends a YYYYMMDDHHmm timestamp to the upstream base
version and injects it into the Docker image via build arg.
2026-04-06 14:03:55 -04:00
rosslh
94f45dd2db feat(branding): yellow scrollbar and hide FQDN settings field
- Change scrollbar thumb from Coolify red to MapleDeploy yellow
- Hide FQDN field from settings UI (managed during provisioning)
2026-04-06 14:03:55 -04:00
rosslh
f11a303fc5 feat(auth): notify MapleDeploy on first-user registration
After the first user registers, clears the setup token and dispatches
NotifySetupCompleteJob to POST the token to MapleDeploy's callback URL.
Adds setup_callback_url column to instance_settings.
2026-04-06 14:03:55 -04:00
rosslh
8ae1e8e29f feat(auth): gate first-user registration with setup token
Require a setup_token query parameter to access the registration page
when no users exist, preventing admin hijacking on new instances.
2026-04-06 14:03:55 -04:00
rosslh
0eb48be607 fix(dns): replace Cloudflare defaults with CIRA Canadian Shield
Replace hardcoded 1.1.1.1/1.0.0.1 (Cloudflare) DNS defaults with
CIRA Canadian Shield (149.112.121.10, 149.112.122.10) to maintain
Canadian data sovereignty for DNS resolution.
2026-04-06 14:03:55 -04:00
rosslh
115fbda24c chore(branding): remove sponsorship popup remnants 2026-04-06 14:03:55 -04:00
rosslh
17e2f7f2ab style(branding): replace Coolify purple and yellow with MapleDeploy palette
Replace #6b16ed (Coolify purple) with #d52b1e (MapleDeploy red) and
form focus states, dirty indicators, chart colors, and theme tokens.
Also fix warning color scale to use standard Tailwind yellow values.
2026-04-06 14:03:55 -04:00
rosslh
097542dd67 feat(onboarding): skip boarding wizard for new users
Customers land directly on the dashboard instead of the setup wizard,
which shows a misleading localhost vs remote server warning that
conflicts with MapleDeploy's single-VM model.
2026-04-06 14:03:55 -04:00
rosslh
07bbe7d263 style(branding): add header logo gap and use stone-900 background
Add 4px gap between logo and header elements with flex-shrink support.
Change base background from near-black (#0c0a09) to stone-900 (#1c1917)
to match the marketing site's darkest dark-mode color.
2026-04-06 14:03:55 -04:00
rosslh
4cfb9146dd fix(branding): preserve sidebar logo aspect ratio when constrained 2026-04-06 14:03:55 -04:00
rosslh
e056a2ad87 fix(branding): replace "self-hosted" subtitle on dashboard 2026-04-06 14:03:55 -04:00
rosslh
125af57d40 fix(branding): constrain sidebar logo to prevent overflow
Replace max-w-none with max-w-full so the logo respects the sidebar
container width instead of overflowing it.
2026-04-06 14:03:55 -04:00
rosslh
b8ba9da106 fix(branding): preserve sidebar logo aspect ratio, bump to 463.2
Add max-w-none to logo images to prevent Tailwind base styles from
constraining the image width within the narrow sidebar flex container.
2026-04-06 14:03:55 -04:00
rosslh
052b45ec63 chore: remove broken feedback form and all entrypoints
The feedback form relies on instance SMTP being configured, which
MapleDeploy customers won't do. Without SMTP it silently logs to
the server and shows a misleading success message. Removed the
navbar button, onboarding modal, subscription page link, API
endpoint, and all associated dead code.
2026-04-06 14:03:55 -04:00
rosslh
60bb82f360 fix(ci): recreate CDN storage zone in EU (DE) region
Storage zone was accidentally created in NY. Recreated as
'coolify-update' in DE (Falkenstein) to keep update artifacts
in EU jurisdiction, consistent with Bunny.net data sovereignty
justification. Updated storage zone name, pull zone ID, and
reverted storage endpoint to default (storage.bunnycdn.com).
2026-04-06 14:03:55 -04:00
rosslh
3968e4d03c fix(ci): use NY region storage endpoint for Bunny CDN uploads 2026-04-06 14:03:55 -04:00
rosslh
3565321391 fix(ci): use apk instead of apt-get for curl install 2026-04-06 14:03:55 -04:00
rosslh
8f7b2f4a01 fix(ci): install curl in runner for CDN uploads 2026-04-06 14:03:55 -04:00
rosslh
6c9d9e4063 feat: add update pipeline with MapleDeploy CDN and versioning
Route all Coolify update artifacts (versions.json, upgrade.sh,
compose files) through updates.mapledeploy.ca instead of upstream
cdn.coollabs.io. Extend CI to publish artifacts to Bunny CDN
storage zone and purge cache on each build.

- Point CDN_URL, versions_url, upgrade_script_url to updates.mapledeploy.ca
- Hardcode helper/realtime images to ghcr.io (not mirrored to Forgejo)
- Pass registry_url as 3rd arg to upgrade.sh for main image pulls
- Adopt versioning scheme 4.0.0-beta.X.N (bump to 4.0.0-beta.463.1)
- Add CI steps: generate versions.json, upload to Bunny, purge cache
2026-04-06 14:03:55 -04:00
rosslh
4d7561cacd feat(branding): apply MapleDeploy branding to Coolify
Replace Coolify branding with MapleDeploy throughout the UI: logos,
favicon, fonts (Overlock 900), color scheme, help links, and page
titles. Remove GitHub Actions workflows and add Forgejo CI build
workflow. Strip cloud-only features (subscription prompts, sponsor
links, server creation cloud options).
2026-04-06 14:03:55 -04:00
Andras Bacsai
914d7e0b50
v4.0.0-beta.471 (#9206) 2026-04-05 16:20:33 +02:00
Andras Bacsai
ffb5045c6a fix(backups): enforce retention and clean up stale executions
Add `WithoutOverlapping` middleware to `DatabaseBackupJob` keyed by backup ID
with timeout-based lock expiry to prevent concurrent runs.

Mark long-running backup executions as failed when they exceed the stale
time threshold, and add periodic retention enforcement in
`CleanupInstanceStuffsJob` with cache-based throttling.

Also add float casts for retention max-storage fields on
`ScheduledDatabaseBackup` and comprehensive feature tests covering
overlap middleware, stale detection, casts, and retention behavior.
2026-04-03 11:33:21 +02:00
Andras Bacsai
968508583d fix(project): handle slash branches in public repo URLs
Parse `/tree/...` URLs by first capturing the full branch candidate, then
iteratively resolving valid branch names for GitHub API lookups and deriving
the remaining path as base directory. Also adjust env var editor/input view
classes (`font-sans`, `w-full`) and add/extend feature tests for both branch
parsing and multiline toggle rendering.
2026-04-01 09:11:56 +02:00
Andras Bacsai
c1d670b1e5
fix(deployment): resolve intermittent pre-deployment command failures (#9165) 2026-03-31 16:53:31 +02:00
Andras Bacsai
2abb073b52 Merge remote-tracking branch 'origin/next' into 9076-investigate-pre-deployment 2026-03-31 16:49:43 +02:00
Andras Bacsai
83caabac17
feat(jobs): implement exponential backoff for unreachable servers (#9184) 2026-03-31 16:47:22 +02:00
Andras Bacsai
da5b003971 Merge remote-tracking branch 'origin/next' into unreachable-server-backoff 2026-03-31 16:46:22 +02:00
Andras Bacsai
bb981ed12d
build(deps): bump phpseclib/phpseclib from 3.0.49 to 3.0.50 (#9044) 2026-03-31 15:45:00 +02:00
Andras Bacsai
b7572528e7
build(deps): bump league/commonmark from 2.8.1 to 2.8.2 (#9047) 2026-03-31 15:44:43 +02:00
Andras Bacsai
7a814938a0
chore(deps): bump picomatch (#9178) 2026-03-31 15:44:18 +02:00
Andras Bacsai
6fc58a0a45
chore(deps): bump aws/aws-sdk-php from 3.371.3 to 3.374.2 (#9222) 2026-03-31 15:43:49 +02:00
Andras Bacsai
c6b00cdcc4
Merge branch 'next' into dependabot/composer/aws/aws-sdk-php-3.374.2 2026-03-31 15:43:40 +02:00
Andras Bacsai
3961077b90 feat(forms): make textarea monospace opt-in and improve multiline toggle
Add `monospace` prop to Textarea component so font-mono is no longer
applied by default. Apply it explicitly to env variable editors, private
key fields, and shared variable forms where monospace is appropriate.

Use Alpine.js x-data/x-model to make the multiline toggle reactive
without a full Livewire round-trip. Add wire:key on the input/textarea
wrappers to force proper DOM replacement when switching modes.
2026-03-31 15:37:42 +02:00
Andras Bacsai
47025c7815
feat: Shared server environment variables (#7764) 2026-03-31 15:03:48 +02:00
Andras Bacsai
acb716cb90 fix(shared-variables): support direct mount params and comment field for server variables
Allow SharedVariables Livewire components (Environment, Project, Server)
to accept UUID parameters directly via mount() instead of relying solely
on route parameters. This enables Livewire component testing without a
live route context.

Also adds comment field support when saving/updating server shared
environment variables, guards PostgreSQL-specific migration statements
from running under SQLite (test environment compatibility), and expands
the feature test suite with server shared variable scenarios including
inline comment preservation and update behaviour.
2026-03-31 14:58:01 +02:00
Andras Bacsai
466eb8504e refactor(models): extract defaultStandaloneDockerAttributes method on Server
Extract duplicated inline StandaloneDocker attribute arrays in the
Server boot lifecycle into a dedicated method, eliminating repetition
between the root-server (id=0) and normal-server paths.

Also harden the shared_environment_variables migration by wrapping
DDL statements in DB::transaction() and using DROP CONSTRAINT IF EXISTS
to make the migration safely re-runnable.

Add unit test covering the extracted method to verify uuid is always
present in bootstrap attributes.
2026-03-31 14:44:45 +02:00
Andras Bacsai
f01953d361 fix(models): add missing uuid to StandaloneDocker initialization 2026-03-31 14:41:40 +02:00
Andras Bacsai
4f6e1f7e42 style(navbar): use tracking-tight instead of tracking-wide for logo 2026-03-31 13:52:39 +02:00
Andras Bacsai
9c646b0a9e Merge remote-tracking branch 'origin/next' into pr-7764-shadow/add-shared-server-env 2026-03-31 13:51:06 +02:00
Andras Bacsai
a77e1f47d1 fix(models): replace forceCreate with forceFill+save pattern
Replaces Model::forceCreate([...]) calls with (new Model)->forceFill([...])->save()
across SettingsBackup, Server, and User models to avoid bypassing Eloquent
model event lifecycle during record creation.
2026-03-31 13:50:37 +02:00
Andras Bacsai
1a603a10ed fix(models): replace forceFill/forceCreate with fill/create and add fillable guards
Replace all uses of `forceFill`, `forceCreate`, and `forceFill` with their
non-force equivalents across models, actions, controllers, and Livewire
components. Add explicit `$fillable` arrays to all affected Eloquent models
to enforce mass assignment protection.

Add ModelFillableCreationTest and ModelFillableRegressionTest to verify that
model creation respects fillable constraints and prevent regressions.
2026-03-31 13:45:31 +02:00
Andras Bacsai
047aff1c82
feat: refresh repos on private github app (#8621) 2026-03-31 12:51:19 +02:00
Andras Bacsai
7638912fdc fix(github): reset branch state when refreshing repositories
Clear `branches` and `total_branches_count` in `loadRepositories` to avoid stale branch data after repo refreshes. Update the Livewire view to use the shared loading button pattern for refresh/load actions, and expand feature coverage for repository refresh behavior and refresh button visibility.
2026-03-31 12:50:19 +02:00
Andras Bacsai
25c0c88eb2 Merge remote-tracking branch 'origin/next' into feat/refresh-repos 2026-03-31 12:37:38 +02:00
Andras Bacsai
30751a60df fix(deployment): resolve shared env vars using main server
Use `$this->mainServer` when resolving environment variable values across
deployment env generation (runtime, buildtime, nixpacks, args, and secrets
hash) so shared server-scoped values are applied consistently.

Also add `server_id` to `SharedEnvironmentVariable::$fillable` and normalize
the Livewire Blade file newline.
2026-03-31 11:07:52 +02:00
Andras Bacsai
cb97a18a78 Merge remote-tracking branch 'origin/next' into pr-7764-shadow/add-shared-server-env 2026-03-31 10:52:31 +02:00
Andras Bacsai
2692496726 fix(database): refresh SSL/status state and harden clone writes
Handle database status updates more reliably by listening for `ServiceChecked`
and using explicit `refresh()` handlers in Livewire database components.

Also switch guarded clone/create paths to `forceFill`/`forceCreate` in helper
flows to avoid missing persisted attributes during app/service cloning.

Update log/terminal font stacks to Geist (with bundled variable fonts) and add
coverage for SSL status refresh, persistent volume UUID cloning, and log font
styling.
2026-03-31 09:29:36 +02:00