This commit is contained in:
Karl Freeman 2014-05-29 10:57:30 +01:00
parent 71c4e6339b
commit e14f90fe1d
29 changed files with 360 additions and 237 deletions

View file

@ -1,8 +1,8 @@
require "middleman-core"
require 'middleman-core'
require "middleman-deploy/commands"
require 'middleman-deploy/commands'
::Middleman::Extensions.register(:deploy) do
require "middleman-deploy/extension"
require 'middleman-deploy/extension'
::Middleman::Deploy
end

View file

@ -1,13 +1,12 @@
require "middleman-core/cli"
require 'middleman-core/cli'
require "middleman-deploy/extension"
require "middleman-deploy/methods"
require "middleman-deploy/strategies"
require "middleman-deploy/pkg-info"
require 'middleman-deploy/pkg-info'
require 'middleman-deploy/extension'
require 'middleman-deploy/methods'
require 'middleman-deploy/strategies'
module Middleman
module Cli
# This class provides a "deploy" command for the middleman CLI.
class Deploy < Thor
include Thor::Actions
@ -21,11 +20,11 @@ module Middleman
true
end
desc "deploy [options]", Middleman::Deploy::TAGLINE
method_option "build_before",
:type => :boolean,
:aliases => "-b",
:desc => "Run `middleman build` before the deploy step"
desc 'deploy [options]', Middleman::Deploy::TAGLINE
method_option 'build_before',
type: :boolean,
aliases: '-b',
desc: 'Run `middleman build` before the deploy step'
def deploy
build_before(options)
process
@ -33,7 +32,7 @@ module Middleman
protected
def build_before(options={})
def build_before(options = {})
build_enabled = options.fetch('build_before', self.deploy_options.build_before)
if build_enabled
@ -43,10 +42,7 @@ module Middleman
end
def print_usage_and_die(message)
usage_path = File.join(File.dirname(__FILE__), '..', '..', 'USAGE')
usage_message = File.read(usage_path)
raise Error, "ERROR: #{message}\n#{usage_message}"
raise Error, "ERROR: #{message}\n#{Middleman::Deploy::README}"
end
def process
@ -65,11 +61,11 @@ module Middleman
begin
options = ::Middleman::Application.server.inst.options
rescue NoMethodError
print_usage_and_die "You need to activate the deploy extension in config.rb."
print_usage_and_die 'You need to activate the deploy extension in config.rb.'
end
unless options.method
print_usage_and_die "The deploy extension requires you to set a method."
print_usage_and_die 'The deploy extension requires you to set a method.'
end
case options.method
@ -79,7 +75,7 @@ module Middleman
end
when :ftp
unless options.host && options.user && options.password && options.path
print_usage_and_die "The ftp deploy method requires host, path, user, and password to be set."
print_usage_and_die 'The ftp deploy method requires host, path, user, and password to be set.'
end
end
@ -88,6 +84,6 @@ module Middleman
end
# Alias "d" to "deploy"
Base.map({ "d" => "deploy" })
Base.map('d' => 'deploy')
end
end

View file

@ -1,19 +1,17 @@
# Require core library
require "middleman-core"
require 'middleman-core'
# Extension namespace
module Middleman
module Deploy
class Options < Struct.new(:whatisthis, :method, :host, :port, :user, :password, :path, :clean, :remote, :branch, :strategy, :build_before, :flags, :commit_message); end
class Options < Struct.new(:method, :host, :port, :user, :password, :path, :clean, :remote, :branch, :strategy, :build_before, :flags, :commit_message); end
class << self
def options
@@options
end
def registered(app, options_hash={}, &block)
def registered(app, options_hash = {}, &block)
options = Options.new(options_hash)
yield options if block_given?
@ -22,9 +20,9 @@ module Middleman
options.clean ||= false
# Default options for the git method.
options.remote ||= "origin"
options.branch ||= "gh-pages"
options.strategy ||= :force_push
options.remote ||= 'origin'
options.branch ||= 'gh-pages'
options.strategy ||= :force_push
options.commit_message ||= nil
options.build_before ||= false
@ -34,8 +32,7 @@ module Middleman
app.send :include, Helpers
end
alias :included :registered
alias_method :included, :registered
end
module Helpers
@ -43,6 +40,5 @@ module Middleman
::Middleman::Deploy.options
end
end
end
end

View file

@ -4,7 +4,7 @@ module Middleman
class Base
attr_reader :options, :server_instance
def initialize(server_instance, options={})
def initialize(server_instance, options = {})
@options = options
@server_instance = server_instance
end
@ -12,7 +12,6 @@ module Middleman
def process
raise NotImplementedError
end
end
end
end

View file

@ -5,10 +5,9 @@ module Middleman
module Deploy
module Methods
class Ftp < Base
attr_reader :host, :port, :pass, :path, :user
def initialize(server_instance, options={})
def initialize(server_instance, options = {})
super(server_instance, options)
@host = self.options.host
@ -27,7 +26,7 @@ module Middleman
filtered_files.each do |filename|
if File.directory?(filename)
upload_directory(ftp, filename)
else
else
upload_binary(ftp, filename)
end
end
@ -36,7 +35,7 @@ module Middleman
ftp.close
end
protected
protected
def filtered_files
files = Dir.glob('**/*', File::FNM_DOTMATCH)
@ -46,7 +45,7 @@ module Middleman
def handle_exception(exception, ftp, filename)
reply = exception.message
err_code = reply[0,3].to_i
err_code = reply[0, 3].to_i
if err_code == 550
if File.binary?(filename)
@ -83,8 +82,6 @@ module Middleman
rescue
end
end
end
end
end

View file

@ -2,7 +2,6 @@ module Middleman
module Deploy
module Methods
class Git < Base
def process
puts "## Deploying via git to remote=\"#{self.options.remote}\" and branch=\"#{self.options.branch}\""
@ -12,7 +11,6 @@ module Middleman
strategy_instance.process
end
end
end
end

View file

@ -2,10 +2,9 @@ module Middleman
module Deploy
module Methods
class Rsync < Base
attr_reader :clean, :flags, :host, :path, :port, :user
def initialize(server_instance, options={})
def initialize(server_instance, options = {})
super(server_instance, options)
@clean = self.options.clean
@ -25,13 +24,12 @@ module Middleman
command = "rsync #{flags} '-e ssh -p #{self.port}' #{self.server_instance.build_dir}/ #{dest_url}"
if self.clean
command += " --delete"
command += ' --delete'
end
puts "## Deploying via rsync to #{dest_url} port=#{self.port}"
exec command
end
end
end
end

View file

@ -5,12 +5,11 @@ module Middleman
module Deploy
module Methods
class Sftp < Ftp
def process
puts "## Deploying via sftp to #{self.user}@#{self.host}:#{path}"
# `nil` is a valid value for user and/or pass.
Net::SFTP.start(self.host, self.user, :password => self.pass, :port => self.port) do |sftp|
Net::SFTP.start(self.host, self.user, password: self.pass, port: self.port) do |sftp|
sftp.mkdir(self.path)
Dir.chdir(self.server_instance.build_dir) do
@ -25,11 +24,11 @@ module Middleman
end
end
protected
protected
def handle_exception(exception)
reply = exception.message
err_code = reply[0,3].to_i
err_code = reply[0, 3].to_i
if err_code == 550
sftp.upload(filename, file_path)
@ -57,9 +56,7 @@ module Middleman
puts "Copied #{filename}"
end
end
end
end
end

View file

@ -1,7 +1,64 @@
module Middleman
module Deploy
PACKAGE = "middleman-deploy"
VERSION = "0.2.4"
TAGLINE = "Deploy a middleman built site over rsync, ftp, sftp, or git (e.g. gh-pages on github)."
end
PACKAGE = 'middleman-deploy'
VERSION = '0.2.5'
TAGLINE = 'Deploy a middleman built site over rsync, ftp, sftp, or git (e.g. gh-pages on github).'
README = %Q{
You should follow one of the four examples below to setup the deploy
extension in config.rb.
# To deploy the build directory to a remote host via rsync:
activate :deploy do |deploy|
deploy.method = :rsync
# host and path *must* be set
deploy.host = "www.example.com"
deploy.path = "/srv/www/site"
# user is optional (no default)
deploy.user = "tvaughan"
# port is optional (default is 22)
deploy.port = 5309
# clean is optional (default is false)
deploy.clean = true
# flags is optional (default is -avze)
deploy.flags = "-rltgoDvzO --no-p --del -e"
end
# To deploy to a remote branch via git (e.g. gh-pages on github):
activate :deploy do |deploy|
deploy.method = :git
# remote is optional (default is "origin")
# run `git remote -v` to see a list of possible remotes
deploy.remote = "some-other-remote-name"
# branch is optional (default is "gh-pages")
# run `git branch -a` to see a list of possible branches
deploy.branch = "some-other-branch-name"
# strategy is optional (default is :force_push)
deploy.strategy = :submodule
end
# To deploy the build directory to a remote host via ftp:
activate :deploy do |deploy|
deploy.method = :ftp
# host, user, passwword and path *must* be set
deploy.host = "ftp.example.com"
deploy.path = "/srv/www/site"
deploy.user = "tvaughan"
deploy.password = "secret"
end
# To deploy the build directory to a remote host via sftp:
activate :deploy do |deploy|
deploy.method = :sftp
# host, user, passwword and path *must* be set
deploy.host = "sftp.example.com"
deploy.port = 22
deploy.path = "/srv/www/site"
# user is optional (no default)
deploy.user = "tvaughan"
# password is optional (no default)
deploy.password = "secret"
end}
end
end

View file

@ -16,7 +16,7 @@ module Middleman
raise NotImplementedError
end
protected
protected
def add_signature_to_commit_message(base_message)
signature = "#{Middleman::Deploy::PACKAGE} #{Middleman::Deploy::VERSION}"
@ -34,14 +34,13 @@ module Middleman
end
end
def commit_branch(options='')
def commit_branch(options = '')
message = self.commit_message ? self.commit_message : add_signature_to_commit_message('Automated commit')
`git add -A`
`git commit --allow-empty -am "#{message}"`
`git push #{options} origin #{self.branch}`
end
end
end
end

View file

@ -3,7 +3,6 @@ module Middleman
module Strategies
module Git
class ForcePush < Base
def process
Dir.chdir(self.build_dir) do
add_remote_url
@ -12,12 +11,12 @@ module Middleman
end
end
private
private
def add_remote_url
url = get_remote_url
unless File.exists?('.git')
unless File.exist?('.git')
`git init`
`git remote add origin #{url}`
else
@ -46,7 +45,6 @@ module Middleman
url
end
end
end
end

View file

@ -3,7 +3,6 @@ module Middleman
module Strategies
module Git
class Submodule < Base
def process
Dir.chdir(self.build_dir) do
checkout_branch
@ -14,7 +13,7 @@ module Middleman
commit_submodule
end
private
private
def commit_submodule
current_branch = `git rev-parse --abbrev-ref HEAD`
@ -36,7 +35,6 @@ module Middleman
exit
end
end
end
end
end

View file

@ -1 +1 @@
require "middleman-deploy"
require 'middleman-deploy'