mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-08-02 20:15:22 +02:00
Add zero-config self hosting on Render (#612)
* v1 of backend implementation for self hosting * Add docs * Add upgrades controller * Add global helpers for self hosting mode * Add self host settings controller * Conditionally show self hosting settings * Environment and config updates * Complete upgrade prompting flow * Update config for forked repo * Move configuration of github provider within class * Add upgrades cron * Update deploy button * Update guides * Fix render deployer * Typo * Enable auto upgrades * Fix cron * Make upgrade modes more clear and consistent * Trigger new available version * Fix logic for displaying upgrade prompts * Finish implementation * Fix regression * Trigger new version * Add i18n translations * trigger new version * reduce caching time for testing * Decrease cache for testing * trigger upgrade * trigger upgrade * Only trigger deploy once * trigger upgrade * If target is commit, always upgrade if any upgrade is available * trigger upgrade * trigger upgrade * Test release * Change back to maybe repo for defaults * Fix lint errors * Clearer naming * Fix relative link * Add abs path * Relative link * Update docs
This commit is contained in:
parent
2bbf120e2f
commit
5aca2ff9b6
53 changed files with 1356 additions and 111 deletions
|
@ -40,7 +40,13 @@
|
|||
class="hidden absolute min-w-[200px] z-10 top-10 right-0 bg-white p-1 rounded-sm shadow-xs border border-alpha-black-25 w-fit">
|
||||
<%= link_to edit_settings_path, class: "flex gap-1 items-center hover:bg-gray-50 rounded-md p-2" do %>
|
||||
<%= lucide_icon("pencil-line", class: "w-5 h-5 text-gray-500 shrink-0") %>
|
||||
<span class="text-gray-900 text-sm">Settings</span>
|
||||
<span class="text-gray-900 text-sm">General Settings</span>
|
||||
<% end %>
|
||||
<% if self_hosted? %>
|
||||
<%= link_to edit_settings_self_hosting_path, class: "flex gap-1 items-center hover:bg-gray-50 rounded-md p-2" do %>
|
||||
<%= lucide_icon("pencil-line", class: "w-5 h-5 text-gray-500 shrink-0") %>
|
||||
<span class="text-gray-900 text-sm">Self Host Settings</span>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<%= button_to session_path, method: :delete, class: "w-full text-gray-900 flex gap-1 items-center hover:bg-gray-50 rounded-md p-2" do %>
|
||||
<%= lucide_icon("log-out", class: "w-5 h-5 shrink-0") %>
|
||||
|
@ -86,5 +92,6 @@
|
|||
</div>
|
||||
<%= turbo_frame_tag "modal" %>
|
||||
<%= render "shared/custom_confirm_modal" %>
|
||||
<%= render "shared/upgrade_notification" %>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -1,19 +1,13 @@
|
|||
<%
|
||||
header_title t(".title")
|
||||
%>
|
||||
|
||||
<%= form_with model: @user, url: registration_path do |form| %>
|
||||
<%= auth_messages form %>
|
||||
|
||||
<%= form.email_field :email, autofocus: false, autocomplete: "email", required: "required", placeholder: "you@example.com", label: true %>
|
||||
|
||||
<%= form.password_field :password, autocomplete: "new-password", required: "required", label: true %>
|
||||
|
||||
<%= form.password_field :password_confirmation, autocomplete: "new-password", required: "required", label: true %>
|
||||
|
||||
<% if hosted_app? %>
|
||||
<% if invite_code_required? %>
|
||||
<%= form.password_field :invite_code, required: "required", label: true %>
|
||||
<% end %>
|
||||
|
||||
<%= form.submit %>
|
||||
<% end %>
|
||||
|
|
40
app/views/settings/self_hosting/edit.html.erb
Normal file
40
app/views/settings/self_hosting/edit.html.erb
Normal file
|
@ -0,0 +1,40 @@
|
|||
<div class="space-y-4">
|
||||
<h1 class="text-3xl font-semibold font-display">Edit Self Hosting Settings</h1>
|
||||
<hr>
|
||||
<%= form_with model: Setting.new, url: settings_self_hosting_path, method: :patch, local: true, html: { class: "space-y-4" } do |form| %>
|
||||
<section class="space-y-3">
|
||||
<h2 class="text-2xl font-semibold">Render Deploy Hook</h2>
|
||||
<p class="text-gray-500">You must fill this in so your app can trigger upgrades when Maybe releases upgrades. Learn more about deploy hooks and how they work in the <%= link_to "Render documentation", "https://docs.render.com/docs/deploy-hooks", target: "_blank", rel: "noopener noreferrer", class: "text-blue-500 hover:underline" %>.</p>
|
||||
<%= form.text_field :render_deploy_hook, label: "Render Deploy Hook", placeholder: "https://api.render.com/deploy/srv-xyz...", value: Setting.render_deploy_hook %>
|
||||
</section>
|
||||
<section class="space-y-3">
|
||||
<h2 class="text-2xl font-semibold">Auto Upgrades Setting</h2>
|
||||
<p class="text-gray-500">This setting controls how often your self hosted app will update and what method it uses to do so.</p>
|
||||
<div class="space-y-2">
|
||||
<div class="flex items-center gap-2">
|
||||
<%= form.check_box :upgrades_mode, { checked: Setting.upgrades_mode == "auto", unchecked_value: "manual" }, "auto", "manual" %>
|
||||
<%= form.label :upgrades_mode, "Enable auto upgrades", class: "text-gray-900" %>
|
||||
</div>
|
||||
<% if Setting.upgrades_mode == "auto" %>
|
||||
<div class="flex items-center gap-2">
|
||||
<%= form.radio_button :upgrades_target, "release", checked: Setting.upgrades_target == "release" %>
|
||||
<%= form.label :upgrades_target_release, class: Setting.upgrades_target == "release" ? "text-gray-900" : "text-gray-500" do %>
|
||||
<span class="font-semibold">Latest Release (suggested)</span> - you will automatically be upgraded to the latest stable release of Maybe
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="flex items-center gap-2">
|
||||
<%= form.radio_button :upgrades_target, "commit", checked: Setting.upgrades_target == "commit" %>
|
||||
<%= form.label :upgrades_target_commit, class: Setting.upgrades_target == "commit" ? "text-gray-900" : "text-gray-500" do %>
|
||||
<span class="font-semibold">Latest Commit</span> - you will automatically be upgraded any time the Maybe repo is updated
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
</section>
|
||||
<div class="fixed right-5 bottom-5">
|
||||
<button type="submit" class="flex items-center justify-center w-12 h-12 mb-2 bg-black rounded-full shrink-0 grow-0 hover:bg-gray-600">
|
||||
<%= inline_svg_tag("icn-check.svg", class: "text-white fill-current") %>
|
||||
</button>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
19
app/views/shared/_upgrade_notification.html.erb
Normal file
19
app/views/shared/_upgrade_notification.html.erb
Normal file
|
@ -0,0 +1,19 @@
|
|||
<% if upgrade_notification %>
|
||||
<% upgrade = upgrade_notification %>
|
||||
<div class="bg-white space-y-4 text-right fixed bottom-10 right-10 p-5 border border-alpha-black-200 shadow-xs rounded-md z-50 max-w-[350px]">
|
||||
<div>
|
||||
<p><%= link_to upgrade.to_s, upgrade.url, class: "text-sm text-blue-500 underline hover:text-blue-700", target: "_blank" %></p>
|
||||
<% if upgrade.complete? %>
|
||||
<p class="text-gray-900"><%= t(".app_upgraded", version: upgrade.to_s) %></p>
|
||||
<% else %>
|
||||
<p class="text-gray-900"><%= t(".new_version_available") %></p>
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="flex justify-end items-center gap-2">
|
||||
<%= button_to t(".dismiss"), acknowledge_upgrade_path(upgrade.commit_sha), method: :post, class: "#{upgrade.complete? ? 'bg-gray-900 text-white' : 'bg-gray-100 text-gray-900'} text-sm font-bold p-2 rounded-lg" %>
|
||||
<% if upgrade.available? %>
|
||||
<%= button_to t(".upgrade_now"), deploy_upgrade_path(upgrade.commit_sha), method: :post, class: "bg-gray-900 hover:bg-gray-700 text-white font-medium text-sm p-2 rounded-lg" %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
Loading…
Add table
Add a link
Reference in a new issue