rails-dev-tools 1.1.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.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +109 -0
- data/Rakefile +29 -0
- data/app/assets/config/dev_manifest.js +0 -0
- data/bin/dev +6 -0
- data/config/routes.rb +2 -0
- data/lib/dev.rb +12 -0
- data/lib/dev/engine.rb +4 -0
- data/lib/dev/executable.rb +205 -0
- data/lib/dev/executables/commands/feature.rb +111 -0
- data/lib/dev/executables/commands/hotfix.rb +121 -0
- data/lib/dev/executables/commands/pull.rb +51 -0
- data/lib/dev/executables/commands/push.rb +59 -0
- data/lib/dev/executables/commands/release.rb +133 -0
- data/lib/dev/executables/commands/status.rb +39 -0
- data/lib/dev/executables/commands/test.rb +49 -0
- data/lib/dev/executables/commands/version.rb +21 -0
- data/lib/dev/project.rb +131 -0
- data/lib/dev/rainbow.rb +29 -0
- data/lib/dev/version.rb +3 -0
- data/lib/generators/dev/config_generator.rb +18 -0
- data/lib/generators/templates/dev.yml.erb +44 -0
- data/lib/tasks/dev_tasks.rake +4 -0
- metadata +140 -0
@@ -0,0 +1,121 @@
|
|
1
|
+
module Dev
|
2
|
+
module Executables
|
3
|
+
module Commands
|
4
|
+
module Hotfix
|
5
|
+
|
6
|
+
##
|
7
|
+
# Comandi per gestire l'apertura e la chiusura di un nuovo rilascio.
|
8
|
+
#
|
9
|
+
# @param [String] command il comando da eseguire.
|
10
|
+
# @param [String] version la versione dell'hotfix.
|
11
|
+
#
|
12
|
+
# @return [nil]
|
13
|
+
def hotfix(command = nil, version = nil)
|
14
|
+
raise Dev::Executable::ExecutionError.new "Wrong command syntax: "\
|
15
|
+
"specify whether to open or close a hotfix. "\
|
16
|
+
"Example: dev hotfix open 1.0.0" unless command.in? [ 'open', 'close' ]
|
17
|
+
version = version.to_s.squish
|
18
|
+
|
19
|
+
if @project.valid_app?
|
20
|
+
case command
|
21
|
+
when 'open' then hotfix_open(version)
|
22
|
+
when 'close' then hotfix_close(version)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
##
|
28
|
+
# Apre una nuova hotfix.
|
29
|
+
#
|
30
|
+
# @param [String] version la versione dell'hotfix.
|
31
|
+
#
|
32
|
+
# @return [nil]
|
33
|
+
def hotfix_open(version)
|
34
|
+
print "Preparing to open a new hotfix for app "
|
35
|
+
print @project.current_app.teal
|
36
|
+
print " with version "
|
37
|
+
puts version.teal
|
38
|
+
puts
|
39
|
+
|
40
|
+
print "\tOpening.. "
|
41
|
+
git_output = exec "git checkout -b hotfix/#{version} master"
|
42
|
+
if git_output.include?('fatal') or git_output.include?('rejected') or git_output.include?('error')
|
43
|
+
print "X\n".red
|
44
|
+
puts "\t\tSomething went wrong, take a look at the output from git:".indianred
|
45
|
+
puts "\t\t#{git_output.split("\n").map(&:squish).join("\n\t\t")}".indianred
|
46
|
+
puts
|
47
|
+
else
|
48
|
+
print "√\n".green
|
49
|
+
puts "\t\tDone. Output from git:".cadetblue
|
50
|
+
puts "\t\t#{git_output.split("\n").map(&:squish).join("\n\t\t")}".cadetblue
|
51
|
+
puts
|
52
|
+
end
|
53
|
+
print "\tBumping version to #{version}.. "
|
54
|
+
@project.bump_app_version_to(version)
|
55
|
+
print "√\n".green
|
56
|
+
puts
|
57
|
+
end
|
58
|
+
|
59
|
+
##
|
60
|
+
# Chiude una hotfix esistente.
|
61
|
+
#
|
62
|
+
# @param [String] version la versione dell'hotfix.
|
63
|
+
#
|
64
|
+
# @return [nil]
|
65
|
+
def hotfix_close(version)
|
66
|
+
print "Preparing to close the hotfix for app "
|
67
|
+
print @project.current_app.teal
|
68
|
+
print " with version "
|
69
|
+
puts version.teal
|
70
|
+
puts
|
71
|
+
|
72
|
+
status = `git status`
|
73
|
+
if status.include? "Changes not staged for commit:"
|
74
|
+
raise Dev::Executable::ExecutionError.new "Your current branch has unstaged changes. Please "\
|
75
|
+
"commit or stash them before closing the hotfix."
|
76
|
+
end
|
77
|
+
|
78
|
+
branches = `git branch -a`
|
79
|
+
unless branches.include? ("hotfix/#{version}\n")
|
80
|
+
raise Dev::Executable::ExecutionError.new "No hotfix for version '#{version}' could be found "\
|
81
|
+
"for this app's repository."
|
82
|
+
end
|
83
|
+
|
84
|
+
print "\tClosing.. "
|
85
|
+
exec "git checkout master"
|
86
|
+
exec "git merge --no-ff hotfix/#{version}"
|
87
|
+
exec "git tag -a #{version} -m \"hotfix #{version}\""
|
88
|
+
git_output = exec "git push origin master"
|
89
|
+
if git_output.include?('fatal') or git_output.include?('rejected') or git_output.include?('error')
|
90
|
+
print "X\n".red
|
91
|
+
puts "\t\tSomething went wrong, take a look at the output from git:".indianred
|
92
|
+
puts "\t\t#{git_output.split("\n").map(&:squish).join("\n\t\t")}".indianred
|
93
|
+
puts
|
94
|
+
else
|
95
|
+
print "√\n".green
|
96
|
+
puts "\t\tDone. Output from git:".cadetblue
|
97
|
+
puts "\t\t#{git_output.split("\n").map(&:squish).join("\n\t\t")}".cadetblue
|
98
|
+
|
99
|
+
print "\tMerging hotfix on develop.."
|
100
|
+
exec "git checkout develop"
|
101
|
+
exec "git merge --no-ff hotfix/#{version}"
|
102
|
+
git_output = exec "git push origin develop"
|
103
|
+
if git_output.include?('fatal') or git_output.include?('rejected') or git_output.include?('error')
|
104
|
+
print "X\n".red
|
105
|
+
puts "\t\tSomething went wrong, take a look at the output from git:".indianred
|
106
|
+
puts "\t\t#{git_output.split("\n").map(&:squish).join("\n\t\t")}".indianred
|
107
|
+
puts
|
108
|
+
else
|
109
|
+
print "√\n".green
|
110
|
+
puts "\t\tDone. Output from git:".cadetblue
|
111
|
+
puts "\t\t#{git_output.split("\n").map(&:squish).join("\n\t\t")}".cadetblue
|
112
|
+
puts
|
113
|
+
end
|
114
|
+
exec "git checkout master"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Dev
|
2
|
+
module Executables
|
3
|
+
module Commands
|
4
|
+
module Pull
|
5
|
+
|
6
|
+
##
|
7
|
+
# Esegue il commit e il push del repository dell'app specificata.
|
8
|
+
#
|
9
|
+
# @param [String] app l'app per cui il push delle modifiche.
|
10
|
+
#
|
11
|
+
# @return [nil]
|
12
|
+
def pull(app = nil)
|
13
|
+
if app.present?
|
14
|
+
apps = [ app ]
|
15
|
+
else
|
16
|
+
apps = project.apps
|
17
|
+
end
|
18
|
+
|
19
|
+
apps.each do |current_app|
|
20
|
+
@project.current_app = current_app
|
21
|
+
if @project.valid_app?
|
22
|
+
@project.chdir_app
|
23
|
+
current_branch = `git rev-parse --abbrev-ref HEAD`
|
24
|
+
|
25
|
+
print "Preparing to pull app "
|
26
|
+
print current_app.teal
|
27
|
+
print " on branch "
|
28
|
+
print current_branch.teal
|
29
|
+
puts
|
30
|
+
|
31
|
+
print "\tPulling.. "
|
32
|
+
remote_message = exec "git pull origin #{current_branch}"
|
33
|
+
if remote_message.include?('fatal') or remote_message.include?('rejected') or remote_message.include?('error')
|
34
|
+
print "X\n".red
|
35
|
+
puts "\t\tSomething went wrong, take a look at the output from git remote:".indianred
|
36
|
+
puts "\t\t#{remote_message.split("\n").map(&:squish).join("\n\t\t")}".indianred
|
37
|
+
puts
|
38
|
+
else
|
39
|
+
print "√\n".green
|
40
|
+
puts "\t\tDone. Output from git remote:".cadetblue
|
41
|
+
puts "\t\t#{remote_message.split("\n").map(&:squish).join("\n\t\t")}".cadetblue
|
42
|
+
puts
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Dev
|
2
|
+
module Executables
|
3
|
+
module Commands
|
4
|
+
module Push
|
5
|
+
|
6
|
+
##
|
7
|
+
# Esegue il commit e il push del repository dell'app specificata.
|
8
|
+
#
|
9
|
+
# @param [String] app l'app per cui il push delle modifiche.
|
10
|
+
# @param [String] commit_message il messaggio di commit.
|
11
|
+
#
|
12
|
+
# @return [nil]
|
13
|
+
def push(app = nil, commit_message = nil)
|
14
|
+
if app.present? and commit_message.present?
|
15
|
+
@project.current_app = app
|
16
|
+
if @project.valid_app?
|
17
|
+
@project.chdir_app
|
18
|
+
current_branch = `git rev-parse --abbrev-ref HEAD`
|
19
|
+
|
20
|
+
print "Preparing to push app "
|
21
|
+
print @project.current_app.teal
|
22
|
+
print " on branch "
|
23
|
+
print current_branch.teal
|
24
|
+
puts
|
25
|
+
|
26
|
+
print "\tRunning bundler.. "
|
27
|
+
exec 'bundle install'
|
28
|
+
print "√\n".green
|
29
|
+
|
30
|
+
print "\tCommitting.. "
|
31
|
+
exec 'git add .'
|
32
|
+
exec "git commit -m \"#{commit_message}\""
|
33
|
+
print "√\n".green
|
34
|
+
|
35
|
+
print "\tPushing.. "
|
36
|
+
remote_message = exec "git push origin #{current_branch}"
|
37
|
+
if remote_message.include?('fatal') or remote_message.include?('rejected')
|
38
|
+
print "X\n".red
|
39
|
+
puts "\t\tSomething went wrong, take a look at the output from git remote:".indianred
|
40
|
+
puts "\t\t#{remote_message.split("\n").map(&:squish).join("\n\t\t")}".indianred
|
41
|
+
puts
|
42
|
+
else
|
43
|
+
print "√\n".green
|
44
|
+
puts "\t\tDone. Output from git remote:".cadetblue
|
45
|
+
puts "\t\t#{remote_message.split("\n").map(&:squish).join("\n\t\t")}".cadetblue
|
46
|
+
puts
|
47
|
+
end
|
48
|
+
end
|
49
|
+
else
|
50
|
+
raise Dev::Executable::ExecutionError.new "Wrong command syntax: "\
|
51
|
+
"specify an app and a commit message. "\
|
52
|
+
"Example: dev push app \"commit message\"."
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
module Dev
|
2
|
+
module Executables
|
3
|
+
module Commands
|
4
|
+
module Release
|
5
|
+
|
6
|
+
##
|
7
|
+
# Comandi per gestire l'apertura e la chiusura di un nuovo rilascio.
|
8
|
+
#
|
9
|
+
# @param [String] command il comando da eseguire.
|
10
|
+
# @param [String] version la versione del rilascio.
|
11
|
+
#
|
12
|
+
# @return [nil]
|
13
|
+
def release(command = nil, version = nil)
|
14
|
+
raise Dev::Executable::ExecutionError.new "Wrong command syntax: "\
|
15
|
+
"specify whether to open or close a release. "\
|
16
|
+
"Example: dev release open 1.0.0" unless command.in? [ 'open', 'close' ]
|
17
|
+
version = version.to_s.squish
|
18
|
+
|
19
|
+
if @project.valid_app?
|
20
|
+
case command
|
21
|
+
when 'open' then release_open(version)
|
22
|
+
when 'close' then release_close(version)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
##
|
28
|
+
# Apre una nuova release.
|
29
|
+
#
|
30
|
+
# @param [String] version la versione del rilascio.
|
31
|
+
#
|
32
|
+
# @return [nil]
|
33
|
+
def release_open(version)
|
34
|
+
print "Preparing to open a new release for app "
|
35
|
+
print @project.current_app.teal
|
36
|
+
print " with version "
|
37
|
+
puts version.teal
|
38
|
+
puts
|
39
|
+
|
40
|
+
branches = `git branch -a`
|
41
|
+
unless branches.include? ("develop\n")
|
42
|
+
print "\tCreating develop branch.."
|
43
|
+
exec "git checkout -b develop"
|
44
|
+
exec "git add ."
|
45
|
+
exec "git commit -m \"Dev: automatically created 'develop' branch\""
|
46
|
+
exec "git push -u origin develop"
|
47
|
+
print "√\n".green
|
48
|
+
puts
|
49
|
+
end
|
50
|
+
|
51
|
+
print "\tOpening.. "
|
52
|
+
git_output = exec "git checkout -b release/#{version} develop"
|
53
|
+
if git_output.include?('fatal') or git_output.include?('rejected') or git_output.include?('error')
|
54
|
+
print "X\n".red
|
55
|
+
puts "\t\tSomething went wrong, take a look at the output from git:".indianred
|
56
|
+
puts "\t\t#{git_output.split("\n").map(&:squish).join("\n\t\t")}".indianred
|
57
|
+
puts
|
58
|
+
else
|
59
|
+
print "√\n".green
|
60
|
+
puts "\t\tDone. Output from git:".cadetblue
|
61
|
+
puts "\t\t#{git_output.split("\n").map(&:squish).join("\n\t\t")}".cadetblue
|
62
|
+
puts
|
63
|
+
end
|
64
|
+
print "\tBumping version to #{version}.. "
|
65
|
+
@project.bump_app_version_to(version)
|
66
|
+
print "√\n".green
|
67
|
+
puts
|
68
|
+
end
|
69
|
+
|
70
|
+
##
|
71
|
+
# Chiude una release esistente.
|
72
|
+
#
|
73
|
+
# @param [String] version la versione del rilascio.
|
74
|
+
#
|
75
|
+
# @return [nil]
|
76
|
+
def release_close(version)
|
77
|
+
print "Preparing to close the release for app "
|
78
|
+
print @project.current_app.teal
|
79
|
+
print " with version "
|
80
|
+
puts version.teal
|
81
|
+
puts
|
82
|
+
|
83
|
+
status = `git status`
|
84
|
+
if status.include? "Changes not staged for commit:"
|
85
|
+
raise Dev::Executable::ExecutionError.new "Your current branch has unstaged changes. Please "\
|
86
|
+
"commit or stash them before closing the release."
|
87
|
+
end
|
88
|
+
|
89
|
+
branches = `git branch -a`
|
90
|
+
unless branches.include? ("release/#{version}\n")
|
91
|
+
raise Dev::Executable::ExecutionError.new "No release for version '#{version}' could be found "\
|
92
|
+
"for this app's repository."
|
93
|
+
end
|
94
|
+
|
95
|
+
print "\tClosing.. "
|
96
|
+
exec "git checkout master"
|
97
|
+
exec "git merge --no-ff release/#{version}"
|
98
|
+
exec "git tag -a #{version} -m \"release #{version}\""
|
99
|
+
git_output = exec "git push origin master"
|
100
|
+
if git_output.include?('fatal') or git_output.include?('rejected') or git_output.include?('error')
|
101
|
+
print "X\n".red
|
102
|
+
puts "\t\tSomething went wrong, take a look at the output from git:".indianred
|
103
|
+
puts "\t\t#{git_output.split("\n").map(&:squish).join("\n\t\t")}".indianred
|
104
|
+
puts
|
105
|
+
else
|
106
|
+
print "√\n".green
|
107
|
+
puts "\t\tDone. Output from git:".cadetblue
|
108
|
+
puts "\t\t#{git_output.split("\n").map(&:squish).join("\n\t\t")}".cadetblue
|
109
|
+
puts
|
110
|
+
|
111
|
+
print "\tMerging hotfix on develop.."
|
112
|
+
exec "git checkout develop"
|
113
|
+
exec "git merge --no-ff hotfix/#{version}"
|
114
|
+
git_output = exec "git push origin develop"
|
115
|
+
if git_output.include?('fatal') or git_output.include?('rejected') or git_output.include?('error')
|
116
|
+
print "X\n".red
|
117
|
+
puts "\t\tSomething went wrong, take a look at the output from git:".indianred
|
118
|
+
puts "\t\t#{git_output.split("\n").map(&:squish).join("\n\t\t")}".indianred
|
119
|
+
puts
|
120
|
+
else
|
121
|
+
print "√\n".green
|
122
|
+
puts "\t\tDone. Output from git:".cadetblue
|
123
|
+
puts "\t\t#{git_output.split("\n").map(&:squish).join("\n\t\t")}".cadetblue
|
124
|
+
puts
|
125
|
+
end
|
126
|
+
exec "git checkout master"
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Dev
|
2
|
+
module Executables
|
3
|
+
module Commands
|
4
|
+
module Status
|
5
|
+
|
6
|
+
##
|
7
|
+
# Stampa lo stato dell'app specificata o di tutte le app.
|
8
|
+
#
|
9
|
+
# @return [nil]
|
10
|
+
def status(app = nil)
|
11
|
+
if app.present?
|
12
|
+
apps = [ app ]
|
13
|
+
else
|
14
|
+
apps = project.apps
|
15
|
+
end
|
16
|
+
|
17
|
+
apps.each do |current_app|
|
18
|
+
@project.current_app = current_app
|
19
|
+
if @project.valid_app?
|
20
|
+
@project.chdir_app
|
21
|
+
current_branch = `git rev-parse --abbrev-ref HEAD`
|
22
|
+
|
23
|
+
print "Status of app "
|
24
|
+
puts current_app.teal
|
25
|
+
puts
|
26
|
+
|
27
|
+
print "\tbranch: "
|
28
|
+
print current_branch.limegreen
|
29
|
+
print "\tversion: "
|
30
|
+
puts @project.app_version.try(:limegreen) || "not found".limegreen
|
31
|
+
puts
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Dev
|
2
|
+
module Executables
|
3
|
+
module Commands
|
4
|
+
module Test
|
5
|
+
|
6
|
+
##
|
7
|
+
# Esegue i test delle app specificate.
|
8
|
+
# Se non viene specificato niente, esegue i test di tutte le app.
|
9
|
+
#
|
10
|
+
# @param [Array] apps le app per cui eseguire i test.
|
11
|
+
#
|
12
|
+
# @return [nil]
|
13
|
+
def test(*apps)
|
14
|
+
if apps.any?
|
15
|
+
# Esegue i test per le app specificate
|
16
|
+
tested_apps = []
|
17
|
+
# Controlla che le app specificate siano valide
|
18
|
+
apps.each do |app|
|
19
|
+
@project.valid_app?(app)
|
20
|
+
tested_apps << app
|
21
|
+
end
|
22
|
+
else
|
23
|
+
# Esegue i test per tutte le main app
|
24
|
+
tested_apps = @project.main_apps
|
25
|
+
end
|
26
|
+
|
27
|
+
tested_apps.each do |current_app|
|
28
|
+
@project.current_app = current_app
|
29
|
+
@project.chdir_app
|
30
|
+
|
31
|
+
print "Eseguo test dell'app "
|
32
|
+
print current_app.to_s.teal
|
33
|
+
puts '..'
|
34
|
+
puts
|
35
|
+
test_output = exec('script -q /dev/null rspec --format documentation')
|
36
|
+
test_output = test_output[2..-1]
|
37
|
+
.gsub("\s\s", '§§') # Memorizza le indentazioni
|
38
|
+
.split("\n") # Divide ogni riga
|
39
|
+
.map(&:squish).join("\n\t\t") # E ne toglie spazi extra
|
40
|
+
.gsub('§§', "\s\s\s\s") # Riunisce tutto preservando le indentazioni
|
41
|
+
puts "\t\t#{test_output}"
|
42
|
+
puts
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|