Sha256: ae953bb52424df64f9fe265f4247a9cd6939f8509404888b61d3aaf670f1520c

Contents?: true

Size: 1.77 KB

Versions: 1

Compression:

Stored size: 1.77 KB

Contents

# frozen_string_literal: true

require 'cocoapods'

module GoNative
  module Plugins
    module IOS
      class Release
        extend DSL::Serviceable

        GONATIVE_SOURCE_NAME = 'gonative-specs'.freeze

        def call
          Utils::UI.info 'Linting and releasing pod'
          assert_spec_exists!
          sources_manager.update(GONATIVE_SOURCE_NAME)
          assert_not_pushed!
          create_and_push_tag!
          push_to_pod_repo!
        end

        private

        def assert_spec_exists!
          return if spec_name

          raise Error, "No podspec file exists"
        end

        def assert_not_pushed!
          version = spec.version
          name = spec.name

          pushed_versions = source.versions(name)&.collect(&:to_s)

          raise Error,
                "#{name} (#{version}) has already been pushed to #{source.name}" if pushed_versions&.include? version.to_s
        end

        def create_and_push_tag!
          unless system("git tag | grep #{spec.version} > /dev/null")
            system "git add -A && git commit -m \"Releases #{spec.version}.\""
            system "git tag #{spec.version}"
            system "git push && git push --tags"
          end
        end

        def push_to_pod_repo!
          system "pod repo push #{GONATIVE_SOURCE_NAME} #{spec_name} --private --allow-warnings"
        end

        def spec_name
          @spec_name ||= Dir.entries(".").select { |s| s.end_with? ".podspec" }.first
        end

        def spec
          @spec ||= Pod::Specification.from_file(spec_name)
        end

        def source
          @source ||= sources_manager.source_with_name_or_url(GONATIVE_SOURCE_NAME)
        end

        def sources_manager
          Pod::Config.instance.sources_manager
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gonative-cli-1.2.0 lib/gonative/plugins/ios/release.rb