pushdeploy 0.0.1

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/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ /.bundle
2
+ /Gemfile.lock
3
+ /pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in pushdeploy.gemspec
4
+ gemspec
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) Artem Yankov
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,14 @@
1
+ Pushdeploy
2
+ ==========
3
+
4
+ * 1
5
+ * 2
6
+ * 3
7
+
8
+ Install
9
+ -------
10
+ $ some code
11
+ $ goeshere
12
+
13
+ Usage
14
+ -----
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,40 @@
1
+ #!/bin/bash
2
+
3
+ #
4
+ # This script creates a file 'after_deploy.rb' in your config directory.
5
+ # You should run it inside of your project directory.
6
+ #
7
+
8
+ generate_config_body()
9
+ {
10
+ cat <<-EOF
11
+ #!/usr/bin/env ruby
12
+
13
+ #
14
+ # This script is launched by post-receive hook when push is completed.
15
+ # The general purpose of this script is to run bundler, migration and
16
+ # other commands that you want to launch after deployment.
17
+ #
18
+
19
+ require 'pushdeploy'
20
+
21
+ PushDeploy.new(ARGV) do
22
+ bundle
23
+ migrate
24
+ run "touch #{@deploy_to}/tmp/restart.txt"
25
+ end
26
+ EOF
27
+
28
+ }
29
+
30
+ if [ ! -d "./config" ]; then mkdir config; fi
31
+
32
+ generate_config_body > ./config/after_deploy.rb
33
+
34
+ if [ -f "./config/after_deploy.rb" ]; then
35
+ echo -e "\n**********************************"
36
+ echo -e "\n\x1B[00;32mConfig has been successfully created!\x1B[00m\n"
37
+ echo -e "You can edit $(pwd)/config/after_deploy.rb to add commands that you want to run after deployment.\n"
38
+ else
39
+ echo -e "\n\x1B[00;31mAn error has been occured while trying to write to $(pwd)/config/after_deploy.rb. Not enough permission?\e[00m"
40
+ fi
@@ -0,0 +1,138 @@
1
+ #!/bin/sh
2
+
3
+ #
4
+ # Overrides post-receive hook in your git repository.
5
+ #
6
+ # First this script should determine the path to your remote origin git repository
7
+ # RVM path and rvm ruby string if you use it. If it can't determine
8
+ # path to the repository it will launch a manual mode where you'll have to
9
+ # enter these settings. You can also run 'pushdeploy_install_hook -m' to
10
+ # enter this mode.
11
+ #
12
+ # Then this script writes to /you_repository_path/hooks/post-recieve
13
+ # This hook is launched when you completed 'git push'.
14
+ #
15
+ # Hook should switch to the right RVM environment (if you use it)
16
+ # and run 'git pull' in your project directory. Then hook will run
17
+ # after_deploy.rb script in the config dir of project directory
18
+ # which lauches bundler, migrate and other commands that you specified.
19
+ #
20
+
21
+ repository=$(git config --get remote.origin.url)
22
+
23
+ get_rvm_string()
24
+ {
25
+ if [[ -n "$rvm_path" ]];
26
+ then
27
+ rvm_string=$(rvm current)
28
+ fi
29
+ }
30
+
31
+ manual_setup()
32
+ {
33
+ echo "Let's set up some variables"
34
+ if [ -z $repository ]; then
35
+ echo -e "\n\x1B[00;31m*** Can't locate your git repository. ***\x1B[00m"
36
+ echo -e "\nMay be you run installer from a wrong directory?"
37
+ echo -e "\nYou should run it from the root folder of your project. Something like /var/www/html/myapp/"
38
+ echo "Current dir is: $(pwd)"
39
+ echo -e "\n\x1B[00;32mAnyway, no worries, we can try to set everything up manually. Just answer some questions about your environment.\x1B[00m "
40
+ fi
41
+
42
+ echo -ne "Where is the git repository for this project located?: "
43
+ read repository
44
+
45
+ get_rvm_string
46
+
47
+ if [ -n $rvm_path ]; then
48
+ echo -e "\n\x1B[00;32mRVM path found:\x1B[00m \x1B[00;34m$rvm_path\x1B[00m.\n"
49
+ echo -e "* hit Enter if this is a correct path."
50
+ else
51
+ echo -e "\nRVM path not found.\n"
52
+ fi
53
+
54
+ echo -e "* type \x1B[00;32mn\x1B[00m if you don't even use RVM."
55
+ echo -e "* or just enter your own path."
56
+ echo -ne "\nYour answer: "
57
+ read new_rvm_path
58
+
59
+ if [ -n "$new_rvm_path" ]; then
60
+ if [ "$new_rvm_path" == "n" ]; then
61
+ rvm_path=""
62
+ else
63
+ rvm_path=$new_rvm_path
64
+ fi
65
+ fi
66
+
67
+ if [ "$new_rvm_path" != "n" -a -n "$rvm_path" ]; then
68
+ echo -e "\n***************************************************************************\n"
69
+
70
+ if [ -n $rvm_string ]; then
71
+ echo -e "This is your active gemset and version of Ruby: \x1B[00;34m$rvm_string\x1B[00m."
72
+ echo -e "\n* Just hit Enter if this is correct for your project."
73
+ else
74
+ echo "Your rvm ruby string is not detected for some reason."
75
+ fi
76
+ echo -ne "\nEnter a rvm ruby string (usually something like 1.9.2@rails3): "
77
+ read rvm_string
78
+ fi
79
+
80
+ echo $repository
81
+ echo $rvm_path
82
+ echo $rvm_string
83
+
84
+ }
85
+
86
+ generate_hook_body()
87
+ {
88
+ cat <<-EOF
89
+ #!/bin/sh
90
+ deploy_dir=$(pwd)
91
+ read oldrev newrev refname
92
+
93
+ unset GIT_DIR && cd \$deploy_dir && git --work-tree=\$deploy_dir pull $repository -f
94
+ EOF
95
+
96
+ if [ -n "$rvm_path" -a -n "$rvm_string" ]; then
97
+ cat <<-EOF
98
+ source "$rvm_path/scripts/rvm"
99
+ rvm $rvm_string
100
+ EOF
101
+ fi
102
+
103
+ cat <<-EOF
104
+ \$deploy_dir/config/auto_deploy.rb \$oldrev \$newrev \$refname \$deploy_dir
105
+ EOF
106
+
107
+ }
108
+
109
+ if [ -z "$repository" -o "$1" == "-m" ]; then
110
+ manual_setup
111
+ else
112
+ get_rvm_string
113
+ fi
114
+
115
+ # create 'hooks' folder if it doesn't exist
116
+
117
+ if [ -z "$repository/hooks" ]; then
118
+ echo "Creating a hook folder (didn't exist).."
119
+ mkdir -p "$repository/hooks"
120
+ fi
121
+
122
+ # check if we have permissions to write to the 'hooks' folder
123
+
124
+ if [ ! -w "$repository/hooks" ]; then
125
+ echo -e "\x1B[00;31mYou don't have permission to modify $repository/hooks/\x1B[00m"
126
+ echo "Try using: sudo $0"
127
+ exit 1
128
+ fi
129
+
130
+ generate_hook_body > $repository/hooks/post-receive
131
+ if [ "$?" -ne 0 ]; then echo "A error occured while trying to write a hook."; exit 1; fi
132
+
133
+ chmod 770 $repository/hooks/post-receive
134
+ if [ "$?" -ne 0 ]; then echo "A error occured while trying to set permission of the hook. Try sudo?"; exit 1; fi
135
+
136
+ echo -e "\n\x1B[00;32mpost-receive hook has been successfully installed to $repository/hooks/post-receive\x1B[00m"
137
+ echo "Don't forget to run 'pushdeploy_create_config' inside of your project directory"
138
+
@@ -0,0 +1,3 @@
1
+ module Pushdeploy
2
+ VERSION = "0.0.1"
3
+ end
data/lib/pushdeploy.rb ADDED
@@ -0,0 +1,59 @@
1
+ class PushDeploy
2
+
3
+ EMPTY_DIR = '4b825dc642cb6eb9a060e54bf8d69288fbee4904'
4
+
5
+ def initialize(args, &block)
6
+
7
+ puts 'Running auto_deploy...'
8
+
9
+ @deploy_to = args[3]
10
+
11
+ @oldrev, @newrev = args.shift, args.shift || 'HEAD'
12
+ if @oldrev == '0000000000000000000000000000000000000000'
13
+ @oldrev = EMPTY_DIR
14
+ elsif @oldrev.nil?
15
+ @oldrev = '@{-1}'
16
+ end
17
+
18
+ instance_exec(&block)
19
+
20
+ end
21
+
22
+ def bundle
23
+ return if @oldrev == '0'
24
+
25
+ return unless File.exist?('Gemfile')
26
+ if %x{git diff --name-only #{@oldrev} #{@newrev}} =~ /^Gemfile|\.gemspec$/
27
+ begin
28
+ # If Bundler in turn spawns Git, it can get confused by $GIT_DIR
29
+ git_dir = ENV.delete('GIT_DIR')
30
+ run "bundle check"
31
+ unless $?.success?
32
+ puts "Bundling..."
33
+ run "bundle | grep -v '^Using ' | grep -v ' is complete'"
34
+ end
35
+ ensure
36
+ ENV['GIT_DIR'] = git_dir
37
+ end
38
+ end
39
+ end
40
+
41
+ def run(command)
42
+ Kernel.system "#{command} >&1"
43
+ end
44
+
45
+ def migrate
46
+ return if @oldrev == '0'
47
+
48
+ schema = %x{git diff --name-status #{@oldrev} #{@newrev} -- db/schema.rb}
49
+ if schema =~ /^A/
50
+ run "bundle exec rake db:create"
51
+ end
52
+
53
+ if `git diff HEAD^`.index("db/migrate")
54
+ puts "Migrating.."
55
+ run 'bundle exec rake db:migrate RAILS_ENV="production"'
56
+ end
57
+ end
58
+
59
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "pushdeploy/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "pushdeploy"
7
+ s.version = Pushdeploy::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Artem Yankov"]
10
+ s.email = ["artem.yankov@gmail.com"]
11
+ s.homepage = ""
12
+ s.summary = %q{Easy deployment after 'git push' for Ruby applications}
13
+ s.description = %q{Automatically deploys application after 'git push' and run specified commands like 'bundle install' and 'rake db:migrate'}
14
+
15
+ s.rubyforge_project = "pushdeploy"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+ end
metadata ADDED
@@ -0,0 +1,65 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pushdeploy
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Artem Yankov
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-06-03 00:00:00 Z
14
+ dependencies: []
15
+
16
+ description: Automatically deploys application after 'git push' and run specified commands like 'bundle install' and 'rake db:migrate'
17
+ email:
18
+ - artem.yankov@gmail.com
19
+ executables:
20
+ - pushdeploy_create_config
21
+ - pushdeploy_install_hook
22
+ extensions: []
23
+
24
+ extra_rdoc_files: []
25
+
26
+ files:
27
+ - .gitignore
28
+ - Gemfile
29
+ - MIT-LICENSE
30
+ - README.md
31
+ - Rakefile
32
+ - bin/pushdeploy_create_config
33
+ - bin/pushdeploy_install_hook
34
+ - lib/pushdeploy.rb
35
+ - lib/pushdeploy/version.rb
36
+ - pushdeploy.gemspec
37
+ homepage: ""
38
+ licenses: []
39
+
40
+ post_install_message:
41
+ rdoc_options: []
42
+
43
+ require_paths:
44
+ - lib
45
+ required_ruby_version: !ruby/object:Gem::Requirement
46
+ none: false
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: "0"
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: "0"
57
+ requirements: []
58
+
59
+ rubyforge_project: pushdeploy
60
+ rubygems_version: 1.7.2
61
+ signing_key:
62
+ specification_version: 3
63
+ summary: Easy deployment after 'git push' for Ruby applications
64
+ test_files: []
65
+