require 'rubygems' require 'bundler' Bundler.setup $:.unshift(File.dirname(__FILE__) + '/lib') require 'cuke4duke/version' # Make sure subprocesses use our local code. ENV['MAVEN_OPTS'] = (ENV['MAVEN_OPTS'] || '') + " -Dcuke4duke.bin=#{File.expand_path("../bin/cuke4duke", __FILE__)}" ENV['RUBYLIB'] = File.expand_path("../lib", __FILE__) class ReleaseHelper < Bundler::GemHelper def install desc "Create tag #{version_tag} and upload #{name}-#{version}.jar and #{name}-#{version}.gem" task 'release' do release_jar_and_gem end desc 'Build gem' task 'gem' do build_gem end desc 'Install gem' task 'install' do install_gem end task 'maven_release' do maven_release end desc 'Remove Maven SNAPSHOT version' task 'remove_snapshots' do remove_snapshots end desc 'Add Maven SNAPSHOT version' task 'add_snapshots' do add_snapshots end end def release_jar_and_gem guard_clean guard_already_tagged built_gem_path = build_gem tag_version { maven_release rubygem_push(built_gem_path) git_push } end def remove_snapshots system(%{find . -name 'pom.xml' -exec sed -i '' 's/-SNAPSHOT//' '{}' \\;}) end def add_snapshots if Cuke4Duke::VERSION =~ /(\d+\.\d+\.)(\d+)$/ major_minor = $1 new_patch = $2.to_i + 1 default_snapshot = "#{major_minor}#{new_patch}-SNAPSHOT" asked_snapshot = Bundler.ui.instance_variable_get('@shell').ask("What is the new SNAPSHOT version? (#{default_snapshot})", :green) snapshot = asked_snapshot.strip == "" ? default_snapshot : snapshot system(%{find . -name 'pom.xml' -exec sed -i '' 's/#{Cuke4Duke::VERSION}/#{snapshot}/' '{}' \\;}) else raise "You're already at a -SNAPSHOT version: #{Cuke4Duke::VERSION}" end end def maven_release # We have to run this in 2 separate mvn invocations to avoid: # # Unable to configure Wagon: 'scp' # Embedded error: While configuring wagon for 'cukes': Unable to apply wagon configuration. # Cannot find setter nor field in org.apache.maven.wagon.providers.ssh.jsch.ScpWagon for 'httpHeaders' Dir.chdir('cuke4duke') do sh %{MAVEN_OPTS="-Xmx512m" mvn site:site} sh %{mvn site:deploy} end sh %{mvn deploy} end end ReleaseHelper.install_tasks task :default => :build_all task :build_all => :i18n_generate do Dir['lib/*.jar'].each{|jar| FileUtils.rm(jar)} sh('mvn -P examples clean install') end desc 'Generate i18n Step Definitions' task :i18n_generate do require 'gherkin/i18n' require 'erb' java = ERB.new(IO.read(File.dirname(__FILE__) + '/cuke4duke/src/main/code_generator/I18n.java.erb'), nil, '-') File.open(File.dirname(__FILE__) + '/cuke4duke/src/main/java/cuke4duke/annotation/I18n.java', 'wb') do |io| io.write(<<-HEADER) package cuke4duke.annotation; import cuke4duke.internal.java.annotation.StepDef; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; public interface I18n { HEADER Gherkin::I18n.all.each do |i18n| io.write(java.result(binding)) end io.write("}") end scala = ERB.new(IO.read(File.dirname(__FILE__) + '/cuke4duke/src/main/code_generator/I18n.scala.erb'), nil, '-') File.open(File.dirname(__FILE__) + '/cuke4duke/src/main/scala/cuke4duke/I18n.scala', 'wb') do |io| io.write("package cuke4duke\n\n") Gherkin::I18n.all.each do |i18n| io.write(scala.result(binding)) end end end desc 'Make all files use UNIX (\n) line endings' task :fix_cr_lf do files = FileList['**/*'] files.each do |f| next if File.directory?(f) s = IO.read(f) s.gsub!(/\r?\n/, "\n") File.open(f, "w") { |io| io.write(s) } end end