Skip to content

Commit

Permalink
Merge pull request #87 from emilioforrer/development
Browse files Browse the repository at this point in the history
Fixing compatibility issues with middleman v4.0.0.beta.1
  • Loading branch information
karlfreeman committed Aug 16, 2015
2 parents 000cabd + c590d00 commit 751c11f
Show file tree
Hide file tree
Showing 12 changed files with 121 additions and 52 deletions.
1 change: 1 addition & 0 deletions .ruby-gemset
@@ -0,0 +1 @@
rails4
1 change: 1 addition & 0 deletions .ruby-version
@@ -0,0 +1 @@
ruby-2.2.0
8 changes: 8 additions & 0 deletions CHANGELOG.md
Expand Up @@ -6,3 +6,11 @@ master

* Respect user details of git repo. #70
* Prevent bad commits deploying. (git) #77

development
===

2.0.0
===

* Fixing compatibility issues with middleman v4.0.0.beta.1
38 changes: 19 additions & 19 deletions README.md
Expand Up @@ -26,9 +26,9 @@ following to `config.rb`:

```ruby
activate :deploy do |deploy|
deploy.method = :rsync
deploy.host = 'www.example.com'
deploy.path = '/srv/www/site'
deploy.deploy_method = :rsync
deploy.host = 'www.example.com'
deploy.path = '/srv/www/site'
# Optional Settings
# deploy.user = 'tvaughan' # no default
# deploy.port = 5309 # ssh port, default: 22
Expand All @@ -44,7 +44,7 @@ following to `config.rb`:

```ruby
activate :deploy do |deploy|
deploy.method = :git
deploy.deploy_method = :git
# Optional Settings
# deploy.remote = 'custom-remote' # remote name or git url, default: origin
# deploy.branch = 'custom-branch' # default: gh-pages
Expand All @@ -70,11 +70,11 @@ Activate the extension by adding the following to `config.rb`:

```ruby
activate :deploy do |deploy|
deploy.method = :ftp
deploy.host = 'ftp.example.com'
deploy.path = '/srv/www/site'
deploy.user = 'tvaughan'
deploy.password = 'secret'
deploy.deploy_method = :ftp
deploy.host = 'ftp.example.com'
deploy.path = '/srv/www/site'
deploy.user = 'tvaughan'
deploy.password = 'secret'
end
```

Expand All @@ -84,10 +84,10 @@ Activate the extension by adding the following to `config.rb`:

```ruby
activate :deploy do |deploy|
deploy.method = :sftp
deploy.host = 'sftp.example.com'
deploy.port = 22
deploy.path = '/srv/www/site'
deploy.deploy_method = :sftp
deploy.host = 'sftp.example.com'
deploy.port = 22
deploy.path = '/srv/www/site'
# Optional Settings
# deploy.user = 'tvaughan' # no default
# deploy.password = 'secret' # no default
Expand Down Expand Up @@ -115,15 +115,15 @@ Deploy your site to more than one configuration using environment variables.
case ENV['TARGET'].to_s.downcase
when 'production'
activate :deploy do |deploy|
deploy.method = :rsync
deploy.host = 'www.example.com'
deploy.path = '/srv/www/production-site'
deploy.deploy_method = :rsync
deploy.host = 'www.example.com'
deploy.path = '/srv/www/production-site'
end
else
activate :deploy do |deploy|
deploy.method = :rsync
deploy.host = 'staging.example.com'
deploy.path = '/srv/www/staging-site'
deploy.deploy_method = :rsync
deploy.host = 'staging.example.com'
deploy.path = '/srv/www/staging-site'
end
end
```
Expand Down
2 changes: 1 addition & 1 deletion lib/middleman-deploy.rb
Expand Up @@ -4,5 +4,5 @@

::Middleman::Extensions.register(:deploy) do
require 'middleman-deploy/extension'
::Middleman::Deploy
::Middleman::Deploy::Extension
end
65 changes: 49 additions & 16 deletions lib/middleman-deploy/commands.rb
@@ -1,5 +1,5 @@
require 'middleman-core/cli'

require 'middleman-core/rack' if Middleman::VERSION.to_i > 3
require 'middleman-deploy/pkg-info'
require 'middleman-deploy/extension'
require 'middleman-deploy/methods'
Expand All @@ -8,24 +8,53 @@
module Middleman
module Cli
# This class provides a "deploy" command for the middleman CLI.
class Deploy < Thor
class Deploy < Thor::Group
include Thor::Actions

check_unknown_options!

namespace :deploy

class_option :environment,
aliases: '-e',
default: ENV['MM_ENV'] || ENV['RACK_ENV'] || 'production',
desc: 'The environment Middleman will run under'

class_option :verbose,
type: :boolean,
default: false,
desc: 'Print debug messages'

class_option :instrument,
type: :string,
default: false,
desc: 'Print instrument messages'

class_option :build_before,
type: :boolean,
aliases: '-b',
desc: 'Run `middleman build` before the deploy step'

def self.subcommand_help options
# TODO
end

# Tell Thor to exit with a nonzero exit code on failure
def self.exit_on_failure?
true
end

desc 'deploy [options]', Middleman::Deploy::TAGLINE
method_option 'build_before',
type: :boolean,
aliases: '-b',
desc: 'Run `middleman build` before the deploy step'

def deploy
env = options['environment'] ? :production : options['environment'].to_s.to_sym
verbose = options['verbose'] ? 0 : 1
instrument = options['instrument']

@app = ::Middleman::Application.new do
config[:mode] = :build
config[:environment] = env
::Middleman::Logger.singleton(verbose, instrument)
end
build_before(options)
process
end
Expand All @@ -37,18 +66,19 @@ def build_before(options = {})

if build_enabled
# http://forum.middlemanapp.com/t/problem-with-the-build-task-in-an-extension
run('middleman build') || exit(1)
run("middleman build -e #{options['environment']}") || exit(1)
end
end

def print_usage_and_die(message)
raise Error, "ERROR: #{message}\n#{Middleman::Deploy::README}"
raise StandardError, "ERROR: #{message}\n#{Middleman::Deploy::README}"
end

def process
server_instance = ::Middleman::Application.server.inst

camelized_method = self.deploy_options.method.to_s.split('_').map { |word| word.capitalize}.join

def process
server_instance = @app
camelized_method = self.deploy_options.deploy_method.to_s.split('_').map { |word| word.capitalize}.join
method_class_name = "Middleman::Deploy::Methods::#{camelized_method}"
method_instance = method_class_name.constantize.new(server_instance, self.deploy_options)

Expand All @@ -59,19 +89,19 @@ def deploy_options
options = nil

begin
options = ::Middleman::Application.server.inst.options
options = ::Middleman::Deploy.options
rescue NoMethodError
print_usage_and_die 'You need to activate the deploy extension in config.rb.'
end

unless options.method
unless options.deploy_method
print_usage_and_die 'The deploy extension requires you to set a method.'
end

case options.method
case options.deploy_method
when :rsync, :sftp
unless options.host && options.path
print_usage_and_die "The #{options.method} method requires host and path to be set."
print_usage_and_die "The #{options.deploy_method} method requires host and path to be set."
end
when :ftp
unless options.host && options.user && options.password && options.path
Expand All @@ -83,6 +113,9 @@ def deploy_options
end
end

# Add to CLI
Base.register(Middleman::Cli::Deploy, 'deploy', 'deploy [options]', Middleman::Deploy::TAGLINE)

# Alias "d" to "deploy"
Base.map('d' => 'deploy')
end
Expand Down
46 changes: 34 additions & 12 deletions lib/middleman-deploy/extension.rb
Expand Up @@ -4,15 +4,42 @@
# Extension namespace
module Middleman
module Deploy
class Options < Struct.new(:method, :host, :port, :user, :password, :path, :clean, :remote, :branch, :strategy, :build_before, :flags, :commit_message); end

@options

class << self

def options
@@options
@options
end

def options= options
@options = options
end

end

class Extension < Extension

option :deploy_method, nil
option :host, nil
option :port, nil
option :user, nil
option :password, nil
option :path, nil
option :clean, nil
option :remote, nil
option :branch, nil
option :strategy, nil
option :build_before, nil
option :flags, nil
option :commit_message, nil



def initialize(app, options_hash = {}, &block)
super

def registered(app, options_hash = {}, &block)
options = Options.new(options_hash)
yield options if block_given?

# Default options for the rsync method.
Expand All @@ -27,18 +54,13 @@ def registered(app, options_hash = {}, &block)

options.build_before ||= false

@@options = options
end

app.send :include, Helpers
def after_configuration
::Middleman::Deploy.options = options
end

alias_method :included, :registered
end

module Helpers
def options
::Middleman::Deploy.options
end
end
end
end
4 changes: 4 additions & 0 deletions lib/middleman-deploy/methods/base.rb
Expand Up @@ -9,6 +9,10 @@ def initialize(server_instance, options = {})
@server_instance = server_instance
end

def build_dir
self.server_instance.config.setting(:build_dir).value
end

def process
raise NotImplementedError
end
Expand Down
2 changes: 1 addition & 1 deletion lib/middleman-deploy/methods/ftp.rb
Expand Up @@ -22,7 +22,7 @@ def process

ftp = open_connection

Dir.chdir(self.server_instance.build_dir) do
Dir.chdir(self.build_dir) do
filtered_files.each do |filename|
if File.directory?(filename)
upload_directory(ftp, filename)
Expand Down
2 changes: 1 addition & 1 deletion lib/middleman-deploy/methods/git.rb
Expand Up @@ -7,7 +7,7 @@ def process

camelized_strategy = self.options.strategy.to_s.split('_').map { |word| word.capitalize}.join
strategy_class_name = "Middleman::Deploy::Strategies::Git::#{camelized_strategy}"
strategy_instance = strategy_class_name.constantize.new(self.server_instance.build_dir, self.options.remote, self.options.branch, self.options.commit_message)
strategy_instance = strategy_class_name.constantize.new(self.build_dir, self.options.remote, self.options.branch, self.options.commit_message)

strategy_instance.process
end
Expand Down
2 changes: 1 addition & 1 deletion lib/middleman-deploy/methods/rsync.rb
Expand Up @@ -21,7 +21,7 @@ def process

dest_url = "#{user}#{self.host}:#{self.path}"
flags = self.flags || '-avz'
command = "rsync #{flags} '-e ssh -p #{self.port}' #{self.server_instance.build_dir}/ #{dest_url}"
command = "rsync #{flags} '-e ssh -p #{self.port}' #{self.build_dir}/ #{dest_url}"

if self.clean
command += ' --delete'
Expand Down
2 changes: 1 addition & 1 deletion lib/middleman-deploy/methods/sftp.rb
Expand Up @@ -12,7 +12,7 @@ def process
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
Dir.chdir(self.build_dir) do
filtered_files.each do |filename|
if File.directory?(filename)
upload_directory(sftp, filename)
Expand Down

0 comments on commit 751c11f

Please sign in to comment.