164 lines
3.8 KiB
Ruby
164 lines
3.8 KiB
Ruby
# 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
|