middleman-deploy 0.0.12 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +6 -6
- data/README.md +54 -27
- data/lib/middleman-deploy/commands.rb +71 -18
- data/lib/middleman-deploy/extension.rb +2 -6
- data/lib/middleman-deploy/pkg-info.rb +2 -1
- data/middleman-deploy.gemspec +4 -2
- metadata +23 -5
data/Gemfile
CHANGED
@@ -4,15 +4,15 @@ source 'https://rubygems.org'
|
|
4
4
|
gemspec
|
5
5
|
|
6
6
|
group :development do
|
7
|
-
gem "rake"
|
8
|
-
gem "rdoc"
|
9
|
-
gem "yard"
|
7
|
+
gem "rake"
|
8
|
+
gem "rdoc"
|
9
|
+
gem "yard"
|
10
10
|
end
|
11
11
|
|
12
12
|
group :test do
|
13
|
-
gem "cucumber"
|
13
|
+
gem "cucumber"
|
14
14
|
gem "fivemat"
|
15
|
-
gem "aruba"
|
16
|
-
gem "rspec"
|
15
|
+
gem "aruba"
|
16
|
+
gem "rspec"
|
17
17
|
gem "simplecov"
|
18
18
|
end
|
data/README.md
CHANGED
@@ -1,35 +1,30 @@
|
|
1
|
-
Middleman Deploy - Deploy a [middleman](http://middlemanapp.com/)
|
1
|
+
Middleman Deploy - Deploy a [middleman](http://middlemanapp.com/)
|
2
|
+
built site over rsync, ftp, sftp, or git (e.g. gh-pages on github).
|
2
3
|
|
3
4
|
[](http://travis-ci.org/tvaughan/middleman-deploy)
|
4
5
|
|
5
|
-
|
6
|
+
# QUICK START
|
6
7
|
|
7
|
-
##
|
8
|
-
|
9
|
-
### Step 1
|
10
|
-
|
11
|
-
gem install middleman-deploy
|
12
|
-
|
13
|
-
### Step 2
|
8
|
+
## Step 1
|
14
9
|
|
15
10
|
middleman init example-site
|
16
11
|
cd example-site
|
17
12
|
|
18
|
-
|
13
|
+
## Step 2
|
19
14
|
|
20
15
|
Edit `Gemfile`, and add:
|
21
16
|
|
22
|
-
gem "middleman-deploy", "
|
17
|
+
gem "middleman-deploy", ">= 0.1.0"
|
23
18
|
|
24
19
|
Then run:
|
25
20
|
|
26
21
|
bundle install
|
27
22
|
|
28
|
-
|
23
|
+
## Step 3a - Rsync setup
|
29
24
|
|
30
25
|
First be sure that `rsync` is installed.
|
31
26
|
|
32
|
-
|
27
|
+
**These settings are required.**
|
33
28
|
|
34
29
|
Edit `config.rb`, and add:
|
35
30
|
|
@@ -42,7 +37,7 @@ Edit `config.rb`, and add:
|
|
42
37
|
|
43
38
|
Adjust these values accordingly.
|
44
39
|
|
45
|
-
|
40
|
+
**These settings are optional.**
|
46
41
|
|
47
42
|
To use a particular SSH port, add:
|
48
43
|
|
@@ -56,7 +51,11 @@ To remove orphaned files or directories on the remote host, add:
|
|
56
51
|
|
57
52
|
Default is `false`.
|
58
53
|
|
59
|
-
|
54
|
+
## Step 3b - Git setup
|
55
|
+
|
56
|
+
First be sure that `git` is installed.
|
57
|
+
|
58
|
+
**These settings are required.**
|
60
59
|
|
61
60
|
Edit `config.rb`, and add:
|
62
61
|
|
@@ -67,7 +66,7 @@ Edit `config.rb`, and add:
|
|
67
66
|
By default this will deploy to the `gh-pages` branch on the `origin`
|
68
67
|
remote. The `build` directory will become a git repo.
|
69
68
|
|
70
|
-
|
69
|
+
**These settings are optional.**
|
71
70
|
|
72
71
|
To use a particular remote, add:
|
73
72
|
|
@@ -86,9 +85,9 @@ To use a particular branch, add:
|
|
86
85
|
Default is `gh-pages`. This branch will be created on the remote if it
|
87
86
|
doesn't already exist.
|
88
87
|
|
89
|
-
|
88
|
+
## Step 3c - FTP setup
|
90
89
|
|
91
|
-
|
90
|
+
**These settings are required.**
|
92
91
|
|
93
92
|
Edit `config.rb`, and add:
|
94
93
|
|
@@ -102,21 +101,49 @@ Edit `config.rb`, and add:
|
|
102
101
|
|
103
102
|
Adjust these values accordingly.
|
104
103
|
|
105
|
-
|
104
|
+
## Step 3d - SFTP setup
|
105
|
+
|
106
|
+
**These settings are required.**
|
107
|
+
|
108
|
+
Edit `config.rb`, and add:
|
109
|
+
|
110
|
+
activate :deploy do |deploy|
|
111
|
+
deploy.method = :sftp
|
112
|
+
deploy.host = "sftp.example.com"
|
113
|
+
deploy.user = "tvaughan"
|
114
|
+
deploy.password = "secret"
|
115
|
+
deploy.path = "/srv/www/site"
|
116
|
+
end
|
117
|
+
|
118
|
+
Adjust these values accordingly.
|
119
|
+
|
120
|
+
## Step 4
|
106
121
|
|
107
122
|
middleman build [--clean]
|
108
|
-
middleman deploy [--
|
123
|
+
middleman deploy [--build-before]
|
109
124
|
|
110
|
-
To
|
125
|
+
To run `middleman build` before `middleman deploy`, add:
|
111
126
|
|
112
|
-
|
127
|
+
deploy.build_before = true
|
113
128
|
|
114
129
|
Default is `false`.
|
115
130
|
|
116
|
-
|
117
|
-
|
118
|
-
|
131
|
+
## BREAKING CHANGES
|
132
|
+
|
133
|
+
* v0.1.0
|
134
|
+
|
135
|
+
* Removed the `--clean` command-line option. This option only applied
|
136
|
+
to the rsync deploy method. The idea going forward is that
|
137
|
+
command-line options must apply to all deploy methods. Options that
|
138
|
+
are specific to a deploy method will only be available in
|
139
|
+
`config.rb`.
|
140
|
+
|
141
|
+
* Removed `deploy` from the `after_build` hook. This caused a
|
142
|
+
`deploy` to be run each time `build` was called. This workflow never
|
143
|
+
made sense. `deploy` was added to the `after_build` hook simply
|
144
|
+
because it was available.
|
119
145
|
|
120
|
-
|
146
|
+
## NOTES
|
121
147
|
|
122
|
-
Inspired by the rsync task in
|
148
|
+
Inspired by the rsync task in
|
149
|
+
[Octopress](https://github.com/imathis/octopress).
|
@@ -22,12 +22,23 @@ module Middleman
|
|
22
22
|
true
|
23
23
|
end
|
24
24
|
|
25
|
-
desc "deploy",
|
26
|
-
method_option "
|
25
|
+
desc "deploy [options]", Middleman::Deploy::TAGLINE
|
26
|
+
method_option "build_before",
|
27
27
|
:type => :boolean,
|
28
|
-
:aliases => "-
|
29
|
-
:desc => "
|
28
|
+
:aliases => "-b",
|
29
|
+
:desc => "Run `middleman build` before the deploy step"
|
30
|
+
|
30
31
|
def deploy
|
32
|
+
if options.has_key? "build_before"
|
33
|
+
build_before = options.build_before
|
34
|
+
else
|
35
|
+
build_before = self.deploy_options.build_before
|
36
|
+
end
|
37
|
+
if build_before
|
38
|
+
# http://forum.middlemanapp.com/t/problem-with-the-build-task-in-an-extension
|
39
|
+
builder = ::Middleman::Cli::Build.new(args=[], options={:instrument=>false})
|
40
|
+
builder.build
|
41
|
+
end
|
31
42
|
send("deploy_#{self.deploy_options.method}")
|
32
43
|
end
|
33
44
|
|
@@ -36,7 +47,7 @@ module Middleman
|
|
36
47
|
def print_usage_and_die(message)
|
37
48
|
raise Error, "ERROR: " + message + "\n" + <<EOF
|
38
49
|
|
39
|
-
You should follow one of the
|
50
|
+
You should follow one of the four examples below to setup the deploy
|
40
51
|
extension in config.rb.
|
41
52
|
|
42
53
|
# To deploy the build directory to a remote host via rsync:
|
@@ -70,6 +81,16 @@ activate :deploy do |deploy|
|
|
70
81
|
deploy.password = "secret"
|
71
82
|
deploy.path = "/srv/www/site"
|
72
83
|
end
|
84
|
+
|
85
|
+
# To deploy the build directory to a remote host via sftp:
|
86
|
+
activate :deploy do |deploy|
|
87
|
+
deploy.method = :sftp
|
88
|
+
# host, user, passwword and path *must* be set
|
89
|
+
deploy.host = "sftp.example.com"
|
90
|
+
deploy.user = "tvaughan"
|
91
|
+
deploy.password = "secret"
|
92
|
+
deploy.path = "/srv/www/site"
|
93
|
+
end
|
73
94
|
EOF
|
74
95
|
end
|
75
96
|
|
@@ -90,15 +111,14 @@ EOF
|
|
90
111
|
print_usage_and_die "The deploy extension requires you to set a method."
|
91
112
|
end
|
92
113
|
|
93
|
-
|
114
|
+
case options.method
|
115
|
+
when :rsync
|
94
116
|
if (!options.host || !options.user || !options.path)
|
95
117
|
print_usage_and_die "The rsync deploy method requires host, user, and path to be set."
|
96
118
|
end
|
97
|
-
|
98
|
-
|
99
|
-
if (options.method == :ftp)
|
119
|
+
when :ftp, :sftp
|
100
120
|
if (!options.host || !options.user || !options.password || !options.path)
|
101
|
-
print_usage_and_die "The
|
121
|
+
print_usage_and_die "The #{options.method} method requires host, user, password, and path to be set."
|
102
122
|
end
|
103
123
|
end
|
104
124
|
|
@@ -115,13 +135,7 @@ EOF
|
|
115
135
|
|
116
136
|
command = "rsync -avze '" + "ssh -p #{port}" + "' #{self.inst.build_dir}/ #{user}@#{host}:#{path}"
|
117
137
|
|
118
|
-
if
|
119
|
-
clean = options.clean
|
120
|
-
else
|
121
|
-
clean = self.deploy_options.clean
|
122
|
-
end
|
123
|
-
|
124
|
-
if clean
|
138
|
+
if self.deploy_options.clean
|
125
139
|
command += " --delete"
|
126
140
|
end
|
127
141
|
|
@@ -158,7 +172,7 @@ EOF
|
|
158
172
|
end
|
159
173
|
|
160
174
|
#if there is a branch with that name, switch to it, otherwise create a new one and switch to it
|
161
|
-
if `git branch`.split("\n").
|
175
|
+
if `git branch`.split("\n").any? { |b| b =~ /#{branch}/i }
|
162
176
|
`git checkout #{branch}`
|
163
177
|
else
|
164
178
|
`git checkout -b #{branch}`
|
@@ -220,6 +234,45 @@ EOF
|
|
220
234
|
ftp.close
|
221
235
|
end
|
222
236
|
|
237
|
+
def deploy_sftp
|
238
|
+
require 'net/sftp'
|
239
|
+
require 'ptools'
|
240
|
+
|
241
|
+
host = self.deploy_options.host
|
242
|
+
user = self.deploy_options.user
|
243
|
+
pass = self.deploy_options.password
|
244
|
+
path = self.deploy_options.path
|
245
|
+
|
246
|
+
puts "## Deploying via sftp to #{user}@#{host}:#{path}"
|
247
|
+
|
248
|
+
Net::SFTP.start(host, user, :password => pass) do |sftp|
|
249
|
+
sftp.mkdir(path)
|
250
|
+
Dir.chdir(self.inst.build_dir) do
|
251
|
+
files = Dir.glob('**/*', File::FNM_DOTMATCH)
|
252
|
+
files.reject { |a| a =~ Regexp.new('\.$') }.each do |f|
|
253
|
+
if File.directory?(f)
|
254
|
+
begin
|
255
|
+
sftp.mkdir("#{path}/#{f}")
|
256
|
+
puts "Created directory #{f}"
|
257
|
+
rescue
|
258
|
+
end
|
259
|
+
else
|
260
|
+
begin
|
261
|
+
sftp.upload(f, "#{path}/#{f}")
|
262
|
+
rescue Exception => e
|
263
|
+
reply = e.message
|
264
|
+
err_code = reply[0,3].to_i
|
265
|
+
if err_code == 550
|
266
|
+
sftp.upload(f, "#{path}/#{f}")
|
267
|
+
end
|
268
|
+
end
|
269
|
+
puts "Copied #{f}"
|
270
|
+
end
|
271
|
+
end
|
272
|
+
end
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
223
276
|
end
|
224
277
|
|
225
278
|
# Alias "d" to "deploy"
|
@@ -5,7 +5,7 @@ require "middleman-core"
|
|
5
5
|
module Middleman
|
6
6
|
module Deploy
|
7
7
|
|
8
|
-
class Options < Struct.new(:whatisthis, :method, :host, :port, :user, :password, :path, :clean, :remote, :branch, :
|
8
|
+
class Options < Struct.new(:whatisthis, :method, :host, :port, :user, :password, :path, :clean, :remote, :branch, :build_before); end
|
9
9
|
|
10
10
|
class << self
|
11
11
|
|
@@ -22,11 +22,7 @@ module Middleman
|
|
22
22
|
options.remote ||= "origin"
|
23
23
|
options.branch ||= "gh-pages"
|
24
24
|
|
25
|
-
options.
|
26
|
-
|
27
|
-
app.after_build do |builder|
|
28
|
-
::Middleman::Cli::Deploy.new.deploy if options.after_build
|
29
|
-
end
|
25
|
+
options.build_before ||= false
|
30
26
|
|
31
27
|
@@options = options
|
32
28
|
|
data/middleman-deploy.gemspec
CHANGED
@@ -9,8 +9,9 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.authors = ["Tom Vaughan"]
|
10
10
|
s.email = ["thomas.david.vaughan@gmail.com"]
|
11
11
|
s.homepage = "http://tvaughan.github.com/middleman-deploy/"
|
12
|
-
s.summary =
|
13
|
-
s.description =
|
12
|
+
s.summary = Middleman::Deploy::TAGLINE
|
13
|
+
s.description = Middleman::Deploy::TAGLINE
|
14
|
+
s.license = "MIT"
|
14
15
|
|
15
16
|
s.files = `git ls-files`.split("\n")
|
16
17
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
@@ -22,4 +23,5 @@ Gem::Specification.new do |s|
|
|
22
23
|
|
23
24
|
# Additional dependencies
|
24
25
|
s.add_runtime_dependency("ptools")
|
26
|
+
s.add_runtime_dependency("net-sftp")
|
25
27
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: middleman-deploy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-07-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: middleman-core
|
@@ -43,7 +43,23 @@ dependencies:
|
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
|
-
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: net-sftp
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
description: Deploy a middleman built site over rsync, ftp, sftp, or git (e.g. gh-pages
|
47
63
|
on github).
|
48
64
|
email:
|
49
65
|
- thomas.david.vaughan@gmail.com
|
@@ -65,7 +81,8 @@ files:
|
|
65
81
|
- lib/middleman_extension.rb
|
66
82
|
- middleman-deploy.gemspec
|
67
83
|
homepage: http://tvaughan.github.com/middleman-deploy/
|
68
|
-
licenses:
|
84
|
+
licenses:
|
85
|
+
- MIT
|
69
86
|
post_install_message:
|
70
87
|
rdoc_options: []
|
71
88
|
require_paths:
|
@@ -87,6 +104,7 @@ rubyforge_project:
|
|
87
104
|
rubygems_version: 1.8.23
|
88
105
|
signing_key:
|
89
106
|
specification_version: 3
|
90
|
-
summary: Deploy a middleman built site over rsync, ftp, or git (e.g. gh-pages
|
107
|
+
summary: Deploy a middleman built site over rsync, ftp, sftp, or git (e.g. gh-pages
|
108
|
+
on github).
|
91
109
|
test_files: []
|
92
110
|
has_rdoc:
|