# frozen_string_literal: true require 'cocoapods' module GoNative module Plugins module IOS class Publish module Release GONATIVE_SOURCE_NAME = 'gonative-specs'.freeze def release_pod! Utils::UI.info 'Linting and releasing pod' assert_spec_exists! sources_manager.update(GONATIVE_SOURCE_NAME) assert_not_pushed! verify_lib! 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 verify_lib! raise Error, "pod lib lint failed" unless system("pod lib lint #{spec_name} --private") 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" 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 end