meataxe 0.1.0 → 0.5.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/.gitignore +21 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +33 -0
- data/Rakefile +1 -0
- data/lib/meataxe/capistrano/tasks/check_revision.cap +14 -0
- data/lib/meataxe/capistrano/tasks/compile_assets_locally.cap +17 -0
- data/lib/meataxe/capistrano/tasks/logs.cap +14 -0
- data/lib/meataxe/capistrano/tasks/monit.cap +17 -0
- data/lib/meataxe/capistrano/tasks/nginx.cap +22 -0
- data/lib/meataxe/capistrano/tasks/run_tests.cap +18 -0
- data/lib/meataxe/capistrano/tasks/setup_config.cap +33 -0
- data/lib/meataxe/capistrano/tasks/tasks.cap +12 -0
- data/lib/meataxe/capistrano.rb +51 -0
- data/lib/meataxe/version.rb +3 -0
- data/lib/meataxe.rb +9 -0
- data/meataxe.gemspec +23 -0
- metadata +23 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6c283dfff495121cc09751b3b324b41548a14a38
|
4
|
+
data.tar.gz: 937a201757543961e2ca52682cd74773c8f84fad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c219f3df6013d5560e06f531580c1e706df152dc872c8e64499bdcac414c8ba672907efb6c1f28ef128101aa272b089b1bc0fd7a4a75778cf3ccca9ac7023f2
|
7
|
+
data.tar.gz: 0ab1cfc0f1e5acc740e7a9a015afb3fc98d00256dda7cbda0a119002c65eba8d954e315a92d0c833d7861ddc3dfe4c5e166dd59000d6ceba1fbd5f9e617042ba
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Sourcey
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# Meataxe
|
2
|
+
|
3
|
+
Meataxe is a killer collection of Capistrano 3 deployment scripts.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```
|
10
|
+
gem 'meataxe', group: :development
|
11
|
+
```
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
```
|
16
|
+
$ bundle
|
17
|
+
```
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
```
|
22
|
+
$ gem install meataxe
|
23
|
+
```
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
|
27
|
+
Add the following lines to your `Capfile`
|
28
|
+
|
29
|
+
```ruby
|
30
|
+
require 'meataxe/capistrano'
|
31
|
+
```
|
32
|
+
|
33
|
+
Then you can use ```cap -T``` to list available tasks.
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,14 @@
|
|
1
|
+
namespace :deploy do
|
2
|
+
desc "checks whether the currently checkout out revision matches the
|
3
|
+
remote one we're trying to deploy from"
|
4
|
+
task :check_revision do
|
5
|
+
branch = fetch(:branch)
|
6
|
+
unless `git rev-parse HEAD` == `git rev-parse origin/#{branch}`
|
7
|
+
puts "WARNING: HEAD is not the same as origin/#{branch}"
|
8
|
+
puts "Run `git push` to sync changes or make sure you've"
|
9
|
+
puts "checked out the branch: #{branch} as you can only deploy"
|
10
|
+
puts "if you've got the target branch checked out"
|
11
|
+
exit
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
namespace :deploy do
|
2
|
+
desc "compiles assets locally then rsyncs"
|
3
|
+
task :compile_assets_locally do
|
4
|
+
run_locally do
|
5
|
+
execute "RAILS_ENV=#{fetch(:rails_env)} bundle exec rake assets:precompile"
|
6
|
+
end
|
7
|
+
on roles(:app) do |role|
|
8
|
+
run_locally do
|
9
|
+
execute "rsync -av ./public/assets/ #{role.user}@#{role.hostname}:#{release_path}/public/assets/;"
|
10
|
+
end
|
11
|
+
sudo "chmod -R 755 #{release_path}/public/assets/"
|
12
|
+
end
|
13
|
+
run_locally do
|
14
|
+
execute "rm -rf ./public/assets"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
namespace :logs do
|
2
|
+
task :tail, :file do |t, args|
|
3
|
+
if args[:file]
|
4
|
+
on roles(:app) do
|
5
|
+
execute "tail -f #{shared_path}/log/#{args[:file]}.log"
|
6
|
+
end
|
7
|
+
else
|
8
|
+
puts "please specify a logfile e.g: 'rake logs:tail[logfile]"
|
9
|
+
puts "will tail 'shared_path/log/logfile.log'"
|
10
|
+
puts "remember if you use zsh you'll need to format it as:"
|
11
|
+
puts "rake 'logs:tail[logfile]' (single quotes)"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
namespace :monit do
|
2
|
+
%w(start stop restart).each do |task_name|
|
3
|
+
desc "#{task_name} Monit"
|
4
|
+
task task_name do
|
5
|
+
on roles(:app), in: :sequence, wait: 5 do
|
6
|
+
sudo "service monit #{task_name}"
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
desc "Reload Monit"
|
12
|
+
task 'reload' do
|
13
|
+
on roles(:app), in: :sequence, wait: 5 do
|
14
|
+
sudo "monit reload"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
namespace :nginx do
|
2
|
+
%w(start stop restart reload).each do |task_name|
|
3
|
+
desc "#{task } Nginx"
|
4
|
+
task task_name do
|
5
|
+
on roles(:app), in: :sequence, wait: 5 do
|
6
|
+
sudo "/etc/init.d/nginx #{task_name}"
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
desc "Remove default Nginx Virtual Host"
|
12
|
+
task "remove_default_vhost" do
|
13
|
+
on roles(:app) do
|
14
|
+
if test("[ -f /etc/nginx/sites-enabled/default ]")
|
15
|
+
sudo "rm /etc/nginx/sites-enabled/default"
|
16
|
+
puts "removed default Nginx Virtualhost"
|
17
|
+
else
|
18
|
+
puts "No default Nginx Virtualhost to remove"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
namespace :deploy do
|
2
|
+
desc "Runs test before deploying, can't deploy unless they pass"
|
3
|
+
task :run_tests do
|
4
|
+
test_log = "log/capistrano.test.log"
|
5
|
+
tests = fetch(:tests)
|
6
|
+
tests.each do |test|
|
7
|
+
puts "--> Running tests: '#{test}', please wait ..."
|
8
|
+
unless system "bundle exec rspec #{test} > #{test_log} 2>&1"
|
9
|
+
puts "--> Tests: '#{test}' failed. Results in: #{test_log} and below:"
|
10
|
+
system "cat #{test_log}"
|
11
|
+
exit;
|
12
|
+
end
|
13
|
+
puts "--> '#{test}' passed"
|
14
|
+
end
|
15
|
+
puts "--> All tests passed"
|
16
|
+
system "rm #{test_log}"
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
namespace :deploy do
|
2
|
+
task :setup_config do
|
3
|
+
on roles(:app) do
|
4
|
+
# make the config dir
|
5
|
+
execute :mkdir, "-p #{shared_path}/config"
|
6
|
+
full_app_name = fetch(:full_app_name)
|
7
|
+
|
8
|
+
# config files to be uploaded to shared/config, see the
|
9
|
+
# definition of smart_template for details of operation.
|
10
|
+
# Essentially looks for #{filename}.erb in deploy/#{full_app_name}/
|
11
|
+
# and if it isn't there, falls back to deploy/#{shared}. Generally
|
12
|
+
# everything should be in deploy/shared with params which differ
|
13
|
+
# set in the stage files
|
14
|
+
config_files = fetch(:config_files)
|
15
|
+
config_files.each do |file|
|
16
|
+
smart_template file
|
17
|
+
end
|
18
|
+
|
19
|
+
# which of the above files should be marked as executable
|
20
|
+
executable_files = fetch(:executable_config_files)
|
21
|
+
executable_files.each do |file|
|
22
|
+
execute :chmod, "+x #{shared_path}/config/#{file}"
|
23
|
+
end
|
24
|
+
|
25
|
+
# symlink stuff which should be... symlinked
|
26
|
+
symlinks = fetch(:symlinks)
|
27
|
+
|
28
|
+
symlinks.each do |symlink|
|
29
|
+
sudo "ln -nfs #{shared_path}/config/#{symlink[:source]} #{sub_strings(symlink[:link])}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
Dir.glob(File.join(File.dirname(__FILE__), 'capistrano/tasks/*.cap')).each { |r| load r }
|
2
|
+
|
3
|
+
# First try and copy the file `config/deploy/#{full_app_name}/#{from}.erb`
|
4
|
+
# to `shared/config/to`
|
5
|
+
#
|
6
|
+
# If the original source path doesn exist then it will search in:
|
7
|
+
# `config/deploy/shared/#{from}.erb`
|
8
|
+
# This allows files which are common to all enviros to come from a single
|
9
|
+
# source while allowing specific ones to be over-ridden.
|
10
|
+
# If the target file name is the same as the source then the second parameter
|
11
|
+
# can be left out.
|
12
|
+
def smart_template(from, to=nil)
|
13
|
+
to ||= from
|
14
|
+
full_to_path = "#{shared_path}/config/#{to}"
|
15
|
+
if from_erb_path = template_file(from)
|
16
|
+
from_erb = StringIO.new(ERB.new(File.read(from_erb_path)).result(binding))
|
17
|
+
upload! from_erb, full_to_path
|
18
|
+
info "copying: #{from_erb} to: #{full_to_path}"
|
19
|
+
else
|
20
|
+
error "error #{from} not found"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def template_file(name)
|
25
|
+
if File.exist?((file = "config/deploy/#{fetch(:full_app_name)}/#{name}.erb"))
|
26
|
+
return file
|
27
|
+
elsif File.exist?((file = "config/deploy/shared/#{name}.erb"))
|
28
|
+
return file
|
29
|
+
end
|
30
|
+
return nil
|
31
|
+
end
|
32
|
+
|
33
|
+
# We often want to refer to variables which are defined in subsequent stage
|
34
|
+
# files. This let's us use the {{var}} to represent fetch(:var) in strings
|
35
|
+
# which are only evaluated at runtime.
|
36
|
+
def sub_strings(input_string)
|
37
|
+
output_string = input_string
|
38
|
+
input_string.scan(/{{(\w*)}}/).each do |var|
|
39
|
+
output_string.gsub!("{{#{var[0]}}}", fetch(var[0].to_sym))
|
40
|
+
end
|
41
|
+
output_string
|
42
|
+
end
|
43
|
+
|
44
|
+
def host_architecture
|
45
|
+
capture("uname -m")
|
46
|
+
end
|
47
|
+
|
48
|
+
def update_repo(repo_url, target_path)
|
49
|
+
run "if [ -d #{target_path} ]; then (cd #{target_path} && git pull); else git clone #{repo_url} #{target_path}; fi"
|
50
|
+
#run "cd #{target_path} && if [ -d #{target_path} ]; then (git pull); else (cd #{target_path} && cd.. && git clone #{repo_url} #{target_path}); fi"
|
51
|
+
end
|
data/lib/meataxe.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
# require_relative "meataxe/version"
|
2
|
+
#
|
3
|
+
# # Load custom tasks from `lib/capistrano/*` if you have any defined
|
4
|
+
# # Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }
|
5
|
+
# # Dir.glob('lib/capistrano/**/*.rb').each { |r| import r }
|
6
|
+
#
|
7
|
+
# module Meataxe
|
8
|
+
# # :)
|
9
|
+
# end
|
data/meataxe.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'meataxe/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "meataxe"
|
8
|
+
spec.version = Meataxe::VERSION
|
9
|
+
spec.authors = ["Kam Low"]
|
10
|
+
spec.email = ["hello@sourcey.com"]
|
11
|
+
spec.description = %q{Meataxe is a collection of killer Capistrano 3 deployment scripts.}
|
12
|
+
spec.summary = %q{Killer Capistrano 3 deployment scripts.}
|
13
|
+
spec.homepage = "http://github.com/sourcey/meataxe"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: meataxe
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kam Low
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-09-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,13 +38,30 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
-
description: Meataxe is a collection of killer Capistrano deployment scripts.
|
41
|
+
description: Meataxe is a collection of killer Capistrano 3 deployment scripts.
|
42
42
|
email:
|
43
43
|
- hello@sourcey.com
|
44
44
|
executables: []
|
45
45
|
extensions: []
|
46
46
|
extra_rdoc_files: []
|
47
|
-
files:
|
47
|
+
files:
|
48
|
+
- ".gitignore"
|
49
|
+
- Gemfile
|
50
|
+
- LICENSE.txt
|
51
|
+
- README.md
|
52
|
+
- Rakefile
|
53
|
+
- lib/meataxe.rb
|
54
|
+
- lib/meataxe/capistrano.rb
|
55
|
+
- lib/meataxe/capistrano/tasks/check_revision.cap
|
56
|
+
- lib/meataxe/capistrano/tasks/compile_assets_locally.cap
|
57
|
+
- lib/meataxe/capistrano/tasks/logs.cap
|
58
|
+
- lib/meataxe/capistrano/tasks/monit.cap
|
59
|
+
- lib/meataxe/capistrano/tasks/nginx.cap
|
60
|
+
- lib/meataxe/capistrano/tasks/run_tests.cap
|
61
|
+
- lib/meataxe/capistrano/tasks/setup_config.cap
|
62
|
+
- lib/meataxe/capistrano/tasks/tasks.cap
|
63
|
+
- lib/meataxe/version.rb
|
64
|
+
- meataxe.gemspec
|
48
65
|
homepage: http://github.com/sourcey/meataxe
|
49
66
|
licenses:
|
50
67
|
- MIT
|
@@ -65,8 +82,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
65
82
|
version: '0'
|
66
83
|
requirements: []
|
67
84
|
rubyforge_project:
|
68
|
-
rubygems_version: 2.
|
85
|
+
rubygems_version: 2.5.1
|
69
86
|
signing_key:
|
70
87
|
specification_version: 4
|
71
|
-
summary: Killer Capistrano deployment scripts.
|
88
|
+
summary: Killer Capistrano 3 deployment scripts.
|
72
89
|
test_files: []
|