clenver 0.1.13 → 0.1.14
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 +4 -4
- data/Gemfile.lock +1 -1
- data/Rakefile +10 -0
- data/features/init/basic.feature +53 -0
- data/features/init/exec_cmd.feature +17 -0
- data/features/init/init.feature +15 -0
- data/features/init/links.feature +59 -0
- data/features/init/pkg_manager.feature +64 -0
- data/features/init/repository.feature +58 -0
- data/features/step_definitions/clenver_steps.rb +5 -0
- data/lib/clenver/cli.rb +0 -4
- data/lib/clenver/command_executor.rb +14 -0
- data/lib/clenver/link.rb +12 -15
- data/lib/clenver/package_manager.rb +3 -2
- data/lib/clenver/project.rb +54 -70
- data/lib/clenver/repository.rb +36 -8
- data/lib/clenver/runner.rb +62 -28
- data/lib/clenver/version.rb +1 -1
- data/test/vbox/regression.sh +8 -1
- metadata +10 -4
- data/features/clenver_init.feature +0 -209
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d4880cba20de7af9933abb25142c153e468b682
|
4
|
+
data.tar.gz: 5e7717f8eea907de21682dfe872def8a1de8c625
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de94cf713faa45c10334d5c3d4363c5c9849ae39dbe9b575194af95b2a8bc3490d9a2a46f929ae57a3752223ee08431dc1592d57bc82bbb1662dda5e4091700b
|
7
|
+
data.tar.gz: 57adedcb97c0567459a5f7248b1d6f021a19ad6b9158b0c06ac3b25af6f4f73a1189ba7b46fbb9f21f54703b321c4b74135ccdb337db83c56555260f4bdf583c
|
data/Gemfile.lock
CHANGED
data/Rakefile
CHANGED
@@ -20,6 +20,7 @@ desc 'Run features'
|
|
20
20
|
Cucumber::Rake::Task.new(:features) do |t|
|
21
21
|
opts = "features --format html -o #{CUKE_RESULTS} --format progress -x"
|
22
22
|
opts += " --tags #{ENV['TAGS']}" if ENV['TAGS']
|
23
|
+
opts += " --tags ~@sudo"
|
23
24
|
t.cucumber_opts = opts
|
24
25
|
t.fork = false
|
25
26
|
end
|
@@ -32,8 +33,17 @@ Cucumber::Rake::Task.new('features:wip') do |t|
|
|
32
33
|
t.fork = false
|
33
34
|
end
|
34
35
|
|
36
|
+
desc 'Run features tagged as sudo (@sudo)'
|
37
|
+
Cucumber::Rake::Task.new('features:sudo') do |t|
|
38
|
+
tag_opts = ' --tags ~@pending'
|
39
|
+
tag_opts = ' --tags @sudo'
|
40
|
+
t.cucumber_opts = "features --format html -o #{CUKE_RESULTS} --format pretty -x -s#{tag_opts}"
|
41
|
+
t.fork = false
|
42
|
+
end
|
43
|
+
|
35
44
|
task :cucumber => :features
|
36
45
|
task 'cucumber:wip' => 'features:wip'
|
46
|
+
task 'cucumber:sudo' => 'features:sudo'
|
37
47
|
task :wip => 'features:wip'
|
38
48
|
require 'rake/testtask'
|
39
49
|
Rake::TestTask.new do |t|
|
@@ -0,0 +1,53 @@
|
|
1
|
+
Feature: Initialization basics
|
2
|
+
In order to save time and money
|
3
|
+
User should be able to bootstrap project environment ASAP
|
4
|
+
|
5
|
+
Scenario: Given config file doesn't exist
|
6
|
+
When I run `clenver init no_name.yml`
|
7
|
+
Then the exit status should be 2
|
8
|
+
|
9
|
+
Scenario: Valid config file given
|
10
|
+
Given The default aruba timeout is 10 seconds
|
11
|
+
Given a file named "valid.yml" with:
|
12
|
+
"""
|
13
|
+
https://github.com/pietrushnic/dummy.git:
|
14
|
+
links:
|
15
|
+
dummy/foobar.txt:
|
16
|
+
- foobar_link
|
17
|
+
dummy/foobar:
|
18
|
+
- foobar_dir_link
|
19
|
+
"""
|
20
|
+
When I run `clenver init valid.yml`
|
21
|
+
Then the exit status should be 0
|
22
|
+
|
23
|
+
Scenario: Invalid config file given
|
24
|
+
Given a file named "invalid.yml" with:
|
25
|
+
"""
|
26
|
+
Lorem:{]}
|
27
|
+
ipsum:
|
28
|
+
dolor: sit amet,
|
29
|
+
consectetur adipisicing elit, sed: do eiusmod tempor
|
30
|
+
incididunt: ut
|
31
|
+
labore et dolore: magna aliqua.
|
32
|
+
"""
|
33
|
+
When I run `clenver init invalid.yml`
|
34
|
+
Then the exit status should be 1
|
35
|
+
|
36
|
+
Scenario: Init simple project (repo w/ colon)
|
37
|
+
Given The default aruba timeout is 10 seconds
|
38
|
+
Given a file named "test_repo.yml" with:
|
39
|
+
"""
|
40
|
+
https://github.com/pietrushnic/dummy.git:
|
41
|
+
"""
|
42
|
+
When I run `clenver init test_repo.yml`
|
43
|
+
Then the following files should exist:
|
44
|
+
| dummy/README.md |
|
45
|
+
|
46
|
+
Scenario: Init simple project (repo w/o colon)
|
47
|
+
Given The default aruba timeout is 10 seconds
|
48
|
+
Given a file named "test_repo.yml" with:
|
49
|
+
"""
|
50
|
+
https://github.com/pietrushnic/dummy.git
|
51
|
+
"""
|
52
|
+
When I run `clenver init test_repo.yml`
|
53
|
+
Then the exit status should be 2
|
@@ -0,0 +1,17 @@
|
|
1
|
+
Feature: Initialization repository
|
2
|
+
In order to save time and money
|
3
|
+
User should be able to bootstrap project environment ASAP
|
4
|
+
|
5
|
+
Scenario: run simple command
|
6
|
+
Given The default aruba timeout is 10 seconds
|
7
|
+
Given a file named "test_repo.yml" with:
|
8
|
+
"""
|
9
|
+
https://github.com/pietrushnic/dummy.git:
|
10
|
+
run:
|
11
|
+
- echo "success!!!!"
|
12
|
+
- echo "succes1s!!!!"
|
13
|
+
"""
|
14
|
+
When I run `clenver init test_repo.yml some_tmp`
|
15
|
+
Then the output should contain "success!!!!\n"
|
16
|
+
Then the output should contain "succes1s!!!!\n"
|
17
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Feature: Initialization
|
2
|
+
In order to save time and money
|
3
|
+
User should be able to bootstrap project environment ASAP
|
4
|
+
|
5
|
+
Scenario: Init simple project to given directory
|
6
|
+
Given The default aruba timeout is 10 seconds
|
7
|
+
Given a file named "test_repo.yml" with:
|
8
|
+
"""
|
9
|
+
https://github.com/pietrushnic/dummy.git:
|
10
|
+
"""
|
11
|
+
When I run `clenver init test_repo.yml`
|
12
|
+
Then the following files should exist:
|
13
|
+
| dummy/README.md |
|
14
|
+
|
15
|
+
|
@@ -0,0 +1,59 @@
|
|
1
|
+
Feature: Initialization links
|
2
|
+
In order to save time and money
|
3
|
+
User should be able to bootstrap project environment ASAP
|
4
|
+
|
5
|
+
Scenario: Init project with symbolic links
|
6
|
+
Given The default aruba timeout is 10 seconds
|
7
|
+
Given a file named "test_repo.yml" with:
|
8
|
+
"""
|
9
|
+
https://github.com/pietrushnic/dummy.git:
|
10
|
+
dst:
|
11
|
+
- src/dummy
|
12
|
+
links:
|
13
|
+
src/dummy/foobar.txt:
|
14
|
+
- src/dummy/foobar_link
|
15
|
+
src/dummy/foobar:
|
16
|
+
- src/dummy/foobar_dir_link
|
17
|
+
"""
|
18
|
+
When I run `clenver init test_repo.yml`
|
19
|
+
Then the following links should exist:
|
20
|
+
| src/dummy/foobar_link |
|
21
|
+
| src/dummy/foobar_dir_link |
|
22
|
+
|
23
|
+
@announce
|
24
|
+
Scenario: files backup verification
|
25
|
+
Given The default aruba timeout is 10 seconds
|
26
|
+
Given a file named "test_repo.yml" with:
|
27
|
+
"""
|
28
|
+
https://github.com/pietrushnic/dummy.git:
|
29
|
+
links:
|
30
|
+
dummy/foobar.txt:
|
31
|
+
- foobar_link
|
32
|
+
- foobar_link
|
33
|
+
dummy/foobar:
|
34
|
+
- foobar_dir_link
|
35
|
+
"""
|
36
|
+
When I run `clenver init test_repo.yml`
|
37
|
+
When I run `tree`
|
38
|
+
Then the following links should exist:
|
39
|
+
| foobar_link |
|
40
|
+
| foobar_link_old |
|
41
|
+
| foobar_dir_link |
|
42
|
+
|
43
|
+
Scenario: use system variable in path
|
44
|
+
Given The default aruba timeout is 10 seconds
|
45
|
+
Given a file named "test_repo.yml" with:
|
46
|
+
"""
|
47
|
+
https://github.com/pietrushnic/dummy.git:
|
48
|
+
links:
|
49
|
+
$HOME/foobar.txt:
|
50
|
+
- $HOME/foobar_link
|
51
|
+
"""
|
52
|
+
When I run `clenver init test_repo.yml some_tmp`
|
53
|
+
Then the following links should exist:
|
54
|
+
| $HOME/foobar_link |
|
55
|
+
|
56
|
+
@wip
|
57
|
+
Scenario: destination already exist
|
58
|
+
Scenario: destination not exist
|
59
|
+
Scenario: access denied
|
@@ -0,0 +1,64 @@
|
|
1
|
+
Feature: Initialization repository
|
2
|
+
In order to save time and money
|
3
|
+
User should be able to bootstrap project environment ASAP
|
4
|
+
|
5
|
+
@sudo
|
6
|
+
Scenario: apt: check if package installed
|
7
|
+
Given The default aruba timeout is 10 seconds
|
8
|
+
Given a file named "test_repo.yml" with:
|
9
|
+
"""
|
10
|
+
apt:
|
11
|
+
- vim
|
12
|
+
"""
|
13
|
+
When I run `clenver init test_repo.yml some_tmp`
|
14
|
+
Then the output should contain "vim is already the newest version.\n"
|
15
|
+
|
16
|
+
@sudo
|
17
|
+
Scenario: package installed and simple command run
|
18
|
+
Given The default aruba timeout is 10 seconds
|
19
|
+
Given a file named "test_repo.yml" with:
|
20
|
+
"""
|
21
|
+
apt:
|
22
|
+
- vim
|
23
|
+
https://github.com/pietrushnic/dummy.git:
|
24
|
+
run:
|
25
|
+
- echo "success!!!!"
|
26
|
+
"""
|
27
|
+
When I run `clenver init test_repo.yml some_tmp`
|
28
|
+
Then the output should contain "vim is already the newest version.\n"
|
29
|
+
Then the output should contain "success!!!!\n"
|
30
|
+
|
31
|
+
Scenario: install gem
|
32
|
+
Given The default aruba timeout is 120 seconds
|
33
|
+
Given a file named "test_repo.yml" with:
|
34
|
+
"""
|
35
|
+
gem:
|
36
|
+
- tmuxinator
|
37
|
+
https://github.com/pietrushnic/dummy.git:
|
38
|
+
run:
|
39
|
+
- echo "success!!!!"
|
40
|
+
"""
|
41
|
+
When I run `clenver init test_repo.yml some_tmp`
|
42
|
+
Then the output should contain "installed\n"
|
43
|
+
Then the output should contain "success!!!!\n"
|
44
|
+
|
45
|
+
@sudo
|
46
|
+
Scenario: install gems and packages
|
47
|
+
Given The default aruba timeout is 120 seconds
|
48
|
+
Given a file named "test_repo.yml" with:
|
49
|
+
"""
|
50
|
+
apt:
|
51
|
+
- vim
|
52
|
+
- mutt
|
53
|
+
gem:
|
54
|
+
- tmuxinator
|
55
|
+
- git
|
56
|
+
https://github.com/pietrushnic/dummy.git:
|
57
|
+
run:
|
58
|
+
- echo "success!!!!"
|
59
|
+
"""
|
60
|
+
When I run `clenver init test_repo.yml some_tmp`
|
61
|
+
Then the output should contain "gems installed\n"
|
62
|
+
Then the output should contain "vim is already the newest version.\n"
|
63
|
+
Then the output should contain "mutt is already the newest version.\n"
|
64
|
+
Then the output should contain "success!!!!\n"
|
@@ -0,0 +1,58 @@
|
|
1
|
+
Feature: Initialization repository
|
2
|
+
In order to save time and money
|
3
|
+
User should be able to bootstrap project environment ASAP
|
4
|
+
|
5
|
+
@announce
|
6
|
+
Scenario: Connect remote and check uri
|
7
|
+
Given The default aruba timeout is 25 seconds
|
8
|
+
Given a file named "test_repo.yml" with:
|
9
|
+
"""
|
10
|
+
https://github.com/pietrushnic/spf13-vim.git:
|
11
|
+
remotes:
|
12
|
+
upstream:
|
13
|
+
- https://github.com/spf13/spf13-vim.git
|
14
|
+
"""
|
15
|
+
When I run `clenver init test_repo.yml`
|
16
|
+
Then the following remote uris should be connected in "spf13-vim":
|
17
|
+
| https://github.com/spf13/spf13-vim.git |
|
18
|
+
|
19
|
+
Scenario: Connect remote and check its name
|
20
|
+
Given The default aruba timeout is 25 seconds
|
21
|
+
Given a file named "test_repo.yml" with:
|
22
|
+
"""
|
23
|
+
https://github.com/pietrushnic/spf13-vim.git:
|
24
|
+
remotes:
|
25
|
+
upstream:
|
26
|
+
- https://github.com/spf13/spf13-vim.git
|
27
|
+
"""
|
28
|
+
When I run `clenver init test_repo.yml`
|
29
|
+
Then the following remote branches should be connected in "spf13-vim":
|
30
|
+
| upstream |
|
31
|
+
|
32
|
+
Scenario: Clone repo and verify its destination
|
33
|
+
Given The default aruba timeout is 25 seconds
|
34
|
+
Given a file named "test_repo.yml" with:
|
35
|
+
"""
|
36
|
+
https://github.com/pietrushnic/spf13-vim.git:
|
37
|
+
dst:
|
38
|
+
- $HOME/abs_path_test/spf13-vim
|
39
|
+
"""
|
40
|
+
When I run `clenver init test_repo.yml`
|
41
|
+
Then the following absolute path should exist: "$HOME/abs_path_test/spf13-vim"
|
42
|
+
|
43
|
+
@wip
|
44
|
+
Scenario: destination already exist
|
45
|
+
Scenario: destination not exist
|
46
|
+
Scenario: access denied
|
47
|
+
Scenario: multiple destinations
|
48
|
+
Given The default aruba timeout is 25 seconds
|
49
|
+
Given a file named "test_repo.yml" with:
|
50
|
+
"""
|
51
|
+
https://github.com/pietrushnic/spf13-vim.git:
|
52
|
+
dst:
|
53
|
+
- $HOME/abs_path_test/spf13-vim
|
54
|
+
dst:
|
55
|
+
- $HOME/abs_path_test/spf13-vim-1
|
56
|
+
"""
|
57
|
+
When I run `clenver init test_repo.yml`
|
58
|
+
Then the following absolute path should exist: "$HOME/abs_path_test/spf13-vim"
|
@@ -34,3 +34,8 @@ Then(/^the output should contain correct version$/) do
|
|
34
34
|
assert_partial_output(Clenver::VERSION, all_output)
|
35
35
|
end
|
36
36
|
|
37
|
+
Then(/^the following absolute path should exist: "(.*?)"$/) do |arg1|
|
38
|
+
out = %x[echo #{arg1}].strip
|
39
|
+
File.should be_directory(out)
|
40
|
+
end
|
41
|
+
|
data/lib/clenver/cli.rb
CHANGED
data/lib/clenver/link.rb
CHANGED
@@ -1,36 +1,33 @@
|
|
1
1
|
require 'fileutils'
|
2
|
+
require 'clenver/logging'
|
2
3
|
|
3
4
|
class Link
|
5
|
+
include Logging
|
4
6
|
MAX_REPEAT = 3
|
7
|
+
attr_accessor :src, :dst
|
5
8
|
def initialize(src,dst)
|
6
9
|
@src = src
|
7
|
-
@dst =
|
10
|
+
@dst = dst
|
8
11
|
end
|
12
|
+
|
9
13
|
def create
|
10
14
|
puts "Link.create"
|
11
|
-
|
12
|
-
@dst.each do |d|
|
13
|
-
puts "src:#{@src}"
|
14
|
-
puts "d:#{d} "
|
15
|
+
dst.each do |d|
|
15
16
|
i = 0
|
17
|
+
d = d.to_s.gsub(/\$\w+/) {|m| ENV[m[1..-1]]}
|
18
|
+
logger.debug("d:#{d}")
|
19
|
+
logger.debug("src:#{src.gsub(/\$\w+/) {|n| ENV[n[1..-1]]}}")
|
16
20
|
while i < MAX_REPEAT do
|
17
21
|
begin
|
18
|
-
File.symlink(
|
22
|
+
File.symlink(src.gsub(/\$\w+/) {|n| ENV[n[1..-1]]}, d)
|
19
23
|
rescue SystemCallError
|
20
|
-
FileUtils.mv(d
|
24
|
+
FileUtils.mv(d, d + "_old")
|
21
25
|
else
|
26
|
+
logge.debug("else")
|
22
27
|
break
|
23
28
|
end
|
24
29
|
i += 1
|
25
30
|
end
|
26
31
|
end
|
27
32
|
end
|
28
|
-
def expand_dst(dst)
|
29
|
-
ret = Array.new()
|
30
|
-
dst.each do |d|
|
31
|
-
path = %x[ echo #{d}]
|
32
|
-
ret.push(path.strip)
|
33
|
-
end
|
34
|
-
return ret
|
35
|
-
end
|
36
33
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
class PackageManger
|
2
|
+
attr_accessor :pkgs
|
2
3
|
def initialize(name, pkgs)
|
3
4
|
@name = name
|
4
5
|
@pkgs = pkgs
|
@@ -7,9 +8,9 @@ class PackageManger
|
|
7
8
|
def install()
|
8
9
|
case @name
|
9
10
|
when 'apt'
|
10
|
-
out = %x[sudo apt-get -y install #{
|
11
|
+
out = %x[sudo apt-get -y install #{pkgs}]
|
11
12
|
when 'gem'
|
12
|
-
out = %x[gem install #{
|
13
|
+
out = %x[gem install #{pkgs}]
|
13
14
|
end
|
14
15
|
puts out
|
15
16
|
end
|
data/lib/clenver/project.rb
CHANGED
@@ -4,10 +4,14 @@ require 'clenver/logging'
|
|
4
4
|
|
5
5
|
class Project
|
6
6
|
include Logging
|
7
|
-
attr_accessor :name, :repos, :dst, :abs_path
|
8
|
-
def initialize(name,
|
7
|
+
attr_accessor :name, :repos, :dst, :abs_path, :pkg_mgr, :yaml, :links, :cmd_exec
|
8
|
+
def initialize(name, yaml, dst)
|
9
9
|
@name = name
|
10
|
-
@
|
10
|
+
@yaml = yaml
|
11
|
+
@repos = []
|
12
|
+
@pkg_mgr = []
|
13
|
+
@links = []
|
14
|
+
@cmd_exec = []
|
11
15
|
@dst = dst
|
12
16
|
@abs_path = Dir::pwd + "/" + @name
|
13
17
|
end
|
@@ -23,45 +27,37 @@ class Project
|
|
23
27
|
Dir::chdir(path)
|
24
28
|
end
|
25
29
|
|
26
|
-
def
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
end
|
44
|
-
when String
|
45
|
-
begin
|
46
|
-
repo = Repository.new(@repos, dst)
|
47
|
-
repo.clone
|
48
|
-
rescue Exception => msg
|
49
|
-
puts msg
|
50
|
-
end
|
30
|
+
def init
|
31
|
+
for r in repos do
|
32
|
+
logger.debug("clone repo:#{r.repo_uri}")
|
33
|
+
r.clone
|
34
|
+
r.add_remotes
|
35
|
+
end
|
36
|
+
for p in pkg_mgr do
|
37
|
+
logger.debug("install packages: #{p.pkgs}")
|
38
|
+
p.install
|
39
|
+
end
|
40
|
+
for l in links do
|
41
|
+
logger.debug("create link src: #{l.src} dst:#{l.dst}")
|
42
|
+
l.create
|
43
|
+
end
|
44
|
+
for c in cmd_exec do
|
45
|
+
logger.debug("execute: #{c.cmd}")
|
46
|
+
c.execute
|
51
47
|
end
|
52
48
|
end
|
53
49
|
|
54
50
|
def init_project
|
55
51
|
logger.debug("init_project:")
|
56
|
-
case @
|
52
|
+
case @yaml
|
57
53
|
when Hash
|
58
54
|
init_links
|
59
55
|
init_repos
|
60
56
|
init_runs
|
61
57
|
when String
|
62
58
|
begin
|
63
|
-
unless @
|
64
|
-
@
|
59
|
+
unless @yaml.nil?
|
60
|
+
@yaml['links'].each do |s,d|
|
65
61
|
Link.new(s,d).create
|
66
62
|
end
|
67
63
|
end
|
@@ -72,61 +68,49 @@ class Project
|
|
72
68
|
end
|
73
69
|
|
74
70
|
def init_links
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
elsif
|
86
|
-
s_path = content['object'].get_abs_path + "/" + s
|
87
|
-
end
|
88
|
-
Link.new(s_path,d).create
|
89
|
-
end
|
71
|
+
logger.debug("init_links")
|
72
|
+
@yaml.each do |uri, content|
|
73
|
+
if content.is_a?(Hash)
|
74
|
+
#links
|
75
|
+
unless content['links'].nil?
|
76
|
+
content['links'].each do |s,d|
|
77
|
+
#TODO: this is ugly and should be fixed
|
78
|
+
buf = Array.new().push(s)
|
79
|
+
s_path = Link.new(s,d).expand_dst(buf)[0]
|
80
|
+
Link.new(s_path,d).create
|
90
81
|
end
|
91
82
|
end
|
92
|
-
rescue Exception => msg
|
93
|
-
puts msg
|
94
83
|
end
|
95
84
|
end
|
96
85
|
end
|
97
86
|
|
98
87
|
def init_repos
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
88
|
+
logger.debug("init_yaml")
|
89
|
+
repos.each do |r|
|
90
|
+
logger.debug("r:#{r}")
|
91
|
+
if r.content.is_a?(Hash)
|
92
|
+
#remotes
|
93
|
+
logger.debug("content:#{r.content}")
|
94
|
+
unless r.content['remotes'].nil?
|
95
|
+
logger.debug("r.content:#{r.content['remotes']}")
|
96
|
+
r.content['remotes'].each do |name, uri|
|
97
|
+
r.add_remote(name, uri)
|
108
98
|
end
|
109
99
|
end
|
110
|
-
rescue Exception => msg
|
111
|
-
puts msg
|
112
100
|
end
|
113
101
|
end
|
114
102
|
end
|
115
103
|
|
116
104
|
def init_runs
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
puts %x[#{cmd}]
|
125
|
-
end
|
105
|
+
logger.debug("init_runs")
|
106
|
+
@yaml.each do |uri, content|
|
107
|
+
if content.is_a?(Hash)
|
108
|
+
#run
|
109
|
+
unless content['run'].nil?
|
110
|
+
content['run'].each do |cmd|
|
111
|
+
puts %x[#{cmd}]
|
126
112
|
end
|
127
113
|
end
|
128
|
-
rescue Exception => msg
|
129
|
-
puts msg
|
130
114
|
end
|
131
115
|
end
|
132
116
|
end
|
data/lib/clenver/repository.rb
CHANGED
@@ -1,23 +1,51 @@
|
|
1
1
|
require 'git'
|
2
|
+
require 'clenver/logging'
|
2
3
|
|
3
4
|
class Repository
|
4
|
-
|
5
|
-
|
6
|
-
|
5
|
+
include Logging
|
6
|
+
attr_accessor :repo_uri, :config, :repo, :dst, :remotes
|
7
|
+
#TODO: think about better way to handle dst from URI
|
8
|
+
def initialize(uri, config = nil)
|
9
|
+
@repo_uri = uri
|
10
|
+
@dst = get_dst(config)
|
11
|
+
@remotes = get_remotes(config)
|
7
12
|
@abs_path = nil
|
8
13
|
@repo = nil
|
9
14
|
end
|
10
15
|
|
16
|
+
def get_remotes(config)
|
17
|
+
unless config.nil?
|
18
|
+
if config.has_key?('remotes')
|
19
|
+
config['remotes']
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def get_dst(config)
|
25
|
+
unless config.nil?
|
26
|
+
if config.has_key?('dst')
|
27
|
+
return config['dst'][0]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
logger.debug("dst:#{Dir::pwd + "/" + File.basename(repo_uri, '.git')}")
|
31
|
+
Dir::pwd + "/" + File.basename(repo_uri, '.git')
|
32
|
+
end
|
33
|
+
|
11
34
|
def clone
|
12
|
-
|
13
|
-
|
14
|
-
@abs_path = Dir::pwd + "/" + repo_basename
|
35
|
+
repo = Git.clone(repo_uri, dst)
|
36
|
+
logger.debug("clone:#{repo}")
|
15
37
|
end
|
16
38
|
|
17
39
|
def get_abs_path
|
18
40
|
@abs_path
|
19
41
|
end
|
20
|
-
|
21
|
-
|
42
|
+
|
43
|
+
def add_remotes
|
44
|
+
logger.debug("self.inspect:#{self.inspect}")
|
45
|
+
unless remotes.nil?
|
46
|
+
for name, uri in remotes do
|
47
|
+
Git.open(dst).add_remote(name, uri)
|
48
|
+
end
|
49
|
+
end
|
22
50
|
end
|
23
51
|
end
|
data/lib/clenver/runner.rb
CHANGED
@@ -1,51 +1,85 @@
|
|
1
|
-
require '
|
1
|
+
require 'psych'
|
2
2
|
require 'clenver'
|
3
3
|
require 'clenver/project'
|
4
4
|
require 'clenver/logging'
|
5
5
|
require 'clenver/package_manager'
|
6
|
+
require 'clenver/command_executor'
|
6
7
|
|
7
8
|
module Clenver
|
8
9
|
class Runner
|
9
10
|
include Logging
|
10
11
|
|
12
|
+
attr_accessor :path, :dst, :yaml
|
11
13
|
def initialize(path, dst)
|
12
14
|
@path = path
|
13
15
|
@dst = dst
|
16
|
+
@yaml = parse_config
|
17
|
+
end
|
18
|
+
|
19
|
+
def parse_config
|
20
|
+
begin
|
21
|
+
Psych.load_file("#{path}")
|
22
|
+
rescue Psych::SyntaxError => ex
|
23
|
+
logger.error("#{path}: syntax error : #{ex.message}")
|
24
|
+
exit 1
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def create_package_manager(type)
|
29
|
+
PackageManger.new(type, yaml[type].join(' '))
|
30
|
+
end
|
31
|
+
|
32
|
+
def create_repository(uri)
|
33
|
+
logger.debug("content:#{yaml[uri]}")
|
34
|
+
if yaml[uri].is_a?(Hash)
|
35
|
+
Repository.new(uri, yaml[uri])
|
36
|
+
else
|
37
|
+
Repository.new(uri)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def create_links
|
42
|
+
l = []
|
43
|
+
for src, links in yaml['links']
|
44
|
+
l << Link.new(src, links)
|
45
|
+
end
|
46
|
+
return l
|
47
|
+
end
|
48
|
+
|
49
|
+
def create_cmd_exec
|
50
|
+
e = []
|
51
|
+
for c in yaml['run']
|
52
|
+
e << CommandExecutor.new(c)
|
53
|
+
end
|
54
|
+
return e
|
14
55
|
end
|
15
56
|
|
16
57
|
def start
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
58
|
+
#TODO: create test and fix this place with check for empty file
|
59
|
+
p = Project.new(File.basename("#{path}", ".yml"), yaml, dst)
|
60
|
+
if yaml.is_a?(Hash)
|
61
|
+
for k,v in yaml do
|
62
|
+
logger.info("key:#{k}")
|
63
|
+
logger.info("value:#{v}")
|
64
|
+
if k == 'apt' or k == 'gem'
|
65
|
+
p.pkg_mgr << create_package_manager(k)
|
66
|
+
end
|
67
|
+
if k.match /(http|https|git).+/
|
68
|
+
p.repos << create_repository(k)
|
69
|
+
end
|
70
|
+
if k == 'links'
|
71
|
+
p.links = create_links
|
31
72
|
end
|
32
|
-
|
33
|
-
|
34
|
-
for pkg in yaml['gem'] do
|
35
|
-
pkgs = pkgs + " " + pkg + " "
|
36
|
-
end
|
37
|
-
puts pkgs
|
38
|
-
p_mgr = PackageManger.new('gem', pkgs)
|
39
|
-
p_mgr.install()
|
73
|
+
if k == 'run'
|
74
|
+
p.cmd_exec = create_cmd_exec
|
40
75
|
end
|
41
|
-
p.create_repos
|
42
|
-
p.init_project
|
43
|
-
rescue Psych::SyntaxError => ex
|
44
|
-
exit_now!("#{@path}: syntax error : #{ex.message}", 1)
|
45
76
|
end
|
46
77
|
else
|
47
|
-
|
78
|
+
logger.error("#{path} is not a valid clenver configuration")
|
79
|
+
exit 2
|
48
80
|
end
|
81
|
+
p.init
|
82
|
+
#p.init_project
|
49
83
|
end
|
50
84
|
end
|
51
85
|
end
|
data/lib/clenver/version.rb
CHANGED
data/test/vbox/regression.sh
CHANGED
@@ -86,8 +86,15 @@ init_custom () {
|
|
86
86
|
echo "nd_pt: $nd_pt"
|
87
87
|
fi
|
88
88
|
bash_cmd "$home_v$nd_pt"
|
89
|
-
ssh_cmd "git clone https://github.com/pietrushnic/clenver_projects.git src/clenver_projects"
|
89
|
+
ssh_cmd "source ~/.bash_profile; git clone https://github.com/pietrushnic/clenver_projects.git src/clenver_projects"
|
90
90
|
bash_cmd "clenver init $home_v/src/clenver_projects/general.yml"
|
91
91
|
}
|
92
92
|
|
93
|
+
init_file () {
|
94
|
+
# assume that vm is running
|
95
|
+
scp_cmd $1 /home/user
|
96
|
+
home_v='$HOME'
|
97
|
+
nd_pt="/${1##*/}"
|
98
|
+
bash_cmd "clenver init $home_v$nd_pt"
|
99
|
+
}
|
93
100
|
eval "$@"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: clenver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Król
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-11-
|
11
|
+
date: 2013-11-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -131,13 +131,19 @@ files:
|
|
131
131
|
- clenver.gemspec
|
132
132
|
- clenver.rdoc
|
133
133
|
- features/clenver.feature
|
134
|
-
- features/clenver_init.feature
|
135
134
|
- features/clenver_version.feature
|
135
|
+
- features/init/basic.feature
|
136
|
+
- features/init/exec_cmd.feature
|
137
|
+
- features/init/init.feature
|
138
|
+
- features/init/links.feature
|
139
|
+
- features/init/pkg_manager.feature
|
140
|
+
- features/init/repository.feature
|
136
141
|
- features/step_definitions/clenver_steps.rb
|
137
142
|
- features/support/env.rb
|
138
143
|
- lib/clenver.rb
|
139
144
|
- lib/clenver/assets/sample.yml
|
140
145
|
- lib/clenver/cli.rb
|
146
|
+
- lib/clenver/command_executor.rb
|
141
147
|
- lib/clenver/link.rb
|
142
148
|
- lib/clenver/logging.rb
|
143
149
|
- lib/clenver/package_manager.rb
|
@@ -174,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
174
180
|
version: '0'
|
175
181
|
requirements: []
|
176
182
|
rubyforge_project:
|
177
|
-
rubygems_version: 2.1.
|
183
|
+
rubygems_version: 2.1.10
|
178
184
|
signing_key:
|
179
185
|
specification_version: 4
|
180
186
|
summary: Command line home directory manager
|
@@ -1,209 +0,0 @@
|
|
1
|
-
Feature: Initialization
|
2
|
-
In order to save time and money
|
3
|
-
User should be able to bootstrap project environment ASAP
|
4
|
-
|
5
|
-
Scenario: Given config file doesn't exist
|
6
|
-
When I run `clenver init no_name.yml`
|
7
|
-
Then the exit status should be 2
|
8
|
-
|
9
|
-
Scenario: Valid config file given
|
10
|
-
Given The default aruba timeout is 10 seconds
|
11
|
-
Given a file named "valid.yml" with:
|
12
|
-
"""
|
13
|
-
https://github.com/pietrushnic/dummy.git:
|
14
|
-
links:
|
15
|
-
foobar.txt:
|
16
|
-
- foobar_link
|
17
|
-
foobar:
|
18
|
-
- foobar_dir_link
|
19
|
-
"""
|
20
|
-
When I run `clenver init valid.yml`
|
21
|
-
Then the exit status should be 0
|
22
|
-
|
23
|
-
Scenario: Invalid config file given
|
24
|
-
Given a file named "invalid.yml" with:
|
25
|
-
"""
|
26
|
-
Lorem:{]}
|
27
|
-
ipsum:
|
28
|
-
dolor: sit amet,
|
29
|
-
consectetur adipisicing elit, sed: do eiusmod tempor
|
30
|
-
incididunt: ut
|
31
|
-
labore et dolore: magna aliqua.
|
32
|
-
"""
|
33
|
-
When I run `clenver init invalid.yml`
|
34
|
-
Then the exit status should be 1
|
35
|
-
|
36
|
-
Scenario: Init simple project (repo w/ colon)
|
37
|
-
Given The default aruba timeout is 10 seconds
|
38
|
-
Given a file named "test_repo.yml" with:
|
39
|
-
"""
|
40
|
-
https://github.com/pietrushnic/dummy.git:
|
41
|
-
"""
|
42
|
-
When I run `clenver init test_repo.yml`
|
43
|
-
Then the following files should exist:
|
44
|
-
| test_repo/dummy/README.md |
|
45
|
-
|
46
|
-
Scenario: Init simple project (repo w/o colon)
|
47
|
-
Given The default aruba timeout is 10 seconds
|
48
|
-
Given a file named "test_repo.yml" with:
|
49
|
-
"""
|
50
|
-
https://github.com/pietrushnic/dummy.git
|
51
|
-
"""
|
52
|
-
When I run `clenver init test_repo.yml`
|
53
|
-
Then the following files should exist:
|
54
|
-
| test_repo/dummy/README.md |
|
55
|
-
|
56
|
-
Scenario: Init simple project to given directory
|
57
|
-
Given The default aruba timeout is 10 seconds
|
58
|
-
Given a file named "test_repo.yml" with:
|
59
|
-
"""
|
60
|
-
https://github.com/pietrushnic/dummy.git:
|
61
|
-
"""
|
62
|
-
When I run `clenver init test_repo.yml some_tmp`
|
63
|
-
Then the following files should exist:
|
64
|
-
| some_tmp/test_repo/dummy/README.md |
|
65
|
-
|
66
|
-
Scenario: Init project with symbolic links
|
67
|
-
Given The default aruba timeout is 10 seconds
|
68
|
-
Given a file named "test_repo.yml" with:
|
69
|
-
"""
|
70
|
-
https://github.com/pietrushnic/dummy.git:
|
71
|
-
links:
|
72
|
-
foobar.txt:
|
73
|
-
- foobar_link
|
74
|
-
foobar:
|
75
|
-
- foobar_dir_link
|
76
|
-
"""
|
77
|
-
When I run `clenver init test_repo.yml some_tmp`
|
78
|
-
Then the following links should exist:
|
79
|
-
| some_tmp/test_repo/foobar_link |
|
80
|
-
| some_tmp/test_repo/foobar_dir_link |
|
81
|
-
|
82
|
-
Scenario: files backup verification
|
83
|
-
Given The default aruba timeout is 10 seconds
|
84
|
-
Given a file named "test_repo.yml" with:
|
85
|
-
"""
|
86
|
-
https://github.com/pietrushnic/dummy.git:
|
87
|
-
links:
|
88
|
-
foobar.txt:
|
89
|
-
- foobar_link
|
90
|
-
- foobar_link
|
91
|
-
foobar:
|
92
|
-
- foobar_dir_link
|
93
|
-
"""
|
94
|
-
When I run `clenver init test_repo.yml some_tmp`
|
95
|
-
Then the following links should exist:
|
96
|
-
| some_tmp/test_repo/foobar_link |
|
97
|
-
| some_tmp/test_repo/foobar_link_old |
|
98
|
-
| some_tmp/test_repo/foobar_dir_link |
|
99
|
-
|
100
|
-
Scenario: use system variable in path
|
101
|
-
Given The default aruba timeout is 10 seconds
|
102
|
-
Given a file named "test_repo.yml" with:
|
103
|
-
"""
|
104
|
-
https://github.com/pietrushnic/dummy.git:
|
105
|
-
links:
|
106
|
-
$HOME/foobar.txt:
|
107
|
-
- $HOME/foobar_link
|
108
|
-
"""
|
109
|
-
When I run `clenver init test_repo.yml some_tmp`
|
110
|
-
Then the following links should exist:
|
111
|
-
| $HOME/foobar_link |
|
112
|
-
|
113
|
-
Scenario: Connect remote and check uri
|
114
|
-
Given The default aruba timeout is 25 seconds
|
115
|
-
Given a file named "test_repo.yml" with:
|
116
|
-
"""
|
117
|
-
https://github.com/pietrushnic/spf13-vim.git:
|
118
|
-
remotes:
|
119
|
-
upstream:
|
120
|
-
- https://github.com/spf13/spf13-vim.git
|
121
|
-
"""
|
122
|
-
When I run `clenver init test_repo.yml some_tmp`
|
123
|
-
Then the following remote uris should be connected in "some_tmp/test_repo/spf13-vim":
|
124
|
-
| https://github.com/spf13/spf13-vim.git |
|
125
|
-
|
126
|
-
Scenario: Connect remote and check its name
|
127
|
-
Given The default aruba timeout is 25 seconds
|
128
|
-
Given a file named "test_repo.yml" with:
|
129
|
-
"""
|
130
|
-
https://github.com/pietrushnic/spf13-vim.git:
|
131
|
-
remotes:
|
132
|
-
upstream:
|
133
|
-
- https://github.com/spf13/spf13-vim.git
|
134
|
-
"""
|
135
|
-
When I run `clenver init test_repo.yml some_tmp`
|
136
|
-
Then the following remote branches should be connected in "some_tmp/test_repo/spf13-vim":
|
137
|
-
| upstream |
|
138
|
-
|
139
|
-
Scenario: run simple command
|
140
|
-
Given The default aruba timeout is 10 seconds
|
141
|
-
Given a file named "test_repo.yml" with:
|
142
|
-
"""
|
143
|
-
https://github.com/pietrushnic/dummy.git:
|
144
|
-
run:
|
145
|
-
- echo "success!!!!"
|
146
|
-
"""
|
147
|
-
When I run `clenver init test_repo.yml some_tmp`
|
148
|
-
Then the output should contain "success!!!!\n"
|
149
|
-
|
150
|
-
@ignore
|
151
|
-
Scenario: apt: check if package installed
|
152
|
-
Given The default aruba timeout is 10 seconds
|
153
|
-
Given a file named "test_repo.yml" with:
|
154
|
-
"""
|
155
|
-
apt:
|
156
|
-
- vim
|
157
|
-
"""
|
158
|
-
When I run `clenver init test_repo.yml some_tmp`
|
159
|
-
Then the output should contain "vim is already the newest version.\n"
|
160
|
-
|
161
|
-
@ignore
|
162
|
-
Scenario: package installed and simple command run
|
163
|
-
Given The default aruba timeout is 10 seconds
|
164
|
-
Given a file named "test_repo.yml" with:
|
165
|
-
"""
|
166
|
-
apt:
|
167
|
-
- vim
|
168
|
-
https://github.com/pietrushnic/dummy.git:
|
169
|
-
run:
|
170
|
-
- echo "success!!!!"
|
171
|
-
"""
|
172
|
-
When I run `clenver init test_repo.yml some_tmp`
|
173
|
-
Then the output should contain "vim is already the newest version.\n"
|
174
|
-
Then the output should contain "success!!!!\n"
|
175
|
-
|
176
|
-
Scenario: install gem
|
177
|
-
Given The default aruba timeout is 120 seconds
|
178
|
-
Given a file named "test_repo.yml" with:
|
179
|
-
"""
|
180
|
-
gem:
|
181
|
-
- tmuxinator
|
182
|
-
https://github.com/pietrushnic/dummy.git:
|
183
|
-
run:
|
184
|
-
- echo "success!!!!"
|
185
|
-
"""
|
186
|
-
When I run `clenver init test_repo.yml some_tmp`
|
187
|
-
Then the output should contain "installed\n"
|
188
|
-
Then the output should contain "success!!!!\n"
|
189
|
-
|
190
|
-
@ignore
|
191
|
-
Scenario: install gems and packages
|
192
|
-
Given The default aruba timeout is 120 seconds
|
193
|
-
Given a file named "test_repo.yml" with:
|
194
|
-
"""
|
195
|
-
apt:
|
196
|
-
- vim
|
197
|
-
- mutt
|
198
|
-
gem:
|
199
|
-
- tmuxinator
|
200
|
-
- git
|
201
|
-
https://github.com/pietrushnic/dummy.git:
|
202
|
-
run:
|
203
|
-
- echo "success!!!!"
|
204
|
-
"""
|
205
|
-
When I run `clenver init test_repo.yml some_tmp`
|
206
|
-
Then the output should contain "gems installed\n"
|
207
|
-
Then the output should contain "vim is already the newest version.\n"
|
208
|
-
Then the output should contain "mutt is already the newest version.\n"
|
209
|
-
Then the output should contain "success!!!!\n"
|