Download version information for all implementations

This commit is contained in:
Natalie Weizenbaum 2018-03-15 16:04:43 -07:00
parent e367b287a7
commit 845001cf65
5 changed files with 152 additions and 80 deletions

4
.gitignore vendored
View File

@ -9,7 +9,9 @@ bundle
/Icon
"Icon\r"
.ruby-version
/.sass
/.dart-sass
/.libsass
/.ruby-sass
/.sass-cache
*.scssc
/source/assets/css/vendor

View File

@ -17,6 +17,7 @@ gem 'rack-contrib'
gem 'rack-rewrite'
gem 'rake'
gem 'redcarpet', '~> 3.3.3'
gem 'semantic', '~> 1.6'
gem 'susy', '~> 2.2.9'
gem 'therubyracer', '~> 0.12.3'
gem 'typogruby', '~> 1.0.18'

View File

@ -136,6 +136,7 @@ GEM
sass (3.4.25)
sassy-maps (0.4.0)
sass (~> 3.3)
semantic (1.6.1)
sprockets (2.12.4)
hike (~> 1.2)
multi_json (~> 1.0)
@ -187,6 +188,7 @@ DEPENDENCIES
rack-rewrite
rake
redcarpet (~> 3.3.3)
semantic (~> 1.6)
susy (~> 2.2.9)
therubyracer (~> 0.12.3)
typogruby (~> 1.0.18)
@ -198,4 +200,4 @@ RUBY VERSION
ruby 2.4.1p111
BUNDLED WITH
1.15.2
1.16.1

111
Rakefile
View File

@ -1,16 +1,85 @@
require 'semantic'
require 'yaml'
require 'yard'
namespace :sass do
# Check out the latest stable version of Ruby Sass into the .sass directory.
task :checkout do
unless Dir.exists?(".sass")
sh %{git clone git://github.com/sass/sass .sass}
# Adds an implementation's version number to data/version.yml.
def add_version(impl, version)
path = 'data/version.yml'
yaml = File.exist?(path) ? YAML.load(File.read(path)) : {}
yaml[impl] = version
File.open(path, 'w') {|f| f.write(YAML.dump(yaml))}
end
Dir.chdir(".sass") do
# Returns the latest tag in the current Git repository that's a valid semantic
# version and is not a pre-release version *unless* only pre-release versions
# are available.
def latest_stable_tag
tags = `git tag`.strip.split("\n").map do |v|
begin
Semantic::Version.new(v)
rescue ArgumentError
nil
end
end.compact.sort.reverse
(tags.find {|t| !t.pre} || tags.first).to_s
end
namespace :dart do
# Check out the latest commit of Dart Sass into the .dart-sass directory.
task :checkout do
unless Dir.exists?(".dart-sass")
sh %{git clone git://github.com/sass/dart-sass .dart-sass}
end
Dir.chdir(".dart-sass") do
sh %{git fetch}
if ENV["SASS_REVISION"]
sh %{git checkout #{ENV["SASS_REVISION"]}}
if ENV["DART_SASS_REVISION"]
sh %{git checkout #{ENV["DART_SASS_REVISION"]}}
else
sh %{git checkout origin/master}
end
end
end
task :version => :checkout do
add_version 'dart', Dir.chdir(".dart-sass") {latest_stable_tag}
end
end
namespace :libsass do
# Check out the latest commit of Dart Sass into the .libsass directory.
task :checkout do
unless Dir.exists?(".libsass")
sh %{git clone git://github.com/sass/libsass .libsass}
end
Dir.chdir(".libsass") do
sh %{git fetch}
if ENV["LIBSASS_REVISION"]
sh %{git checkout #{ENV["LIBSASS_REVISION"]}}
else
sh %{git checkout origin/master}
end
end
end
task :version => :checkout do
add_version 'libsass', Dir.chdir(".libsass") {latest_stable_tag}
end
end
namespace :ruby do
# Check out the latest stable version of Ruby Sass into the .ruby-sass directory.
task :checkout do
unless Dir.exists?(".ruby-sass")
sh %{git clone git://github.com/sass/sass .ruby-sass}
end
Dir.chdir(".ruby-sass") do
sh %{git fetch}
if ENV["RUBY_SASS_REVISION"]
sh %{git checkout #{ENV["RUBY_SASS_REVISION"]}}
else
sh %{git checkout origin/stable}
# Check out the most recent released stable version
@ -20,22 +89,19 @@ namespace :sass do
end
task :version => :checkout do
require 'yaml'
version = File.read(".sass/VERSION").strip
name = File.read(".sass/VERSION_NAME").strip
File.open('data/version.yml', 'w') {|f| f.write(YAML.dump({'number' => version, 'name' => name}))}
add_version 'ruby', File.read(".ruby-sass/VERSION").strip
end
YARD::Rake::YardocTask.new(:doc) do |t|
t.before = lambda do
t.files = FileList.new('.sass/lib/**/*.rb') do |list|
list.exclude('.sass/lib/sass/plugin/merb.rb')
list.exclude('.sass/lib/sass/plugin/rails.rb')
t.files = FileList.new('.ruby-sass/lib/**/*.rb') do |list|
list.exclude('.ruby-sass/lib/sass/plugin/merb.rb')
list.exclude('.ruby-sass/lib/sass/plugin/rails.rb')
end.to_a
t.options += FileList.new('.sass/yard/*.rb').to_a.map {|f| ['-e', f]}.flatten
files = FileList.new('.sass/doc-src/*').to_a.sort_by {|s| s.size} + %w[.sass/MIT-LICENSE .sass/VERSION]
t.options += FileList.new('.ruby-sass/yard/*.rb').to_a.map {|f| ['-e', f]}.flatten
files = FileList.new('.ruby-sass/doc-src/*').to_a.sort_by {|s| s.size} + %w[.ruby-sass/MIT-LICENSE .ruby-sass/VERSION]
t.options << '--files' << files.join(',')
t.options << '--main' << '.sass/README.md'
t.options << '--main' << '.ruby-sass/README.md'
t.options << '--template-path' << 'yard'
end
@ -83,11 +149,12 @@ namespace :sass do
File.write('source/documentation/file.SASS_REFERENCE.html', doc.to_html)
end
end
Rake::Task['sass:doc'].prerequisites.insert(0, 'sass:checkout')
Rake::Task['sass:doc'].instance_variable_set('@comment', nil)
Rake::Task['sass:ruby:doc'].prerequisites.insert(0, 'sass:ruby:checkout')
Rake::Task['sass:ruby:doc'].instance_variable_set('@comment', nil)
end
desc "Import information from Sass."
task :import => [:doc, :version]
desc "Import information from Sass implementations."
task :import => ["dart:version", "libsass:version", "ruby:version", "ruby:doc"]
end
desc "Build the middleman-controlled portion of the site."
@ -101,6 +168,6 @@ task "build" => ["sass:import", :middleman]
# Build the site on Heroku, then clean up unnecessary intermediate files.
task "assets:precompile" => :build do
# Clean up unneccessary files to reduce slug size.
sh %{rm -rf .sass .yardoc}
sh %{rm -rf .dart-sass .libsass .ruby-sass .yardoc}
sh %{bundle install --without=development}
end

View File

@ -48,7 +48,7 @@ module SassHelpers
# Returns the version for the given implementation (`:dart`, `:ruby`, or
# `:libsass`), or `nil` if it hasn't been made available yet.
def impl_version(impl)
nil
data.version && data.version[impl]
end
# Returns the URL tag for the latest release of the given implementation.