summaryrefslogtreecommitdiff
path: root/app/finders/packages/go/version_finder.rb
blob: 8500a441fb79276cbfb6db43dc1ef9dcaf04a1da (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# frozen_string_literal: true

module Packages
  module Go
    class VersionFinder
      include Gitlab::Golang

      attr_reader :mod

      def initialize(mod)
        @mod = mod
      end

      def execute
        @mod.project.repository.tags
          .filter { |tag| semver_tag? tag }
          .map    { |tag| @mod.version_by(ref: tag) }
          .filter { |ver| ver.valid? }
      end

      def find(target)
        case target
        when String
          if pseudo_version? target
            semver = parse_semver(target)
            version = parse_pseudo_version(semver)
            commit = validate_pseudo_version(@mod.project, version)
            Packages::Go::ModuleVersion.new(@mod, :pseudo, commit, name: target, semver: semver)
          else
            @mod.version_by(ref: target)
          end

        when Gitlab::Git::Ref
          @mod.version_by(ref: target)

        when ::Commit, Gitlab::Git::Commit
          @mod.version_by(commit: target)

        else
          raise ArgumentError, 'not a valid target'
        end
      end
    end
  end
end