diff --git a/config/initializers/version.rb b/config/initializers/version.rb
index 3861cc4c..f5f94125 100644
--- a/config/initializers/version.rb
+++ b/config/initializers/version.rb
@@ -1,2 +1,9 @@
-Rails.application.config.app_version = ENV.fetch("APP_VERSION", "0")
+Rails.application.config.app_version = ENV.fetch("APP_VERSION") do
+ version_file = Rails.root.join("VERSION")
+ if version_file.exist?
+ version_file.read.strip
+ else
+ `git describe --tags --always 2>/dev/null`.strip.presence || "0"
+ end
+end
Rails.application.config.git_revision = ENV["GIT_REVISION"]
diff --git a/test/helpers/version_helper_test.rb b/test/helpers/version_helper_test.rb
new file mode 100644
index 00000000..f0e55cb6
--- /dev/null
+++ b/test/helpers/version_helper_test.rb
@@ -0,0 +1,21 @@
+require "test_helper"
+
+class VersionHelperTest < ActionView::TestCase
+ def setup
+ @original_app_version = Rails.application.config.app_version
+ end
+
+ def teardown
+ Rails.application.config.app_version = @original_app_version
+ end
+
+ test "version_badge renders the app version in a span" do
+ Rails.application.config.app_version = "1.2.0"
+ assert_equal '1.2.0', version_badge
+ end
+
+ test "version_badge renders fallback zero when no version is set" do
+ Rails.application.config.app_version = "0"
+ assert_equal '0', version_badge
+ end
+end