mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-08-04 21:15:19 +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
57
app/models/upgrader.rb
Normal file
57
app/models/upgrader.rb
Normal file
|
@ -0,0 +1,57 @@
|
|||
class Upgrader
|
||||
include Provided
|
||||
|
||||
class << self
|
||||
attr_writer :config
|
||||
|
||||
def config
|
||||
@config ||= Config.new
|
||||
end
|
||||
|
||||
def upgrade_to(commit_or_upgrade)
|
||||
upgrade = commit_or_upgrade.is_a?(String) ? find_upgrade(commit_or_upgrade) : commit_or_upgrade
|
||||
config.deployer.deploy(upgrade)
|
||||
end
|
||||
|
||||
def find_upgrade(commit)
|
||||
upgrade_candidates.find { |candidate| candidate.commit_sha == commit }
|
||||
end
|
||||
|
||||
def available_upgrade
|
||||
available_upgrades.first
|
||||
end
|
||||
|
||||
# Default to showing releases first, then commits
|
||||
def completed_upgrade
|
||||
completed_upgrades.find { |upgrade| upgrade.type == "release" } || completed_upgrades.first
|
||||
end
|
||||
|
||||
def available_upgrade_by_type(type)
|
||||
if type == "commit"
|
||||
commit_upgrade = available_upgrades.find { |upgrade| upgrade.type == "commit" }
|
||||
commit_upgrade || available_upgrades.first
|
||||
elsif type == "release"
|
||||
available_upgrades.find { |upgrade| upgrade.type == "release" }
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def available_upgrades
|
||||
upgrade_candidates.select(&:available?)
|
||||
end
|
||||
|
||||
def completed_upgrades
|
||||
upgrade_candidates.select(&:complete?)
|
||||
end
|
||||
|
||||
def upgrade_candidates
|
||||
latest_candidates = fetch_latest_upgrade_candidates_from_provider
|
||||
return [] unless latest_candidates
|
||||
|
||||
commit_candidate = Upgrade.new("commit", latest_candidates[:commit])
|
||||
release_candidate = latest_candidates[:release] && Upgrade.new("release", latest_candidates[:release])
|
||||
|
||||
[ release_candidate, commit_candidate ].compact.uniq { |candidate| candidate.commit_sha }
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue