diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2015-06-04 16:01:13 +0000 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2015-06-04 16:01:13 +0000 |
commit | 928786559964c3fc103fa13bddd571777f97a666 (patch) | |
tree | 3bc13fa0c735cb54c58bd05b9530973d41fc96c1 | |
parent | b9219469f759f387a35bec39c3dc59477793ef1b (diff) | |
parent | 6181160504da5e43e9a15c37bdad96741b53a39c (diff) | |
download | gitlab-ce-928786559964c3fc103fa13bddd571777f97a666.tar.gz |
Merge branch 'fix-upgrader-script' into 'master'
Fix upgrader script
This is a fix for upgrader script not guessing the latest version correctly.
Upgrader now handles versions where a version part (major/minor/patch) can have multi-digit number, also ensures that the latest version is chosen from git tags by converting tag to Gitlab::VersionInfo and than selecting the latest/greatest version.
Fixes: #1476
See merge request !695
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | lib/gitlab/upgrader.rb | 11 | ||||
-rw-r--r-- | spec/lib/gitlab/upgrader_spec.rb | 15 |
3 files changed, 24 insertions, 3 deletions
diff --git a/CHANGELOG b/CHANGELOG index 9950b1c3e62..fe6b0bcee95 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -54,6 +54,7 @@ v 7.11.4 v 7.11.3 - no changes + - Fix upgrader script (Martins Polakovs) v 7.11.2 - no changes diff --git a/lib/gitlab/upgrader.rb b/lib/gitlab/upgrader.rb index 0570c2fbeb5..cf040971c6e 100644 --- a/lib/gitlab/upgrader.rb +++ b/lib/gitlab/upgrader.rb @@ -43,10 +43,15 @@ module Gitlab end def latest_version_raw + git_tags = fetch_git_tags + git_tags = git_tags.select { |version| version =~ /v\d+\.\d+\.\d+\Z/ } + git_versions = git_tags.map { |tag| Gitlab::VersionInfo.parse(tag.match(/v\d+\.\d+\.\d+/).to_s) } + "v#{git_versions.sort.last.to_s}" + end + + def fetch_git_tags remote_tags, _ = Gitlab::Popen.popen(%W(git ls-remote --tags https://gitlab.com/gitlab-org/gitlab-ce.git)) - git_tags = remote_tags.split("\n").grep(/tags\/v#{current_version.major}/) - git_tags = git_tags.select { |version| version =~ /v\d\.\d\.\d\Z/ } - last_tag = git_tags.last.match(/v\d\.\d\.\d/).to_s + remote_tags.split("\n").grep(/tags\/v#{current_version.major}/) end def update_commands diff --git a/spec/lib/gitlab/upgrader_spec.rb b/spec/lib/gitlab/upgrader_spec.rb index ce3ea6c260a..baa4bd0f28f 100644 --- a/spec/lib/gitlab/upgrader_spec.rb +++ b/spec/lib/gitlab/upgrader_spec.rb @@ -20,5 +20,20 @@ describe Gitlab::Upgrader do upgrader.stub(current_version_raw: "5.3.0") expect(upgrader.latest_version_raw).to eq("v5.4.2") end + + it 'should get the latest version from tags' do + allow(upgrader).to receive(:fetch_git_tags).and_return([ + '6f0733310546402c15d3ae6128a95052f6c8ea96 refs/tags/v7.1.1', + 'facfec4b242ce151af224e20715d58e628aa5e74 refs/tags/v7.1.1^{}', + 'f7068d99c79cf79befbd388030c051bb4b5e86d4 refs/tags/v7.10.4', + '337225a4fcfa9674e2528cb6d41c46556bba9dfa refs/tags/v7.10.4^{}', + '880e0ba0adbed95d087f61a9a17515e518fc6440 refs/tags/v7.11.1', + '6584346b604f981f00af8011cd95472b2776d912 refs/tags/v7.11.1^{}', + '43af3e65a486a9237f29f56d96c3b3da59c24ae0 refs/tags/v7.11.2', + 'dac18e7728013a77410e926a1e64225703754a2d refs/tags/v7.11.2^{}', + '0bf21fd4b46c980c26fd8c90a14b86a4d90cc950 refs/tags/v7.9.4', + 'b10de29edbaff7219547dc506cb1468ee35065c3 refs/tags/v7.9.4^{}']) + expect(upgrader.latest_version_raw).to eq("v7.11.2") + end end end |