negroku 0.0.1 → 0.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.
data/lib/negroku/cli.rb CHANGED
@@ -2,6 +2,8 @@ require 'thor'
2
2
  require 'rainbow'
3
3
  require 'highline/import'
4
4
 
5
+ trap('INT') { exit }
6
+
5
7
  class App < Thor
6
8
 
7
9
  say "\n\n#############################################".bright()
@@ -12,6 +14,23 @@ class App < Thor
12
14
  method_option :local_recipes, :type => :boolean, :aliases => "-l"
13
15
  method_option :path, :type => :string, :aliases => "-p"
14
16
  def create(name=nil)
17
+ # Get configuration
18
+ config = getConfig
19
+
20
+ # Test for config
21
+ if config.empty?
22
+ say "[WARNING]".foreground(:red)
23
+ say "It's recommended that you add some default settings to negroku before you create your app deployment\n\n"
24
+ say "For example you can add your most common git urls using:\n"
25
+ say "negroku repo add git@github.com:yourusername.git\n".foreground(:yellow)
26
+ say "Also you can add your deployment servers urls using:\n"
27
+ say "negroku target add my.deployment.com".foreground(:yellow)
28
+ say "negroku target add 104.284.3.1\n".foreground(:yellow)
29
+ unless yes? "Do you want to continue without adding default settings? [y/N]"
30
+ exit
31
+ end
32
+ end
33
+
15
34
  say "We're about to create your application deploy setup\n".foreground(:green)
16
35
 
17
36
  # Hash to hold the app info
@@ -25,43 +44,86 @@ class App < Thor
25
44
  end
26
45
 
27
46
  # The application code repository
28
- config = YAML.load_file(CONFIG_FILE) || {}
29
47
  choose do |menu|
30
48
 
31
- say "\nREPOSITORIES".foreground(:yellow)
49
+ say "\nREPOSITORIES"
50
+ say "============"
32
51
  menu.prompt = "Please choose your repository?".bright()
52
+ menu.select_by = :index
33
53
 
34
- config["repo"].each do |val|
35
- menu.choice(val) do |command|
36
- say("Using #{command}/#{data[:application_name]}.git")
54
+ # find local remote from git repo
55
+ if File.directory?(".git")
56
+ say "[INFO] The first repo was taken from the local git checkout remotes".color(:yellow)
57
+ local_repo = %x(git remote -v | grep origin | grep push | awk '{print $2}').gsub(/\n/,"")
58
+ menu.choice("#{local_repo}") do |command|
59
+ say("Using #{command}")
37
60
  data[:repo] = command;
38
61
  end
39
62
  end
40
63
 
64
+ # adds the repos in the config file if there is one
65
+ if config[:repo]
66
+ config[:repo].each do |val|
67
+ repo_url = "#{val}/#{data[:application_name]}.git"
68
+ # skip if the repo url is the same as the local one
69
+ unless repo_url == local_repo
70
+ menu.choice(repo_url) do |command|
71
+ say("Using #{command}/#{data[:application_name]}.git")
72
+ data[:repo] = command;
73
+ end
74
+ end
75
+ end
76
+ else
77
+ say "[INFO] There are no repos in the default settings".color(:yellow)
78
+ end
79
+
80
+ # add other repo choice
41
81
  menu.choice(:other) {
42
- data[:repo] = ask "Type the url and username e.g. git@github.com:username".bright()
82
+ data[:repo] = ask "Type the url and username e.g. git@github.com:username: ".bright()
43
83
  }
44
84
  end
45
85
 
46
86
  # The application target deploy server
47
87
  choose do |menu|
48
88
 
49
- say "\nTARGET SERVERS".foreground(:yellow)
89
+ say "\nTARGET SERVERS"
90
+ say "=============="
50
91
  menu.prompt = "Please choose your deployment server?".bright()
51
-
52
- config["target"].each do |val|
53
- menu.choice(val) do |command|
54
- say("Using #{command}")
55
- data[:target_server] = command;
92
+ menu.select_by = :index
93
+
94
+ # Adds the targets in the config file if there is one
95
+ if config[:repo]
96
+ config[:target].each do |val|
97
+ menu.choice(val) do |command|
98
+ say("Using #{command}")
99
+ data[:target_server] = command;
100
+ end
56
101
  end
102
+ else
103
+ say "[INFO] There are no target urls in the default settings".color(:yellow)
57
104
  end
58
105
 
59
106
  menu.choice(:other) {
60
- data[:target_server] = ask "Type the hostname or ip of the server to deploy to".bright()
107
+ data[:target_server] = ask "Type the hostname or ip of the server to deploy to:".bright()
61
108
  }
62
109
  end
63
110
 
111
+ # Add custom domain
112
+ say "\nCUSTOM DOMAIN"
113
+ say "============="
114
+ if yes? "Do you want to use #{data[:target_server].gsub(/^([a-z\d]*)/, data[:application_name])}? [Y/n]"
115
+ data[:domains] = data[:target_server].gsub(/^([a-z\d]*)/, data[:application_name])
116
+ else
117
+ data[:domains] = ask "Please enter the domains separated by spaces"
118
+ end
119
+
120
+
64
121
  init(".", data)
122
+
123
+ say "\n\nWhat to do next?\n".bright()
124
+ say "You can try with cap -T to see the available tasks"
125
+ say "Also you can check the config/deploy.rb file, you may want to change some things there"
126
+ say "\n HAPPY DEPLOY".foreground(:green)
65
127
  end
66
128
 
67
129
  desc "deploy", "Deploy the application"
@@ -77,7 +139,7 @@ class Repo < Thor
77
139
  if url.nil?
78
140
  url = ask("Type the url and username e.g. git@github.com:username")
79
141
  end
80
- saveConfig("add", "repo", url)
142
+ saveConfig(:add, :repo, url)
81
143
  end
82
144
 
83
145
  desc "remove", "remove some repo"
@@ -97,7 +159,7 @@ class Target < Thor
97
159
  if host.nil?
98
160
  host = ask("Type the host or ip for the target machine")
99
161
  end
100
- saveConfig("add", "target", host)
162
+ saveConfig(:add, :target, host)
101
163
  end
102
164
 
103
165
  desc "remove", "remove some target"
@@ -111,21 +173,6 @@ class Target < Thor
111
173
  end
112
174
  end
113
175
 
114
- class Hosts < Thor
115
- desc "add", "add new default target server"
116
- def add(host=nil)
117
- if host.nil?
118
- host = ask("Type the host or ip for the target machine")
119
- end
120
- saveConfig("add", "target", host)
121
- end
122
-
123
- desc "remove", "remove some target"
124
- def remove
125
- puts "I will remove a target"
126
- end
127
- end
128
-
129
176
  class Konfig < Thor
130
177
  namespace "config"
131
178
 
@@ -136,12 +183,53 @@ class Konfig < Thor
136
183
  end
137
184
  end
138
185
 
186
+ class RemoteEnv < Thor
187
+ namespace "env"
188
+
189
+ desc "show", "Show the current remote variables"
190
+ def show
191
+ `cap rbenv:vars:show`
192
+ end
193
+
194
+ desc "add", "Adds env variables to the remote server"
195
+ method_option :local, :type => :boolean, :aliases => "-l"
196
+ def add(key=nil, value=nil)
197
+
198
+ # Check if the paramenter were sent in the call
199
+ # Ask for the value if only the key was sent
200
+ if !key.nil? && value.nil?
201
+ value = ask("Please enter the value for #{key}:")
202
+ # If nothing was sent
203
+ elsif key.nil? && value.nil?
204
+ # Check if the .rbenv-vars file exists and offer get the info from there
205
+ if File.exist?(".rbenv-vars") && (yes? "Do you want to add variables from your local .rbenv-vars file [y/N]")
206
+ choose do |menu|
207
+ menu.prompt = "Please choose variable you want to add?".bright()
208
+ menu.select_by = :index
209
+
210
+ File.readlines(".rbenv-vars").each do |line|
211
+ menu.choice(line.gsub("\n","")) do |command|
212
+ key = command.split("=")[0]
213
+ value = command.split("=")[1]
214
+ end
215
+ end
216
+ end
217
+ else
218
+ key = ask("Please enter the variable key:")
219
+ value = ask("Please enter the value for #{key}:")
220
+ end
221
+ end
222
+
223
+ `cap rbenv:vars:add -s key=#{key} -s value=#{value}`
224
+ end
225
+ end
226
+
139
227
  module Negroku
140
228
  class CLI < Thor
141
229
  register(App, 'app', 'app [COMMAND]', 'Application')
142
230
  register(Repo, 'repo', 'repo [COMMAND]', 'Repositories')
143
231
  register(Target, 'target', 'target [COMMAND]', 'Target servers')
144
- register(Hosts, 'host', 'host [COMMAND]', 'Hosts')
145
232
  register(Konfig, 'config', 'config [COMMAND]', 'Configuration')
233
+ register(RemoteEnv, 'env', 'env [COMMAND]', 'Remote environmental variables')
146
234
  end
147
235
  end
@@ -1,36 +1,36 @@
1
1
  require 'yaml'
2
2
 
3
- # the yaml file where we'll write the settings
4
- CONFIG_FILE = File.join(ENV['HOME'], ".negroku", "config.yaml")
5
-
6
3
  def saveConfig(action, type, data)
7
- # create the ~/.negroku folder
8
- unless File.directory?(File.join(ENV['HOME'], ".negroku"))
9
- puts "[Negroku] => Creating config file in #{ENV['HOME']}/.negroku"
10
- %x(mkdir #{File.join(ENV['HOME'], ".negroku")})
11
- end
12
-
13
- # create an empty config.yaml file
14
- unless File.exist?(CONFIG_FILE)
15
- %x(touch #{CONFIG_FILE})
16
- end
17
-
18
4
  # Load the yaml file
19
- config = YAML.load_file(CONFIG_FILE) || {}
5
+ config_file = File.join(ENV['HOME'], ".negroku")
6
+ config = getConfig
20
7
 
21
8
  # If I need to add some multiple values
22
- if action == "add"
9
+ if action === :add
23
10
  newData = config[type] || []
24
11
  newData.push(data)
25
12
  newData.uniq!
26
13
  config = config.merge({ type => newData })
27
- elsif action == "remove"
14
+ elsif action === :remove
28
15
  #..
29
- elsif action == "replace"
16
+ elsif action === :replace
30
17
  #..
31
18
  end
32
19
 
33
- File.open(CONFIG_FILE, 'w') do |f|
20
+ File.open(config_file, 'w') do |f|
34
21
  f.write config.to_yaml
35
22
  end
23
+ end
24
+
25
+ def getConfig
26
+ # load config from file
27
+ config_file = File.join(ENV['HOME'], ".negroku")
28
+
29
+ # create an empty .negroku file
30
+ unless File.exist?(config_file)
31
+ %x(touch #{config_file})
32
+ end
33
+
34
+ # base config
35
+ YAML.load_file(config_file) || {}
36
36
  end
@@ -52,7 +52,7 @@ end
52
52
 
53
53
  def showConfig()
54
54
  # Load the yaml file
55
- config = YAML.load_file(CONFIG_FILE) || {}
55
+ config = getConfig
56
56
  puts config
57
57
  end
58
58
 
@@ -33,7 +33,7 @@ namespace :deploy do
33
33
  desc "Sets up additional symlinks after deploy."
34
34
  task :symlinks do
35
35
  # Exmaple:
36
- # run "ln -nfs '#{shared_path}/db/production.sqlite3' '#{release_path}/db/production.sqlite3'"
36
+ run "ln -nfs '#{shared_path}/.rbenv-vars' '#{release_path}/.rbenv-vars'"
37
37
  end
38
38
 
39
39
  after "deploy:setup", "deploy:setup_shared"
@@ -6,12 +6,12 @@
6
6
  # Feel free to further modify the template to your needs as it doesn't cover every use-case of course,
7
7
  # but tries to get all the common requirements out of the way to lessen research time (if any).
8
8
 
9
- set_default :domains, ["empty.platan.us"]
9
+ set_default :domains, ["your.domain.com"]
10
10
  set_default :static_dir, "public"
11
11
 
12
12
  set_default :app_server, true
13
13
  #set_default :app_server_port, 8080
14
- set_default :app_server_socket, "/home/#{fetch(:user)}/tmp/platanus.#{fetch(:application)}.sock"
14
+ set_default :app_server_socket, "/home/#{fetch(:user)}/tmp/negroku.#{fetch(:application)}.sock"
15
15
 
16
16
  # set_default :use_ssl, true
17
17
  # set_default :ssl_key, "/path/to/local/ssh.key"
@@ -4,9 +4,17 @@
4
4
  set_default :ruby_version, "1.9.3-p125"
5
5
 
6
6
  namespace :rbenv do
7
- desc "Upload rbenv vars"
8
- task :upload, :roles => :app do
9
- puts ".rbenv-vars #{shared_path}/config"
10
- upload ".rbenv-vars"
7
+ namespace :vars do
8
+ desc "Show current rbenv vars"
9
+ task :show, :roles => :app do
10
+ run "sh -c 'cd #{shared_path} && cat .rbenv-vars'" do |channel, stream, data|
11
+ puts data
12
+ end
13
+ end
14
+
15
+ desc "Add rbenv vars"
16
+ task :add, :roles => :app do
17
+ run "echo '#{key}=#{value}' >> #{shared_path}/.rbenv-vars"
18
+ end
11
19
  end
12
20
  end
@@ -11,8 +11,8 @@ upstream <%= fetch(:application) %>-app-server {
11
11
 
12
12
  # HTTP Server
13
13
  server {
14
- listen 80 deferred;
15
- server_name <%= fetch(:domains, ["platan.us", "www.platan.us"]).join(" ") %>;
14
+ listen 80;
15
+ server_name <%= fetch(:domains) %>;
16
16
  root <%= fetch(:deploy_to) %>/current/<%= fetch(:static_dir) %>;
17
17
 
18
18
  access_log /home/<%= fetch(:user) %>/log/<%= fetch(:application) %>-nginx-access.log;
@@ -8,11 +8,14 @@ set :deploy_to, "/home/#{user}/applications/#{application}"
8
8
 
9
9
  # Repository (if any) configuration.
10
10
  set :deploy_via, :remote_cache
11
- set :repository, "<%= data[:repo] %>/#{application}.git"
11
+ set :repository, "<%= data[:repo] %>"
12
12
  set :branch, "production" # Optional, defaults to master
13
13
  # set :remote, "negroku" # Optional, defaults to origin
14
14
  # set :git_enable_submodules, 1
15
15
 
16
+ # Web server configuration
17
+ set :domains, "<%= data[:domains] %>"
18
+
16
19
  # Use the bundler capistrano task to deploy to the shared folder
17
20
  require "bundler/capistrano"
18
21
  set :bundle_flags, "--deployment --binstubs"
@@ -1,3 +1,3 @@
1
1
  module Negroku
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: negroku
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-28 00:00:00.000000000 Z
12
+ date: 2013-01-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: capistrano
@@ -75,22 +75,6 @@ dependencies:
75
75
  - - ! '>='
76
76
  - !ruby/object:Gem::Version
77
77
  version: 0.17.0
78
- - !ruby/object:Gem::Dependency
79
- name: parseconfig
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: 1.0.2
86
- type: :runtime
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: 1.0.2
94
78
  description: ! '["To deploy application"]'
95
79
  email:
96
80
  - jidonoso@gmail.com