Compare commits

...

12 Commits

Author SHA1 Message Date
Karl Freeman 243ab38b08 tidy up changelog [ci skip] 2015-08-16 19:27:24 +01:00
Karl Freeman 32d7897b66 2.0.0-alpha
closes #93
2015-08-16 19:09:26 +01:00
Karl Freeman 9cd8988a66 not needed 2015-08-16 19:08:07 +01:00
Karl Freeman 86f76b2a53 tidy up 2015-08-16 19:06:10 +01:00
Karl Freeman 751c11f6eb Merge pull request #87 from emilioforrer/development
Fixing compatibility issues with middleman v4.0.0.beta.1
2015-08-16 18:56:58 +01:00
Emilio Forrer c590d005cf Fixing cucumber failed test 2015-02-22 22:09:54 -06:00
Emilio Forrer 1806c9263b Fixing dependency error while activating asset_hash and validated middleman version 2015-02-22 21:56:53 -06:00
Emilio Forrer a8c6fdafef Fixing dependency error while activating asset_hash 2015-02-22 21:18:59 -06:00
Emilio Forrer 9eece01aef Fixing compatibility issues with middleman v4.0.0.beta.1 2015-02-22 15:52:52 -06:00
Karl Freeman 000cabda96 Merge pull request #84 from Aupajo/fix/git-email-in-force-push
Fix Git user.email change in force push strategy
2015-01-18 10:22:37 +00:00
Pete Nicholls 4b79845d53 Fix Git user.email change in force push strategy 2015-01-18 14:51:25 +13:00
Karl Freeman 21d04f253a latest travis 2014-11-21 18:25:10 +00:00
16 changed files with 162 additions and 131 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

@ -1,4 +1,5 @@
language: ruby
sudo: false
cache: bundler
bundler_args: --without development
rvm:
@ -10,6 +11,7 @@ rvm:
- 2.0.0
- 1.9.3
- rbx-2
before_script: bundle update
matrix:
fast_finish: true
allow_failures:
@ -21,4 +23,4 @@ matrix:
notifications:
email: false
env:
- CODECLIMATE_REPO_TOKEN=5eee8e8624962f963a52a1d2313dc7407e3b8006291e3704346c786642cc073b
- CODECLIMATE_REPO_TOKEN=5eee8e8624962f963a52a1d2313dc7407e3b8006291e3704346c786642cc073b

View File

@ -1,8 +1,12 @@
master
===
Next Release
============
* Your contribution here.
1.0.0
===
2.0.0-alpha (02/08/2015)
==================
* [Fixing compatibility issues with middleman v4.0.0.beta.1](https://github.com/middleman-contrib/middleman-deploy/pull/87) - [@emilioforrer](https://github.com/emilioforrer).
* Respect user details of git repo. #70
* Prevent bad commits deploying. (git) #77
1.0.0 (16/07/2014)
==================
* [Respect user details of git repo](https://github.com/middleman-contrib/middleman-deploy/pull/70) - [@Gee-Bee](https://github.com/gee-bee).
* [Prevent bad commits deploying](https://github.com/middleman-contrib/middleman-deploy/pull/77) - [@karlfreeman](https://github.com/mconnell).

View File

@ -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
@ -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
@ -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
```
@ -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
@ -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
```

View File

@ -4,5 +4,5 @@ require 'middleman-deploy/commands'
::Middleman::Extensions.register(:deploy) do
require 'middleman-deploy/extension'
::Middleman::Deploy
::Middleman::Deploy::Extension
end

View File

@ -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'
@ -8,24 +8,52 @@ require 'middleman-deploy/strategies'
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
@ -33,24 +61,23 @@ 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
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}"
fail 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
server_instance = @app
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
@ -59,19 +86,19 @@ module Middleman
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
@ -83,6 +110,9 @@ module Middleman
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

View File

@ -4,15 +4,32 @@ require 'middleman-core'
# 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
end
attr_reader :options
attr_writer :options
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.
@ -23,21 +40,13 @@ 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
@@options = options
app.send :include, Helpers
end
alias_method :included, :registered
end
module Helpers
def options
::Middleman::Deploy.options
def after_configuration
::Middleman::Deploy.options = options
end
end
end

View File

@ -9,8 +9,12 @@ module Middleman
@server_instance = server_instance
end
def build_dir
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.server_instance.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.server_instance.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.server_instance.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.server_instance.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

@ -1,9 +1,9 @@
module Middleman
module Deploy
PACKAGE = 'middleman-deploy'
VERSION = '1.0.0'
VERSION = '2.0.0-alpha'
TAGLINE = 'Deploy a middleman built site over rsync, ftp, sftp, or git (e.g. gh-pages on github).'
README = %Q{
README = %{
You should follow one of the four examples below to setup the deploy
extension in config.rb.

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.name "#{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