File: Rakefile

package info (click to toggle)
jekyll 4.3.4%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 6,356 kB
  • sloc: ruby: 16,765; javascript: 1,455; sh: 214; xml: 29; makefile: 9
file content (163 lines) | stat: -rw-r--r-- 3,892 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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# frozen_string_literal: true

require "rubygems"
require "rake"
require "rdoc"
require "date"
require "yaml"

$LOAD_PATH.unshift File.expand_path("lib", __dir__)
require "jekyll/version"

Dir.glob("rake/**.rake").each { |f| import f }

#############################################################################
#
# Helper functions
#
#############################################################################

def name
  "jekyll"
end

def version
  Jekyll::VERSION
end

def docs_name
  "#{name}-docs"
end

def docs_folder
  "docs"
end

def gemspec_file
  "#{name}.gemspec"
end

def gem_file
  "#{name}-#{Gem::Version.new(version)}.gem"
end

def normalize_bullets(markdown)
  markdown.gsub(%r!\n\s{2}\*{1}!, "\n-")
end

def linkify_prs(markdown)
  markdown.gsub(%r!(?<\!&)#(\d+)!) do |word|
    "[#{word}]({{ site.repository }}/issues/#{word.delete("#")})"
  end
end

def linkify(markdown)
  linkify_prs(markdown)
end

def liquid_escape(markdown)
  markdown.gsub(%r!(`{[{%].+[}%]}`)!, "{% raw %}\\1{% endraw %}")
end

def custom_release_header_anchors(markdown)
  header_regexp = %r!^(\d{1,2})\.(\d{1,2})\.(\d{1,2}) \/ \d{4}-\d{2}-\d{2}!
  section_regexp = %r!^### \w+ \w+$!
  markdown.split(%r!^##\s!).map do |release_notes|
    _, major, minor, patch = *release_notes.match(header_regexp)
    release_notes
      .gsub(header_regexp, "\\0\n{: #v\\1-\\2-\\3}")
      .gsub(section_regexp) { |section| "#{section}\n{: ##{slugify(section)}-v#{major}-#{minor}-#{patch}}" }
  end.join("\n## ")
end

def slugify(header)
  header.delete("#").strip.downcase.gsub(%r!\s+!, "-")
end

def remove_head_from_history(markdown)
  index = markdown =~ %r!^##\s+\d+\.\d+\.\d+!
  markdown[index..-1]
end

def converted_history(markdown)
  remove_head_from_history(
    custom_release_header_anchors(
      liquid_escape(
        linkify(
          normalize_bullets(markdown)
        )
      )
    )
  )
end

def siteify_file(file, overrides_front_matter = {})
  abort "You seem to have misplaced your #{file} file. I can haz?" unless File.exist?(file)
  title = begin
            File.read(file).match(%r!\A# (.*)$!)[1]
          rescue NoMethodError
            File.basename(file, ".*").downcase.capitalize
          end
  slug  = File.basename(file, ".markdown").downcase
  front_matter = {
    "title"     => title,
    "permalink" => "/docs/#{slug}/",
    "note"      => "This file is autogenerated. Edit /#{file} instead.",
  }.merge(overrides_front_matter)
  contents = "#{front_matter.to_yaml}---\n\n#{content_for(file)}"
  File.write("#{docs_folder}/_docs/#{slug}.md", contents)
end

def content_for(file)
  contents = File.read(file)
  case file
  when "History.markdown"
    converted_history(contents)
  else
    contents.gsub(%r!\A# .*\n\n?!, "")
  end
end

#############################################################################
#
# Standard tasks
#
#############################################################################

multitask :default => [:test, :features]

task :spec => :test
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|
  rdoc.rdoc_dir = "rdoc"
  rdoc.title = "#{name} #{version}"
  rdoc.rdoc_files.include("README*")
  rdoc.rdoc_files.include("lib/**/*.rb")
end

begin
  require "cucumber/rake/task"
  Cucumber::Rake::Task.new(:features) do |t|
    t.profile = "travis"
  end
  Cucumber::Rake::Task.new(:"features:html", "Run Cucumber features and produce HTML output") do |t|
    t.profile = "html_report"
  end
rescue LoadError
  desc "Cucumber rake task not available"
  task :features do
    abort "Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin"
  end
end

desc "Open an irb session preloaded with this library"
task :console do
  sh "irb -r ./lib/#{name}.rb"
end