topkit 0.1.0 → 1.0.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -1
  3. data/{LICENSE.txt → LICENSE.md} +1 -1
  4. data/README.md +10 -24
  5. data/Rakefile +1 -0
  6. data/bin/ripen +248 -0
  7. data/bin/topkit +111 -7
  8. data/lib/templates/database.yml +9 -0
  9. data/lib/templates/developer/database.yml +7 -0
  10. data/lib/templates/developer/topkit.yml +3 -0
  11. data/lib/templates/nginx.conf +27 -0
  12. data/lib/templates/topkit.yml +14 -0
  13. data/lib/templates/unicorn.rb +8 -0
  14. data/lib/templates/unicorn_init +84 -0
  15. data/lib/topkit/developer/base.rb +156 -0
  16. data/lib/topkit/developer/database.rb +17 -0
  17. data/lib/topkit/developer/installer.rb +46 -0
  18. data/lib/topkit/developer/site.rb +193 -0
  19. data/lib/topkit/developer/symlinks.rb +53 -0
  20. data/lib/topkit/developer/user.rb +53 -0
  21. data/lib/topkit/server/base.rb +84 -0
  22. data/lib/topkit/server/console.rb +11 -0
  23. data/lib/topkit/server/installer.rb +117 -0
  24. data/lib/topkit/server/symlinks.rb +53 -0
  25. data/lib/topkit/server/updater.rb +21 -0
  26. data/lib/topkit/version.rb +1 -1
  27. data/lib/topkit.rb +23 -2
  28. data/topkit.gemspec +10 -10
  29. metadata +50 -46
  30. data/lib/topkit/actions.rb +0 -41
  31. data/lib/topkit/app_builder.rb +0 -112
  32. data/lib/topkit/generators/app_generator.rb +0 -109
  33. data/templates/Gemfile_clean +0 -41
  34. data/templates/_footer.html.erb +0 -2
  35. data/templates/_header.html.erb +0 -2
  36. data/templates/_status.html.erb +0 -6
  37. data/templates/application_layout.html.erb +0 -35
  38. data/templates/database.pg.yml.erb +0 -55
  39. data/templates/database_cleaner_rspec.rb +0 -21
  40. data/templates/topkit_gitignore +0 -2
  41. data/test/lib/topkit/version_test.rb +0 -7
  42. data/test/test_helper.rb +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 883024ecb18d8b5f3044a0fe8599aa238fd0ef1c
4
- data.tar.gz: 0cac84f9a9e1e86bf6c23e8c5dc5275db9ee0dfa
3
+ metadata.gz: 54c4caa53d4d49110bde966aca88e606bcab4224
4
+ data.tar.gz: f4e918dfcf39aa70d76b7524dab2dd551679d98a
5
5
  SHA512:
6
- metadata.gz: e35a7ad9266c3c74e9166dab123ff41f3c599395a5d24739eb819c93bb898bcce2221c93c6d3fede2e04429d30be0963a1a31f6131fa54b577f5374e823cba79
7
- data.tar.gz: 8f52356840c0c7bda43742c614118a0f1c7f704fec1d1b4e12ba847287667c560b61912f7dd4b4595f637d65c7a950be3d05bdeac1360fdb6e490971d7510fa3
6
+ metadata.gz: 2b04889d38d64f96c02542d8d27a50ccc6b1806c914d5851fc63dfdfcbdf3c0c4ea2da97f9e9789439bfc89a77d5ee398dce6517f810df19b59a470dd360fd93
7
+ data.tar.gz: feb43d7ed28dcd81d7ca2a4d15091201901f7dfde66573f2909da3999500287ffa3b3ed8b8fbc3cda5898360895a8c6d5d991611247dbe5f0a1612aefbda2012
data/Gemfile CHANGED
@@ -1,4 +1,3 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in topkit.gemspec
4
3
  gemspec
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013 Alex Padgett
1
+ Copyright (c) 2015 Topic Design Group
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -1,27 +1,13 @@
1
- # topkit
1
+ topkit CLI
2
+ ==========
2
3
 
3
- Generate Rails app using Topic gems, frameworks and layouts.
4
+ topkit CLI is the command-line interface for working with [topkit
5
+ Server](https://github.com/topicdesign/topkit) and [topkit
6
+ Developer](https://github.com/topicdesign/topkit-developer).
4
7
 
5
- Props to [thoughtbot](http://thoughtbot.com)'s [Suspenders](https://github.com/thoughtbot/suspenders) and [Gaslight](http://gaslight.co/home)'s [Sparkler](https://github.com/gaslight/sparkler) for inspiration and influence.
8
+ We are in a pre-release phase right now and will have documentation ready
9
+ before v1.0.
6
10
 
7
- ## Installation
8
-
9
- $ gem install topkit
10
-
11
- ## Usage
12
-
13
- Currently no extra command line options, so simply:
14
-
15
- $ topkit APP_NAME
16
-
17
- ## Contributing
18
-
19
- 1. Fork it
20
- 2. Create your feature branch (`git checkout -b my-new-feature`)
21
- 3. Commit your changes (`git commit -am 'Add some feature'`)
22
- 4. Push to the branch (`git push origin my-new-feature`)
23
- 5. Create new Pull Request
24
-
25
- ## License
26
-
27
- topkit is Copyright © 2008-2013 Topic Design. It is free software, and may be redistributed under the terms specified in the LICENSE file.
11
+ _Note: The original use of this gem was to bootstrap Ruby on Rails
12
+ applications. That functionality is no longer the focus of this gem, nor is it
13
+ supported._
data/Rakefile CHANGED
@@ -1 +1,2 @@
1
1
  require "bundler/gem_tasks"
2
+
data/bin/ripen ADDED
@@ -0,0 +1,248 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # -------------------------------------- Configuration
4
+
5
+ # Load the configuration file. All of these values are
6
+ # brought into this file automatically.
7
+ #
8
+ # There is no security around this because we already assume
9
+ # a root user is running this script.
10
+ #
11
+ # Declare all associative arrays (vars in ripen.conf)
12
+ #
13
+ declare -A user
14
+ declare -A git
15
+ declare -A mysql
16
+ declare -A swapfile
17
+ declare -A colors
18
+
19
+ # These are the variables usually shown in the config file
20
+ update_system=true
21
+
22
+ reboot=false
23
+
24
+ dev_libs=(
25
+ build-essential
26
+ zlib1g-dev
27
+ libssl-dev
28
+ libreadline-gplv2-dev
29
+ python-software-properties
30
+ make
31
+ libxml2
32
+ libxml2-dev
33
+ libxslt1-dev
34
+ imagemagick
35
+ libmagickwand-dev
36
+ libmagic-dev
37
+ nodejs
38
+ )
39
+
40
+ add_user=true
41
+ username='topkit'
42
+ user=(
43
+ ['username']='topkit'
44
+ ['password']='password'
45
+ ['options']='--create-home --user-group --shell /bin/bash'
46
+ ['sudo']=true
47
+ )
48
+
49
+ bash_config_file='bashrc'
50
+ adjust_bash_config=true
51
+ bash_config_url='https://raw.githubusercontent.com/seancdavis/ripen/master/dotfiles/bashrc'
52
+ add_bash_profile=true
53
+ bash_profile_url='https://raw.githubusercontent.com/seancdavis/ripen/master/dotfiles/profile'
54
+
55
+ install_git=true
56
+ git=(
57
+ ['name']='topkit'
58
+ ['email']='topkit@topicdesign.com'
59
+ ['colors']=true
60
+ )
61
+
62
+ install_nginx=true
63
+
64
+ install_mysql=false
65
+
66
+ install_postgresql=true
67
+
68
+ install_rbenv=true
69
+ ruby_version='2.1.4'
70
+ install_bundler=true
71
+
72
+ add_swapfile=true
73
+ swapfile=(
74
+ ['size']='4G'
75
+ ['swappiness']='10'
76
+ ['vfs_cache_pressure']='50'
77
+ )
78
+
79
+ # -------------------------------------- Helpers
80
+
81
+ colors=(
82
+ ["black"]="\033[33;30m"
83
+ ["red"]="\033[33;31m"
84
+ ["green"]="\033[33;32m"
85
+ ["yellow"]="\033[33;33m"
86
+ ["blue"]="\033[33;34m"
87
+ ["purple"]="\033[33;35m"
88
+ ["cyan"]="\033[33;36m"
89
+ ["white"]="\033[33;37m"
90
+ )
91
+
92
+ # puts -> echo content with an optional color
93
+ #
94
+ puts () {
95
+ if [ $2 ]; then
96
+ echo -e "${colors[$2]}$1${colors[white]}"
97
+ else
98
+ echo -e $1
99
+ fi
100
+ }
101
+
102
+ # cmd -> use `puts` to execute and output a command
103
+ #
104
+ cmd () {
105
+ puts "\n[EXEC] $1" "yellow"
106
+ $1
107
+ }
108
+
109
+ # cmd_as_user -> run cmd as another user
110
+ #
111
+ cmd_as_user () {
112
+ cmd "sudo -H -u $username $1"
113
+ }
114
+
115
+ # append_to_file -> add a line to the end of a file
116
+ append_to_file () {
117
+ puts "\n[EXEC] echo '$1' >> $2" "yellow"
118
+ echo $1 >> $2
119
+ }
120
+
121
+ # -------------------------------------- Update System
122
+
123
+ if [ $update_system = true ]; then
124
+ cmd "apt-get -y update --fix-missing"
125
+ cmd "apt-get -y upgrade"
126
+ fi
127
+
128
+ # -------------------------------------- Development Libraries
129
+
130
+ for i in "${dev_libs[@]}"
131
+ do
132
+ cmd "apt-get -y install $i"
133
+ done
134
+
135
+ # -------------------------------------- Add User
136
+
137
+ if [ $add_user = true ]; then
138
+ password="print crypt(${user[password]}, \"aa\")"
139
+ password=$(perl -e "$password")
140
+ cmd "useradd --password $password ${user[options]} ${user[username]}"
141
+
142
+ # Add to the sudoers file if necessary
143
+ if [ ${user[sudo]} = true ]; then
144
+ cmd "cp /etc/sudoers /etc/sudoers.bak"
145
+ append_to_file "${user[username]} ALL=(ALL:ALL) ALL" /etc/sudoers
146
+ fi
147
+ fi
148
+
149
+ home="/home/$username"
150
+ export HOME=$home
151
+
152
+ # -------------------------------------- Add Bash Config
153
+
154
+ if [ $adjust_bash_config = true ]; then
155
+ cmd "rm $home/.$bash_config_file"
156
+ cmd "curl $bash_config_url --output $home/.$bash_config_file"
157
+
158
+ if [ $add_bash_profile = true ]; then
159
+ cmd "rm $home/.profile"
160
+ cmd "curl $bash_profile_url --output $home/.profile"
161
+ fi
162
+ fi
163
+
164
+ # -------------------------------------- Install Git
165
+
166
+ if [ $install_git = true ]; then
167
+ cmd "apt-get -y install git-core"
168
+ # need the double quotes to make it all the way through,
169
+ # so we have to break this one out
170
+ puts "\n[EXEC] git config --global user.name \"${git[name]}\"" "yellow"
171
+ git config --global user.name "${git[name]}"
172
+ cmd "git config --global user.email ${git[email]}"
173
+ cmd "git config --global color.ui ${git[colors]}"
174
+ cmd "mv .gitconfig /home/$username/"
175
+ fi
176
+
177
+ # -------------------------------------- Install Nginx
178
+
179
+ if [ $install_nginx = true ]; then
180
+ cmd "apt-get -y install nginx"
181
+ fi
182
+
183
+ # -------------------------------------- Install MySQL
184
+
185
+ if [ $install_mysql = true ]; then
186
+ cmd "apt-get -y install libmysqlclient-dev"
187
+ debconf-set-selections <<< "mysql-server mysql-server/root_password password ${mysql[root_password]}"
188
+ debconf-set-selections <<< "mysql-server mysql-server/root_password_again password ${mysql[root_password]}"
189
+ cmd "apt-get -y install mysql-server"
190
+ fi
191
+
192
+ # -------------------------------------- Install PostgreSQL
193
+
194
+ if [ $install_postgresql = true ]; then
195
+ cmd "apt-get -y install postgresql libpq-dev postgresql-contrib"
196
+ fi
197
+
198
+ # -------------------------------------- Install Ruby
199
+
200
+ if [ $install_rbenv = true ]; then
201
+
202
+ cmd "git clone https://github.com/sstephenson/rbenv.git $home/.rbenv"
203
+
204
+ cmd "mv $home/.$bash_config_file $home/.$bash_config_file.tmp"
205
+ cmd "rm $home/.$bash_config_file"
206
+ append_to_file 'export PATH="$HOME/.rbenv/bin:$PATH"' "$home/.$bash_config_file"
207
+ append_to_file 'eval "$(rbenv init -)"' "$home/.$bash_config_file"
208
+ puts "\n[EXEC] cat $home/.$bash_config_file.tmp >> $home/.$bash_config_file" "yellow"
209
+ echo "$(cat $home/.$bash_config_file.tmp)" >> $home/.$bash_config_file
210
+ cmd "rm $home/.$bash_config_file.tmp"
211
+
212
+ cmd "source $home/.$bash_config_file"
213
+ cmd "git clone https://github.com/sstephenson/ruby-build.git $home/.rbenv/plugins/ruby-build"
214
+
215
+ cmd "rbenv install $ruby_version"
216
+ cmd "rbenv global $ruby_version"
217
+
218
+ if [ $install_bundler = true ]; then
219
+ cmd "gem install bundler --no-ri --no-rdoc"
220
+ cmd "rbenv rehash"
221
+ fi
222
+
223
+ cmd "chown -R $username:$username $home"
224
+ fi
225
+
226
+ # -------------------------------------- Swapfile
227
+
228
+ if [ $add_swapfile = true ]; then
229
+ cmd "fallocate -l ${swapfile[size]} /swapfile"
230
+ cmd "chmod 600 /swapfile"
231
+ cmd "mkswap /swapfile"
232
+ cmd "swapon /swapfile"
233
+ append_to_file "/swapfile none swap sw 0 0" "/etc/fstab"
234
+ cmd "sysctl vm.swappiness=${swapfile[swappiness]}"
235
+ append_to_file "vm.swappiness=${swapfile[swappiness]}" "/etc/sysctl.conf"
236
+ cmd "sysctl vm.vfs_cache_pressure=${swapfile[vfs_cache_pressure]}"
237
+ append_to_file "vm.vfs_cache_pressure = ${swapfile[vfs_cache_pressure]}" "/etc/sysctl.conf"
238
+ fi
239
+
240
+ # -------------------------------------- Reboot
241
+
242
+ if [ $reboot = true ]; then
243
+ cmd "reboot"
244
+ fi
245
+
246
+ # -------------------------------------- Change Password For User
247
+
248
+ cmd "passwd $username"
data/bin/topkit CHANGED
@@ -1,11 +1,115 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require File.expand_path(File.join('..', 'lib', 'topkit', 'generators', 'app_generator'), File.dirname(__FILE__))
4
- require File.expand_path(File.join('..', 'lib', 'topkit', 'actions'), File.dirname(__FILE__))
5
- require File.expand_path(File.join('..', 'lib', 'topkit', 'app_builder'), File.dirname(__FILE__))
3
+ require 'topkit'
6
4
 
7
- templates_root = File.expand_path(File.join("..", "templates"), File.dirname(__FILE__))
8
- Topkit::AppGenerator.source_root templates_root
9
- Topkit::AppGenerator.source_paths << Rails::Generators::AppGenerator.source_root << templates_root
5
+ action = ARGV[0].nil? ? nil : ARGV[0].downcase
6
+ object = ARGV[1].nil? ? nil : ARGV[1].downcase
7
+ env = ARGV[2].nil? ? nil : ARGV[2].downcase
10
8
 
11
- Topkit::AppGenerator.start
9
+ if [nil, ''].include?(action) || [nil, ''].include?(object)
10
+ puts "Usage: topkit [ACTION] [OBJECT]"
11
+ exit
12
+ end
13
+
14
+ methods = [
15
+ 'add_user',
16
+ 'clean_symlinks',
17
+ # 'deploy_site',
18
+ # 'generate_site',
19
+ 'generate_symlinks',
20
+ 'get_site',
21
+ 'get_user',
22
+ 'create_user',
23
+ # 'import_site',
24
+ 'install_developer',
25
+ 'install_server',
26
+ 'create_site',
27
+ 'rails_console',
28
+ # 'subl_site',
29
+ 'update_database',
30
+ 'update_server',
31
+ 'update_site'
32
+ ]
33
+
34
+ unless methods.include?("#{action}_#{object}")
35
+ puts 'ERROR: That action/object combination does not exist.'
36
+ exit
37
+ end
38
+
39
+ def add_user
40
+ Topkit::Developer::User.new.add
41
+ end
42
+
43
+ def clean_symlinks
44
+ if env == 'server'
45
+ Topkit::Server::Symlinks.new.clean
46
+ else
47
+ Topkit::Developer::Symlinks.new.clean
48
+ end
49
+ end
50
+
51
+ def create_site
52
+ Topkit::Developer::Site.new.create
53
+ end
54
+
55
+ def create_user
56
+ Topkit::Developer::User.new.create
57
+ end
58
+
59
+ # def deploy_site
60
+ # Topkit::Developer::Site.new.deploy
61
+ # end
62
+
63
+ # def generate_site
64
+ # Topkit::Developer::Site.new.generate
65
+ # end
66
+
67
+ def generate_symlinks
68
+ if env == 'server'
69
+ Topkit::Server::Symlinks.new.generate
70
+ else
71
+ Topkit::Developer::Symlinks.new.generate
72
+ end
73
+ end
74
+
75
+ def get_site
76
+ Topkit::Developer::Site.new.get
77
+ end
78
+
79
+ def get_user
80
+ Topkit::Developer::User.new.get
81
+ end
82
+
83
+ # def import_site
84
+ # Topkit::Developer::Site.new.import
85
+ # end
86
+
87
+ def install_developer
88
+ Topkit::Developer::Installer.new
89
+ end
90
+
91
+ def install_server
92
+ Topkit::Server::Installer.new
93
+ end
94
+
95
+ def rails_console
96
+ Topkit::Server::Console.new
97
+ end
98
+
99
+ # def subl_site
100
+ # Topkit::Developer::Site.new.subl
101
+ # end
102
+
103
+ def update_database
104
+ Topkit::Developer::Database.new.update
105
+ end
106
+
107
+ def update_server
108
+ Topkit::Server::Updater.new
109
+ end
110
+
111
+ def update_site
112
+ Topkit::Developer::Site.new.update
113
+ end
114
+
115
+ send("#{action}_#{object}")
@@ -0,0 +1,9 @@
1
+ production:
2
+ adapter: postgresql
3
+ encoding: unicode
4
+ host: localhost
5
+ pool: 5
6
+ timeout: 5000
7
+ username: [db_user]
8
+ password: [db_pass]
9
+ database: [db_name]
@@ -0,0 +1,7 @@
1
+ development:
2
+ adapter: postgresql
3
+ encoding: unicode
4
+ host: localhost
5
+ pool: 5
6
+ timeout: 5000
7
+ database: [db_name]
@@ -0,0 +1,3 @@
1
+ development:
2
+ server_url: [server_url]
3
+ api_key: [api_key]
@@ -0,0 +1,27 @@
1
+ upstream unicorn_[app_name] {
2
+ server unix:/tmp/unicorn.[app_name].sock fail_timeout=0;
3
+ }
4
+
5
+ server {
6
+ listen 80;
7
+ server_name [server_name];
8
+ root /home/topkit/[app_name]/public;
9
+
10
+ location ^~ /assets/ {
11
+ gzip_static on;
12
+ expires max;
13
+ add_header Cache-Control public;
14
+ }
15
+
16
+ try_files $uri/index.html $uri @unicorn_[app_name];
17
+ location @unicorn_[app_name] {
18
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
19
+ proxy_set_header Host $http_host;
20
+ proxy_redirect off;
21
+ proxy_pass http://unicorn_[app_name];
22
+ }
23
+
24
+ error_page 500 502 503 504 /500.html;
25
+ client_max_body_size 4G;
26
+ keepalive_timeout 10;
27
+ }
@@ -0,0 +1,14 @@
1
+ production:
2
+ url: [url]
3
+ google_analytics_id: [google_analytics_id]
4
+ mailer:
5
+ user_name: [mailer_user_name]
6
+ password: [mailer_password]
7
+ domain: [mailer_domain]
8
+ address: [mailer_address]
9
+ port: [mailer_port]
10
+ default_from: [mailer_default_from]
11
+ errors:
12
+ email_prefix: [errors_subject]
13
+ sender: [errors_from]
14
+ recipient: [errors_to]
@@ -0,0 +1,8 @@
1
+ working_directory "[root]"
2
+ pid "[root]/tmp/pids/unicorn.pid"
3
+ stderr_path "[root]/log/unicorn.log"
4
+ stdout_path "[root]/log/unicorn.log"
5
+
6
+ listen "/tmp/unicorn.[app_name].sock"
7
+ worker_processes 2
8
+ timeout 30
@@ -0,0 +1,84 @@
1
+ #!/bin/sh
2
+ ### BEGIN INIT INFO
3
+ # Provides: unicorn
4
+ # Required-Start: $remote_fs $syslog
5
+ # Required-Stop: $remote_fs $syslog
6
+ # Default-Start: 2 3 4 5
7
+ # Default-Stop: 0 1 6
8
+ # Short-Description: Manage unicorn server
9
+ # Description: Start, stop, restart unicorn server for a specific application.
10
+ ### END INIT INFO
11
+ set -e
12
+
13
+ # Feel free to change any of the following variables for your app:
14
+ TIMEOUT=${TIMEOUT-60}
15
+ APP_ROOT=[root]
16
+ PID=[root]/tmp/pids/unicorn.pid
17
+ CMD="cd [root]; bundle exec unicorn -D -c [root]/config/unicorn.rb -E production"
18
+ AS_USER=[user]
19
+ set -u
20
+
21
+ OLD_PIN="$PID.oldbin"
22
+
23
+ sig () {
24
+ test -s "$PID" && kill -$1 `cat $PID`
25
+ }
26
+
27
+ oldsig () {
28
+ test -s $OLD_PIN && kill -$1 `cat $OLD_PIN`
29
+ }
30
+
31
+ run () {
32
+ if [ "$(id -un)" = "$AS_USER" ]; then
33
+ eval $1
34
+ else
35
+ su -c "$1" - $AS_USER
36
+ fi
37
+ }
38
+
39
+ case "$1" in
40
+ start)
41
+ sig 0 && echo >&2 "Already running" && exit 0
42
+ run "$CMD"
43
+ ;;
44
+ stop)
45
+ sig QUIT && exit 0
46
+ echo >&2 "Not running"
47
+ ;;
48
+ force-stop)
49
+ sig TERM && exit 0
50
+ echo >&2 "Not running"
51
+ ;;
52
+ restart|reload)
53
+ sig HUP && echo reloaded OK && exit 0
54
+ echo >&2 "Couldn't reload, starting '$CMD' instead"
55
+ run "$CMD"
56
+ ;;
57
+ upgrade)
58
+ if sig USR2 && sleep 2 && sig 0 && oldsig QUIT
59
+ then
60
+ n=$TIMEOUT
61
+ while test -s $OLD_PIN && test $n -ge 0
62
+ do
63
+ printf '.' && sleep 1 && n=$(( $n - 1 ))
64
+ done
65
+ echo
66
+
67
+ if test $n -lt 0 && test -s $OLD_PIN
68
+ then
69
+ echo >&2 "$OLD_PIN still exists after $TIMEOUT seconds"
70
+ exit 1
71
+ fi
72
+ exit 0
73
+ fi
74
+ echo >&2 "Couldn't upgrade, starting '$CMD' instead"
75
+ run "$CMD"
76
+ ;;
77
+ reopen-logs)
78
+ sig USR1
79
+ ;;
80
+ *)
81
+ echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>"
82
+ exit 1
83
+ ;;
84
+ esac