File: Rakefile

package info (click to toggle)
ruby-github-markdown 0.6.9-5
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 312 kB
  • sloc: ansic: 3,577; ruby: 96; makefile: 6
file content (116 lines) | stat: -rw-r--r-- 3,218 bytes parent folder | download | duplicates (2)
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