Skip to content

Return suggested upgrade version from check_runner_upgrade_status

The following discussion from !90695 (merged) should be addressed:

  • @ayufan started a discussion: (+3 comments)

    @pedropombeiro

    I find this logic highly complex and hard to understand what and for what case we propose those resolutions. I tried to rewrite to make this logic more flat. This makes all existing specs to pass correctly.

    TBH It would help to return also a proposed version to validate what is being proposed and when.

    
          def check_runner_upgrade_status(runner_version)
            return :invalid unless runner_version
    
            releases = RunnerReleases.instance.releases
            orig_runner_version = runner_version
            runner_version = ::Gitlab::VersionInfo.parse(runner_version) unless runner_version.is_a?(::Gitlab::VersionInfo)
    
            raise ArgumentError, "'#{orig_runner_version}' is not a valid version" unless runner_version.valid?
    
            # Recommend patch update if there's a newer release in a same minor branch as runner
            releases.each do |available_release|
              if available_release.same_minor_version?(runner_version) && available_release > runner_version
                return :recommended
              end
            end
    
            # Recommend update if outside of backport window
            if outside_backport_window?(runner_version, releases)
              return :recommended
            end
    
            # Consider to update if there's a newer release within the currently deployed GitLab version
            releases.each do |available_release|
              if available_release.same_minor_version?(@gitlab_version) && available_release > runner_version
                return :available
              end
            end
    
            :not_available
          end