gitploy 0.2.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.
@@ -0,0 +1 @@
1
+ pkg/
@@ -0,0 +1,68 @@
1
+ ## Gitploy: dead-simple deployment DSL created with git in mind
2
+
3
+ ### Why yet another deployment solution?
4
+
5
+ * Because Capistrano is bloated
6
+ * Because, no, I don't want to use rake for deployment, thank you
7
+ * Because I'm sick of having to jump through flaming hoops just to tweak the arguments of some stupid command
8
+ * Because I want something bare minimum, git-based, and dead-simple
9
+ * Because I felt like it
10
+
11
+ Gitploy was created to do dead-simple git-push based deployments. It doesn't use rake, it doesn't
12
+ require git hooks, it just does the bare minimum. It's so minimal, in fact, that it doesn't even
13
+ come with its own "recipe" - Gitploy is actually just a DSL to quickly define your own deployment
14
+ strategy. No hooks, very little behind-the-scenes magic - it just does what you tell it to.
15
+
16
+ ### Example config/deploy.rb
17
+
18
+
19
+ require 'gitploy/script'
20
+
21
+ configure do |c|
22
+ c.repo = 'git@github.com:myuser/fooapp.git'
23
+ c.path = '/var/www/fooapp'
24
+
25
+ stage :staging do
26
+ c.host = 'staging.fooapp.com'
27
+ c.user = 'ninja'
28
+ end
29
+
30
+ stage :production do
31
+ c.host = 'fooapp.com'
32
+ c.user = 'deployer'
33
+ end
34
+ end
35
+
36
+ setup do
37
+ remote do
38
+ run "mkdir -p #{config.path}"
39
+ run "cd #{config.path} && git init"
40
+ end
41
+ end
42
+
43
+ deploy do
44
+ push!
45
+ remote do
46
+ run "cd #{config.path}"
47
+ run "git reset --hard"
48
+ run "bundle install --deployment"
49
+ run "touch tmp/restart.txt"
50
+ end
51
+ end
52
+
53
+ ### Usage
54
+
55
+ $ gem install gitploy
56
+ # create config/deploy.rb
57
+ $ gitploy production setup
58
+ $ gitploy production
59
+
60
+ ### Disclaimer
61
+
62
+ Gitploy is super alpha - don't use it yet, unless you're just that baller. Are you?
63
+
64
+ ### Known issues
65
+
66
+ * No tests :(
67
+ * Not enough documentation
68
+ * DSL implementation is pretty dumb and needs refactoring
@@ -0,0 +1,14 @@
1
+ begin
2
+ require 'jeweler'
3
+ Jeweler::Tasks.new do |gemspec|
4
+ gemspec.name = "gitploy"
5
+ gemspec.summary = "Deployment DSL created with git in mind"
6
+ gemspec.description = "Dead-simple deployments. No, for real this time."
7
+ gemspec.email = "brentdillingham@gmail.com"
8
+ gemspec.homepage = "http://github.com/brentd/gitploy"
9
+ gemspec.authors = ["Brent Dillingham"]
10
+ end
11
+ Jeweler::GemcutterTasks.new
12
+ rescue LoadError
13
+ puts "Jeweler not available. Install it with: sudo gem install jeweler -s http://gemcutter.org"
14
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.2.0
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env ruby
2
+ load('config/deploy.rb')
@@ -0,0 +1,46 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{gitploy}
8
+ s.version = "0.2.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Brent Dillingham"]
12
+ s.date = %q{2010-09-14}
13
+ s.default_executable = %q{gitploy}
14
+ s.description = %q{Dead-simple deployments. No, for real this time.}
15
+ s.email = %q{brentdillingham@gmail.com}
16
+ s.executables = ["gitploy"]
17
+ s.extra_rdoc_files = [
18
+ "README.markdown"
19
+ ]
20
+ s.files = [
21
+ ".gitignore",
22
+ "README.markdown",
23
+ "Rakefile",
24
+ "VERSION",
25
+ "bin/gitploy",
26
+ "gitploy.gemspec",
27
+ "lib/gitploy.rb",
28
+ "lib/gitploy/script.rb"
29
+ ]
30
+ s.homepage = %q{http://github.com/brentd/gitploy}
31
+ s.rdoc_options = ["--charset=UTF-8"]
32
+ s.require_paths = ["lib"]
33
+ s.rubygems_version = %q{1.3.7}
34
+ s.summary = %q{Deployment DSL created with git in mind}
35
+
36
+ if s.respond_to? :specification_version then
37
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
38
+ s.specification_version = 3
39
+
40
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
41
+ else
42
+ end
43
+ else
44
+ end
45
+ end
46
+
@@ -0,0 +1,103 @@
1
+ module Gitploy
2
+ extend self
3
+ attr_accessor :config
4
+
5
+ class Config
6
+ REQUIRED_OPTIONS = [:repo, :path, :user, :host]
7
+ attr_accessor *REQUIRED_OPTIONS
8
+
9
+ def check!
10
+ unless missing_options.empty?
11
+ raise "The following configuration options are missing for the '#{Gitploy.current_stage}' stage: #{missing_options.join(', ')}"
12
+ end
13
+ end
14
+
15
+ def missing_options
16
+ REQUIRED_OPTIONS.select {|m| send(m).nil? }
17
+ end
18
+ end
19
+
20
+ def configure
21
+ config = Config.new
22
+ yield config; config.check!
23
+ self.config = config
24
+ end
25
+
26
+ def current_stage
27
+ ARGV[0]
28
+ end
29
+
30
+ def action
31
+ ARGV[1]
32
+ end
33
+
34
+ def stage(name)
35
+ yield if name.to_s == current_stage
36
+ end
37
+
38
+ def deploy
39
+ yield if action.nil? || action == 'deploy'
40
+ end
41
+
42
+ def setup
43
+ yield if action == 'setup'
44
+ end
45
+
46
+ def remote
47
+ yield
48
+ pretty_run(config.host, "ssh #{config.user}@#{config.host} '#{flush_run_queue}'")
49
+ end
50
+
51
+ def local
52
+ yield
53
+ pretty_run("LOCAL", flush_run_queue)
54
+ end
55
+
56
+ def run(cmd)
57
+ run_queue << cmd
58
+ end
59
+
60
+ def sudo(cmd)
61
+ run("sudo #{cmd}")
62
+ end
63
+
64
+ def rake(task)
65
+ run("rake #{task}")
66
+ end
67
+
68
+ def push!
69
+ local { run "git push #{config.user}@#{config.host}:#{config.path}/.git master" }
70
+ end
71
+
72
+ private
73
+
74
+ def pretty_run(title, cmd)
75
+ puts
76
+ print_bar(100, title)
77
+ puts "> #{cmd}"
78
+ puts
79
+ Kernel.system(cmd)
80
+ print_bar(100)
81
+ end
82
+
83
+ def print_bar(width, title=nil)
84
+ if title
85
+ half_width = (width / 2) - (title.length / 2) - 2
86
+ left_bar = '=' * half_width
87
+ right_bar = '=' * (title.length % 2 == 0 ? half_width : half_width - 1) # TODO: lame.
88
+ puts "#{left_bar}( #{title} )#{right_bar}"
89
+ else
90
+ puts "=" * width
91
+ end
92
+ end
93
+
94
+ def run_queue
95
+ @run_queue ||= []
96
+ end
97
+
98
+ def flush_run_queue
99
+ cmd = run_queue.join(' && ')
100
+ @run_queue = []
101
+ cmd
102
+ end
103
+ end
@@ -0,0 +1,2 @@
1
+ require 'gitploy'
2
+ include Gitploy
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gitploy
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
+ platform: ruby
12
+ authors:
13
+ - Brent Dillingham
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-09-14 00:00:00 -04:00
19
+ default_executable: gitploy
20
+ dependencies: []
21
+
22
+ description: Dead-simple deployments. No, for real this time.
23
+ email: brentdillingham@gmail.com
24
+ executables:
25
+ - gitploy
26
+ extensions: []
27
+
28
+ extra_rdoc_files:
29
+ - README.markdown
30
+ files:
31
+ - .gitignore
32
+ - README.markdown
33
+ - Rakefile
34
+ - VERSION
35
+ - bin/gitploy
36
+ - gitploy.gemspec
37
+ - lib/gitploy.rb
38
+ - lib/gitploy/script.rb
39
+ has_rdoc: true
40
+ homepage: http://github.com/brentd/gitploy
41
+ licenses: []
42
+
43
+ post_install_message:
44
+ rdoc_options:
45
+ - --charset=UTF-8
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ hash: 3
54
+ segments:
55
+ - 0
56
+ version: "0"
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ hash: 3
63
+ segments:
64
+ - 0
65
+ version: "0"
66
+ requirements: []
67
+
68
+ rubyforge_project:
69
+ rubygems_version: 1.3.7
70
+ signing_key:
71
+ specification_version: 3
72
+ summary: Deployment DSL created with git in mind
73
+ test_files: []
74
+