From 7c56517c7c2f3e284b912f7519682c3612d3af81 Mon Sep 17 00:00:00 2001
From: Matt Jankowski <matt@jankowski.online>
Date: Tue, 14 Jan 2025 09:32:29 -0500
Subject: [PATCH] Move mastodon version config to `config_for` yml (#33577)

---
 config/mastodon.yml                        |  4 ++++
 lib/mastodon/version.rb                    | 16 ++++++++++++----
 spec/presenters/instance_presenter_spec.rb |  6 ++++++
 3 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/config/mastodon.yml b/config/mastodon.yml
index e20ba0ab053..a4442e873c5 100644
--- a/config/mastodon.yml
+++ b/config/mastodon.yml
@@ -2,6 +2,10 @@
 shared:
   self_destruct_value: <%= ENV.fetch('SELF_DESTRUCT', nil) %>
   software_update_url: <%= ENV.fetch('UPDATE_CHECK_URL', 'https://api.joinmastodon.org/update-check') %>
+  source:
+    base_url: <%= ENV.fetch('SOURCE_BASE_URL', nil) %>
+    repository: <%= ENV.fetch('GITHUB_REPOSITORY', 'mastodon/mastodon') %>
+    tag: <%= ENV.fetch('SOURCE_TAG', nil) %>
   version:
     metadata: <%= ENV.fetch('MASTODON_VERSION_METADATA', nil) %>
     prerelease: <%= ENV.fetch('MASTODON_VERSION_PRERELEASE', nil) %>
diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb
index ddde4a993d6..19779eb609e 100644
--- a/lib/mastodon/version.rb
+++ b/lib/mastodon/version.rb
@@ -50,16 +50,16 @@ module Mastodon
     end
 
     def repository
-      ENV.fetch('GITHUB_REPOSITORY', 'mastodon/mastodon')
+      source_configuration[:repository]
     end
 
     def source_base_url
-      ENV.fetch('SOURCE_BASE_URL', "https://github.com/#{repository}")
+      source_configuration[:base_url] || "https://github.com/#{repository}"
     end
 
     # specify git tag or commit hash here
     def source_tag
-      ENV.fetch('SOURCE_TAG', nil)
+      source_configuration[:tag]
     end
 
     def source_url
@@ -79,7 +79,15 @@ module Mastodon
     end
 
     def version_configuration
-      Rails.configuration.x.mastodon.version
+      mastodon_configuration.version
+    end
+
+    def source_configuration
+      mastodon_configuration.source
+    end
+
+    def mastodon_configuration
+      Rails.configuration.x.mastodon
     end
   end
 end
diff --git a/spec/presenters/instance_presenter_spec.rb b/spec/presenters/instance_presenter_spec.rb
index 42f5200f3af..cc6e0533bb2 100644
--- a/spec/presenters/instance_presenter_spec.rb
+++ b/spec/presenters/instance_presenter_spec.rb
@@ -68,6 +68,7 @@ RSpec.describe InstancePresenter do
     context 'with the GITHUB_REPOSITORY env variable set' do
       around do |example|
         ClimateControl.modify GITHUB_REPOSITORY: 'other/repo' do
+          reload_configuration
           example.run
         end
       end
@@ -80,6 +81,7 @@ RSpec.describe InstancePresenter do
     context 'without the GITHUB_REPOSITORY env variable set' do
       around do |example|
         ClimateControl.modify GITHUB_REPOSITORY: nil do
+          reload_configuration
           example.run
         end
       end
@@ -88,6 +90,10 @@ RSpec.describe InstancePresenter do
         expect(instance_presenter.source_url).to eq('https://github.com/mastodon/mastodon')
       end
     end
+
+    def reload_configuration
+      Rails.configuration.x.mastodon = Rails.application.config_for(:mastodon)
+    end
   end
 
   describe '#thumbnail' do