kaya 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +26 -0
- data/CHANGELOG +52 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/NOTAS +19 -0
- data/README.md +279 -0
- data/Rakefile +1 -0
- data/bin/kaya +4 -0
- data/documentation/api.md +47 -0
- data/documentation/api_execution_data.md +47 -0
- data/documentation/configuration.md +13 -0
- data/documentation/custom_parameters.md +117 -0
- data/documentation/document_kaya.md +122 -0
- data/documentation/link.md +12 -0
- data/documentation/results.md +119 -0
- data/documentation/start.md +19 -0
- data/documentation/suites.md +60 -0
- data/documentation/test_suite_information.md +9 -0
- data/kaya.gemspec +42 -0
- data/lib/generators/task_rack.rb +160 -0
- data/lib/generators/templates/Gemfile.tt +2 -0
- data/lib/generators/templates/config.ru.tt +2 -0
- data/lib/generators/templates/kaya_conf.tt +49 -0
- data/lib/generators/templates/kaya_log.tt +0 -0
- data/lib/generators/templates/sidekiq_log.tt +0 -0
- data/lib/generators/templates/tasks.kaya.tt +10 -0
- data/lib/generators/templates/unicorn.rb.tt +21 -0
- data/lib/kaya/API/error.rb +17 -0
- data/lib/kaya/API/execution.rb +141 -0
- data/lib/kaya/API/result.rb +49 -0
- data/lib/kaya/API/results.rb +31 -0
- data/lib/kaya/API/suite.rb +42 -0
- data/lib/kaya/API/suites.rb +36 -0
- data/lib/kaya/background_jobs/sidekiq.rb +35 -0
- data/lib/kaya/background_jobs/workers/execution_checker.rb +20 -0
- data/lib/kaya/background_jobs/workers/garbage_cleaner.rb +31 -0
- data/lib/kaya/commands/bye.rb +12 -0
- data/lib/kaya/commands/help.rb +13 -0
- data/lib/kaya/commands/install.rb +27 -0
- data/lib/kaya/commands/reset.rb +39 -0
- data/lib/kaya/commands/reset_suites.rb +40 -0
- data/lib/kaya/commands/restart.rb +9 -0
- data/lib/kaya/commands/start.rb +104 -0
- data/lib/kaya/commands/stop.rb +53 -0
- data/lib/kaya/cuba.rb +287 -0
- data/lib/kaya/cucumber/features.rb +15 -0
- data/lib/kaya/cucumber/task.rb +64 -0
- data/lib/kaya/custom/execution_data.rb +50 -0
- data/lib/kaya/custom/params.rb +34 -0
- data/lib/kaya/database/mongo_connector.rb +285 -0
- data/lib/kaya/error/errors.rb +55 -0
- data/lib/kaya/execution.rb +57 -0
- data/lib/kaya/results/result.rb +493 -0
- data/lib/kaya/results/results.rb +47 -0
- data/lib/kaya/suites/custom/params.rb +151 -0
- data/lib/kaya/suites/suite.rb +177 -0
- data/lib/kaya/suites/suites.rb +130 -0
- data/lib/kaya/support/clean.rb +12 -0
- data/lib/kaya/support/configuration.rb +254 -0
- data/lib/kaya/support/console.rb +11 -0
- data/lib/kaya/support/documentation.rb +34 -0
- data/lib/kaya/support/error_handler_helper.rb +24 -0
- data/lib/kaya/support/files_cleanner.rb +136 -0
- data/lib/kaya/support/git.rb +161 -0
- data/lib/kaya/support/if_config.rb +14 -0
- data/lib/kaya/support/logo.rb +23 -0
- data/lib/kaya/support/logs.rb +37 -0
- data/lib/kaya/support/notification.rb +127 -0
- data/lib/kaya/support/processes.rb +96 -0
- data/lib/kaya/support/query_string.rb +22 -0
- data/lib/kaya/support/request.rb +32 -0
- data/lib/kaya/support/risk.rb +9 -0
- data/lib/kaya/support/time_helper.rb +11 -0
- data/lib/kaya/support/update.rb +65 -0
- data/lib/kaya/version.rb +3 -0
- data/lib/kaya/view/body.mote +60 -0
- data/lib/kaya/view/custom/params/select_list.mote +14 -0
- data/lib/kaya/view/custom/params/text.mote +9 -0
- data/lib/kaya/view/custom/params.mote +9 -0
- data/lib/kaya/view/error_handler.mote +40 -0
- data/lib/kaya/view/features/feature.mote +14 -0
- data/lib/kaya/view/features/features_list.mote +10 -0
- data/lib/kaya/view/features.mote +57 -0
- data/lib/kaya/view/footer.mote +10 -0
- data/lib/kaya/view/git_information.mote +21 -0
- data/lib/kaya/view/help/main.mote +21 -0
- data/lib/kaya/view/help/page.mote +2 -0
- data/lib/kaya/view/help/search_result.mote +29 -0
- data/lib/kaya/view/help.mote +72 -0
- data/lib/kaya/view/javascript.mote +96 -0
- data/lib/kaya/view/logs/log.mote +3 -0
- data/lib/kaya/view/modals.mote +31 -0
- data/lib/kaya/view/navigation_bar.mote +48 -0
- data/lib/kaya/view/not_found.mote +40 -0
- data/lib/kaya/view/parser.rb +79 -0
- data/lib/kaya/view/results/all.mote +59 -0
- data/lib/kaya/view/results/console.mote +106 -0
- data/lib/kaya/view/results/detailed_info.mote +112 -0
- data/lib/kaya/view/results/report.mote +1 -0
- data/lib/kaya/view/results/result.mote +23 -0
- data/lib/kaya/view/results/results.mote +52 -0
- data/lib/kaya/view/screenshot.mote +42 -0
- data/lib/kaya/view/sections.rb +25 -0
- data/lib/kaya/view/styles.mote +58 -0
- data/lib/kaya/view/suites/suite.mote +73 -0
- data/lib/kaya/view/suites/suites.mote +9 -0
- data/lib/kaya/view/view.rb +72 -0
- data/lib/kaya.rb +175 -0
- data/test/features/install.feature +18 -0
- data/test/features/support/env.rb +3 -0
- metadata +395 -0
@@ -0,0 +1,122 @@
|
|
1
|
+
How to make documentation for Kaya?
|
2
|
+
==============
|
3
|
+
|
4
|
+
Kaya documentation is loaded to your local mongodb during the command `prepare` from all .md files located inside /kaya/documentation/
|
5
|
+
and /kaya/ folders.
|
6
|
+
Then it's made available in [/kaya/help/main](/kaya/help/main "Help") where you can see all documents and perform searches through them.
|
7
|
+
|
8
|
+
Where do i put the documents?
|
9
|
+
---------------------
|
10
|
+
|
11
|
+
You can push them to the kaya git project inside /kaya/documentation/ folder, /kaya/ folder it's also functional but it's discouraged.
|
12
|
+
|
13
|
+
What type of file do i use?
|
14
|
+
---------------------
|
15
|
+
|
16
|
+
You can only use Markdown (.md) files.
|
17
|
+
|
18
|
+
How do i name it?
|
19
|
+
---------------------
|
20
|
+
|
21
|
+
The name should describe the content of the document, beware that this name its going to be the title of the document in the [/kaya/help/main](/kaya/help/main "Help") page so take that into consideration.
|
22
|
+
Also all the name should be all in undercase, and words should be separated by "_" wich are replaced by spaces afterwards.
|
23
|
+
|
24
|
+
An example of this:
|
25
|
+
|
26
|
+
Name of the file:
|
27
|
+
|
28
|
+
this_is_an_example.md
|
29
|
+
|
30
|
+
The the title will be like this:
|
31
|
+
|
32
|
+
This is an example
|
33
|
+
|
34
|
+
How do i format de content of the file?
|
35
|
+
---------------------
|
36
|
+
|
37
|
+
All files in kaya project shuld be formated like this
|
38
|
+
|
39
|
+
Main title
|
40
|
+
==============
|
41
|
+
|
42
|
+
Body of the file
|
43
|
+
|
44
|
+
- Main title: it describes the content of the file, it is also the description dispayed here [/kaya/help/main](/kaya/help/main "Help")
|
45
|
+
|
46
|
+
- Body of the file: here you can place all the content you want, see ´How do i format de body?´ for more info.
|
47
|
+
|
48
|
+
|
49
|
+
How do i format de body?
|
50
|
+
---------------------
|
51
|
+
|
52
|
+
You can use most of Markdown rules.
|
53
|
+
Also you can use some basic HTML, but it's strongly discouraged.
|
54
|
+
|
55
|
+
Here are some examples:
|
56
|
+
|
57
|
+
Main title
|
58
|
+
==============
|
59
|
+
|
60
|
+
Secondary titles
|
61
|
+
---------------------
|
62
|
+
|
63
|
+
Normal text.
|
64
|
+
|
65
|
+
> This is a quote.
|
66
|
+
|
67
|
+
*This is italicized*
|
68
|
+
|
69
|
+
**This is bold**
|
70
|
+
|
71
|
+
***This is italicized and bold***
|
72
|
+
|
73
|
+
`this is higlighted`
|
74
|
+
|
75
|
+
- this
|
76
|
+
- is a
|
77
|
+
- list
|
78
|
+
|
79
|
+
This is a link: [Despegar](http://www.despegar.com/)
|
80
|
+
|
81
|
+
You can make relative links too: [/kaya/help/main](/kaya/help/main "Help")
|
82
|
+
|
83
|
+
This is a block.
|
84
|
+
|
85
|
+
This is a ruler:
|
86
|
+
|
87
|
+
---------------------------------------
|
88
|
+
|
89
|
+
|
90
|
+
They are displayed as follows:
|
91
|
+
|
92
|
+
Main title
|
93
|
+
==============
|
94
|
+
|
95
|
+
Secondary titles
|
96
|
+
---------------------
|
97
|
+
|
98
|
+
Normal text.
|
99
|
+
|
100
|
+
> This is a quote.
|
101
|
+
|
102
|
+
*This is italicized*
|
103
|
+
|
104
|
+
**This is bold**
|
105
|
+
|
106
|
+
***This is italicized and bold***
|
107
|
+
|
108
|
+
`this is higlighted`
|
109
|
+
|
110
|
+
- this
|
111
|
+
- is a
|
112
|
+
- list
|
113
|
+
|
114
|
+
This is a link: [Despegar](http://www.despegar.com/)
|
115
|
+
|
116
|
+
You can make relative links too: [/kaya/help/main](/kaya/help/main "Help")
|
117
|
+
|
118
|
+
This is a block
|
119
|
+
|
120
|
+
This is a ruler:
|
121
|
+
|
122
|
+
----------------------------------------
|
@@ -0,0 +1,12 @@
|
|
1
|
+
Share a link to execute a test suite
|
2
|
+
==============
|
3
|
+
|
4
|
+
Pressing this button:
|
5
|
+
|
6
|
+
<form>
|
7
|
+
<button type="button" class="btn btn-default" aria-label="Left Align" ><span class="glyphicon glyphicon-star" aria-hidden="true">Link</span></button>
|
8
|
+
</form>
|
9
|
+
|
10
|
+
you will see a message with the url that starts the test suite execution with the configured custom params and execution name
|
11
|
+
This could be helpful when a story is in development process and your test is ready to be executed, so you can create a test suite related to the history,
|
12
|
+
set custom params, execution name and then share the link to de developer which is responsible about the history implementation
|
@@ -0,0 +1,119 @@
|
|
1
|
+
Results and details about them.
|
2
|
+
==============
|
3
|
+
|
4
|
+
Each Test Suite execution creates a result. You can see them in Results section.
|
5
|
+
You will see each Test Suite box with its results. If a Test Suite has more than three results, you'll see a green button that says `All results` for this test suite to see all results for that test suite
|
6
|
+
A result line looks like:
|
7
|
+
|
8
|
+
<div class="panel panel-primary">
|
9
|
+
<div class="panel-heading" data-toggle="collapse" data-target="#at_world">
|
10
|
+
<h3 class="panel-title">
|
11
|
+
Regression Tests
|
12
|
+
<div class="pull-right">28 Results</div>
|
13
|
+
</h3>
|
14
|
+
<div></div>
|
15
|
+
</div>
|
16
|
+
<div class="panel-body collapse in" id="at_world">
|
17
|
+
<div title="Command: -t @multi "></div>
|
18
|
+
<div title="Command: -t @multi "></div>
|
19
|
+
<div title="Command: -t @multi "></div>
|
20
|
+
<table class="table">
|
21
|
+
<thead>
|
22
|
+
<tr>
|
23
|
+
<th style="font-weight: bold;">When</th>
|
24
|
+
<th style="font-weight: bold;">Label</th>
|
25
|
+
<th style="font-weight: bold;">Duration (sec)</th>
|
26
|
+
<th style="font-weight: bold; text-align: center;">Unviewed</th>
|
27
|
+
<th style="font-weight: bold;">Console</th>
|
28
|
+
<th style="font-weight: bold;">Status</th>
|
29
|
+
</tr>
|
30
|
+
</thead>
|
31
|
+
<tbody>
|
32
|
+
<tr class="small">
|
33
|
+
<th>01/04/2015 12:16:10</th>
|
34
|
+
<th>01APR15-1216</th>
|
35
|
+
<th> 5 m 2 s</th>
|
36
|
+
<th style="text-align: center;">
|
37
|
+
No
|
38
|
+
</th>
|
39
|
+
<th>
|
40
|
+
<a class="label label-default">
|
41
|
+
Console Log
|
42
|
+
</a>
|
43
|
+
</th>
|
44
|
+
<th>
|
45
|
+
<a href="#" class="label label-danger">Stopped (inactivity timeout reached)</a>
|
46
|
+
</th>
|
47
|
+
</tr>
|
48
|
+
<tr class="small">
|
49
|
+
<th>19/03/2015 16:00:30</th>
|
50
|
+
<th>19MAR15-1600</th>
|
51
|
+
<th>11 s</th>
|
52
|
+
<th style="text-align: center;">
|
53
|
+
No
|
54
|
+
</th>
|
55
|
+
<th>
|
56
|
+
<a class="label label-default">
|
57
|
+
Console Log
|
58
|
+
</a>
|
59
|
+
</th>
|
60
|
+
<th>
|
61
|
+
<a href="#" class="label label-success">1 scenario (1 passed) - 1 step (1 passed)</a>
|
62
|
+
</th>
|
63
|
+
</tr>
|
64
|
+
<tr class="small">
|
65
|
+
<th>19/03/2015 15:17:16</th>
|
66
|
+
<th>19MAR15-1517</th>
|
67
|
+
<th> 4 m 21 s</th>
|
68
|
+
<th style="text-align: center;">
|
69
|
+
No
|
70
|
+
</th>
|
71
|
+
<th>
|
72
|
+
<a class="label label-default">
|
73
|
+
Console Log
|
74
|
+
</a>
|
75
|
+
</th>
|
76
|
+
<th>
|
77
|
+
<a href="#" class="label label-success">1 scenario (1 passed) - 1 step (1 passed)</a>
|
78
|
+
</th>
|
79
|
+
</tr>
|
80
|
+
</tbody>
|
81
|
+
</table>
|
82
|
+
<div class="text-center">
|
83
|
+
<a class="btn btn-info">
|
84
|
+
Go to suite
|
85
|
+
</a>
|
86
|
+
<a href="/kaya/results/suite/multi" class="btn btn-default">
|
87
|
+
All results for this suite
|
88
|
+
<span class="label label-info label-as-badge">
|
89
|
+
3
|
90
|
+
</span>
|
91
|
+
</a>
|
92
|
+
</div>
|
93
|
+
</div>
|
94
|
+
</div>
|
95
|
+
|
96
|
+
---------------------------------------
|
97
|
+
|
98
|
+
|
99
|
+
You can click on this button to see the console output of the execution
|
100
|
+
|
101
|
+
<a class="btn btn-info">Console Log</a>
|
102
|
+
|
103
|
+
---------------------------------------
|
104
|
+
|
105
|
+
When the execution is still running this label will be shown
|
106
|
+
|
107
|
+
<span class="label label-success">Running</span>
|
108
|
+
|
109
|
+
---------------------------------------
|
110
|
+
|
111
|
+
You can click on summary description like this to see the cucumber report.
|
112
|
+
|
113
|
+
<span class="label label-success">4 scenarios (4 passed) - 20 steps (20 passed)</span>
|
114
|
+
|
115
|
+
---------------------------------------
|
116
|
+
|
117
|
+
When an execution is stopped you'll see this in All Results section you'll see all execution results for all test suites. You can find a specific result by typing a keyword or selecting a status and pressing Search
|
118
|
+
|
119
|
+
<span class="label label-danger">Suite execution stopped!</span>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
What is Kaya?
|
2
|
+
==============
|
3
|
+
*Basically it's about runnnig tests easily.*
|
4
|
+
|
5
|
+
With Kaya, you don't have to install or configure nothing.
|
6
|
+
Just enter on your favourite web browser the url where Kaya is running for your test automation project,
|
7
|
+
go to Suites and start the execution you need to run.
|
8
|
+
|
9
|
+
How to run tests?
|
10
|
+
==============
|
11
|
+
|
12
|
+
You can run tests in Test Suites section. You'll find test suites listed. Each test suite involves many test (or not).
|
13
|
+
If you want to know more about a test suite you can mouse over the information icon which could have info about it
|
14
|
+
Each test suite saves its execution results in a database so you do not have to care about report because Kaya do that for you and store all reports as a history.
|
15
|
+
You also can provide some parameters to the execution. This values are called Custom Parameters and you can set them up as your execution needs.
|
16
|
+
|
17
|
+
Only test?
|
18
|
+
==============
|
19
|
+
Well, why not use this to run any code?
|
@@ -0,0 +1,60 @@
|
|
1
|
+
How to use Test Suites in Kaya?
|
2
|
+
==============
|
3
|
+
|
4
|
+
You can find test suites on Test Suites section.
|
5
|
+
Kaya will retrieve all profiles masked as runnable defined on cucumber.yml
|
6
|
+
Each Test Suite can be executed by pressing Run button. The execution result could be identified after the execution by adding a label before pressing Run button
|
7
|
+
For example, an identifier could be a release product version like r2.3.44. So you will be able to identify quickly the execution result later
|
8
|
+
You can provide some parameters to the execution by using [Custom Parameters](/kaya/help/custom_parameters "Custom Parameters")
|
9
|
+
|
10
|
+
A Test Suite looks like:
|
11
|
+
---------------------
|
12
|
+
|
13
|
+
<div class="panel panel-primary">
|
14
|
+
<div class="panel-heading" data-toggle="collapse" data-target="#multi">
|
15
|
+
<h4 class="panel-title">multi</h4>
|
16
|
+
</div>
|
17
|
+
<div class="panel-body collapse in" id="multi">
|
18
|
+
<ul class="list-group">
|
19
|
+
<li class="list-group-item">Command: -t @multi</li>
|
20
|
+
<li class="list-group-item">Last result: <a href="#" class="label label-danger" >Stopped (inactivity timeout reached)</a></li>
|
21
|
+
<li class="list-group-item">Started on: 24/05/47218 02:27:33</li>
|
22
|
+
<li class="list-group-item">
|
23
|
+
<form name="run" id="multi" method="get" action="#">
|
24
|
+
<h4 title="This parameters will be passed to the test suite execution"> Custom Parameters</h4>
|
25
|
+
<div class="container" style="width: inherit">
|
26
|
+
<li class="list-group-item" style="position:relative; with=100%">
|
27
|
+
<div class="form-group-sm">
|
28
|
+
<label class="col-sm-2 control-label" for="formGroupInputSmall">environment</label>
|
29
|
+
<select id="environment" name="environment" class="customParam" style="height: 34px; padding: 6px 12px; font-size: 14px; line-height: 1.42857143; color: #555; background-color: #fff; background-image: none; border: 1px solid #ccc; border-radius: 4px; font-weight:normal;">
|
30
|
+
<option value="RC">RC</option>
|
31
|
+
<option value="BETA">BETA</option>
|
32
|
+
<option value="PROD">PROD</option>
|
33
|
+
</select>
|
34
|
+
<input type="text" id="otro0" name="otro" value="Enter otro" onfocus="if (this.value=="Enter otro") this.value="";" placeholder="" style="display: none; height: 34px; padding: 6px 12px; font-size: 14px; line-height: 1.42857143; color: #555; background-color: #fff; background-image: none; border: 1px solid #ccc; border-radius: 4px;"></div>
|
35
|
+
<div class="form-group-sm">
|
36
|
+
<label class="col-sm-2 control-label" for="formGroupInputSmall">my param A</label>
|
37
|
+
<textarea class="customParam" type="text" name="blabla" placeholder="" style="height: 34px; padding: 6px 12px; font-size: 14px; line-height: 1.42857143; color: #555; background-color: #fff; background-image: none; border: 1px solid #ccc; border-radius: 4px; max-width: 70%; max-height: 500px; min-height: 34px; min-width: 212px; font-weight:normal;"></textarea>
|
38
|
+
</div>
|
39
|
+
<div class="form-group-sm">
|
40
|
+
<label class="col-sm-2 control-label" for="formGroupInputSmall">my param B</label>
|
41
|
+
<textarea class="customParam" type="text" name="etc" placeholder="" style="height: 34px; padding: 6px 12px; font-size: 14px; line-height: 1.42857143; color: #555; background-color: #fff; background-image: none; border: 1px solid #ccc; border-radius: 4px; max-width: 70%; max-height: 500px; min-height: 34px; min-width: 212px; font-weight:normal;"></textarea>
|
42
|
+
</div>
|
43
|
+
<div class="form-group-sm">
|
44
|
+
<label class="col-sm-2 control-label" for="formGroupInputSmall">my Param C</label>
|
45
|
+
<textarea class="customParam" type="text" name="country" placeholder="" style="height: 34px; padding: 6px 12px; font-size: 14px; line-height: 1.42857143; color: #555; background-color: #fff; background-image: none; border: 1px solid #ccc; border-radius: 4px; max-width: 70%; max-height: 500px; min-height: 34px; min-width: 212px; font-weight:normal;"></textarea>
|
46
|
+
</div>
|
47
|
+
</li>
|
48
|
+
</div>
|
49
|
+
<br><br>
|
50
|
+
<input type="submit" class="btn btn-success" value="Execute Suite">
|
51
|
+
<input type="text" name="execution_name" class="customParam" title="This value could be used to identify the result execution from other execution of this suite. E.g: You could use the release your are going to test" placeholder="Identify your execution" value="01APR15-1356" style="height: 34px; padding: 6px 12px; font-size: 14px; line-height: 1.42857143; color: #555; background-color: #fff; background-image: none; border: 1px solid #ccc; border-radius: 4px; font-weight:normal;">
|
52
|
+
<button type="button" class="btn btn-default" aria-label="Left Align" data-toggle="modal" data-target="#myModal" onclick="javascript:starter_link("multi");">
|
53
|
+
<span class="glyphicon glyphicon-star" aria-hidden="true">Link</span>
|
54
|
+
</button>
|
55
|
+
</form>
|
56
|
+
</li>
|
57
|
+
</ul>
|
58
|
+
<a href="#" class="btn btn-default pull-center">All results(28)</a>
|
59
|
+
</div>
|
60
|
+
</div>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
How to provide information about a test suite?
|
2
|
+
==============
|
3
|
+
|
4
|
+
You can provide some information about a test suite by adding info value to each suite you need
|
5
|
+
|
6
|
+
#cucumber.yml
|
7
|
+
regression: -t @regression info=[This is to execute a regression tests suite]
|
8
|
+
|
9
|
+
This value `info=[Explaining text]` will show the icon <span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span> where you can mouse over and read the text
|
data/kaya.gemspec
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'kaya/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "kaya"
|
8
|
+
spec.version = Kaya::VERSION
|
9
|
+
spec.authors = ["Roman Rodriguez"]
|
10
|
+
spec.email = ["roman.g.rodriguez@gmail.com"]
|
11
|
+
spec.summary = %q{Exposes Cucumber suites in a web service to make them run}
|
12
|
+
spec.description = %q{You can run your cucumber suites easily, save and see the execution results}
|
13
|
+
spec.homepage = "http://qqq.akjsdh"
|
14
|
+
spec.license = "MIT"
|
15
|
+
spec.required_ruby_version = ">= 2.0.0"
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0")
|
18
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
spec.add_dependency 'thor'
|
23
|
+
spec.add_dependency 'cuba'
|
24
|
+
spec.add_dependency 'unicorn'
|
25
|
+
spec.add_dependency 'mongodb'
|
26
|
+
spec.add_dependency 'redis'
|
27
|
+
spec.add_dependency 'sidekiq'
|
28
|
+
spec.add_dependency 'bson_ext'
|
29
|
+
spec.add_dependency 'syntax'
|
30
|
+
spec.add_dependency 'colorize'
|
31
|
+
spec.add_dependency 'github-markup'
|
32
|
+
spec.add_dependency 'redcarpet'
|
33
|
+
spec.add_dependency 'byebug'
|
34
|
+
spec.add_dependency 'gmail'
|
35
|
+
spec.add_dependency 'mote'
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
spec.add_development_dependency "bundler", "~> 1.5"
|
40
|
+
spec.add_development_dependency "rake"
|
41
|
+
spec.add_development_dependency "cucumber"
|
42
|
+
end
|
@@ -0,0 +1,160 @@
|
|
1
|
+
class TaskRack < Thor::Group
|
2
|
+
|
3
|
+
include Thor::Actions
|
4
|
+
|
5
|
+
desc "Generates files needed by Kaya"
|
6
|
+
|
7
|
+
# ===============================
|
8
|
+
# Evaluates prerequisites
|
9
|
+
#
|
10
|
+
#
|
11
|
+
|
12
|
+
def check_for_mongo_existance
|
13
|
+
begin
|
14
|
+
mongo = Kaya::Support::Console.execute "mongo --version"
|
15
|
+
mongo_version = mongo.scan(/(\d+\.\d+\.\d+)/).flatten.first
|
16
|
+
rescue
|
17
|
+
raise "
|
18
|
+
MONGODB NOT INSTALLED. INSTALL MONGODB BEFORE USING KAYA
|
19
|
+
to install MongoDB go to: http://docs.mongodb.org/manual/installation/
|
20
|
+
" if mongo_version.nil?
|
21
|
+
end
|
22
|
+
puts "MongoDB version installed => #{mongo_version} => OK"
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
def check_redis_existance
|
27
|
+
redis = Kaya::Support::Console.execute "redis-server -v"
|
28
|
+
raise "
|
29
|
+
REDIS SERVER IS NOT INSTALLED ON YOUR SYSTEM.
|
30
|
+
INSTALL REDIS SERVER BEFORE USING KAYA
|
31
|
+
to install Redis go to:
|
32
|
+
" unless redis =~ /Redis server v=\d+\.\d+\.\d+/
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
def choose_working_branch
|
37
|
+
|
38
|
+
# Gets the list of branches
|
39
|
+
branch_list=Kaya::Support::Git.branch_list
|
40
|
+
|
41
|
+
begin
|
42
|
+
system "clear"
|
43
|
+
Kaya::Support::Logo.show
|
44
|
+
puts "
|
45
|
+
You have to choose one of the following branches to tell Kaya where to work with:"
|
46
|
+
# Print the options
|
47
|
+
branch_list.each_with_index do |branch_name, index|
|
48
|
+
puts "\t(#{index + 1}) - #{branch_name}"
|
49
|
+
end
|
50
|
+
print "\n\t Your option:"; option = STDIN.gets
|
51
|
+
|
52
|
+
#Converted to Fixnum
|
53
|
+
option = option.gsub!("\n","").to_i
|
54
|
+
|
55
|
+
end until (1..branch_list.size).include? option
|
56
|
+
|
57
|
+
|
58
|
+
selected_branch_name = branch_list[option-1]
|
59
|
+
puts "
|
60
|
+
Lets work on '#{selected_branch_name}'
|
61
|
+
|
62
|
+
"
|
63
|
+
|
64
|
+
|
65
|
+
Kaya::Support::Git.checkout_to(selected_branch_name)
|
66
|
+
end
|
67
|
+
|
68
|
+
# ==============================
|
69
|
+
# Start install task
|
70
|
+
#
|
71
|
+
#
|
72
|
+
#
|
73
|
+
def self.source_root
|
74
|
+
File.dirname(__FILE__) + "/templates/"
|
75
|
+
end
|
76
|
+
|
77
|
+
def creates_kaya_folder
|
78
|
+
empty_directory "kaya"
|
79
|
+
end
|
80
|
+
|
81
|
+
def creates_kaya_temp_folder
|
82
|
+
empty_directory "kaya/temp"
|
83
|
+
end
|
84
|
+
|
85
|
+
def copy_server_file
|
86
|
+
unless File.exist? "#{Dir.pwd}/kaya/config.ru"
|
87
|
+
template "config.ru.tt", "#{Dir.pwd}/kaya/config.ru"
|
88
|
+
|
89
|
+
else
|
90
|
+
|
91
|
+
if yes?("\n It seems that you already have a config.ru file. DO YOU WANT TO REPLACE IT? (yes/no)", color = :green)
|
92
|
+
template "config.ru.tt", "#{Dir.pwd}/kaya/config.ru"
|
93
|
+
else
|
94
|
+
raise "The existing config.ru file must be replaced with config.ru file from Kaya"
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
|
+
def copy_kaya_conf
|
101
|
+
template "kaya_conf.tt", "#{Dir.pwd}/kaya/kaya_conf" unless File.exist? "#{Dir.pwd}/kaya/kaya_conf"
|
102
|
+
end
|
103
|
+
|
104
|
+
def copy_kaya_log_file
|
105
|
+
template "kaya_log.tt", "#{Dir.pwd}/kaya/kaya_log" unless File.exist? "#{Dir.pwd}/kaya/kaya_log"
|
106
|
+
end
|
107
|
+
|
108
|
+
def copy_sidekiq_log_file
|
109
|
+
template "sidekiq_log.tt", "#{Dir.pwd}/kaya/sidekiq_log" unless File.exist? "#{Dir.pwd}/kaya/sidekiq_log"
|
110
|
+
end
|
111
|
+
|
112
|
+
def copy_unicorn_config_file
|
113
|
+
unless File.exist? "#{Dir.pwd}/kaya/unicorn.rb"
|
114
|
+
template "unicorn.rb.tt", "#{Dir.pwd}/kaya/unicorn.rb"
|
115
|
+
@unicorn_created = true
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def update_gitignore
|
120
|
+
path = "#{Dir.pwd}/.gitignore"
|
121
|
+
if File.exist? path
|
122
|
+
f = File.open(path, "a+")
|
123
|
+
content = ""
|
124
|
+
f.each_line{|line| content += line}
|
125
|
+
f.write "\n" unless content[-1] == "\n"
|
126
|
+
# ['*.kaya','kaya_conf','*.html','unicorn.rb', 'config.ru','Gemfile.lock', 'kaya_pids','sidekiq_pids', 'sidekiq_log'].each do |file_name|
|
127
|
+
# f.write "#{file_name}\n" unless content.include? "#{file_name}"
|
128
|
+
# end
|
129
|
+
|
130
|
+
f.write "kaya/\n" unless content.include? "kaya/"
|
131
|
+
f.write "kaya/*\n" unless content.include? "kaya/*"
|
132
|
+
|
133
|
+
|
134
|
+
f.close
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def update_gemfile
|
139
|
+
path = "#{Dir.pwd}/Gemfile"
|
140
|
+
if File.exist? path
|
141
|
+
f = File.open(path, "a+")
|
142
|
+
content = ""
|
143
|
+
f.each_line{|line| content += line}
|
144
|
+
f.write "\n" unless content[-1] == "\n"
|
145
|
+
["gem 'kaya'"].each do |file_name|
|
146
|
+
f.write "#{file_name}\n" unless content.include? "#{file_name}"
|
147
|
+
end
|
148
|
+
else
|
149
|
+
# Only cucumber projects are allowed to use Kaya (by now)
|
150
|
+
raise "There is no Gemfile. Is this a Cucumber Ruby Project?"
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
154
|
+
|
155
|
+
def push_changes
|
156
|
+
Kaya::Support::Git.git_add_commit "Kaya: Commit after install command execution"
|
157
|
+
Kaya::Support::Git.git_push_origin_to_actual_branch
|
158
|
+
end
|
159
|
+
|
160
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
{
|
2
|
+
|
3
|
+
"USE_GIT" : true,
|
4
|
+
|
5
|
+
"HOSTNAME" : "your-host-name",
|
6
|
+
|
7
|
+
"APP_PORT" : 8080,
|
8
|
+
|
9
|
+
"DATABASE" : {
|
10
|
+
|
11
|
+
"TYPE" : "mongodb",
|
12
|
+
"HOST" :"localhost",
|
13
|
+
"PORT" : 27017,
|
14
|
+
"USERNAME" : null,
|
15
|
+
"PASSWORD" : null},
|
16
|
+
|
17
|
+
"PROJECT_NAME" : "Awesome Project",
|
18
|
+
|
19
|
+
"PROJECT_URL" : "http://your.project.url",
|
20
|
+
|
21
|
+
"INACTIVITY_TIMEOUT" : 60,
|
22
|
+
|
23
|
+
"KILL_INACTIVE_EXECUTIONS_AFTER" : 300,
|
24
|
+
|
25
|
+
"FORMAT_DATETIME" : "%d/%m/%Y %H:%M:%S",
|
26
|
+
|
27
|
+
"REFRESH_TIME" : 10,
|
28
|
+
|
29
|
+
"NOTIFICATION" : {
|
30
|
+
"USE_GMAIL" : false,
|
31
|
+
"USERNAME" : null,
|
32
|
+
"PASSWORD" : null,
|
33
|
+
"RECIPIENTS" : "your@email.com",
|
34
|
+
"ATTACH_REPORT" : false
|
35
|
+
},
|
36
|
+
|
37
|
+
"FOOTER" : "Tests by a great and funny team",
|
38
|
+
|
39
|
+
"AUTO_EXECUTION_ID" : {
|
40
|
+
"datetime" : true,
|
41
|
+
"format" : "%d%^b%y-%H%M",
|
42
|
+
"default" : null
|
43
|
+
},
|
44
|
+
|
45
|
+
"HEADLESS" : {
|
46
|
+
"active" : false,
|
47
|
+
"resolution" : "1024x768",
|
48
|
+
"size":"24"}
|
49
|
+
}
|
File without changes
|
File without changes
|
@@ -0,0 +1,21 @@
|
|
1
|
+
worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
|
2
|
+
|
3
|
+
timeout 600
|
4
|
+
|
5
|
+
preload_app true
|
6
|
+
|
7
|
+
before_fork do |server, worker|
|
8
|
+
Signal.trap 'TERM' do
|
9
|
+
puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
|
10
|
+
Process.kill 'QUIT', Process.pid
|
11
|
+
end
|
12
|
+
|
13
|
+
defined?(ActiveRecord::Base) and
|
14
|
+
ActiveRecord::Base.connection.disconnect!
|
15
|
+
end
|
16
|
+
|
17
|
+
after_fork do |server, worker|
|
18
|
+
Signal.trap 'TERM' do
|
19
|
+
puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
|
20
|
+
end
|
21
|
+
end
|