intercity 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +52 -12
- data/intercity.gemspec +2 -2
- data/lib/intercity/cli/application.rb +21 -17
- data/lib/intercity/cli/mysql.rb +9 -6
- data/lib/intercity/cli/postgresql.rb +45 -0
- data/lib/intercity/cli/server.rb +29 -3
- data/lib/intercity/cli/ssh_key.rb +53 -0
- data/lib/intercity/cli.rb +62 -3
- data.tar.gz.sig +0 -0
- metadata +4 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d35afb301302349a658481ccc4791431ff3d042d
|
4
|
+
data.tar.gz: 1c7e5d7ab4cfbfb85a5b5ead6cb581a865958741
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f93310bb6008f3edc8a27d4fe760c2d6480f120200c884cc7e5c6170f21e5ac8f88808303d46ca920b27c59137caa029341b68d361f65cd044f5d3985585cd30
|
7
|
+
data.tar.gz: 6a605b5a6dbe905730024a76221ee9c3218e2b17d446a0016cbbf1c130b6cb9118b5d1e5a253b6196a25e27e0c0c5594b19242932c6f68d461d03af3a63e5860
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/README.md
CHANGED
@@ -13,23 +13,40 @@ $ gem install intercity
|
|
13
13
|
Usage
|
14
14
|
-----
|
15
15
|
|
16
|
-
|
16
|
+
Get a clean Ubuntu 14.04 LTS server and initialize it:
|
17
17
|
|
18
18
|
```
|
19
19
|
$ intercity server install IPADDRESS
|
20
|
-
$ intercity mysql install --server=IPADDRESS
|
21
20
|
```
|
22
21
|
|
23
|
-
Then
|
22
|
+
Then install a database server. You can choose PostgreSQL or MySQL:
|
24
23
|
|
25
24
|
```
|
26
|
-
$ intercity
|
25
|
+
$ intercity postgresql install
|
26
|
+
```
|
27
|
+
|
28
|
+
or
|
29
|
+
|
30
|
+
```
|
31
|
+
$ intercity mysql install
|
32
|
+
```
|
33
|
+
|
34
|
+
Now, create an application on your server:
|
35
|
+
|
36
|
+
```
|
37
|
+
$ intercity application create myapp
|
38
|
+
```
|
39
|
+
|
40
|
+
Upload your SSH key to the server so you can deploy the app with Capistrano:
|
41
|
+
|
42
|
+
```
|
43
|
+
$ intercity sshkey add
|
27
44
|
```
|
28
45
|
|
29
46
|
You can edit environment variables for your app like this:
|
30
47
|
|
31
48
|
```
|
32
|
-
$ intercity application edit intercity
|
49
|
+
$ intercity application edit intercity
|
33
50
|
```
|
34
51
|
|
35
52
|
Finally, set up Capistrano in your app and deploy with:
|
@@ -43,13 +60,36 @@ All commands
|
|
43
60
|
------------
|
44
61
|
|
45
62
|
```
|
46
|
-
|
63
|
+
# Initialize a server:
|
64
|
+
$ intercity server install HOST/IP
|
65
|
+
|
66
|
+
# List all your servers:
|
67
|
+
$ intercity server list
|
68
|
+
|
69
|
+
# Switch the active server:
|
70
|
+
$ intercity switch HOST/IP
|
71
|
+
|
72
|
+
# Install PostgreSQL:
|
73
|
+
$ intercity postgresql install
|
74
|
+
|
75
|
+
# Install MySQL:
|
76
|
+
$ intercity mysql install
|
77
|
+
|
78
|
+
# List your MySQL databases:
|
79
|
+
$ intercity mysql list
|
80
|
+
|
81
|
+
# Add your SSH key for deployment:
|
82
|
+
$ intercity sshkey add
|
83
|
+
|
84
|
+
# Create an application on your server:
|
85
|
+
$ intercity application create APPNAME
|
86
|
+
|
87
|
+
# Update an application setting, for example the domain names:
|
88
|
+
$ intercity application update APPNAME --domain-name=mysite.com
|
47
89
|
|
48
|
-
|
49
|
-
$ intercity
|
90
|
+
# Edit environment variables for an application:
|
91
|
+
$ intercity application edit APPNAME
|
50
92
|
|
51
|
-
|
52
|
-
$ intercity application
|
53
|
-
$ intercity application edit APPNAME --server=IPADDRESS # For editing the ENV vars
|
54
|
-
$ intercity application list --server=IPADDRESS
|
93
|
+
# List all the applications on the server:
|
94
|
+
$ intercity application list
|
55
95
|
```
|
data/intercity.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'intercity'
|
3
|
-
s.version = '0.1.
|
4
|
-
s.date = '2015-
|
3
|
+
s.version = '0.1.4'
|
4
|
+
s.date = '2015-03-15'
|
5
5
|
s.summary = 'Command-line interface for hosting Rails apps on your server.'
|
6
6
|
s.authors = ['Michiel Sikkes']
|
7
7
|
s.email = 'michiel.sikkes@gmail.com'
|
@@ -10,11 +10,11 @@ module IntercityCLI
|
|
10
10
|
|
11
11
|
desc "list", "Lists all the application deployments on the server"
|
12
12
|
option :user, default: "root"
|
13
|
-
option :server, type: :string
|
13
|
+
option :server, type: :string
|
14
14
|
def list()
|
15
15
|
configuration = IntercityCLI::Configuration.new()
|
16
16
|
|
17
|
-
server = options[:server]
|
17
|
+
server = options[:server] || configuration.active_server!
|
18
18
|
user = options[:user]
|
19
19
|
on server do |host|
|
20
20
|
host.user = user
|
@@ -26,12 +26,11 @@ module IntercityCLI
|
|
26
26
|
|
27
27
|
desc "edit APPLICATION", "Edit ENV variables for application"
|
28
28
|
option :user, default: "root"
|
29
|
-
option :server, type: :string
|
29
|
+
option :server, type: :string
|
30
30
|
def edit(application)
|
31
|
-
address = options[:server]
|
32
|
-
|
33
31
|
configuration = IntercityCLI::Configuration.new()
|
34
|
-
|
32
|
+
address = options[:server] || configuration.active_server!
|
33
|
+
node_file = File.join(configuration.nodes_directory, "#{address}.json")
|
35
34
|
|
36
35
|
user = options[:user]
|
37
36
|
|
@@ -82,7 +81,7 @@ module IntercityCLI
|
|
82
81
|
|
83
82
|
upload! node_file , "/root/server_config.json"
|
84
83
|
|
85
|
-
execute 'chef-
|
84
|
+
execute 'chef-solo -c solo.rb -j ~/server_config.json -o "recipe[rails::env_vars]"'
|
86
85
|
end
|
87
86
|
end
|
88
87
|
else
|
@@ -92,20 +91,21 @@ module IntercityCLI
|
|
92
91
|
|
93
92
|
desc "add APPLICATION", "Adds an application to a server"
|
94
93
|
option :user, default: "root"
|
95
|
-
option :server, type: :string
|
96
|
-
option :domain_name, type: :string
|
94
|
+
option :server, type: :string
|
95
|
+
option :domain_name, type: :string
|
97
96
|
option :rails_environment, type: :string, default: "production"
|
98
|
-
option :database_adapter, type: :string, default: "
|
97
|
+
option :database_adapter, type: :string, default: "postgresql"
|
99
98
|
option :database_name, type: :string, default: SecureRandom.hex(6)
|
100
99
|
option :database_user, type: :string, default: SecureRandom.hex(6)
|
101
100
|
option :database_password, type: :string, default: SecureRandom.hex()
|
102
|
-
option :database_host, type: :string, default: "
|
101
|
+
option :database_host, type: :string, default: "localhost"
|
103
102
|
option :ruby_version, type: :string, default: "2.1.3"
|
104
103
|
def add(application)
|
105
|
-
address = options[:server]
|
106
|
-
|
107
104
|
configuration = IntercityCLI::Configuration.new()
|
108
|
-
|
105
|
+
|
106
|
+
address = options[:server] || configuration.active_server!
|
107
|
+
|
108
|
+
node_file = File.join(configuration.nodes_directory, "#{address}.json")
|
109
109
|
|
110
110
|
if File.exists?(node_file)
|
111
111
|
raw_json = File.read(node_file)
|
@@ -114,13 +114,16 @@ module IntercityCLI
|
|
114
114
|
raise "No configuration file for this server yet! Please create one by running:\n\n$ intercity server install <ip address>\n\n"
|
115
115
|
end
|
116
116
|
|
117
|
+
json["nginx"] ||= {}
|
118
|
+
json["nginx"]["package_name"] = "nginx-extras"
|
119
|
+
|
117
120
|
json["active_applications"] ||= {}
|
118
121
|
|
119
122
|
json["active_applications"][application] ||= {}
|
120
123
|
|
121
124
|
json["active_applications"][application].merge!(
|
122
125
|
{
|
123
|
-
"domain_names" => [options[:domain_name]],
|
126
|
+
"domain_names" => [options[:domain_name] || address],
|
124
127
|
"rails_env" => options[:rails_environment],
|
125
128
|
"database_info" => {
|
126
129
|
"adapter" => options[:database_adapter],
|
@@ -129,7 +132,8 @@ module IntercityCLI
|
|
129
132
|
"password" => options[:database_password],
|
130
133
|
"database" => options[:database_name]
|
131
134
|
},
|
132
|
-
"ruby_version" => options[:ruby_version]
|
135
|
+
"ruby_version" => options[:ruby_version],
|
136
|
+
"packages" => ["nodejs", "imagemagick"]
|
133
137
|
}
|
134
138
|
)
|
135
139
|
|
@@ -145,7 +149,7 @@ module IntercityCLI
|
|
145
149
|
|
146
150
|
upload! node_file, "/root/server_config.json"
|
147
151
|
|
148
|
-
execute 'chef-
|
152
|
+
execute 'chef-solo -c solo.rb -j ~/server_config.json -o "recipe[apt],recipe[rails::passenger],recipe[rails::databases]"'
|
149
153
|
end
|
150
154
|
end
|
151
155
|
end
|
data/lib/intercity/cli/mysql.rb
CHANGED
@@ -10,10 +10,10 @@ module IntercityCLI
|
|
10
10
|
option :user, default: "root"
|
11
11
|
option :server, type: :string, required: true
|
12
12
|
def list
|
13
|
-
address = options[:server]
|
14
|
-
|
15
13
|
configuration = IntercityCLI::Configuration.new()
|
16
|
-
|
14
|
+
address = options[:server] || configuration.active_server!
|
15
|
+
|
16
|
+
node_file = File.join(configuration.nodes_directory, "#{address}.json")
|
17
17
|
|
18
18
|
raw_json = File.read(node_file)
|
19
19
|
json = JSON.parse(raw_json)
|
@@ -45,9 +45,12 @@ module IntercityCLI
|
|
45
45
|
desc "install IPADDRESS", "Installs MySQL at IPADDRESS"
|
46
46
|
option :user, default: "root"
|
47
47
|
option :root_password, default: SecureRandom.hex(), type: :string
|
48
|
-
|
48
|
+
option :server, required: true, type: :string
|
49
|
+
def install
|
49
50
|
configuration = IntercityCLI::Configuration.new()
|
50
|
-
|
51
|
+
address = options[:server] || configuration.active_server!
|
52
|
+
|
53
|
+
node_file = File.join(configuration.nodes_directory, "#{address}.json")
|
51
54
|
|
52
55
|
if File.exists?(node_file)
|
53
56
|
raw_json = File.read(node_file)
|
@@ -70,7 +73,7 @@ module IntercityCLI
|
|
70
73
|
|
71
74
|
upload! node_file, "/root/server_config.json"
|
72
75
|
|
73
|
-
execute 'chef-
|
76
|
+
execute 'chef-solo -c solo.rb -j ~/server_config.json -o recipe[mysql::server]'
|
74
77
|
end
|
75
78
|
end
|
76
79
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require "thor"
|
2
|
+
require "json"
|
3
|
+
require "sshkit"
|
4
|
+
|
5
|
+
module IntercityCLI
|
6
|
+
class PostgreSQL < Thor
|
7
|
+
require "sshkit/dsl"
|
8
|
+
|
9
|
+
desc "install IPADDRESS", "Installs MySQL at IPADDRESS"
|
10
|
+
option :user, default: "root"
|
11
|
+
option :root_password, default: SecureRandom.hex(), type: :string
|
12
|
+
option :server, type: :string
|
13
|
+
def install
|
14
|
+
configuration = IntercityCLI::Configuration.new()
|
15
|
+
address = options[:server] || configuration.active_server!
|
16
|
+
|
17
|
+
node_file = File.join(configuration.nodes_directory, "#{address}.json")
|
18
|
+
|
19
|
+
if File.exists?(node_file)
|
20
|
+
raw_json = File.read(node_file)
|
21
|
+
json = JSON.parse(raw_json)
|
22
|
+
else
|
23
|
+
json = {postgresql: {
|
24
|
+
password: { postgres: options[:root_password] }
|
25
|
+
}}
|
26
|
+
end
|
27
|
+
|
28
|
+
File.open(node_file, "w+") do |f|
|
29
|
+
f.write(JSON.pretty_generate(json))
|
30
|
+
end
|
31
|
+
|
32
|
+
server = address
|
33
|
+
user = options[:user]
|
34
|
+
on server do |host|
|
35
|
+
with debian_frontend: :noninteractive do
|
36
|
+
host.user = user
|
37
|
+
|
38
|
+
upload! node_file, "/root/server_config.json"
|
39
|
+
|
40
|
+
execute 'chef-solo -c solo.rb -j ~/server_config.json -o recipe[postgresql::server]'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/intercity/cli/server.rb
CHANGED
@@ -5,9 +5,26 @@ module IntercityCLI
|
|
5
5
|
class Server < Thor
|
6
6
|
require "sshkit/dsl"
|
7
7
|
|
8
|
+
desc "list", "Lists your servers"
|
9
|
+
def list()
|
10
|
+
configuration = IntercityCLI::Configuration.new()
|
11
|
+
Dir.chdir(configuration.nodes_directory) do
|
12
|
+
Dir["*.json"].each do |server_config|
|
13
|
+
server_name = server_config.gsub(".json", "")
|
14
|
+
if server_name == configuration.active_server
|
15
|
+
puts "* #{server_name}"
|
16
|
+
else
|
17
|
+
puts server_name
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
8
23
|
desc "install IPADDRESS", "Installs server at IPADDRESS"
|
9
24
|
option :user, type: :string, default: "root"
|
10
25
|
def install(address)
|
26
|
+
configuration = IntercityCLI::Configuration.new()
|
27
|
+
|
11
28
|
server = address
|
12
29
|
user = options[:user]
|
13
30
|
on server do |host|
|
@@ -20,12 +37,21 @@ module IntercityCLI
|
|
20
37
|
execute "curl -L https://www.chef.io/chef/install.sh | sudo bash"
|
21
38
|
|
22
39
|
# Install chef-repo
|
23
|
-
execute "wget http://binaries.intercityup.com/cookbooks/cookbooks-2.3.
|
24
|
-
execute "tar zxf cookbooks-2.3.
|
40
|
+
execute "wget http://binaries.intercityup.com/cookbooks/cookbooks-2.3.1.tar.gz?client=cli -O cookbooks-2.3.1.tar.gz"
|
41
|
+
execute "tar zxf cookbooks-2.3.1.tar.gz"
|
42
|
+
|
43
|
+
solo_config = StringIO.new('cookbook_path ["/root/cookbooks"]')
|
44
|
+
upload! solo_config, "/root/solo.rb"
|
25
45
|
|
26
|
-
execute "chef-
|
46
|
+
execute "chef-solo -c solo.rb"
|
27
47
|
end
|
28
48
|
end
|
49
|
+
|
50
|
+
configuration.active_server = address
|
51
|
+
puts
|
52
|
+
puts "Badam. Server #{address} initialized."
|
53
|
+
puts "This server will be used for subsequent commands."
|
54
|
+
puts "You can switch to a different server with \"intercity switch\"."
|
29
55
|
end
|
30
56
|
end
|
31
57
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require "thor"
|
2
|
+
require "sshkit"
|
3
|
+
|
4
|
+
module IntercityCLI
|
5
|
+
class SSHKey < Thor
|
6
|
+
require "sshkit/dsl"
|
7
|
+
|
8
|
+
desc "add", "Adds your workstation SSH key for deployment"
|
9
|
+
option :user, default: "root"
|
10
|
+
option :server, type: :string
|
11
|
+
option :ssh_public_key_path, type: :string, default: "~/.ssh/id_rsa.pub"
|
12
|
+
def add()
|
13
|
+
configuration = IntercityCLI::Configuration.new()
|
14
|
+
address = options[:server] || configuration.active_server!
|
15
|
+
|
16
|
+
node_file = File.join(configuration.nodes_directory, "#{address}.json")
|
17
|
+
|
18
|
+
if File.exists?(node_file)
|
19
|
+
raw_json = File.read(node_file)
|
20
|
+
json = JSON.parse(raw_json)
|
21
|
+
else
|
22
|
+
raise "No configuration file for this server yet! Please create one by running:\n\n$ intercity server install <ip address>\n\n"
|
23
|
+
end
|
24
|
+
|
25
|
+
ssh_key_path = File.expand_path(options[:ssh_public_key_path])
|
26
|
+
if !File.exists?(ssh_key_path)
|
27
|
+
raise "You don't have an SSH key yet. Generate one with ssh-keygen"
|
28
|
+
end
|
29
|
+
|
30
|
+
json["deploy_users"] ||= []
|
31
|
+
json["deploy_users"] << "deploy"
|
32
|
+
json["deploy_users"].uniq!
|
33
|
+
|
34
|
+
json["ssh_deploy_keys"] ||= []
|
35
|
+
json["ssh_deploy_keys"] << File.read(ssh_key_path)
|
36
|
+
json["ssh_deploy_keys"].uniq!
|
37
|
+
|
38
|
+
File.open(node_file, "w+") do |f|
|
39
|
+
f.write(JSON.pretty_generate(json))
|
40
|
+
end
|
41
|
+
|
42
|
+
server = address
|
43
|
+
user = options[:user]
|
44
|
+
on server do |host|
|
45
|
+
host.user = user
|
46
|
+
|
47
|
+
upload! node_file, "/root/server_config.json"
|
48
|
+
|
49
|
+
execute 'chef-solo -c solo.rb -j ~/server_config.json -o "recipe[ssh_deploy_keys]"'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/intercity/cli.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
require "thor"
|
2
2
|
require "intercity/cli/server"
|
3
3
|
require "intercity/cli/mysql"
|
4
|
+
require "intercity/cli/postgresql"
|
4
5
|
require "intercity/cli/application"
|
6
|
+
require "intercity/cli/ssh_key"
|
7
|
+
|
8
|
+
require "fileutils"
|
5
9
|
|
6
10
|
module IntercityCLI
|
7
11
|
|
@@ -14,19 +18,74 @@ module IntercityCLI
|
|
14
18
|
desc "mysql SUBCOMMAND ARGS", "subcommands to manage mysql"
|
15
19
|
subcommand "mysql", MySQL
|
16
20
|
|
21
|
+
desc "postgresql SUBCOMMAND ARGS", "subcommands to manage postgresql"
|
22
|
+
subcommand "postgresql", PostgreSQL
|
23
|
+
|
17
24
|
desc "application SUBCOMMAND ARGS", "subcommands to manage applications"
|
18
25
|
subcommand "application", Application
|
26
|
+
|
27
|
+
desc "sshkey SUBCOMMAND ARGS", "subcommand to manage SSH keys"
|
28
|
+
subcommand "sshkey", SSHKey
|
29
|
+
|
30
|
+
desc "switch SERVER", "switches Intercity CLI over to SERVER so you don't have to set --server"
|
31
|
+
def switch(server)
|
32
|
+
configuration = IntercityCLI::Configuration.new()
|
33
|
+
configuration.active_server = server
|
34
|
+
puts "Switched active server to #{server}"
|
35
|
+
end
|
36
|
+
|
37
|
+
desc "active", "Shows you which server is active for Intercity CLI"
|
38
|
+
def active
|
39
|
+
configuration = IntercityCLI::Configuration.new()
|
40
|
+
puts configuration.active_server
|
41
|
+
end
|
19
42
|
end
|
20
43
|
|
21
44
|
class Configuration
|
22
45
|
def initialize()
|
23
|
-
if !Dir.exists?(
|
24
|
-
|
46
|
+
if !Dir.exists?(config_directory)
|
47
|
+
FileUtils.mkdir_p(nodes_directory)
|
48
|
+
end
|
49
|
+
|
50
|
+
if !Dir.exists?(config_directory)
|
51
|
+
FileUtils.mkdir_p(nodes_directory)
|
25
52
|
end
|
26
53
|
end
|
27
54
|
|
28
55
|
def config_directory
|
29
|
-
File.expand_path("
|
56
|
+
File.expand_path("~/.intercity")
|
57
|
+
end
|
58
|
+
|
59
|
+
def nodes_directory
|
60
|
+
File.expand_path("~/.intercity/nodes")
|
61
|
+
end
|
62
|
+
|
63
|
+
def active_server
|
64
|
+
if !@active_server
|
65
|
+
current_server_path = File.expand_path("~/.intercity/active_server")
|
66
|
+
if File.exists?(current_server_path)
|
67
|
+
@active_server = File.open(current_server_path, "r") do |f|
|
68
|
+
f.read
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
return @active_server
|
73
|
+
end
|
74
|
+
|
75
|
+
def active_server!
|
76
|
+
if !active_server
|
77
|
+
puts 'No active server yet. Use the "switch" command or pass a server with --server'
|
78
|
+
exist
|
79
|
+
else
|
80
|
+
return active_server
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def active_server=(server)
|
85
|
+
current_server_path = File.expand_path("~/.intercity/active_server")
|
86
|
+
File.open(current_server_path, "w+") do |f|
|
87
|
+
f.write(server)
|
88
|
+
end
|
30
89
|
end
|
31
90
|
end
|
32
91
|
end
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: intercity
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michiel Sikkes
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
30
30
|
+MPuiRlaQjfZy/soMMERP/wuGpw6Ce94ITJ56wjQgl3YhqQPoE76KgRu4b4YwKhx
|
31
31
|
H7APPQD4vksmpWYDCN7llFs/nPaYM6lkxy7bcHRQxaA/km9IF+0iwbhv9mDdDQ==
|
32
32
|
-----END CERTIFICATE-----
|
33
|
-
date: 2015-
|
33
|
+
date: 2015-03-15 00:00:00.000000000 Z
|
34
34
|
dependencies:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: thor
|
@@ -75,7 +75,9 @@ files:
|
|
75
75
|
- lib/intercity/cli.rb
|
76
76
|
- lib/intercity/cli/application.rb
|
77
77
|
- lib/intercity/cli/mysql.rb
|
78
|
+
- lib/intercity/cli/postgresql.rb
|
78
79
|
- lib/intercity/cli/server.rb
|
80
|
+
- lib/intercity/cli/ssh_key.rb
|
79
81
|
homepage: https://intercityup.com
|
80
82
|
licenses:
|
81
83
|
- MIT
|
metadata.gz.sig
CHANGED
Binary file
|