You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
3.1 KiB

# encoding: utf-8
require 'bundler/gem_tasks'
begin
Bundler.setup(:default, :development)
rescue Bundler::BundlerError => e
$stderr.puts e.message
$stderr.puts "Run `bundle install` to install missing gems"
exit e.status_code
end
require 'rake'
require File.expand_path('../lib/algolia/version', __FILE__)
require 'rake/testtask'
Rake::TestTask.new(:test) do |test|
test.libs << 'lib' << 'test'
test.pattern = 'test/**/test_*.rb'
test.verbose = true
end
require 'rdoc/task'
Rake::RDocTask.new do |rdoc|
version = Algolia::VERSION
rdoc.rdoc_dir = 'rdoc'
rdoc.title = "algoliasearch #{version}"
rdoc.rdoc_files.include('README*')
rdoc.rdoc_files.include('lib/**/*.rb')
end
require 'rspec/core/rake_task'
RSpec::Core::RakeTask.new(:spec)
task :default => :spec
namespace :algolia do
GEM_VERSION_FILE = File.expand_path('../lib/algolia/version.rb', __FILE__)
GIT_TAG_URL = 'https://github.com/algolia/algoliasearch-client-ruby/releases/tag/'
def last_commit_date
`git log -1 --date=short --format=%cd`.chomp
end
def latest_tag
`git describe --tags --abbrev=0`.chomp
end
def changelog(git_start = latest_tag(), git_end = 'HEAD', format = '%s')
`git log --no-decorate --no-merges --pretty=format:#{format} #{git_start}..#{git_end}`
end
desc 'Write latest changes to CHANGELOG.md'
task :changelog, [:version] do |t, args|
# Filters-out commits containing some keywords and adds header
exceptions_regexp = Regexp.union(['README'])
title = "## [%s](%s%s) (%s)\n\n" % [args[:version], GIT_TAG_URL, args[:version], last_commit_date]
changes = changelog.each_line
.map { |line| (exceptions_regexp === line) ? nil : "* #{line.capitalize}" }
.unshift(title)
.append("\n\n")
.join
puts changes
puts "\n\e[31mDo you want to update the CHANGELOG.md with the text above? [y/N]\e[0m"
exit if STDIN.gets.chomp.downcase != 'y'
# Rewrite CHANGELOG.md
old_changes = File.readlines('CHANGELOG.md', 'r').join
File.open('CHANGELOG.md', 'w') { |file| file.write(changes, old_changes) }
puts 'CHANGELOG.md successfully updated'
end
desc 'Bump gem version'
task :semver, [:version] do |t, args|
File.open(GEM_VERSION_FILE, 'w') do |file|
file.write <<~SEMVER
module Algolia
VERSION = "#{args[:version]}"
end
SEMVER
end
# This force to reload the file with the newest version.
# Hence, `gemspec.version` invoked by Bundler later on will be correct.
load GEM_VERSION_FILE
puts "Bumped gem version from #{latest_tag} to #{args[:version]}"
end
desc 'Release a new version of this gem'
task :release, [:version] => [:changelog, :semver] do |t, args|
`git add #{File.expand_path('../lib/algolia/version.rb', __FILE__)} CHANGELOG.md`
`git commit -m "Bump to version #{args[:version]}"`
# Invoke Bundler :release task
# https://github.com/bundler/bundler/blob/master/lib/bundler/gem_helper.rb
#
Rake::Task[:release].invoke
end
end
module Bundler
class GemHelper
def version_tag
"#{version}"
end
end
end