shipit-engine 0.11.0 → 0.12.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 +4 -4
- data/README.md +41 -37
- data/app/assets/javascripts/task/tty.js.coffee +40 -22
- data/app/assets/stylesheets/_pages/_deploy.scss +1 -0
- data/app/controllers/shipit/api/locks_controller.rb +3 -3
- data/app/controllers/shipit/api/stacks_controller.rb +14 -1
- data/app/controllers/shipit/commit_checks_controller.rb +9 -2
- data/app/controllers/shipit/shipit_controller.rb +1 -1
- data/app/controllers/shipit/stacks_controller.rb +11 -5
- data/app/controllers/shipit/status_controller.rb +1 -1
- data/app/controllers/shipit/webhooks_controller.rb +15 -5
- data/app/helpers/shipit/deploys_helper.rb +1 -1
- data/app/helpers/shipit/shipit_helper.rb +2 -0
- data/app/jobs/shipit/perform_commit_checks_job.rb +2 -0
- data/app/jobs/shipit/perform_task_job.rb +18 -8
- data/app/models/shipit/commit.rb +22 -12
- data/app/models/shipit/commit_checks.rb +20 -53
- data/app/models/shipit/deploy.rb +1 -1
- data/app/models/shipit/ephemeral_commit_checks.rb +76 -0
- data/app/models/shipit/stack.rb +40 -10
- data/app/models/shipit/status.rb +14 -8
- data/app/models/shipit/status_group.rb +1 -1
- data/app/models/shipit/task.rb +2 -0
- data/app/models/shipit/unknown_status.rb +4 -0
- data/app/models/shipit/user.rb +9 -1
- data/app/serializers/shipit/stack_serializer.rb +6 -1
- data/app/views/shipit/commit_checks/_checks.html.erb +13 -0
- data/app/views/shipit/commit_checks/show.html.erb +5 -0
- data/app/views/shipit/stacks/_header.html.erb +1 -1
- data/app/views/shipit/stacks/show.html.erb +15 -0
- data/config/routes.rb +2 -1
- data/db/migrate/20140226233935_create_baseline.rb +10 -10
- data/db/migrate/20160802092812_add_continuous_delivery_delayed_since_to_stacks.rb +5 -0
- data/db/migrate/20160822131405_add_locked_since_to_stacks.rb +5 -0
- data/lib/shipit.rb +4 -0
- data/lib/shipit/command.rb +1 -1
- data/lib/shipit/commands.rb +10 -7
- data/lib/shipit/csv_serializer.rb +1 -1
- data/lib/shipit/stack_commands.rb +17 -5
- data/lib/shipit/task_commands.rb +2 -2
- data/lib/shipit/version.rb +1 -1
- data/lib/snippets/push-to-heroku +20 -16
- data/test/controllers/api/deploys_controller_test.rb +8 -8
- data/test/controllers/api/hooks_controller_test.rb +11 -9
- data/test/controllers/api/locks_controller_test.rb +16 -6
- data/test/controllers/api/outputs_controller_test.rb +1 -1
- data/test/controllers/api/stacks_controller_test.rb +48 -3
- data/test/controllers/api/tasks_controller_test.rb +6 -6
- data/test/controllers/commit_checks_controller_test.rb +3 -3
- data/test/controllers/deploys_controller_test.rb +13 -13
- data/test/controllers/rollbacks_controller_test.rb +7 -7
- data/test/controllers/stacks_controller_test.rb +36 -29
- data/test/controllers/tasks_controller_test.rb +14 -14
- data/test/controllers/webhooks_controller_test.rb +16 -25
- data/test/dummy/config/application.rb +0 -3
- data/test/dummy/config/environments/test.rb +2 -2
- data/test/dummy/data/stacks/byroot/junk/production/git/bar.txt +2 -0
- data/test/dummy/data/stacks/byroot/junk/production/git/bin/slow +7 -0
- data/test/dummy/data/stacks/byroot/junk/production/git/bin/timeout +10 -0
- data/test/dummy/data/stacks/byroot/junk/production/git/dkfdsf +0 -0
- data/test/dummy/data/stacks/byroot/junk/production/git/dskjfsd +0 -0
- data/test/dummy/data/stacks/byroot/junk/production/git/dslkjfjsdf +0 -0
- data/test/dummy/data/stacks/byroot/junk/production/git/plopfizz +0 -0
- data/test/dummy/data/stacks/byroot/junk/production/git/sd +0 -0
- data/test/dummy/data/stacks/byroot/junk/production/git/sdkfjsdf +1 -0
- data/test/dummy/data/stacks/byroot/junk/production/git/sdlfjsdfdsfj +0 -0
- data/test/dummy/data/stacks/byroot/junk/production/git/sdlkfjsdlkfjsdlkfjdsfsdfksdfjsldkfjsdlkfjsdf +0 -0
- data/test/dummy/data/stacks/byroot/junk/production/git/shipit.yml +21 -0
- data/test/dummy/data/stacks/byroot/junk/production/git/toto.txt +2 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/schema.rb +15 -13
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/fixtures/shipit/commit_deployments.yml +8 -8
- data/test/fixtures/shipit/output_chunks.yml +12 -12
- data/test/fixtures/shipit/tasks.yml +9 -1
- data/test/fixtures/shipit/users.yml +9 -2
- data/test/jobs/perform_task_job_test.rb +14 -11
- data/test/models/commits_test.rb +33 -14
- data/test/models/stacks_test.rb +78 -4
- data/test/models/users_test.rb +16 -0
- data/test/unit/commands_test.rb +4 -0
- data/test/unit/deploy_commands_test.rb +1 -1
- metadata +133 -34
- data/app/jobs/shipit/git_mirror_update_job.rb +0 -14
- data/app/views/shipit/deploys/_checks.html.erb +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 38e2344717e450b3db3cb9248f16c2b475b2955b
|
4
|
+
data.tar.gz: cc5af413a0c7a25602639dd52be6d620220880e8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b27627cdf81dd03bb8f4f0db181d4e9e00759469350f67d793c99c02fb6dfd9518edda0673bb79c234efb5d5025916b581f0c99b8fb62d1159e9420028c35cec
|
7
|
+
data.tar.gz: 7932b8299a15e244982322f760e700138feb36dfbe2bac6818b547a06c9b82dad57edc82aa7835744fcb0d9c061810e0e129a3c2be2e3445e7e5af76f50d23e0
|
data/README.md
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
* control the pace of development by pushing, locking, and rolling back deploys from within Shipit
|
9
9
|
* enforce checklists and provide monitoring right at the point of deployment.
|
10
10
|
|
11
|
-
Shipit
|
11
|
+
Shipit is compatible with just about anything that you can deploy using a script. It natively detects stacks using [bundler](http://bundler.io/) and [Capistrano](http://capistranorb.com/), and it has tools that make it easy to deploy to [Heroku](https://www.heroku.com/) or [RubyGems](https://rubygems.org/). At Shopify, we've used Shipit to synchronize and deploy hundreds of projects across dozens of teams, using Python, Rails, RubyGems, Java, and Go.
|
12
12
|
|
13
13
|
This guide aims to help you [set up](#installation-and-setup), [use](#using-shipit), and [understand](#reference) Shipit.
|
14
14
|
|
@@ -41,7 +41,7 @@ This guide aims to help you [set up](#installation-and-setup), [use](#using-ship
|
|
41
41
|
|
42
42
|
<h3 id="installation">Installation</h3>
|
43
43
|
|
44
|
-
*Shipit requires a database (MySQL, PostgreSQL or SQLite3),
|
44
|
+
*Shipit requires a database (MySQL, PostgreSQL or SQLite3), Redis, and Ruby 2.1 or superior.*
|
45
45
|
|
46
46
|
Shipit provides you with a Rails template. To bootstrap your Shipit installation:
|
47
47
|
|
@@ -61,7 +61,7 @@ Shipit should just work right out of the box — you probably won't need to
|
|
61
61
|
|
62
62
|
1. If you locked the gem to a specific version in your Gemfile, update it there.
|
63
63
|
2. Update the `shipit-engine` gem with `bundle update shipit-engine`.
|
64
|
-
3. Install new migrations with `rake shipit:install:migrations db:migrate
|
64
|
+
3. Install new migrations with `rake shipit:install:migrations db:migrate`.
|
65
65
|
|
66
66
|
* * *
|
67
67
|
|
@@ -90,7 +90,7 @@ A **stack** is composed of a GitHub repository, a branch, and a deployment envir
|
|
90
90
|
* deploy any undeployed commits by clicking **Deploy**
|
91
91
|
* rollback to an earlier build by clicking **Rollback to this deploy**
|
92
92
|
* adjust the stack's settings by clicking the gear icon in the page header
|
93
|
-
* perform any custom tasks that are defined in the `shipit.yml` file
|
93
|
+
* perform any custom tasks that are defined in the `shipit.yml` file
|
94
94
|
4. When you're ready to deploy an undeployed commit, click the relevant **Deploy** button on the stack's overview page.
|
95
95
|
5. From the **Deploy** page, complete the checklist, then click **Create deploy**.
|
96
96
|
|
@@ -105,27 +105,27 @@ From a stack's **Settings** page, you can:
|
|
105
105
|
* change the deploy URL
|
106
106
|
* enable and disable continuous deployment
|
107
107
|
* lock and unlock deploys through Shipit
|
108
|
-
*
|
109
|
-
* delete the stack from Shipit
|
108
|
+
* resynchronize the stack with GitHub
|
109
|
+
* delete the stack from Shipit
|
110
110
|
|
111
111
|
* * *
|
112
112
|
|
113
|
-
<h2 id="reference">III. REFERENCE</
|
113
|
+
<h2 id="reference">III. REFERENCE</h2>
|
114
114
|
|
115
|
-
<h3 id="configuring-shipit">Configuring <code>shipit.yml</code></
|
115
|
+
<h3 id="configuring-shipit">Configuring <code>shipit.yml</code></h3>
|
116
116
|
|
117
117
|
The settings in the `shipit.yml` file relate to the different things you can do with Shipit:
|
118
118
|
|
119
|
-
* [Installing
|
119
|
+
* [Installing Dependencies](#installing-dependencies) (`dependencies`)
|
120
120
|
* [Deployment](#deployment) (`deploy`, `rollback`, `fetch`)
|
121
121
|
* [Environment](#environment) (`machine.environment`, `machine.directory`, `machine.cleanup`)
|
122
122
|
* [CI](#ci) (`ci.require`, `ci.hide`, `ci.allow_failures`)
|
123
|
-
* [Custom
|
123
|
+
* [Custom Tasks](#custom-tasks) (`restart`, `unlock`)
|
124
124
|
* [Review Process](#review-process) (`monitor`, `checklist`, `checks`)
|
125
125
|
|
126
126
|
All the settings in `shipit.yml` are optional. Most applications can be deployed from Shipit without any configuration.
|
127
127
|
|
128
|
-
|
128
|
+
Also, if your repository is deployed different ways depending on the environment, you can have an alternative `shipit.yml` by including the environment name.
|
129
129
|
|
130
130
|
For example for a stack like: `my-org/my-repo/staging`, `shipit.staging.yml` will have priority over `shipit.yml`.
|
131
131
|
|
@@ -135,11 +135,11 @@ For example for a stack like: `my-org/my-repo/staging`, `shipit.staging.yml` wil
|
|
135
135
|
|
136
136
|
The **<code>dependencies</code>** step allows you to install all the packages your deploy script needs.
|
137
137
|
|
138
|
-
<h4 id="bundler-support">Bundler</
|
138
|
+
<h4 id="bundler-support">Bundler</h4>
|
139
139
|
|
140
140
|
If your application uses Bundler, Shipit will detect it automatically and take care of the `bundle install` and prefix your commands with `bundle exec`.
|
141
141
|
|
142
|
-
By default the following gem groups will be ignored:
|
142
|
+
By default, the following gem groups will be ignored:
|
143
143
|
|
144
144
|
- `default`
|
145
145
|
- `production`
|
@@ -162,7 +162,7 @@ dependencies:
|
|
162
162
|
- debug
|
163
163
|
```
|
164
164
|
|
165
|
-
<h4 id="other-dependencies">Other dependencies</
|
165
|
+
<h4 id="other-dependencies">Other dependencies</h4>
|
166
166
|
|
167
167
|
If your deploy script uses another tool to install dependencies, you can install them manually via `dependencies.override`:
|
168
168
|
|
@@ -172,24 +172,24 @@ dependencies:
|
|
172
172
|
- npm install
|
173
173
|
```
|
174
174
|
|
175
|
-
**<code>dependencies.pre</code>** If you wish to execute commands before Shipit
|
175
|
+
**<code>dependencies.pre</code>** If you wish to execute commands before Shipit installs the dependencies, you can specify them here.
|
176
176
|
|
177
177
|
For example:
|
178
178
|
|
179
179
|
```yml
|
180
|
-
|
180
|
+
dependencies:
|
181
181
|
pre:
|
182
182
|
- mkdir tmp/
|
183
183
|
- cp -R /var/cache/ tmp/cache
|
184
184
|
```
|
185
185
|
<br>
|
186
186
|
|
187
|
-
**<code>dependencies.post</code>** If you wish to execute commands after Shipit installed the dependencies you can specify them here:
|
187
|
+
**<code>dependencies.post</code>** If you wish to execute commands after Shipit installed the dependencies, you can specify them here:
|
188
188
|
|
189
189
|
For example:
|
190
190
|
|
191
191
|
```yml
|
192
|
-
|
192
|
+
dependencies:
|
193
193
|
post:
|
194
194
|
- cp -R tmp/cache /var/cache/
|
195
195
|
```
|
@@ -211,7 +211,7 @@ deploy:
|
|
211
211
|
```
|
212
212
|
<br>
|
213
213
|
|
214
|
-
**<code>deploy.pre</code>** If you wish to execute commands before Shipit
|
214
|
+
**<code>deploy.pre</code>** If you wish to execute commands before Shipit executes your deploy script, you can specify them here.
|
215
215
|
|
216
216
|
For example:
|
217
217
|
|
@@ -222,7 +222,7 @@ deploy:
|
|
222
222
|
```
|
223
223
|
<br>
|
224
224
|
|
225
|
-
**<code>deploy.post</code>** If you wish to execute commands after Shipit executed your deploy script you can specify them here
|
225
|
+
**<code>deploy.post</code>** If you wish to execute commands after Shipit executed your deploy script, you can specify them here.
|
226
226
|
|
227
227
|
For example:
|
228
228
|
|
@@ -234,7 +234,7 @@ deploy:
|
|
234
234
|
<br>
|
235
235
|
|
236
236
|
|
237
|
-
You can also accept custom environment variables defined by the user that
|
237
|
+
You can also accept custom environment variables defined by the user that triggers the deploy:
|
238
238
|
|
239
239
|
**<code>deploy.variables</code>** contains an array of variable definitions.
|
240
240
|
|
@@ -250,9 +250,9 @@ deploy:
|
|
250
250
|
```
|
251
251
|
<br>
|
252
252
|
|
253
|
-
**<code>deploy.max_commits</code>**
|
253
|
+
**<code>deploy.max_commits</code>** allows you to set a limit to the number of commits being shipped per deploys.
|
254
254
|
|
255
|
-
Human users will be warned that they are not respecting the
|
255
|
+
Human users will be warned that they are not respecting the recommendation, but allowed to continue.
|
256
256
|
|
257
257
|
For example:
|
258
258
|
|
@@ -262,7 +262,7 @@ deploy:
|
|
262
262
|
```
|
263
263
|
<br>
|
264
264
|
|
265
|
-
**<code>rollback.override</code>** contains an array of the shell commands required to rollback the application to a previous state. Shipit will try to infer it from the repository structure, but you can change the default inference. This key defaults to disabled unless Capistrano is detected.
|
265
|
+
**<code>rollback.override</code>** contains an array of the shell commands required to rollback the application to a previous state. Shipit will try to infer it from the repository structure, but you can change the default inference. This key defaults to `disabled` unless Capistrano is detected.
|
266
266
|
|
267
267
|
For example:
|
268
268
|
|
@@ -273,7 +273,7 @@ rollback:
|
|
273
273
|
```
|
274
274
|
<br>
|
275
275
|
|
276
|
-
**<code>rollback.pre</code>** If you wish to execute commands before Shipit
|
276
|
+
**<code>rollback.pre</code>** If you wish to execute commands before Shipit executes your rollback script, you can specify them here:
|
277
277
|
|
278
278
|
For example:
|
279
279
|
|
@@ -284,7 +284,7 @@ rollback:
|
|
284
284
|
```
|
285
285
|
<br>
|
286
286
|
|
287
|
-
**<code>rollback.post</code>** If you wish to execute commands after Shipit executed your rollback script you can specify them here:
|
287
|
+
**<code>rollback.post</code>** If you wish to execute commands after Shipit executed your rollback script, you can specify them here:
|
288
288
|
|
289
289
|
For example:
|
290
290
|
|
@@ -296,7 +296,7 @@ rollback:
|
|
296
296
|
<br>
|
297
297
|
|
298
298
|
|
299
|
-
**<code>fetch</code>** contains an array of the shell commands that Shipit executes to check the revision of the currently-deployed version. This key defaults to disabled
|
299
|
+
**<code>fetch</code>** contains an array of the shell commands that Shipit executes to check the revision of the currently-deployed version. This key defaults to `disabled`.
|
300
300
|
|
301
301
|
For example:
|
302
302
|
```yml
|
@@ -316,7 +316,7 @@ machine:
|
|
316
316
|
|
317
317
|
<h3 id="directory">Directory</h3>
|
318
318
|
|
319
|
-
**<code>machine.directory</code>**
|
319
|
+
**<code>machine.directory</code>** specifies a subfolder in which to execute all tasks. Useful for repositories containing multiple applications or if you don't want your deploy scripts to be located at the root.
|
320
320
|
|
321
321
|
For example:
|
322
322
|
```yml
|
@@ -326,7 +326,7 @@ machine:
|
|
326
326
|
|
327
327
|
<h3 id="cleanup">Cleanup</h3>
|
328
328
|
|
329
|
-
**<code>machine.cleanup</code>**
|
329
|
+
**<code>machine.cleanup</code>** specifies whether or not the deploy working directory should be cleaned up once the deploy completed. Defaults to `true`, but can be useful to disable temporarily to investigate bugs.
|
330
330
|
|
331
331
|
For example:
|
332
332
|
```yml
|
@@ -377,7 +377,7 @@ tasks:
|
|
377
377
|
- ssh deploy@myserver.example.com 'touch myapp/restart.txt'
|
378
378
|
```
|
379
379
|
|
380
|
-
By default custom tasks are not allowed to be triggered while a deploy is running. But if it's safe for that specific task you can change that behavior with the `allow_concurrency` attribute:
|
380
|
+
By default, custom tasks are not allowed to be triggered while a deploy is running. But if it's safe for that specific task, you can change that behavior with the `allow_concurrency` attribute:
|
381
381
|
|
382
382
|
```yml
|
383
383
|
tasks:
|
@@ -436,7 +436,7 @@ review:
|
|
436
436
|
<br>
|
437
437
|
|
438
438
|
**<code>review.checks</code>** contains a list of commands that will be executed during the pre-deploy review step.
|
439
|
-
Their output appears on the deployment page in Shipit.
|
439
|
+
Their output appears on the deployment page in Shipit, and if continuous delivery is enabled, deploys will only be triggered if those commands are successful.
|
440
440
|
|
441
441
|
For example:
|
442
442
|
|
@@ -446,6 +446,8 @@ review:
|
|
446
446
|
- bundle exec rake db:migrate:status
|
447
447
|
```
|
448
448
|
|
449
|
+
|
450
|
+
|
449
451
|
***
|
450
452
|
<h2 id="configuring-secrets">Configuring <code>secrets.yml</code></h2>
|
451
453
|
|
@@ -465,11 +467,13 @@ production:
|
|
465
467
|
|
466
468
|
The value for `id` is your application's *Client ID*, and the value for `secret` is your application's *Client Secret* — both of these should appear on your application's GitHub page.
|
467
469
|
|
470
|
+
Note: When setting up your application in Github, set the *Authorization callback URL* to `<yourdomain>/github/auth/github/callback`.
|
471
|
+
|
468
472
|
The `teams` key is optional, and required only if you want to restrict access to a set of GitHub teams.
|
469
473
|
|
470
|
-
If it's missing the Shipit installation will be public unless you setup another authentication method.
|
474
|
+
If it's missing, the Shipit installation will be public unless you setup another authentication method.
|
471
475
|
|
472
|
-
After you change the list of
|
476
|
+
After you change the list of teams, you have to invoke `bin/rake teams:fetch` in production so that a webhook is setup to keep the list of members up to date.
|
473
477
|
|
474
478
|
For example:
|
475
479
|
|
@@ -528,7 +532,7 @@ production:
|
|
528
532
|
|
529
533
|
<br>
|
530
534
|
|
531
|
-
**`commands_inactivity_timeout`** is the duration after which
|
535
|
+
**`commands_inactivity_timeout`** is the duration after which Shipit will terminate a command if no ouput was received. Default is `300` (5 minutes).
|
532
536
|
|
533
537
|
For example:
|
534
538
|
```yml
|
@@ -540,9 +544,9 @@ production:
|
|
540
544
|
|
541
545
|
Your deploy scripts have access to the following environment variables:
|
542
546
|
|
543
|
-
* `SHIPIT`: Set to
|
544
|
-
* `SHIPIT_LINK`: URL to the task output,
|
545
|
-
* `
|
547
|
+
* `SHIPIT`: Set to `1` to allow your script to know it's executed by Shipit
|
548
|
+
* `SHIPIT_LINK`: URL to the task output, useful to broadcast it in an IRC channel
|
549
|
+
* `SHIPIT_USER`: Full name of the user that triggered the deploy/task
|
546
550
|
* `EMAIL`: Email of the user that triggered the deploy/task (if available)
|
547
551
|
* `ENVIRONMENT`: The stack environment (e.g `production` / `staging`)
|
548
552
|
* `BRANCH`: The stack branch (e.g `master`)
|
@@ -1,11 +1,35 @@
|
|
1
1
|
class OutputLines
|
2
2
|
constructor: (@screen, @render) ->
|
3
|
+
@renderingCache = {}
|
4
|
+
|
5
|
+
append: (lines) ->
|
6
|
+
@screen.append(@renderLines(@filter(lines)))
|
7
|
+
|
8
|
+
setFilter: ->
|
9
|
+
true
|
10
|
+
|
11
|
+
filter: (lines) ->
|
12
|
+
lines
|
13
|
+
|
14
|
+
highlight: (line) ->
|
15
|
+
line
|
16
|
+
|
17
|
+
renderLines: (lines) ->
|
18
|
+
for line in lines
|
19
|
+
@highlight(@renderingCache[line] ||= @render(line))
|
20
|
+
|
21
|
+
class @ClusterizeOutputLines extends OutputLines
|
22
|
+
constructor: (@screen, @render) ->
|
23
|
+
super
|
24
|
+
@raw = []
|
3
25
|
@query = ''
|
4
26
|
@highlightRegexp = null
|
5
|
-
@raw = []
|
6
|
-
@renderingCache = {}
|
7
27
|
@stripCache = {}
|
8
28
|
|
29
|
+
append: (lines) ->
|
30
|
+
@raw = @raw.concat(lines)
|
31
|
+
super
|
32
|
+
|
9
33
|
setFilter: (query) ->
|
10
34
|
if @query = query
|
11
35
|
@screen.options.no_data_text = 'No matches'
|
@@ -17,20 +41,12 @@ class OutputLines
|
|
17
41
|
reset: ->
|
18
42
|
@screen.update(@renderLines(@filter(@raw)))
|
19
43
|
|
20
|
-
filter: (lines) ->
|
21
|
-
return lines unless @query
|
22
|
-
line for line in lines when @strip(line).includes(@query)
|
23
|
-
|
24
44
|
strip: (line) ->
|
25
45
|
@stripCache[line] ||= AnsiStream.strip(line)
|
26
46
|
|
27
|
-
|
28
|
-
|
29
|
-
@
|
30
|
-
|
31
|
-
renderLines: (lines) ->
|
32
|
-
for line in lines
|
33
|
-
@highlight(@renderingCache[line] ||= @render(line))
|
47
|
+
filter: (lines) ->
|
48
|
+
return lines unless @query
|
49
|
+
line for line in lines when @strip(line).includes(@query)
|
34
50
|
|
35
51
|
buildHighlightRegexp: (query) ->
|
36
52
|
pattern = query.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&').replace(/(\s+)/g, '(<[^>]+>)*$1(<[^>]+>)*')
|
@@ -41,7 +57,6 @@ class OutputLines
|
|
41
57
|
|
42
58
|
renderedLine.replace(@highlightRegexp, '<mark>$1</mark>').replace(/(<mark>[^<>]*)((<[^>]+>)+)([^<>]*<\/mark>)/, '$1</mark>$2<mark>$4');
|
43
59
|
|
44
|
-
|
45
60
|
class @TTY
|
46
61
|
FORMATTERS = []
|
47
62
|
STICKY_SCROLL_TOLERENCE = 200
|
@@ -55,14 +70,17 @@ class @TTY
|
|
55
70
|
constructor: ($body) ->
|
56
71
|
@outputLines = []
|
57
72
|
@$code = $body.find('code')
|
58
|
-
@$container = @$code.closest('.
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
73
|
+
@$container = @$code.closest('.task-output-container')
|
74
|
+
if @$container.hasClass('clusterize-scroll')
|
75
|
+
scroller = new Clusterize(
|
76
|
+
no_data_text: 'Loading...'
|
77
|
+
tag: 'div'
|
78
|
+
contentElem: @$code[0]
|
79
|
+
scrollElem: @$container[0]
|
80
|
+
)
|
81
|
+
@output = new ClusterizeOutputLines(scroller, (line) => @createLine(@formatChunks(line)))
|
82
|
+
else
|
83
|
+
@output = new OutputLines(@$code, (line) => @createLine(@formatChunks(line)))
|
66
84
|
|
67
85
|
filterOutput: (query) =>
|
68
86
|
@output.setFilter(query)
|
@@ -10,7 +10,7 @@ module Shipit
|
|
10
10
|
if stack.locked?
|
11
11
|
render json: {message: 'Already locked'}, status: :conflict
|
12
12
|
else
|
13
|
-
stack.
|
13
|
+
stack.lock(params.reason, current_user)
|
14
14
|
render_resource stack
|
15
15
|
end
|
16
16
|
end
|
@@ -19,12 +19,12 @@ module Shipit
|
|
19
19
|
requires :reason, String, presence: true
|
20
20
|
end
|
21
21
|
def update
|
22
|
-
stack.
|
22
|
+
stack.lock(params.reason, current_user)
|
23
23
|
render_resource stack
|
24
24
|
end
|
25
25
|
|
26
26
|
def destroy
|
27
|
-
stack.
|
27
|
+
stack.unlock
|
28
28
|
render_resource stack
|
29
29
|
end
|
30
30
|
end
|
@@ -1,12 +1,25 @@
|
|
1
1
|
module Shipit
|
2
2
|
module Api
|
3
3
|
class StacksController < BaseController
|
4
|
-
require_permission :read, :stack
|
4
|
+
require_permission :read, :stack, only: %i(index show)
|
5
|
+
require_permission :write, :stack, only: %i(create)
|
5
6
|
|
6
7
|
def index
|
7
8
|
render_resources stacks
|
8
9
|
end
|
9
10
|
|
11
|
+
params do
|
12
|
+
requires :repo_owner, String
|
13
|
+
requires :repo_name, String
|
14
|
+
accepts :environment, String
|
15
|
+
accepts :branch, String
|
16
|
+
accepts :deploy_url, String
|
17
|
+
accepts :ignore_ci, Boolean
|
18
|
+
end
|
19
|
+
def create
|
20
|
+
render_resource Stack.create(params)
|
21
|
+
end
|
22
|
+
|
10
23
|
def show
|
11
24
|
render_resource stack
|
12
25
|
end
|
@@ -1,12 +1,19 @@
|
|
1
1
|
module Shipit
|
2
2
|
class CommitChecksController < ShipitController
|
3
|
+
def show
|
4
|
+
checks.schedule
|
5
|
+
end
|
6
|
+
|
3
7
|
params do
|
4
8
|
accepts :since, Integer, default: 0
|
5
9
|
end
|
6
10
|
def tail
|
7
11
|
output = checks.output(since: params.since)
|
8
|
-
|
9
|
-
|
12
|
+
url = nil
|
13
|
+
unless checks.finished?
|
14
|
+
next_offset = params.since + output.bytesize
|
15
|
+
url = stack_tail_commit_checks_path(stack, sha: commit.sha, since: next_offset)
|
16
|
+
end
|
10
17
|
|
11
18
|
render json: {url: url, output: output, status: checks.status}
|
12
19
|
end
|