Add a Rake task for releasing haml- and sass-mode to ELPA.
This commit is contained in:
parent
faf2518f98
commit
3bcee425a2
84
Rakefile
84
Rakefile
|
@ -69,11 +69,10 @@ task :install => [:package] do
|
||||||
sh %{#{sudo} #{gem} install --no-ri pkg/haml-#{File.read('VERSION').strip}}
|
sh %{#{sudo} #{gem} install --no-ri pkg/haml-#{File.read('VERSION').strip}}
|
||||||
end
|
end
|
||||||
|
|
||||||
desc "Release a new Haml package to Rubyforge. Requires the NAME and VERSION flags."
|
desc "Release a new Haml package to Rubyforge."
|
||||||
task :release => [:package] do
|
task :release => [:check_release, :release_elpa, :package] do
|
||||||
name = File.read("VERSION_NAME").strip
|
name = File.read("VERSION_NAME").strip
|
||||||
version = File.read("VERSION").strip
|
version = File.read("VERSION").strip
|
||||||
raise "VERSION_NAME must not be 'Bleeding Edge'" if name == "Bleeding Edge"
|
|
||||||
sh %{rubyforge login}
|
sh %{rubyforge login}
|
||||||
sh %{rubyforge add_release haml haml "#{name} (v#{version})" pkg/haml-#{version}.gem}
|
sh %{rubyforge add_release haml haml "#{name} (v#{version})" pkg/haml-#{version}.gem}
|
||||||
sh %{rubyforge add_file haml haml "#{name} (v#{version})" pkg/haml-#{version}.tar.gz}
|
sh %{rubyforge add_file haml haml "#{name} (v#{version})" pkg/haml-#{version}.tar.gz}
|
||||||
|
@ -81,6 +80,85 @@ task :release => [:package] do
|
||||||
sh %{rubyforge add_file haml haml "#{name} (v#{version})" pkg/haml-#{version}.zip}
|
sh %{rubyforge add_file haml haml "#{name} (v#{version})" pkg/haml-#{version}.zip}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Releases haml-mode.el and sass-mode.el to ELPA.
|
||||||
|
task :release_elpa do
|
||||||
|
require 'tlsmail'
|
||||||
|
require 'time'
|
||||||
|
|
||||||
|
version = File.read("VERSION").strip
|
||||||
|
|
||||||
|
haml_unchanged = mode_unchanged?(:haml, version)
|
||||||
|
sass_unchanged = mode_unchanged?(:sass, version)
|
||||||
|
next if haml_unchanged && sass_unchanged
|
||||||
|
raise "haml-mode.el and sass-mode.el are out of sync." if haml_unchanged ^ sass_unchanged
|
||||||
|
|
||||||
|
rev = File.read('.git/HEAD').strip
|
||||||
|
if rev =~ /^ref: (.*)$/
|
||||||
|
rev = File.read(".git/#{$1}").strip
|
||||||
|
end
|
||||||
|
|
||||||
|
from = "nex342@gmail.com"
|
||||||
|
to = "elpa@tromey.com"
|
||||||
|
Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)
|
||||||
|
Net::SMTP.start('smtp.gmail.com', 587, 'gmail.com', from, read_password("GMail Password"), :login) do |smtp|
|
||||||
|
smtp.send_message(<<CONTENT, from, to)
|
||||||
|
From: Nathan Weizenbaum <#{from}>
|
||||||
|
To: #{to}
|
||||||
|
Subject: Submitting haml-mode and sass-mode #{version}
|
||||||
|
Date: #{Time.now.rfc2822}
|
||||||
|
|
||||||
|
haml-mode and sass-mode #{version} are packaged and ready to be included in ELPA.
|
||||||
|
They can be downloaded from:
|
||||||
|
|
||||||
|
http://github.com/nex3/haml/raw/#{rev}/extra/haml-mode.el
|
||||||
|
http://github.com/nex3/haml/raw/#{rev}/extra/sass-mode.el
|
||||||
|
CONTENT
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Ensures that the version have been updated for a new release.
|
||||||
|
task :check_release do
|
||||||
|
version = File.read("VERSION").strip
|
||||||
|
raise "There have been changes since current version (#{version})" if changed_since?(version)
|
||||||
|
raise "VERSION_NAME must not be 'Bleeding Edge'" if File.read("VERSION_NAME") == "Bleeding Edge"
|
||||||
|
end
|
||||||
|
|
||||||
|
# Reads a password from the command line.
|
||||||
|
#
|
||||||
|
# @param name [String] The prompt to use to read the password
|
||||||
|
def read_password(prompt)
|
||||||
|
require 'readline'
|
||||||
|
system "stty -echo"
|
||||||
|
Readline.readline("#{prompt}: ").strip
|
||||||
|
ensure
|
||||||
|
system "stty echo"
|
||||||
|
puts
|
||||||
|
end
|
||||||
|
|
||||||
|
# Returns whether or not the repository, or specific files,
|
||||||
|
# has/have changed since a given revision.
|
||||||
|
#
|
||||||
|
# @param rev [String] The revision to check against
|
||||||
|
# @param files [Array<String>] The files to check.
|
||||||
|
# If this is empty, checks the entire repository
|
||||||
|
def changed_since?(rev, *files)
|
||||||
|
IO.popen("git diff --exit-code #{rev} #{files.join(' ')}") {}
|
||||||
|
return !$?.success?
|
||||||
|
end
|
||||||
|
|
||||||
|
# Returns whether or not the given Emacs mode file (haml or sass)
|
||||||
|
# has changed since the given version.
|
||||||
|
#
|
||||||
|
# @param mode [String, Symbol] The name of the mode
|
||||||
|
# @param version [String] The version number
|
||||||
|
def mode_unchanged?(mode, version)
|
||||||
|
mode_version = File.read("extra/#{mode}-mode.el").scan(/^;; Version: (.*)$/).first.first
|
||||||
|
return false if mode_version == version
|
||||||
|
return true unless changed_since?(mode_version, "extra/#{mode}-mode.el")
|
||||||
|
raise "#{mode}-mode.el version is #{haml_mode_version.inspect}, but it has changed as of #{version.inspect}"
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
task :release_edge do
|
task :release_edge do
|
||||||
ensure_git_cleanup do
|
ensure_git_cleanup do
|
||||||
puts "#{'=' * 50} Running rake release_edge"
|
puts "#{'=' * 50} Running rake release_edge"
|
||||||
|
|
Loading…
Reference in New Issue