codebase4 1.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/bin/cb ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require 'codebase/cli'
3
+ Codebase::CLI.invoke(*ARGV)
data/bin/codebase ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require 'codebase/cli'
3
+ Codebase::CLI.invoke(*ARGV)
@@ -0,0 +1,96 @@
1
+ require 'codebase'
2
+
3
+ module Codebase
4
+ class CLI
5
+
6
+ class Error < StandardError; end
7
+
8
+ def self.invoke(*args)
9
+ command = args.shift
10
+ cmd = self.new
11
+ if command.nil?
12
+ raise Error, "usage: codebase [command] *args"
13
+ elsif cmd.respond_to?(command)
14
+ cmd.send(command, *args)
15
+ else
16
+ raise Error, "Command not found"
17
+ end
18
+ rescue Error => e
19
+ $stderr.puts e.message
20
+ Process.exit(1)
21
+ rescue ArgumentError
22
+ $stderr.puts "Invalid arguments provided for command ('#{command}')"
23
+ Process.exit(1)
24
+ end
25
+
26
+ def token(account_name, token)
27
+ Codebase.config.set(:tokens, Hash.new) unless Codebase.config.tokens.is_a?(Hash)
28
+ Codebase.config.tokens[account_name] = token
29
+ Codebase.config.save
30
+ puts "Added token for '#{account_name}'"
31
+ end
32
+
33
+ def deploy(end_ref, start_ref, *options)
34
+ options = options_to_hash(options)
35
+
36
+ hash = {
37
+ :start_ref => start_ref,
38
+ :end_ref => end_ref,
39
+ :environment => options['e'] || options['environment'],
40
+ :servers => options['s'] || options['servers'],
41
+ :branch => options['b'] || options['branch']
42
+ }
43
+
44
+ host = options['h'] || options['host']
45
+ repo = options['r'] || options['repo']
46
+
47
+ raise Error, "You must specify at least one server using the -s or --servers flag" if blank?(hash[:servers])
48
+ raise Error, "You must specify the repo using the -r or --repo flag (as project:repo)" if blank?(repo)
49
+ raise Error, "You must specify the host using the -h or --host flag" if blank?(host)
50
+
51
+ project, repo = repo.split(':')
52
+
53
+ puts "Sending deployment information to #{host} (project: '#{project}' repo: '#{repo}')"
54
+
55
+ puts " Commits......: #{hash[:end_ref]} ... #{hash[:start_ref]}"
56
+ puts " Environment..: #{hash[:environment] || '-'}"
57
+ puts " Branch.......: #{hash[:branch] || '-'}"
58
+ puts " Server(s)....: #{hash[:servers]}"
59
+
60
+ token = Codebase.config.tokens.is_a?(Hash) && Codebase.config.tokens[host]
61
+ if token.nil?
62
+ raise Error, "This account has no token configured locally, use 'codebase token [account] [token]' to configure it"
63
+ end
64
+
65
+ puts " Token........: #{token[0,7]}******"
66
+ hash[:access_token] = token
67
+
68
+ protocol = options['protocol'] || 'http'
69
+
70
+ Codebase.request("#{protocol}://#{host}/projects/#{project}/repositories/#{repo}/deployments/add", hash)
71
+ puts "Deployment added successfully"
72
+ end
73
+
74
+ private
75
+
76
+ def options_to_hash(options)
77
+ hash = Hash.new
78
+ key = nil
79
+ for opt in options
80
+ if opt =~ /\A\-/
81
+ key = opt
82
+ else
83
+ next if key.nil?
84
+ hash[key.gsub(/\A-+/, '')] = opt
85
+ key = nil
86
+ end
87
+ end
88
+ hash
89
+ end
90
+
91
+ def blank?(*array)
92
+ array.any? {|a| a.nil? || a.length == 0 }
93
+ end
94
+
95
+ end
96
+ end
@@ -0,0 +1,32 @@
1
+ module Codebase
2
+ class Config
3
+
4
+ def self.init(path = File.join(ENV['HOME'], '.codebase4'))
5
+ if File.exist?(path)
6
+ self.new(path, YAML.load_file(path))
7
+ else
8
+ self.new(path)
9
+ end
10
+ end
11
+
12
+ def initialize(filename, hash = {})
13
+ @filename = filename
14
+ @hash = hash
15
+ end
16
+
17
+ def method_missing(name)
18
+ @hash[name.to_s]
19
+ end
20
+
21
+ def set(name, value)
22
+ @hash[name.to_s] = value
23
+ save
24
+ value
25
+ end
26
+
27
+ def save
28
+ File.open(@filename, 'w') { |f| f.write(YAML.dump(@hash)) }
29
+ end
30
+
31
+ end
32
+ end
data/lib/codebase.rb ADDED
@@ -0,0 +1,43 @@
1
+ require 'uri'
2
+ require 'net/https'
3
+ require 'yaml'
4
+ require 'rubygems'
5
+ require 'json'
6
+ require 'codebase/config'
7
+
8
+ module Codebase
9
+
10
+ class << self
11
+
12
+ # Return the current configuration for the current machine
13
+ def config
14
+ @config ||= Config.init
15
+ end
16
+
17
+ ## Make an HTTP request
18
+ def request(url, data)
19
+ uri = URI.parse(url)
20
+ req = Net::HTTP::Post.new(uri.path)
21
+ req.set_form_data(data, ';')
22
+ res = Net::HTTP.new(uri.host, uri.port)
23
+
24
+ if uri.scheme == 'https'
25
+ res.use_ssl = true
26
+ res.verify_mode = OpenSSL::SSL::VERIFY_NONE
27
+ end
28
+
29
+ case res = res.request(req)
30
+ when Net::HTTPSuccess
31
+ JSON.parse(res.body)
32
+ when Net::HTTPBadRequest
33
+ error = JSON.parse(res.body)
34
+ raise error.inspect
35
+ else
36
+ raise "An HTTP error occured (#{res.class})"
37
+ end
38
+ end
39
+
40
+ end
41
+
42
+ end
43
+
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: codebase4
3
+ version: !ruby/object:Gem::Version
4
+ hash: 21
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 1
10
+ version: 1.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Adam Cooke
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-02-28 00:00:00 +00:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: json
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 25
30
+ segments:
31
+ - 1
32
+ - 1
33
+ - 5
34
+ version: 1.1.5
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ description:
38
+ email: adam@atechmedia.com
39
+ executables:
40
+ - codebase
41
+ - cb
42
+ extensions: []
43
+
44
+ extra_rdoc_files: []
45
+
46
+ files:
47
+ - bin/cb
48
+ - bin/codebase
49
+ - lib/codebase/cli.rb
50
+ - lib/codebase/config.rb
51
+ - lib/codebase.rb
52
+ has_rdoc: true
53
+ homepage: http://atechmedia.com
54
+ licenses: []
55
+
56
+ post_install_message:
57
+ rdoc_options: []
58
+
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ hash: 3
67
+ segments:
68
+ - 0
69
+ version: "0"
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ hash: 3
76
+ segments:
77
+ - 0
78
+ version: "0"
79
+ requirements: []
80
+
81
+ rubyforge_project:
82
+ rubygems_version: 1.3.7
83
+ signing_key:
84
+ specification_version: 3
85
+ summary: The RubyGem for Codebase v4 Deployment Tracking (replaces previous codebase gems)
86
+ test_files: []
87
+