ukku 0.1.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.
- checksums.yaml +15 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +72 -0
- data/Rakefile +44 -0
- data/bin/ukku +39 -0
- data/features/step_definitions/ukku_steps.rb +6 -0
- data/features/support/env.rb +15 -0
- data/features/ukku.feature +8 -0
- data/lib/ukku.rb +4 -0
- data/lib/ukku/configure_command.rb +94 -0
- data/lib/ukku/connection.rb +16 -0
- data/lib/ukku/run_command.rb +32 -0
- data/lib/ukku/version.rb +3 -0
- data/test/default_test.rb +14 -0
- data/test/test_helper.rb +9 -0
- data/ukku.gemspec +23 -0
- data/ukku.rdoc +5 -0
- metadata +158 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MzAzM2QyNzNlMmRjZDJlMDA2ZTZlZTkzMTZlNTQ3ODRmYTMxMjdkNQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NDhhNDg0NWVkNWQ5MTA5YzU2NjhiNGQ2OWI5ZWJlYmEzNDgyY2JlMA==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MzFmZWYxMjdkZjM5NGVkNGRhMGY3ZmJjOTY1MGJlNmZiYTdjZGVmMzZiYWVj
|
10
|
+
ZjFjZjE1ODg1MDJmNTRhNmU4NzEyNzBiZTYyNjlmMjAxNjQ1NWNjNjE5NjJm
|
11
|
+
ZWM3ODgzYmYwZTFhYmMyODIwZDgzYjhiNjA4NTg2NGVjOTRlYmI=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NjE5NzA2YTNjNzY4MWJhMjk1NDBjMTZkODA4MmVjOTRiMmQ5ZDM2MjRjNmI1
|
14
|
+
MmE1YTJlZWZhMmRkODMwMWE2M2NiMzdjZGM0ZjhiNjM3YWVhZDZiNDM2MGE5
|
15
|
+
ZjA0MWEwZWNiYjBlMjNlMmVlMmMzNDgxNmYxYTJlMjcyNGQ2NGQ=
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
ukku (0.1.0)
|
5
|
+
gli (= 2.12.2)
|
6
|
+
rugged (= 0.21.3)
|
7
|
+
rye (= 0.9)
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: https://rubygems.org/
|
11
|
+
specs:
|
12
|
+
annoy (0.5.6)
|
13
|
+
highline (>= 1.5.0)
|
14
|
+
aruba (0.6.1)
|
15
|
+
childprocess (>= 0.3.6)
|
16
|
+
cucumber (>= 1.1.1)
|
17
|
+
rspec-expectations (>= 2.7.0)
|
18
|
+
builder (3.2.2)
|
19
|
+
childprocess (0.5.5)
|
20
|
+
ffi (~> 1.0, >= 1.0.11)
|
21
|
+
cucumber (1.3.18)
|
22
|
+
builder (>= 2.1.2)
|
23
|
+
diff-lcs (>= 1.1.3)
|
24
|
+
gherkin (~> 2.12)
|
25
|
+
multi_json (>= 1.7.5, < 2.0)
|
26
|
+
multi_test (>= 0.1.1)
|
27
|
+
diff-lcs (1.2.5)
|
28
|
+
docopt (0.5.0)
|
29
|
+
drydock (0.6.9)
|
30
|
+
ffi (1.9.6)
|
31
|
+
gherkin (2.12.2)
|
32
|
+
multi_json (~> 1.3)
|
33
|
+
gli (2.12.2)
|
34
|
+
highline (1.6.21)
|
35
|
+
json (1.8.1)
|
36
|
+
multi_json (1.10.1)
|
37
|
+
multi_test (0.1.1)
|
38
|
+
net-scp (1.2.1)
|
39
|
+
net-ssh (>= 2.6.5)
|
40
|
+
net-ssh (2.9.2)
|
41
|
+
rake (10.4.2)
|
42
|
+
rdoc (4.2.0)
|
43
|
+
json (~> 1.4)
|
44
|
+
rspec-expectations (3.1.2)
|
45
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
46
|
+
rspec-support (~> 3.1.0)
|
47
|
+
rspec-support (3.1.2)
|
48
|
+
rugged (0.21.3)
|
49
|
+
rye (0.9.0)
|
50
|
+
annoy
|
51
|
+
highline (>= 1.5.1)
|
52
|
+
net-scp (>= 1.0.2)
|
53
|
+
net-ssh (>= 2.0.13)
|
54
|
+
sysinfo (>= 0.7.0)
|
55
|
+
storable (0.8.9)
|
56
|
+
subprocess (1.2.0)
|
57
|
+
sysinfo (0.8.1)
|
58
|
+
drydock
|
59
|
+
storable
|
60
|
+
|
61
|
+
PLATFORMS
|
62
|
+
ruby
|
63
|
+
|
64
|
+
DEPENDENCIES
|
65
|
+
aruba
|
66
|
+
docopt
|
67
|
+
rake
|
68
|
+
rdoc
|
69
|
+
rugged
|
70
|
+
rye (= 0.9)
|
71
|
+
subprocess
|
72
|
+
ukku!
|
data/Rakefile
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'rake/clean'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'rubygems/package_task'
|
4
|
+
require 'rdoc/task'
|
5
|
+
require 'cucumber'
|
6
|
+
require 'cucumber/rake/task'
|
7
|
+
Rake::RDocTask.new do |rd|
|
8
|
+
rd.main = "README.rdoc"
|
9
|
+
rd.rdoc_files.include("README.rdoc","lib/**/*.rb","bin/**/*")
|
10
|
+
rd.title = 'Your application title'
|
11
|
+
end
|
12
|
+
|
13
|
+
spec = eval(File.read('ukku.gemspec'))
|
14
|
+
|
15
|
+
Gem::PackageTask.new(spec) do |pkg|
|
16
|
+
end
|
17
|
+
CUKE_RESULTS = 'results.html'
|
18
|
+
CLEAN << CUKE_RESULTS
|
19
|
+
desc 'Run features'
|
20
|
+
Cucumber::Rake::Task.new(:features) do |t|
|
21
|
+
opts = "features --format html -o #{CUKE_RESULTS} --format progress -x"
|
22
|
+
opts += " --tags #{ENV['TAGS']}" if ENV['TAGS']
|
23
|
+
t.cucumber_opts = opts
|
24
|
+
t.fork = false
|
25
|
+
end
|
26
|
+
|
27
|
+
desc 'Run features tagged as work-in-progress (@wip)'
|
28
|
+
Cucumber::Rake::Task.new('features:wip') do |t|
|
29
|
+
tag_opts = ' --tags ~@pending'
|
30
|
+
tag_opts = ' --tags @wip'
|
31
|
+
t.cucumber_opts = "features --format html -o #{CUKE_RESULTS} --format pretty -x -s#{tag_opts}"
|
32
|
+
t.fork = false
|
33
|
+
end
|
34
|
+
|
35
|
+
task :cucumber => :features
|
36
|
+
task 'cucumber:wip' => 'features:wip'
|
37
|
+
task :wip => 'features:wip'
|
38
|
+
require 'rake/testtask'
|
39
|
+
Rake::TestTask.new do |t|
|
40
|
+
t.libs << "test"
|
41
|
+
t.test_files = FileList['test/*_test.rb']
|
42
|
+
end
|
43
|
+
|
44
|
+
task :default => [:test,:features]
|
data/bin/ukku
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'docopt'
|
3
|
+
require 'subprocess'
|
4
|
+
require 'rye'
|
5
|
+
require 'rugged'
|
6
|
+
require 'yaml'
|
7
|
+
require 'ukku'
|
8
|
+
|
9
|
+
doc = <<DOCOPT
|
10
|
+
Ukku.
|
11
|
+
|
12
|
+
Usage:
|
13
|
+
ukku configure [-u USER] [-i IDENTITY_FILE] HOST [NAME]
|
14
|
+
ukku [--app=NAME] run COMMAND...
|
15
|
+
|
16
|
+
Arguments:
|
17
|
+
HOST Domain or IP of your server.
|
18
|
+
NAME A name for the application. Defaults to 'production'.
|
19
|
+
|
20
|
+
Options:
|
21
|
+
-u USER --user=USER User used to connect to your server. Defaults to 'root'.
|
22
|
+
-i IDENTITY_FILE The SSH key used to connect to your server. Defaults to '~/.ssh/id_rsa'.
|
23
|
+
--app=NAME The name of the application.
|
24
|
+
|
25
|
+
DOCOPT
|
26
|
+
|
27
|
+
UKKU_FILE = '.ukku.yml'
|
28
|
+
|
29
|
+
begin
|
30
|
+
# parse args
|
31
|
+
args = Docopt::docopt(doc)
|
32
|
+
|
33
|
+
# execute commands
|
34
|
+
ConfigureCommand.new.execute(args) if args['configure']
|
35
|
+
RunCommand.new.execute(args) if args['run']
|
36
|
+
rescue Exception => e
|
37
|
+
puts " ! #{e.message}"
|
38
|
+
exit 1
|
39
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'aruba/cucumber'
|
2
|
+
|
3
|
+
ENV['PATH'] = "#{File.expand_path(File.dirname(__FILE__) + '/../../bin')}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
|
4
|
+
LIB_DIR = File.join(File.expand_path(File.dirname(__FILE__)),'..','..','lib')
|
5
|
+
|
6
|
+
Before do
|
7
|
+
# Using "announce" causes massive warnings on 1.9.2
|
8
|
+
@puts = true
|
9
|
+
@original_rubylib = ENV['RUBYLIB']
|
10
|
+
ENV['RUBYLIB'] = LIB_DIR + File::PATH_SEPARATOR + ENV['RUBYLIB'].to_s
|
11
|
+
end
|
12
|
+
|
13
|
+
After do
|
14
|
+
ENV['RUBYLIB'] = @original_rubylib
|
15
|
+
end
|
data/lib/ukku.rb
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
class ConfigureCommand
|
2
|
+
|
3
|
+
def execute(args)
|
4
|
+
host = args['HOST']
|
5
|
+
name = args['NAME'] || "production"
|
6
|
+
user = args['--user'] || "root"
|
7
|
+
identity_file = args['-i']
|
8
|
+
|
9
|
+
entry = { "host" => host, "user" => user } # the entry to add to UKKU_FILE
|
10
|
+
entry["identity_file"] = identity_file if identity_file
|
11
|
+
|
12
|
+
# check if the entry exists in UKKU_FILE (with different info)
|
13
|
+
entry_in_file = load_entry_from_file(name)
|
14
|
+
if entry_in_file && !entries_match?(entry_in_file, entry)
|
15
|
+
raise "Name '#{name}' already exists, choose a different one"
|
16
|
+
end
|
17
|
+
|
18
|
+
conn = Connection.new(host, user, identity_file)
|
19
|
+
server_ready = conn.execute("test -e /usr/bin/gitreceive") == 0
|
20
|
+
|
21
|
+
if server_ready
|
22
|
+
puts "The server is already configured ... skipping"
|
23
|
+
else
|
24
|
+
configure_server(conn)
|
25
|
+
end
|
26
|
+
|
27
|
+
repo = fetch_repo
|
28
|
+
configure_remote(repo, name, "git@#{host}:#{name}")
|
29
|
+
|
30
|
+
append_entry_to_ukku_file(name, entry) if !entry_in_file
|
31
|
+
|
32
|
+
append_ukku_file_to_gitignore
|
33
|
+
|
34
|
+
puts
|
35
|
+
puts "Your server is configured! Deploy your application using 'git push #{name} master'"
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
def load_entry_from_file(name)
|
40
|
+
if File.exist?(UKKU_FILE)
|
41
|
+
data = YAML.load_file(UKKU_FILE)
|
42
|
+
data[name]
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def entries_match?(h1, h2)
|
47
|
+
h1.size == h2.size && (h1.keys - h2.keys).empty?
|
48
|
+
end
|
49
|
+
|
50
|
+
def configure_server(conn)
|
51
|
+
wget1_command = "wget https://raw.githubusercontent.com/germanescobar/ukku/master/server/bootstrap.sh"
|
52
|
+
wget2_command = "wget https://raw.githubusercontent.com/germanescobar/ukku/master/server/run.sh"
|
53
|
+
chmod_command = "chmod 755 bootstrap.sh run.sh"
|
54
|
+
run_command = "./bootstrap.sh"
|
55
|
+
conn.execute "#{wget1_command} && #{wget2_command} && #{chmod_command} && #{run_command}"
|
56
|
+
end
|
57
|
+
|
58
|
+
def fetch_repo
|
59
|
+
begin
|
60
|
+
Rugged::Repository.new('.')
|
61
|
+
rescue Rugged::RepositoryError
|
62
|
+
Rugged::Repository.init_at('.')
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def configure_remote(repo, name, remote_url)
|
67
|
+
if repo.remotes[name]
|
68
|
+
if repo.remotes[name].url != remote_url
|
69
|
+
raise "A remote with name '#{name}' already exists"
|
70
|
+
end
|
71
|
+
puts "Git remote already configured ... skipping"
|
72
|
+
else
|
73
|
+
print "Configuring remote repository ... "
|
74
|
+
repo.remotes.create(name, remote_url)
|
75
|
+
puts "done"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def append_entry_to_ukku_file(name, params)
|
80
|
+
data = { name => params }
|
81
|
+
File.open(UKKU_FILE, 'a') { |f| f.write data.to_yaml }
|
82
|
+
end
|
83
|
+
|
84
|
+
def append_ukku_file_to_gitignore
|
85
|
+
if File.read('.gitignore').scan(/.ukku.yml/).length == 0
|
86
|
+
print "Adding '#{UKKU_FILE}' to .gitignore ... "
|
87
|
+
File.open('.gitignore', 'a') { |f| f.write UKKU_FILE }
|
88
|
+
puts "done"
|
89
|
+
else
|
90
|
+
print "'#{UKKU_FILE}' already in .gitignore ... skipping"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class Connection
|
2
|
+
def initialize(host, user, identity_file)
|
3
|
+
@host = host
|
4
|
+
@user = user
|
5
|
+
@identity_file = identity_file
|
6
|
+
end
|
7
|
+
|
8
|
+
def execute(command)
|
9
|
+
args = ["ssh", "-t"]
|
10
|
+
if @identity_file
|
11
|
+
args += ["-i", @identity_file ]
|
12
|
+
end
|
13
|
+
args += ["#{@user}@#{@host}", "#{command}"]
|
14
|
+
Subprocess.check_call(args)
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class RunCommand
|
2
|
+
def execute(args)
|
3
|
+
command = args['COMMAND'].join(' ')
|
4
|
+
|
5
|
+
if !File.exist?(UKKU_FILE)
|
6
|
+
raise "No application configured. Run 'ukku configure HOST' first."
|
7
|
+
end
|
8
|
+
|
9
|
+
data = YAML.load_file(UKKU_FILE)
|
10
|
+
name, server = data.first
|
11
|
+
if name.nil?
|
12
|
+
raise "No application configured. Run 'ukku configure <host>' first."
|
13
|
+
end
|
14
|
+
|
15
|
+
if data.length > 1
|
16
|
+
if args['--app'].empty?
|
17
|
+
raise "No app specified, use the --app NAME option"
|
18
|
+
else
|
19
|
+
name = args[--app]
|
20
|
+
sever = data[name]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
host = server['host']
|
25
|
+
user = server['user']
|
26
|
+
identity_file = server['identity_file']
|
27
|
+
|
28
|
+
puts "Running command '#{command}' on #{host} ..."
|
29
|
+
conn = Connection.new(host, user, identity_file)
|
30
|
+
conn.execute("./run.sh #{command}")
|
31
|
+
end
|
32
|
+
end
|
data/lib/ukku/version.rb
ADDED
data/test/test_helper.rb
ADDED
data/ukku.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# Ensure we require the local version and not one we might have installed already
|
2
|
+
require File.join([File.dirname(__FILE__),'lib','ukku','version.rb'])
|
3
|
+
spec = Gem::Specification.new do |s|
|
4
|
+
s.name = 'ukku'
|
5
|
+
s.version = Ukku::VERSION
|
6
|
+
s.author = 'Germán Escobar'
|
7
|
+
s.email = 'german.escobarc@gmail.com'
|
8
|
+
s.homepage = 'http://germanescobar.net/'
|
9
|
+
s.platform = Gem::Platform::RUBY
|
10
|
+
s.summary = 'Easily deploy your application to your own server using "git push"'
|
11
|
+
s.files = `git ls-files`.split("
|
12
|
+
")
|
13
|
+
s.require_paths << 'lib'
|
14
|
+
s.bindir = 'bin'
|
15
|
+
s.executables << 'ukku'
|
16
|
+
s.add_development_dependency('rake')
|
17
|
+
s.add_development_dependency('rdoc')
|
18
|
+
s.add_development_dependency('aruba')
|
19
|
+
s.add_runtime_dependency('gli','2.12.2')
|
20
|
+
s.add_runtime_dependency('docopt', '0.5.0')
|
21
|
+
s.add_runtime_dependency('rye', '0.9')
|
22
|
+
s.add_runtime_dependency('rugged', '0.21.3')
|
23
|
+
end
|
data/ukku.rdoc
ADDED
metadata
ADDED
@@ -0,0 +1,158 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ukku
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Germán Escobar
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-01-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ! '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ! '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rdoc
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: aruba
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: gli
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 2.12.2
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 2.12.2
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: docopt
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.5.0
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.5.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rye
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.9'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.9'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rugged
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 0.21.3
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.21.3
|
111
|
+
description:
|
112
|
+
email: german.escobarc@gmail.com
|
113
|
+
executables:
|
114
|
+
- ukku
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- Gemfile
|
119
|
+
- Gemfile.lock
|
120
|
+
- Rakefile
|
121
|
+
- bin/ukku
|
122
|
+
- features/step_definitions/ukku_steps.rb
|
123
|
+
- features/support/env.rb
|
124
|
+
- features/ukku.feature
|
125
|
+
- lib/ukku.rb
|
126
|
+
- lib/ukku/configure_command.rb
|
127
|
+
- lib/ukku/connection.rb
|
128
|
+
- lib/ukku/run_command.rb
|
129
|
+
- lib/ukku/version.rb
|
130
|
+
- test/default_test.rb
|
131
|
+
- test/test_helper.rb
|
132
|
+
- ukku.gemspec
|
133
|
+
- ukku.rdoc
|
134
|
+
homepage: http://germanescobar.net/
|
135
|
+
licenses: []
|
136
|
+
metadata: {}
|
137
|
+
post_install_message:
|
138
|
+
rdoc_options: []
|
139
|
+
require_paths:
|
140
|
+
- lib
|
141
|
+
- lib
|
142
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ! '>='
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
147
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
|
+
requirements:
|
149
|
+
- - ! '>='
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: '0'
|
152
|
+
requirements: []
|
153
|
+
rubyforge_project:
|
154
|
+
rubygems_version: 2.4.1
|
155
|
+
signing_key:
|
156
|
+
specification_version: 4
|
157
|
+
summary: Easily deploy your application to your own server using "git push"
|
158
|
+
test_files: []
|