123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- desc "Runs the specs [EMPTY]"
- task :spec do
- # Provide your own implementation
- end
- task :version do
- git_remotes = `git remote`.strip.split("\n")
- if git_remotes.count > 0
- puts "-- fetching version number from github"
- sh 'git fetch'
- remote_version = remote_spec_version
- end
- if remote_version.nil?
- puts "There is no current released version. You're about to release a new Pod."
- version = "0.0.1"
- else
- puts "The current released version of your pod is " +
- remote_spec_version.to_s()
- version = suggested_version_number
- end
- puts "Enter the version you want to release (" + version + ") "
- new_version_number = $stdin.gets.strip
- if new_version_number == ""
- new_version_number = version
- end
- replace_version_number(new_version_number)
- end
- desc "Release a new version of the Pod (append repo=name to push to a private spec repo)"
- task :release do
- # Allow override of spec repo name using `repo=private` after task name
- repo = ENV["repo"] || "master"
- puts "* Running version"
- sh "rake version"
- unless ENV['SKIP_CHECKS']
- if `git symbolic-ref HEAD 2>/dev/null`.strip.split('/').last != 'master'
- $stderr.puts "[!] You need to be on the `master' branch in order to be able to do a release."
- exit 1
- end
- if `git tag`.strip.split("\n").include?(spec_version)
- $stderr.puts "[!] A tag for version `#{spec_version}' already exists. Change the version in the podspec"
- exit 1
- end
- puts "You are about to release `#{spec_version}`, is that correct? [y/n]"
- exit if $stdin.gets.strip.downcase != 'y'
- end
- puts "* Running specs"
- sh "rake spec"
- puts "* Linting the podspec"
- sh "pod lib lint"
- # Then release
- sh "git commit #{podspec_path} CHANGELOG.md VERSION -m 'Release #{spec_version}' --allow-empty"
- sh "git tag -a #{spec_version} -m 'Release #{spec_version}'"
- sh "git push origin master"
- sh "git push origin --tags"
- if repo == "master"
- sh "pod trunk push #{podspec_path}"
- else
- sh "pod repo push #{repo} #{podspec_path}"
- end
- end
- # @return [Pod::Version] The version as reported by the Podspec.
- #
- def spec_version
- require 'cocoapods'
- spec = Pod::Specification.from_file(podspec_path)
- spec.version
- end
- # @return [Pod::Version] The version as reported by the Podspec from remote.
- #
- def remote_spec_version
- require 'cocoapods-core'
- if spec_file_exist_on_remote?
- remote_spec = eval(`git show origin/master:#{podspec_path}`)
- remote_spec.version
- else
- nil
- end
- end
- # @return [Bool] If the remote repository has a copy of the podpesc file or not.
- #
- def spec_file_exist_on_remote?
- test_condition = `if git rev-parse --verify --quiet origin/master:#{podspec_path} >/dev/null;
- then
- echo 'true'
- else
- echo 'false'
- fi`
- 'true' == test_condition.strip
- end
- # @return [String] The relative path of the Podspec.
- #
- def podspec_path
- podspecs = Dir.glob('*.podspec')
- if podspecs.count == 1
- podspecs.first
- else
- raise "Could not select a podspec"
- end
- end
- # @return [String] The suggested version number based on the local and remote
- # version numbers.
- #
- def suggested_version_number
- if spec_version != remote_spec_version
- spec_version.to_s()
- else
- next_version(spec_version).to_s()
- end
- end
- # @param [Pod::Version] version
- # the version for which you need the next version
- #
- # @note It is computed by bumping the last component of
- # the version string by 1.
- #
- # @return [Pod::Version] The version that comes next after
- # the version supplied.
- #
- def next_version(version)
- version_components = version.to_s().split(".");
- last = (version_components.last.to_i() + 1).to_s
- version_components[-1] = last
- Pod::Version.new(version_components.join("."))
- end
- # @param [String] new_version_number
- # the new version number
- #
- # @note This methods replaces the version number in the podspec file
- # with a new version number.
- #
- # @return void
- #
- def replace_version_number(new_version_number)
- File.open('VERSION', "w") { |file| file.puts new_version_number }
- end
|