usmu-github-pages 1.0.1 → 1.0.2
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/Guardfile +1 -1
- data/Rakefile +4 -5
- data/lib/usmu/github/pages.rb +29 -128
- data/lib/usmu/github/pages/commands.rb +7 -0
- data/lib/usmu/github/pages/commands/deploy.rb +68 -0
- data/lib/usmu/github/pages/commands/init.rb +81 -0
- data/lib/usmu/github/pages/version.rb +1 -1
- data/spec/pages/configuration_spec.rb +12 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e8de3a318b1cc72d1f2861d3b4fbee68f9f8b7da
|
4
|
+
data.tar.gz: 10e7765259b32a2e7b3ce9397bee9a4cd43ad58c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7517767aaed9757dbeeb2b1e4822e62d34d89be78afcbc90fa10cc437231f585e3efad95f07aad56317ca4a0b72e2dbaea33a5fc9810ceb30e7bc3c73f124508
|
7
|
+
data.tar.gz: ca383f949175e377aea5b425223daa94755143081e6ce0b52524518e987930dee07ae26d677cc57387d1e60f7ab132c42aa0bafad9240d880bf2d4e36d4e05ba
|
data/Guardfile
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
guard :rspec, cmd: 'rspec', spec_paths: ['spec'] do
|
5
5
|
watch(%r{^spec/.+_spec\.rb$})
|
6
|
-
watch(%r{^lib/usmu/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
6
|
+
watch(%r{^lib/usmu/github/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
7
7
|
watch(%r{^spec/support}) { 'spec' }
|
8
8
|
watch('spec/spec_helper.rb') { 'spec' }
|
9
9
|
|
data/Rakefile
CHANGED
@@ -16,7 +16,7 @@ desc 'Run all test scripts'
|
|
16
16
|
task :test => [:clean, :spec, :mutant]
|
17
17
|
|
18
18
|
desc 'Run mutation tests'
|
19
|
-
task :mutant, [:target] => [:clean] do |
|
19
|
+
task :mutant, [:target] => [:clean] do |_, args|
|
20
20
|
old = ENV.delete('CODECLIMATE_REPO_TOKEN')
|
21
21
|
if `which mutant 2>&1 > /dev/null; echo \$?`.to_i != 0
|
22
22
|
puts 'Mutant isn\'t supported on your platform. Please run these tests on MRI <= 2.1.5.'
|
@@ -67,7 +67,7 @@ end
|
|
67
67
|
|
68
68
|
# (mostly) borrowed from: https://gist.github.com/mcansky/802396
|
69
69
|
desc 'generate changelog with nice clean output'
|
70
|
-
task :changelog, :since_c, :until_c do |
|
70
|
+
task :changelog, :since_c, :until_c do |_, args|
|
71
71
|
since_c = args[:since_c] || `git tag | egrep '^[0-9]+\\.[0-9]+\\.[0-9]+\$' | sort -Vr | head -n 1`.chomp
|
72
72
|
until_c = args[:until_c]
|
73
73
|
cmd=`git log --pretty="format:%ci::::%an <%ae>::::%s::::%H" #{since_c}..#{until_c}`
|
@@ -76,16 +76,15 @@ task :changelog, :since_c, :until_c do |t,args|
|
|
76
76
|
changelog_content = "\#\# #{Usmu::Github::Pages::VERSION}\n\n"
|
77
77
|
|
78
78
|
cmd.lines.each do |entry|
|
79
|
-
|
79
|
+
_date, author, subject, hash = entry.chomp.split('::::')
|
80
80
|
entries[author] = Array.new unless entries[author]
|
81
|
-
day = date.split(' ').first
|
82
81
|
entries[author] << "#{subject} (#{hash})" unless subject =~ /Merge/
|
83
82
|
end
|
84
83
|
|
85
84
|
# generate clean output
|
86
85
|
entries.keys.each do |author|
|
87
86
|
changelog_content += author + "\n\n"
|
88
|
-
entries[author].
|
87
|
+
entries[author].reverse_each { |entry| changelog_content += "* #{entry}\n" }
|
89
88
|
end
|
90
89
|
|
91
90
|
puts changelog_content
|
data/lib/usmu/github/pages.rb
CHANGED
@@ -3,141 +3,42 @@
|
|
3
3
|
uri
|
4
4
|
usmu/github/pages/version
|
5
5
|
usmu/github/pages/configuration
|
6
|
+
usmu/github/pages/commands
|
6
7
|
}.each {|f| require f }
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
@log.debug("Initializing usmu-github-pages v#{VERSION}")
|
14
|
-
end
|
15
|
-
|
16
|
-
# @see Usmu::Plugin::CoreHooks#commands
|
17
|
-
def commands(ui, c)
|
18
|
-
@log.debug('Adding commands from usmu-github-pages.')
|
19
|
-
@ui = ui
|
20
|
-
|
21
|
-
c.command(:'gh-pages init') do |command|
|
22
|
-
command.syntax = 'usmu gh-pages init'
|
23
|
-
command.description = 'Ensures that your repository is compatible and setup correctly for Github Pages.'
|
24
|
-
command.action &method(:command_init)
|
25
|
-
end
|
26
|
-
|
27
|
-
c.command(:'gh-pages deploy') do |command|
|
28
|
-
command.syntax = 'usmu gh-pages deploy'
|
29
|
-
command.description = 'Generates a site and commits it to Github.'
|
30
|
-
command.action &method(:command_deploy)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def command_init(args, options)
|
35
|
-
config = Configuration.new(@ui.configuration['plugin', 'github-pages', default: {}])
|
36
|
-
|
37
|
-
# Ensure git (>= 2.5).
|
38
|
-
git_version = `git version 2>&1`.split(' ').last
|
39
|
-
if Gem::Version.new(git_version) < Gem::Version.new('2.5.0')
|
40
|
-
@log.fatal('The Github Pages plugin requires at least git version 2.5.0')
|
41
|
-
exit 1
|
42
|
-
end
|
43
|
-
|
44
|
-
# Work out what the correct gh-pages branch is.
|
45
|
-
remote = config['remote', default: 'origin']
|
46
|
-
branch = config['branch', default: config.default_branch(remote)]
|
47
|
-
@log.info("Configuring to deploy to #{remote}/#{branch}.")
|
48
|
-
|
49
|
-
# Ensure destination is gitignored.
|
50
|
-
destination = @ui.configuration['destination', default: 'site']
|
51
|
-
gitignore_path = File.expand_path './.gitignore', @ui.configuration.config_dir
|
52
|
-
gitignore = File.read(gitignore_path).lines.map(&:chomp)
|
53
|
-
if gitignore.grep(%r{^/?#{File.basename destination}$}).empty?
|
54
|
-
@log.info("Adding #{destination} to gitignore at #{gitignore_path}")
|
55
|
-
gitignore.push("#{File.basename destination}")
|
56
|
-
File.write gitignore_path, gitignore.join("\n") + "\n"
|
57
|
-
end
|
58
|
-
|
59
|
-
# Ensure the destination directory is configured correctly.
|
60
|
-
destination = @ui.configuration.destination_path
|
61
|
-
if File.exist? destination
|
62
|
-
unless File.file? File.expand_path('./.git', destination)
|
63
|
-
if File.exist? File.expand_path('./.git', destination)
|
64
|
-
@log.fatal('Destination directory looks like a git clone not a worktree: ' + destination)
|
65
|
-
else
|
66
|
-
@log.fatal('Destination directory exists but doesn\'t look like it is controlled by git: ' + destination)
|
67
|
-
end
|
68
|
-
exit 1
|
69
|
-
end
|
70
|
-
else
|
71
|
-
@log.info("Configuring git worktree at: #{destination}")
|
72
|
-
`git worktree prune 2>&1`
|
73
|
-
`git worktree add #{Shellwords.escape destination} HEAD 2>&1`
|
74
|
-
end
|
75
|
-
|
76
|
-
# Check if branch exists locally and remotely.
|
77
|
-
branches = `git branch -a`.lines.map{|l| l[2..-1]}.map(&:chomp)
|
78
|
-
local = !branches.select{|b| b == branch }.empty?
|
79
|
-
remote = !branches.select{|b| b == "remotes/#{remote}/#{branch}" }.empty?
|
80
|
-
if !local && !remote
|
81
|
-
Dir.chdir destination do
|
82
|
-
`git checkout -f --orphan #{Shellwords.escape branch} 2>&1`
|
83
|
-
`git rm -r . 2>&1`
|
84
|
-
end
|
85
|
-
else
|
86
|
-
Dir.chdir destination do
|
87
|
-
`git checkout -f #{Shellwords.escape branch} 2>&1`
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
def command_deploy(args, options)
|
93
|
-
@configuration = @ui.configuration
|
94
|
-
config = Configuration.new(@ui.configuration['plugin', 'github-pages', default: {}])
|
95
|
-
remote = config['remote', default: 'origin']
|
96
|
-
branch = config['branch', default: config.default_branch(remote)]
|
97
|
-
destination = @ui.configuration.destination_path
|
9
|
+
class Usmu::Github::Pages
|
10
|
+
def initialize
|
11
|
+
@log = Logging.logger[self]
|
12
|
+
@log.debug("Initializing usmu-github-pages v#{VERSION}")
|
13
|
+
end
|
98
14
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
exit 1
|
104
|
-
end
|
15
|
+
# @see Usmu::Plugin::CoreHooks#commands
|
16
|
+
def commands(ui, c)
|
17
|
+
@log.debug('Adding commands from usmu-github-pages.')
|
18
|
+
@ui = ui
|
105
19
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
end
|
20
|
+
c.command(:'gh-pages init') do |command|
|
21
|
+
command.syntax = 'usmu gh-pages init'
|
22
|
+
command.description = 'Ensures that your repository is compatible and setup correctly for Github Pages.'
|
23
|
+
command.action(&method(:command_init))
|
24
|
+
end
|
112
25
|
|
113
|
-
|
114
|
-
|
26
|
+
c.command(:'gh-pages deploy') do |command|
|
27
|
+
command.syntax = 'usmu gh-pages deploy'
|
28
|
+
command.description = 'Generates a site and commits it to Github.'
|
29
|
+
command.action(&method(:command_deploy))
|
30
|
+
end
|
31
|
+
end
|
115
32
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
if `git diff HEAD --name-only`.lines.count == 0
|
120
|
-
@log.info "Detected no changes - deploy aborted."
|
121
|
-
exit 0
|
122
|
-
end
|
123
|
-
`git commit -a -m "Update created by usmu-github-pages from revision #{sha}." 2>&1`
|
124
|
-
if $?.exitstatus != 0
|
125
|
-
@log.fatal "Unable to create a new commit. Please check the destination folder for more information."
|
126
|
-
exit 1
|
127
|
-
end
|
33
|
+
def config
|
34
|
+
@config ||= Configuration.new(@ui.configuration['plugin', 'github-pages', default: {}])
|
35
|
+
end
|
128
36
|
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
end
|
37
|
+
def command_init(args, options)
|
38
|
+
Usmu::Github::Pages::Commands::Init.new(args, options).run(config)
|
39
|
+
end
|
133
40
|
|
134
|
-
|
135
|
-
|
136
|
-
@log.success("Your site should be available shortly at http://#{File.read(cname_file).chomp}/")
|
137
|
-
else
|
138
|
-
@log.success("Deploy completed successfully.")
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
41
|
+
def command_deploy(args, options)
|
42
|
+
Usmu::Github::Pages::Commands::Deploy.new(args, options).run(config)
|
142
43
|
end
|
143
44
|
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
|
2
|
+
class Usmu::Github::Pages::Commands::Deploy
|
3
|
+
def initialize(*)
|
4
|
+
@log = Logging.logger[self]
|
5
|
+
end
|
6
|
+
|
7
|
+
def run(ui, config)
|
8
|
+
remote = config['remote', default: 'origin']
|
9
|
+
branch = config['branch', default: config.default_branch(remote)]
|
10
|
+
destination = ui.configuration.destination_path
|
11
|
+
|
12
|
+
# Ensure we're deploying a complete commit.
|
13
|
+
sha = `git rev-parse HEAD`.chomp[0, 7]
|
14
|
+
unless working_dir_clean?
|
15
|
+
@log.fatal("Found unsaved changes in your git repository. Please commit these changes and try again.")
|
16
|
+
exit 1
|
17
|
+
end
|
18
|
+
|
19
|
+
# Ensure clean worktree.
|
20
|
+
@log.info("Cleaning output directory.")
|
21
|
+
clean_destination(destination, remote, branch)
|
22
|
+
|
23
|
+
# Regenerate site.
|
24
|
+
Usmu.plugins[Usmu::Plugin::Core].command_generate({}, options)
|
25
|
+
|
26
|
+
# Commit results.
|
27
|
+
create_commit!(destination, "Update created by usmu-github-pages from revision #{sha}.")
|
28
|
+
|
29
|
+
# Push branch to remote.
|
30
|
+
@log.info("Deploying to Github...")
|
31
|
+
`git push #{Shellwords.escape remote} #{Shellwords.escape branch} 2>&1`
|
32
|
+
|
33
|
+
cname_file = File.expand_path('./CNAME', destination)
|
34
|
+
if File.exist? cname_file
|
35
|
+
@log.success("Your site should be available shortly at http://#{File.read(cname_file).chomp}/")
|
36
|
+
else
|
37
|
+
@log.success("Deploy completed successfully.")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
protected
|
42
|
+
|
43
|
+
def working_dir_clean?
|
44
|
+
`git diff HEAD --name-only`.lines.count == 0
|
45
|
+
end
|
46
|
+
|
47
|
+
def clean_destination(destination, remote, branch)
|
48
|
+
Dir.chdir destination do
|
49
|
+
remote = Shellwords.escape remote
|
50
|
+
branch = Shellwords.escape branch
|
51
|
+
`(git fetch #{remote} && git reset --hard #{remote}/#{branch}) 2>&1`
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def create_commit!(destination, message)
|
56
|
+
Dir.chdir destination do
|
57
|
+
if working_dir_clean?
|
58
|
+
@log.info "Detected no changes - deploy aborted."
|
59
|
+
exit 0
|
60
|
+
end
|
61
|
+
`(git add . && git commit -a -m #{Shellwords.escape message}) 2>&1`
|
62
|
+
if $?.exitstatus != 0
|
63
|
+
@log.fatal "Unable to create a new commit. Please check the destination folder for more information."
|
64
|
+
exit 1
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
|
2
|
+
class Usmu::Github::Pages::Commands::Init
|
3
|
+
def initialize(*)
|
4
|
+
@log = Logging.logger[self]
|
5
|
+
end
|
6
|
+
|
7
|
+
def run(ui, config)
|
8
|
+
# Ensure git (>= 2.5).
|
9
|
+
ensure_git!
|
10
|
+
|
11
|
+
# Work out what the correct gh-pages branch is.
|
12
|
+
remote = config['remote', default: 'origin']
|
13
|
+
branch = config['branch', default: config.default_branch(remote)]
|
14
|
+
@log.info("Configuring to deploy to #{remote}/#{branch}")
|
15
|
+
|
16
|
+
# Ensure destination is gitignored.
|
17
|
+
destination = ui.configuration['destination', default: 'site']
|
18
|
+
gitignore_path = File.expand_path './.gitignore', ui.configuration.config_dir
|
19
|
+
gitignore = File.read(gitignore_path).lines.map(&:chomp)
|
20
|
+
if gitignore.grep(%r{^/?#{File.basename destination}$}).empty?
|
21
|
+
@log.info("Adding #{destination} to gitignore at #{gitignore_path}")
|
22
|
+
gitignore.push("#{File.basename destination}")
|
23
|
+
File.write gitignore_path, gitignore.join("\n") + "\n"
|
24
|
+
end
|
25
|
+
|
26
|
+
# Ensure the destination directory is configured correctly.
|
27
|
+
destination = ui.configuration.destination_path
|
28
|
+
ensure_destination! destination
|
29
|
+
|
30
|
+
# Check if branch exists locally and remotely.
|
31
|
+
branches = `git branch -a`.lines.map{|l| l[2..-1]}.map(&:chomp)
|
32
|
+
local = !branches.select{|b| b == branch }.empty?
|
33
|
+
remote = !branches.select{|b| b == "remotes/#{remote}/#{branch}" }.empty?
|
34
|
+
if !local && !remote
|
35
|
+
create_destination_branch destination, branch
|
36
|
+
else
|
37
|
+
checkout_destination_branch destination, branch
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
protected
|
42
|
+
|
43
|
+
def ensure_git!
|
44
|
+
git_version = `git version 2>&1`.split(' ').last
|
45
|
+
if Gem::Version.new(git_version) < Gem::Version.new('2.5.0')
|
46
|
+
@log.fatal('The Github Pages plugin requires at least git version 2.5.0')
|
47
|
+
exit 1
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def ensure_destination!(destination)
|
52
|
+
if File.exist? destination
|
53
|
+
unless File.file? File.expand_path('./.git', destination)
|
54
|
+
if File.exist? File.expand_path('./.git', destination)
|
55
|
+
@log.fatal('Destination directory looks like a git clone not a worktree: ' + destination)
|
56
|
+
else
|
57
|
+
@log.fatal('Destination directory exists but doesn\'t look like it is controlled by git: ' + destination)
|
58
|
+
end
|
59
|
+
exit 1
|
60
|
+
end
|
61
|
+
else
|
62
|
+
@log.info("Configuring git worktree at: #{destination}")
|
63
|
+
`git worktree prune 2>&1`
|
64
|
+
`git worktree add #{Shellwords.escape destination} HEAD 2>&1`
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def create_destination_branch(destination, branch)
|
69
|
+
Dir.chdir destination do
|
70
|
+
`git checkout -f --orphan #{Shellwords.escape branch} 2>&1`
|
71
|
+
`git rm -r . 2>&1`
|
72
|
+
`git clean -fd 2>&1`
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def checkout_destination_branch(destination, branch)
|
77
|
+
Dir.chdir destination do
|
78
|
+
`git checkout -f #{Shellwords.escape branch} 2>&1`
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'usmu/github/pages/configuration'
|
2
|
+
require 'ostruct'
|
3
|
+
|
4
|
+
RSpec.describe Usmu::Github::Pages::Configuration do
|
5
|
+
context '#initialize' do
|
6
|
+
it 'indexes the configuration parameter' do
|
7
|
+
values = {foo: 'bar'}
|
8
|
+
conf = described_class.new(values)
|
9
|
+
expect(conf[:foo]).to eq('bar')
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: usmu-github-pages
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Scharley
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: usmu
|
@@ -175,8 +175,12 @@ files:
|
|
175
175
|
- Rakefile
|
176
176
|
- circle.yml
|
177
177
|
- lib/usmu/github/pages.rb
|
178
|
+
- lib/usmu/github/pages/commands.rb
|
179
|
+
- lib/usmu/github/pages/commands/deploy.rb
|
180
|
+
- lib/usmu/github/pages/commands/init.rb
|
178
181
|
- lib/usmu/github/pages/configuration.rb
|
179
182
|
- lib/usmu/github/pages/version.rb
|
183
|
+
- spec/pages/configuration_spec.rb
|
180
184
|
- spec/spec_helper.rb
|
181
185
|
- usmu-github-pages.gemspec
|
182
186
|
homepage: https://github.com/usmu/usmu-github-pages
|
@@ -204,5 +208,6 @@ signing_key:
|
|
204
208
|
specification_version: 4
|
205
209
|
summary: Github Pages publishing plugin for Usmu.
|
206
210
|
test_files:
|
211
|
+
- spec/pages/configuration_spec.rb
|
207
212
|
- spec/spec_helper.rb
|
208
213
|
has_rdoc:
|