master
Karl Freeman 2015-08-16 19:06:10 +01:00
parent 751c11f6eb
commit 86f76b2a53
11 changed files with 58 additions and 92 deletions

View File

@ -1,24 +1,11 @@
AllCops:
Include:
- Rakefile
- Gemfile
- 'Gemfile'
Exclude:
- script/**/*
- vendor/**/*
- bin/**/*
LineLength:
Enabled: false
MethodLength:
Enabled: false
ClassLength:
Enabled: false
- 'script/**/*'
- 'vendor/**/*'
- 'bin/**/*'
Documentation:
Enabled: false
Encoding:
ClassAndModuleChildren:
Enabled: false
Blocks:
Enabled: false
AlignParameters:
Enabled: false
HashSyntax:
EnforcedStyle: ruby19

View File

@ -35,7 +35,7 @@ module Middleman
aliases: '-b',
desc: 'Run `middleman build` before the deploy step'
def self.subcommand_help options
def self.subcommand_help(_options)
# TODO
end
@ -44,7 +44,6 @@ module Middleman
true
end
def deploy
env = options['environment'] ? :production : options['environment'].to_s.to_sym
verbose = options['verbose'] ? 0 : 1
@ -62,7 +61,7 @@ module Middleman
protected
def build_before(options = {})
build_enabled = options.fetch('build_before', self.deploy_options.build_before)
build_enabled = options.fetch('build_before', deploy_options.build_before)
if build_enabled
# http://forum.middlemanapp.com/t/problem-with-the-build-task-in-an-extension
@ -71,16 +70,14 @@ module Middleman
end
def print_usage_and_die(message)
raise StandardError, "ERROR: #{message}\n#{Middleman::Deploy::README}"
fail StandardError, "ERROR: #{message}\n#{Middleman::Deploy::README}"
end
def process
server_instance = @app
camelized_method = self.deploy_options.deploy_method.to_s.split('_').map { |word| word.capitalize}.join
camelized_method = deploy_options.deploy_method.to_s.split('_').map(&:capitalize).join
method_class_name = "Middleman::Deploy::Methods::#{camelized_method}"
method_instance = method_class_name.constantize.new(server_instance, self.deploy_options)
method_instance = method_class_name.constantize.new(server_instance, deploy_options)
method_instance.process
end

View File

@ -4,23 +4,15 @@ require 'middleman-core'
# Extension namespace
module Middleman
module Deploy
@options
class << self
attr_reader :options
def options
@options
end
def options= options
@options = options
end
attr_writer :options
end
class Extension < Extension
option :deploy_method, nil
option :host, nil
option :port, nil
@ -35,8 +27,6 @@ module Middleman
option :flags, nil
option :commit_message, nil
def initialize(app, options_hash = {}, &block)
super
@ -50,17 +40,14 @@ module Middleman
options.remote ||= 'origin'
options.branch ||= 'gh-pages'
options.strategy ||= :force_push
options.commit_message ||= nil
options.commit_message ||= nil
options.build_before ||= false
end
def after_configuration
::Middleman::Deploy.options = options
end
end
end
end

View File

@ -10,11 +10,11 @@ module Middleman
end
def build_dir
self.server_instance.config.setting(:build_dir).value
server_instance.config.setting(:build_dir).value
end
def process
raise NotImplementedError
fail NotImplementedError
end
end
end

View File

@ -18,11 +18,11 @@ module Middleman
end
def process
puts "## Deploying via ftp to #{self.user}@#{self.host}:#{self.path}"
puts "## Deploying via ftp to #{user}@#{host}:#{path}"
ftp = open_connection
Dir.chdir(self.build_dir) do
Dir.chdir(build_dir) do
filtered_files.each do |filename|
if File.directory?(filename)
upload_directory(ftp, filename)
@ -57,9 +57,9 @@ module Middleman
end
def open_connection
ftp = Net::FTP.new(self.host)
ftp.login(self.user, self.pass)
ftp.chdir(self.path)
ftp = Net::FTP.new(host)
ftp.login(user, pass)
ftp.chdir(path)
ftp.passive = true
ftp
@ -76,11 +76,9 @@ module Middleman
end
def upload_directory(ftp, filename)
begin
ftp.mkdir(filename)
puts "Created directory #{filename}"
rescue
end
ftp.mkdir(filename)
puts "Created directory #{filename}"
rescue
end
end
end

View File

@ -3,11 +3,11 @@ module Middleman
module Methods
class Git < Base
def process
puts "## Deploying via git to remote=\"#{self.options.remote}\" and branch=\"#{self.options.branch}\""
puts "## Deploying via git to remote=\"#{options.remote}\" and branch=\"#{options.branch}\""
camelized_strategy = self.options.strategy.to_s.split('_').map { |word| word.capitalize}.join
camelized_strategy = options.strategy.to_s.split('_').map(&:capitalize).join
strategy_class_name = "Middleman::Deploy::Strategies::Git::#{camelized_strategy}"
strategy_instance = strategy_class_name.constantize.new(self.build_dir, self.options.remote, self.options.branch, self.options.commit_message)
strategy_instance = strategy_class_name.constantize.new(build_dir, options.remote, options.branch, options.commit_message)
strategy_instance.process
end

View File

@ -17,17 +17,15 @@ module Middleman
def process
# Append "@" to user if provided.
user = "#{self.user}@" if self.user && !self.user.empty?
user = "#{self.user}@" if user && !user.empty?
dest_url = "#{user}#{self.host}:#{self.path}"
dest_url = "#{user}#{host}:#{path}"
flags = self.flags || '-avz'
command = "rsync #{flags} '-e ssh -p #{self.port}' #{self.build_dir}/ #{dest_url}"
command = "rsync #{flags} '-e ssh -p #{port}' #{build_dir}/ #{dest_url}"
if self.clean
command += ' --delete'
end
command += ' --delete' if clean
puts "## Deploying via rsync to #{dest_url} port=#{self.port}"
puts "## Deploying via rsync to #{dest_url} port=#{port}"
exec command
end
end

View File

@ -6,13 +6,13 @@ module Middleman
module Methods
class Sftp < Ftp
def process
puts "## Deploying via sftp to #{self.user}@#{self.host}:#{path}"
puts "## Deploying via sftp to #{user}@#{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|
sftp.mkdir(self.path)
Net::SFTP.start(host, user, password: pass, port: port) do |sftp|
sftp.mkdir(path)
Dir.chdir(self.build_dir) do
Dir.chdir(build_dir) do
filtered_files.each do |filename|
if File.directory?(filename)
upload_directory(sftp, filename)
@ -26,17 +26,15 @@ module Middleman
protected
def handle_exception(exception,filename, file_path)
def handle_exception(exception, filename, file_path)
reply = exception.message
err_code = reply[0, 3].to_i
if err_code == 550
sftp.upload(filename, file_path)
end
sftp.upload(filename, file_path) if err_code == 550
end
def upload_directory(sftp, filename)
file_path = "#{self.path}/#{filename}"
file_path = "#{path}/#{filename}"
begin
sftp.mkdir(file_path)
@ -46,7 +44,7 @@ module Middleman
end
def upload_file(sftp, filename)
file_path = "#{self.path}/#{filename}"
file_path = "#{path}/#{filename}"
begin
sftp.upload(filename, file_path)

View File

@ -15,7 +15,7 @@ module Middleman
end
def process
raise NotImplementedError
fail NotImplementedError
end
protected
@ -29,24 +29,25 @@ module Middleman
def checkout_branch
# if there is a branch with that name, switch to it, otherwise create a new one and switch to it
if `git branch`.split("\n").any? { |b| b =~ /#{self.branch}/i }
`git checkout #{self.branch}`
if `git branch`.split("\n").any? { |b| b =~ /#{branch}/i }
`git checkout #{branch}`
else
`git checkout -b #{self.branch}`
`git checkout -b #{branch}`
end
end
def commit_branch(options = '')
message = self.commit_message ? self.commit_message : add_signature_to_commit_message('Automated commit')
message = commit_message ? commit_message : add_signature_to_commit_message('Automated commit')
run_or_fail("git add -A")
run_or_fail('git add -A')
run_or_fail("git commit --allow-empty -am \"#{message}\"")
run_or_fail("git push #{options} origin #{self.branch}")
run_or_fail("git push #{options} origin #{branch}")
end
private
def run_or_fail(command)
system(command) || raise("ERROR running: #{command}")
system(command) || fail("ERROR running: #{command}")
end
end
end

View File

@ -4,7 +4,7 @@ module Middleman
module Git
class ForcePush < Base
def process
Dir.chdir(self.build_dir) do
Dir.chdir(build_dir) do
add_remote_url
checkout_branch
commit_branch('-f')
@ -19,8 +19,8 @@ module Middleman
unless File.exist?('.git')
`git init`
`git remote add origin #{url}`
`git config user.name "#{self.user_name}"`
`git config user.email "#{self.user_email}"`
`git config user.name "#{user_name}"`
`git config user.email "#{user_email}"`
else
# check if the remote repo has changed
unless url == `git config --get remote.origin.url`.chop
@ -28,9 +28,9 @@ module Middleman
`git remote add origin #{url}`
end
# check if the user name has changed
`git config user.name "#{self.user_name}"` unless self.user_name == `git config --get user.name`
`git config user.name "#{user_name}"` unless user_name == `git config --get user.name`
# check if the user email has changed
`git config user.email "#{self.user_email}"` unless self.user_email == `git config --get user.email`
`git config user.email "#{user_email}"` unless user_email == `git config --get user.email`
end
end

View File

@ -4,7 +4,7 @@ module Middleman
module Git
class Submodule < Base
def process
Dir.chdir(self.build_dir) do
Dir.chdir(build_dir) do
checkout_branch
pull_submodule
commit_branch
@ -19,7 +19,7 @@ module Middleman
current_branch = `git rev-parse --abbrev-ref HEAD`
message = add_signature_to_commit_message('Deployed')
`git add #{self.build_dir}`
`git add #{build_dir}`
`git commit --allow-empty -m "#{message}"`
`git push origin #{current_branch}`
end
@ -27,11 +27,11 @@ module Middleman
def pull_submodule
`git fetch`
`git stash`
`git rebase #{self.remote}/#{self.branch}`
`git rebase #{remote}/#{branch}`
`git stash pop`
if $?.exitstatus == 1
puts "Can't deploy! Please resolve conflicts. Then process to manual commit and push on #{self.branch} branch."
if $CHILD_STATUS.exitstatus == 1
puts "Can't deploy! Please resolve conflicts. Then process to manual commit and push on #{branch} branch."
exit
end
end