1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
require 'date'
require 'rake/clean'
require 'rake/extensiontask'
require 'digest/md5'
task :default => :test
# ==========================================================
# Ruby Extension
# ==========================================================
Rake::ExtensionTask.new('markdown') do |ext|
ext.ext_dir = 'ext/markdown'
ext.lib_dir = 'lib/github'
end
# ==========================================================
# Helpers
# ==========================================================
def name
@name ||= "github-markdown"
end
def version
@version ||= File.read("#{name}.gemspec").match(/^\s*s.version\s*=\s*['"](.*)['"]/)[1]
end
def gem_file
"#{name}-#{version}.gem"
end
# ==========================================================
# Testing
# ==========================================================
require 'rake/testtask'
Rake::TestTask.new('test') do |t|
t.test_files = FileList['test/*_test.rb']
t.ruby_opts += ['-rubygems'] if defined? Gem
end
task 'test' => [:compile]
# PACKAGING =================================================================
require 'rubygems'
$spec = eval(File.read('github-markdown.gemspec'))
def package(ext='')
"pkg/github-markdown-#{$spec.version}" + ext
end
desc 'Build packages'
task :package => package('.gem')
directory 'pkg/'
file package('.gem') => %w[pkg/ github-markdown.gemspec] + $spec.files do |f|
sh "gem build github-markdown.gemspec"
mv File.basename(f.name), f.name
end
desc "Create tag v#{version} and build and push #{gem_file} to Rubygems"
task :release => :package do
unless `git branch` =~ /^\* master$/
puts "You must be on the master branch to release!"
exit!
end
sh "git commit --allow-empty -a -m 'Release #{version}'"
sh "git tag v#{version}"
sh "git push origin master"
sh "git push origin v#{version}"
sh "gem push pkg/#{name}-#{version}.gem"
end
# GEMSPEC HELPERS ==========================================================
task :update_gem do
# read spec file and split out manifest section
GEMFILE = 'github-markdown.gemspec'
spec = File.read(GEMFILE)
head, manifest, tail = spec.split(" # = MANIFEST =\n")
head.sub!(/\.date = '.*'/, ".date = '#{Date.today.to_s}'")
# determine file list from git ls-files
files = `git ls-files`.
split("\n").
sort.
reject{ |file| file =~ /^\./ || file =~ /^test\/MarkdownTest/ }.
map{ |file| " #{file}" }.
join("\n")
# piece file back together and write...
manifest = " s.files = %w[\n#{files}\n ]\n"
spec = [head,manifest,tail].join(" # = MANIFEST =\n")
File.open(GEMFILE, 'w') { |io| io.write(spec) }
puts "updated #{GEMFILE}"
end
desc 'Gather required Sundown sources into extension directory'
task :gather => 'sundown/src/markdown.h' do |t|
files =
FileList[
'sundown/src/{markdown,buffer,stack,autolink,html_blocks}.h',
'sundown/src/{markdown,buffer,stack,autolink}.c',
'sundown/html/{html,houdini_html_e,houdini_href_e}.c',
'sundown/html/{html,houdini}.h',
'sundown/plaintext/plaintext.{c,h}',
]
cp files, 'ext/markdown/',
:preserve => true,
:verbose => true
end
file 'sundown/src/markdown.h' do |t|
abort "The Sundown submodule is required."
end
|