rake-jekyll 1.0.4 → 1.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.
- checksums.yaml +4 -4
- data/README.adoc +69 -13
- data/bin/git-ssh-wrapper +7 -0
- data/lib/rake-jekyll.rb +6 -0
- data/lib/rake-jekyll/git_deploy_task.rb +70 -24
- data/lib/rake-jekyll/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ac699ba1d1df2ed15767446ee842fbe45906c142
|
4
|
+
data.tar.gz: be141acdedfa657144ec01b79415a7342c2a8430
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b40e103011acf97f5b140c0b99d5934ec97f1eef9ff7450936bdc3998eaa82d58efd43603aec1736811aa0b15ed5edd5b351a9c5039f4975ced980b717fbfb40
|
7
|
+
data.tar.gz: 7b21c15052fc052c4f3e23da7d287ba7641e337c94c7e1d91efdd74ba6bf2d601757c425b61451ca940fba6eec7000c88af62da3a9c2f84ff474b78eff71fda0
|
data/README.adoc
CHANGED
@@ -72,13 +72,17 @@ Rake::Jekyll::GitDeployTask.new(:deploy) do |t|
|
|
72
72
|
# user.name is not set in git config.
|
73
73
|
t.committer = 'Jekyll'
|
74
74
|
|
75
|
-
# Deploy the built site into remote branch named 'gh-pages'
|
76
|
-
#
|
77
|
-
|
78
|
-
|
75
|
+
# Deploy the built site into remote branch named 'gh-pages', or 'master' if
|
76
|
+
# the remote repository URL matches `#{gh_user}.github.io.git`.
|
77
|
+
# It will be automatically created if not exist yet.
|
78
|
+
t.deploy_branch = -> {
|
79
|
+
gh_user = ENV['TRAVIS_REPO_SLUG'].to_s.split('/').first
|
80
|
+
remote_url.match(/[:\/]#{gh_user}\.github\.io\.git$/) ? 'master' : 'gh-pages'
|
81
|
+
}
|
79
82
|
# Run this command to build the site.
|
80
|
-
t.
|
81
|
-
|
83
|
+
t.build_script = ->(dest_dir) {
|
84
|
+
puts "\nRunning Jekyll..."
|
85
|
+
sh "bundle exec jekyll build --destination #{dest_dir}"
|
82
86
|
}
|
83
87
|
# Use the default committer (configured in git) when available.
|
84
88
|
t.override_committer = false
|
@@ -86,16 +90,22 @@ Rake::Jekyll::GitDeployTask.new(:deploy) do |t|
|
|
86
90
|
# Use URL of the 'origin' remote to fetch/push the built site into. If env.
|
87
91
|
# variable GH_TOKEN is set, then it adds it as a userinfo to the URL.
|
88
92
|
t.remote_url = -> {
|
89
|
-
`git config remote.origin.url`.strip.gsub(/^git:/, 'https:')
|
90
|
-
|
91
|
-
|
93
|
+
url = `git config remote.origin.url`.strip.gsub(/^git:/, 'https:')
|
94
|
+
next url.gsub(%r{^https://([^/]+)/(.*)$}, 'git@\1:\2') if ssh_key_file?
|
95
|
+
next url.gsub(%r{^https://}, "https://#{ENV['GH_TOKEN']}@") if ENV.key? 'GH_TOKEN'
|
96
|
+
next url
|
92
97
|
}
|
93
|
-
# Skip commit and push when building a pull request
|
94
|
-
#
|
95
|
-
|
98
|
+
# Skip commit and push when building a pull request, env. variable
|
99
|
+
# SKIP_DEPLOY represents truthy, or env. variable SOURCE_BRANCH is set, but
|
100
|
+
# does not match TRAVIS_BRANCH.
|
101
|
+
t.skip_deploy = -> {
|
96
102
|
ENV['TRAVIS_PULL_REQUEST'].to_i > 0 ||
|
97
|
-
%w[yes y true 1].include?(ENV['
|
103
|
+
%w[yes y true 1].include?(ENV['SKIP_DEPLOY'].to_s.downcase) ||
|
104
|
+
(ENV['SOURCE_BRANCH'] && ENV['SOURCE_BRANCH'] != ENV['TRAVIS_BRANCH'])
|
98
105
|
}
|
106
|
+
# Path of the private SSH key to be used for communication with the
|
107
|
+
# repository defined by remote_url.
|
108
|
+
t.ssh_key_file = '.deploy_key'
|
99
109
|
end
|
100
110
|
----
|
101
111
|
|
@@ -147,6 +157,12 @@ script: bundle exec rake deploy
|
|
147
157
|
.. open your https://travis-ci.org/profile/[profile page] on Travis,
|
148
158
|
.. find the repository and turn on the switch,
|
149
159
|
.. then click on repository settings (next to the switch) and enable “Build only if .travis.yml is present.”
|
160
|
+
|
161
|
+
Now you can choose if you want to use GitHub token (an easier way), or a deploy key (more secure way).
|
162
|
+
|
163
|
+
===== A. Use GitHub token
|
164
|
+
|
165
|
+
[start=6]
|
150
166
|
. Generate a new personal access token on GitHub:
|
151
167
|
.. open https://github.com/settings/tokens/new[this page] to generate a new personal access token,
|
152
168
|
.. select the scope _public_repo_, fill some description and confirm.
|
@@ -163,6 +179,46 @@ env:
|
|
163
179
|
global:
|
164
180
|
secure: YOUR-ENCRYPTED-TOKEN
|
165
181
|
----
|
182
|
+
+
|
183
|
+
. Commit changes, push to GitHub and check that Travis has started the job and finished it successfully.
|
184
|
+
|
185
|
+
===== B. Use SSH deploy key
|
186
|
+
|
187
|
+
[start=6]
|
188
|
+
. Generate new RSA key pair and write it to file `.deploy_key` (and `.deploy_key.pub`) in the root of your Jekyll repository:
|
189
|
+
+
|
190
|
+
$ ssh-keygen -N '' -f .deploy_key
|
191
|
+
+
|
192
|
+
. Encrypt the private key and add it to your `.travis.yml`:
|
193
|
+
.. encrypt the key:
|
194
|
+
+
|
195
|
+
$ travis encrypt-file .deploy_key --add
|
196
|
+
+
|
197
|
+
.. check that it created file `.deploy_key.enc` and added something like the following to `.travis.yml`:
|
198
|
+
+
|
199
|
+
[source, yaml]
|
200
|
+
----
|
201
|
+
before_install:
|
202
|
+
- openssl aes-256-cbc -K $encrypted_e18dd77852c2_key -iv $encrypted_e18dd77852c2_iv -in .deploy_key.enc -out .deploy_key -d
|
203
|
+
----
|
204
|
+
+
|
205
|
+
.. and add command `chmod 600 .deploy_key` to `.travis.yml` after the `openssl` command, so you will end with something like:
|
206
|
+
+
|
207
|
+
[source, yaml]
|
208
|
+
----
|
209
|
+
before_install:
|
210
|
+
- openssl aes-256-cbc -K $encrypted_e18dd77852c2_key -iv $encrypted_e18dd77852c2_iv -in .deploy_key.enc -out .deploy_key -d
|
211
|
+
- chmod 600 .deploy_key
|
212
|
+
----
|
213
|
+
+
|
214
|
+
. Add `.deploy_key` to `.gitignore` (this is unencrypted private key, keep it in secret!):
|
215
|
+
+
|
216
|
+
$ echo '.deploy_key' >> .gitignore
|
217
|
+
+
|
218
|
+
. Register the generated key as a deploy key in your GitHub repository:
|
219
|
+
.. open `https://github.com/<username>/<reponame>/settings/keys` and click on _Add deploy key_,
|
220
|
+
.. paste content of the `.deploy_key.pub` file to the textbox,
|
221
|
+
.. select “Allow write access” and confirm.
|
166
222
|
. Commit changes, push to GitHub and check that Travis has started the job and finished it successfully.
|
167
223
|
|
168
224
|
|
data/bin/git-ssh-wrapper
ADDED
data/lib/rake-jekyll.rb
CHANGED
@@ -95,14 +95,16 @@ module Rake::Jekyll
|
|
95
95
|
# @param attr_name [#to_s] name of the attribute to define.
|
96
96
|
# @param default_value [Object] the default value (optional).
|
97
97
|
# @yield When the block is given, then it's used as a default value.
|
98
|
-
# It takes precedence over +default_value+.
|
98
|
+
# It takes precedence over the +default_value+. It's evaluated in an
|
99
|
+
# instance context.
|
99
100
|
def self.callable_attr(attr_name, default_value = nil, &default_block)
|
100
101
|
var_name = "@#{attr_name}".sub('?', '').to_sym
|
101
102
|
|
102
103
|
define_method attr_name do
|
103
104
|
value = instance_variable_get(var_name)
|
105
|
+
|
104
106
|
if value.nil? && default_block
|
105
|
-
do_in_working_dir &default_block
|
107
|
+
do_in_working_dir { instance_eval &default_block }
|
106
108
|
elsif value.nil?
|
107
109
|
default_value
|
108
110
|
elsif value.is_a?(Proc) && value.arity.zero?
|
@@ -171,23 +173,33 @@ module Rake::Jekyll
|
|
171
173
|
# If the remote branch doesn't exist yet, then it's automatically created
|
172
174
|
# as an orphan branch.
|
173
175
|
#
|
174
|
-
# @return [String, Proc] name of the remote branch
|
176
|
+
# @return [String, Proc] name of the remote branch. Defaults to +gh-page+,
|
177
|
+
# or +master+ if the _remote_url_ matches `#{gh_user}.github.io.git`.
|
175
178
|
#
|
176
|
-
callable_attr :deploy_branch
|
179
|
+
callable_attr :deploy_branch do
|
180
|
+
gh_user = ENV['TRAVIS_REPO_SLUG'].to_s.split('/').first
|
181
|
+
remote_url.match(/[:\/]#{gh_user}\.github\.io\.git$/) ? 'master' : 'gh-pages'
|
182
|
+
end
|
177
183
|
|
178
184
|
##
|
179
|
-
# @!attribute
|
185
|
+
# @!attribute build_script
|
180
186
|
# Defines a function that executes Jekyll to build the site.
|
181
187
|
# Defaults to:
|
188
|
+
# puts "\nRunning Jekyll..."
|
182
189
|
# Rake.sh "bundle exec jekyll build --destination #{dest_dir}"
|
183
190
|
#
|
184
191
|
# @return [Proc] a Proc that accepts one argument; the destination
|
185
192
|
# directory to generate the site into.
|
186
193
|
#
|
187
|
-
callable_attr :
|
194
|
+
callable_attr :build_script, ->(dest_dir) {
|
195
|
+
puts "\nRunning Jekyll..."
|
188
196
|
Rake.sh "bundle exec jekyll build --destination #{dest_dir}"
|
189
197
|
}
|
190
198
|
|
199
|
+
# For backward compatibility, remove in 2.x.
|
200
|
+
alias_method :jekyll_build, :build_script
|
201
|
+
alias_method :jekyll_build=, :build_script=
|
202
|
+
|
191
203
|
##
|
192
204
|
# @!attribute override_committer?
|
193
205
|
# @return [Boolean, Proc] +true+ to always use {#committer}, +false+ to use
|
@@ -196,30 +208,56 @@ module Rake::Jekyll
|
|
196
208
|
|
197
209
|
##
|
198
210
|
# @!attribute remote_url
|
199
|
-
#
|
200
|
-
#
|
201
|
-
#
|
202
|
-
#
|
211
|
+
# Defines URL of the remote git repository to pull and push the built site
|
212
|
+
# into. The default is to use URL of the +origin+ remote and:
|
213
|
+
#
|
214
|
+
# a. if {#ssh_key_file} is readable, then convert URL to SSH address with
|
215
|
+
# user +git+;
|
216
|
+
# b. or if environment variable +GT_TOKEN+ is set, then replace +git:+
|
217
|
+
# schema with +https:+ and add +GH_TOKEN+ as an userinfo.
|
218
|
+
# c. else use remote URL as is.
|
219
|
+
#
|
220
|
+
# @return [String, Proc] URL of the target git repository.
|
221
|
+
#
|
203
222
|
callable_attr :remote_url do
|
204
|
-
`git config remote.origin.url`.strip.gsub(/^git:/, 'https:')
|
205
|
-
|
206
|
-
|
223
|
+
url = `git config remote.origin.url`.strip.gsub(/^git:/, 'https:')
|
224
|
+
next url.gsub(%r{^https://([^/]+)/(.*)$}, 'git@\1:\2') if ssh_key_file?
|
225
|
+
next url.gsub(%r{^https://}, "https://#{ENV['GH_TOKEN']}@") if ENV.key? 'GH_TOKEN'
|
226
|
+
next url
|
207
227
|
end
|
208
228
|
|
209
229
|
##
|
210
|
-
# @!attribute [w]
|
230
|
+
# @!attribute [w] skip_deploy
|
211
231
|
# Whether to skip the commit and push phase.
|
212
232
|
# Default is to return +true+ when env variable +TRAVIS_PULL_REQUEST+
|
213
|
-
# is an integer value greater than 0
|
214
|
-
# (i.e. contains yes, y, true, or 1)
|
233
|
+
# is an integer value greater than 0, +SKIP_DEPLOY+ represents truthy
|
234
|
+
# (i.e. contains yes, y, true, or 1), or +SOURCE_BRANCH+ is set and does
|
235
|
+
# not match +TRAVIS_BRANCH+.
|
215
236
|
#
|
216
|
-
# @return [Boolean, Proc]
|
237
|
+
# @return [Boolean, Proc] skip deploy?
|
217
238
|
#
|
218
|
-
callable_attr :
|
239
|
+
callable_attr :skip_deploy? do
|
219
240
|
ENV['TRAVIS_PULL_REQUEST'].to_i > 0 ||
|
220
|
-
%w[yes y true 1].include?(ENV['SKIP_COMMIT'].to_s.downcase)
|
241
|
+
%w[yes y true 1].include?((ENV['SKIP_DEPLOY'] || ENV['SKIP_COMMIT']).to_s.downcase) ||
|
242
|
+
(ENV['SOURCE_BRANCH'] && ENV['SOURCE_BRANCH'] != ENV['TRAVIS_BRANCH'])
|
221
243
|
end
|
222
244
|
|
245
|
+
# For backward compatibility, remove in 2.x.
|
246
|
+
alias_method :skip_commit?, :skip_deploy?
|
247
|
+
alias_method :skip_commit=, :skip_deploy=
|
248
|
+
|
249
|
+
##
|
250
|
+
# @!attribute ssh_key_file
|
251
|
+
# Defines path of the private SSH key to be used for communication with
|
252
|
+
# {#remote_url}. This is optional; when the file doesn't exist, then it's
|
253
|
+
# ignored.
|
254
|
+
#
|
255
|
+
# @note NEVER STORE YOUR PRIVATE SSH KEY IN THE REPOSITORY UNENCRYPTED!
|
256
|
+
#
|
257
|
+
# @return [String, Proc] path of the private SSH key (default: +.deploy_key+).
|
258
|
+
#
|
259
|
+
callable_attr :ssh_key_file, '.deploy_key'
|
260
|
+
|
223
261
|
|
224
262
|
##
|
225
263
|
# @param name [#to_sym] name of the task to define.
|
@@ -231,6 +269,11 @@ module Rake::Jekyll
|
|
231
269
|
|
232
270
|
yield self if block_given?
|
233
271
|
|
272
|
+
if ssh_key_file?
|
273
|
+
ENV['SSH_PRIVATE_KEY'] = "#{@working_dir}/#{ssh_key_file}"
|
274
|
+
ENV['GIT_SSH'] = "#{BIN_DIR}/git-ssh-wrapper"
|
275
|
+
end
|
276
|
+
|
234
277
|
define_task!
|
235
278
|
end
|
236
279
|
|
@@ -256,16 +299,15 @@ module Rake::Jekyll
|
|
256
299
|
end
|
257
300
|
end
|
258
301
|
|
259
|
-
|
260
|
-
jekyll_build[temp_dir]
|
302
|
+
build_script.call(temp_dir)
|
261
303
|
|
262
304
|
Dir.chdir temp_dir do
|
263
305
|
unless any_changes?
|
264
|
-
puts 'Nothing to commit.'; next
|
306
|
+
puts 'Nothing to commit and deploy.'; next
|
265
307
|
end
|
266
308
|
|
267
|
-
if
|
268
|
-
puts 'Skipping
|
309
|
+
if skip_deploy?
|
310
|
+
puts 'Skipping deploy.'; next
|
269
311
|
end
|
270
312
|
|
271
313
|
if override_committer? || !config_set?('user.name')
|
@@ -284,5 +326,9 @@ module Rake::Jekyll
|
|
284
326
|
yield
|
285
327
|
end
|
286
328
|
end
|
329
|
+
|
330
|
+
def ssh_key_file?
|
331
|
+
File.readable?(ssh_key_file)
|
332
|
+
end
|
287
333
|
end
|
288
334
|
end
|
data/lib/rake-jekyll/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rake-jekyll
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jakub Jirutka
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -61,6 +61,7 @@ files:
|
|
61
61
|
- LICENSE
|
62
62
|
- README.adoc
|
63
63
|
- Rakefile
|
64
|
+
- bin/git-ssh-wrapper
|
64
65
|
- lib/rake-jekyll.rb
|
65
66
|
- lib/rake-jekyll/git_deploy_task.rb
|
66
67
|
- lib/rake-jekyll/version.rb
|