From f60c93ee4f9362a5d1bfa14b2a6c26f604929dee Mon Sep 17 00:00:00 2001 From: Eugene Burmakin Date: Wed, 22 Jan 2025 12:17:26 +0100 Subject: [PATCH] Fix a bug where rc version was being checked as a stable release --- CHANGELOG.md | 1 + app/services/check_app_version.rb | 5 ++++- spec/services/check_app_version_spec.rb | 9 +++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a4e1952e..31b55115 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Fix authentication to `GET /api/v1/countries/visited_cities` with header `Authorization: Bearer YOUR_API_KEY` instead of `api_key` query param. #679 - Fix a bug where a gpx file with empty tracks was not being imported. #646 +- Fix a bug where rc version was being checked as a stable release. #711 # 0.23.3 - 2025-01-21 diff --git a/app/services/check_app_version.rb b/app/services/check_app_version.rb index 3ae5ed76..bb2fd449 100644 --- a/app/services/check_app_version.rb +++ b/app/services/check_app_version.rb @@ -17,7 +17,10 @@ class CheckAppVersion def latest_version Rails.cache.fetch(VERSION_CACHE_KEY, expires_in: 6.hours) do - JSON.parse(Net::HTTP.get(URI.parse(@repo_url)))[0]['name'] + versions = JSON.parse(Net::HTTP.get(URI.parse(@repo_url))) + # Find first version that contains only numbers and dots + release_version = versions.find { |v| v['name'].match?(/^\d+\.\d+\.\d+$/) } + release_version ? release_version['name'] : APP_VERSION end end end diff --git a/spec/services/check_app_version_spec.rb b/spec/services/check_app_version_spec.rb index b58cc2e5..1e90b3af 100644 --- a/spec/services/check_app_version_spec.rb +++ b/spec/services/check_app_version_spec.rb @@ -29,6 +29,15 @@ RSpec.describe CheckAppVersion do it { is_expected.to be true } end + context 'when latest version is not a stable release' do + before do + stub_request(:any, 'https://api.github.com/repos/Freika/dawarich/tags') + .to_return(status: 200, body: '[{"name": "1.0.0-rc.1"}]', headers: {}) + end + + it { is_expected.to be false } + end + context 'when request fails' do before do allow(Net::HTTP).to receive(:get).and_raise(StandardError)