shipit-engine 0.18.1 → 0.19.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 +4 -2
- data/app/models/shipit/api_client.rb +1 -1
- data/app/models/shipit/commit.rb +1 -1
- data/app/models/shipit/commit_message.rb +1 -1
- data/app/models/shipit/pull_request.rb +2 -2
- data/app/models/shipit/stack.rb +3 -3
- data/app/models/shipit/task.rb +9 -1
- data/app/serializers/shipit/stack_serializer.rb +1 -1
- data/app/views/shipit/commits/_commit.html.erb +27 -22
- data/app/views/shipit/deploys/_deploy.html.erb +33 -28
- data/app/views/shipit/stacks/_banners.html.erb +62 -0
- data/app/views/shipit/stacks/show.html.erb +12 -70
- data/app/views/shipit/tasks/_task.html.erb +29 -25
- data/db/migrate/20170524084548_index_pull_requests_on_merge_status.rb +5 -0
- data/db/migrate/20170524104615_index_commits_on_stack_id_and_sha.rb +5 -0
- data/db/migrate/20170524125249_fix_tasks_index_by_status.rb +11 -0
- data/lib/shipit.rb +1 -1
- data/lib/shipit/version.rb +1 -1
- data/test/dummy/config/application.rb +2 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/schema.rb +134 -132
- data/test/dummy/db/seeds.rb +9 -8
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/models/commits_test.rb +2 -2
- metadata +6 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fd2a6119dc0214d91ad2bfddf344a9cc898d94f1
|
|
4
|
+
data.tar.gz: a96e8b153d800ce1cea2a1d22e4f5f51671206d7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4f69396b6035b1bf6a84371b882c091de91b70f0c1ed24881028f2836f1230abd64f7bac6406aeaaa71eb110ade52206dacd3953d799db18a8d1da427fef10e0
|
|
7
|
+
data.tar.gz: 6aa40d715e8aa4e52a16c60c9ad12b15978d88758c188370436806b458f716dbc13ec4d53276df4a727b0a97bd5b84eef3c8e5550bab77fc579beb390a0d137c
|
data/README.md
CHANGED
|
@@ -16,6 +16,7 @@ This guide aims to help you [set up](#installation-and-setup), [use](#using-ship
|
|
|
16
16
|
|
|
17
17
|
* * *
|
|
18
18
|
<h2 id="toc">Table of contents</h2>
|
|
19
|
+
|
|
19
20
|
**I. INSTALLATION & SETUP**
|
|
20
21
|
|
|
21
22
|
* [Installation](#installation)
|
|
@@ -46,8 +47,8 @@ This guide aims to help you [set up](#installation-and-setup), [use](#using-ship
|
|
|
46
47
|
|
|
47
48
|
Shipit provides you with a Rails template. To bootstrap your Shipit installation:
|
|
48
49
|
|
|
49
|
-
1. If you don't have Rails installed, run this command: `gem install rails -v 5.
|
|
50
|
-
2. Run this command: `rails _5.
|
|
50
|
+
1. If you don't have Rails installed, run this command: `gem install rails -v 5.1`
|
|
51
|
+
2. Run this command: `rails _5.1_ new shipit --skip-action-cable --skip-turbolinks --skip-action-mailer -m https://raw.githubusercontent.com/Shopify/shipit-engine/master/template.rb`
|
|
51
52
|
3. Enter your **Client ID**, **Client Secret**, and **GitHub API access token** when prompted. These can be found on your application's GitHub page.
|
|
52
53
|
4. To setup the database, run this command: `rake db:setup`
|
|
53
54
|
|
|
@@ -367,6 +368,7 @@ machine:
|
|
|
367
368
|
```
|
|
368
369
|
|
|
369
370
|
<h3 id="ci">CI</h3>
|
|
371
|
+
|
|
370
372
|
**<code>ci.require</code>** contains an array of the [statuses context](https://developer.github.com/v3/repos/statuses/) you want Shipit to disallow deploys if any of them is missing.
|
|
371
373
|
|
|
372
374
|
For example:
|
data/app/models/shipit/commit.rb
CHANGED
|
@@ -8,7 +8,7 @@ module Shipit
|
|
|
8
8
|
has_many :deploys
|
|
9
9
|
has_many :statuses, -> { order(created_at: :desc) }, dependent: :destroy
|
|
10
10
|
has_many :commit_deployments, dependent: :destroy
|
|
11
|
-
belongs_to :pull_request, inverse_of: :merge_commit
|
|
11
|
+
belongs_to :pull_request, inverse_of: :merge_commit, optional: true
|
|
12
12
|
|
|
13
13
|
deferred_touch stack: :updated_at
|
|
14
14
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
module Shipit
|
|
2
2
|
class CommitMessage
|
|
3
|
-
GITHUB_MERGE_COMMIT_PATTERN =
|
|
3
|
+
GITHUB_MERGE_COMMIT_PATTERN = /\AMerge pull request #(?<pr_id>\d+) from \S+\n\n(?<pr_title>.*)/
|
|
4
4
|
|
|
5
5
|
def initialize(text)
|
|
6
6
|
@text = text
|
|
@@ -36,8 +36,8 @@ module Shipit
|
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
belongs_to :stack
|
|
39
|
-
belongs_to :head, class_name: 'Shipit::Commit'
|
|
40
|
-
belongs_to :merge_requested_by, class_name: 'Shipit::User'
|
|
39
|
+
belongs_to :head, class_name: 'Shipit::Commit', optional: true
|
|
40
|
+
belongs_to :merge_requested_by, class_name: 'Shipit::User', optional: true
|
|
41
41
|
has_one :merge_commit, class_name: 'Shipit::Commit'
|
|
42
42
|
|
|
43
43
|
deferred_touch stack: :updated_at
|
data/app/models/shipit/stack.rb
CHANGED
|
@@ -32,7 +32,7 @@ module Shipit
|
|
|
32
32
|
has_many :github_hooks, dependent: :destroy, class_name: 'Shipit::GithubHook::Repo'
|
|
33
33
|
has_many :hooks, dependent: :destroy
|
|
34
34
|
has_many :api_clients, dependent: :destroy
|
|
35
|
-
belongs_to :lock_author, class_name: :User
|
|
35
|
+
belongs_to :lock_author, class_name: :User, optional: true
|
|
36
36
|
|
|
37
37
|
def lock_author(*)
|
|
38
38
|
super || AnonymousUser.new
|
|
@@ -226,7 +226,7 @@ module Shipit
|
|
|
226
226
|
end
|
|
227
227
|
|
|
228
228
|
def last_successful_deploy
|
|
229
|
-
deploys_and_rollbacks.
|
|
229
|
+
deploys_and_rollbacks.last_successful
|
|
230
230
|
end
|
|
231
231
|
|
|
232
232
|
def last_active_task
|
|
@@ -332,7 +332,7 @@ module Shipit
|
|
|
332
332
|
|
|
333
333
|
def active_task
|
|
334
334
|
return @active_task if defined?(@active_task)
|
|
335
|
-
@active_task ||= tasks.
|
|
335
|
+
@active_task ||= tasks.current
|
|
336
336
|
end
|
|
337
337
|
|
|
338
338
|
def locked?
|
data/app/models/shipit/task.rb
CHANGED
|
@@ -13,7 +13,7 @@ module Shipit
|
|
|
13
13
|
|
|
14
14
|
belongs_to :deploy, foreign_key: :parent_id, required: false # required for fixtures
|
|
15
15
|
|
|
16
|
-
belongs_to :user
|
|
16
|
+
belongs_to :user, optional: true
|
|
17
17
|
belongs_to :stack, counter_cache: true
|
|
18
18
|
belongs_to :until_commit, class_name: 'Commit'
|
|
19
19
|
belongs_to :since_commit, class_name: 'Commit'
|
|
@@ -41,6 +41,14 @@ module Shipit
|
|
|
41
41
|
def durations
|
|
42
42
|
pluck(:started_at, :ended_at).select { |s, e| s && e }.map { |s, e| e - s }
|
|
43
43
|
end
|
|
44
|
+
|
|
45
|
+
def last_successful
|
|
46
|
+
success.last
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def current
|
|
50
|
+
active.exclusive.last
|
|
51
|
+
end
|
|
44
52
|
end
|
|
45
53
|
|
|
46
54
|
state_machine :status, initial: :pending do
|
|
@@ -5,7 +5,7 @@ module Shipit
|
|
|
5
5
|
has_one :lock_author
|
|
6
6
|
attributes :id, :repo_owner, :repo_name, :environment, :html_url, :url, :tasks_url, :deploy_url, :pull_requests_url,
|
|
7
7
|
:deploy_spec, :undeployed_commits_count, :is_locked, :lock_reason, :continuous_deployment, :created_at,
|
|
8
|
-
:updated_at, :locked_since, :last_deployed_at
|
|
8
|
+
:updated_at, :locked_since, :last_deployed_at, :branch
|
|
9
9
|
|
|
10
10
|
def url
|
|
11
11
|
api_stack_url(object)
|
|
@@ -1,27 +1,32 @@
|
|
|
1
1
|
<li class="commit <%= 'locked' if commit.locked? %>" id="commit-<%= commit.id %>">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
<span class="commit-title"><%= render_commit_message_with_link commit %></span>
|
|
6
|
-
<p class="commit-meta">
|
|
7
|
-
<span class="sha"><%= render_commit_id_link(commit) %></span>
|
|
8
|
-
<% if commit.additions? && commit.deletions? %>
|
|
9
|
-
<span class="code-additions">+<%= commit.additions %></span>
|
|
10
|
-
<span class="code-deletions">-<%= commit.deletions %></span>
|
|
11
|
-
<% end %>
|
|
12
|
-
</p>
|
|
13
|
-
<p class="commit-meta">
|
|
14
|
-
<%= timeago_tag(commit.committed_at, force: true) %>
|
|
15
|
-
</p>
|
|
16
|
-
</div>
|
|
17
|
-
<div class="commit-lock" >
|
|
18
|
-
<%= link_to stack_commit_path(commit.stack, commit), class: 'action-lock-commit', data: {tooltip: t('commit.lock')} do %>
|
|
19
|
-
<i class="icon icon--lock"></i>
|
|
20
|
-
<% end %>
|
|
21
|
-
<%= link_to stack_commit_path(commit.stack, commit), class: 'action-unlock-commit', data: {tooltip: t('commit.unlock'), confirm: t('commit.confirm_unlock')} do %>
|
|
22
|
-
<i class="icon icon--lock"></i>
|
|
2
|
+
<% cache commit do %>
|
|
3
|
+
<% cache commit.author do %>
|
|
4
|
+
<%= render 'shipit/shared/author', author: commit.author %>
|
|
23
5
|
<% end %>
|
|
24
|
-
|
|
6
|
+
|
|
7
|
+
<%= render commit.status %>
|
|
8
|
+
<div class="commit-details">
|
|
9
|
+
<span class="commit-title"><%= render_commit_message_with_link commit %></span>
|
|
10
|
+
<p class="commit-meta">
|
|
11
|
+
<span class="sha"><%= render_commit_id_link(commit) %></span>
|
|
12
|
+
<% if commit.additions? && commit.deletions? %>
|
|
13
|
+
<span class="code-additions">+<%= commit.additions %></span>
|
|
14
|
+
<span class="code-deletions">-<%= commit.deletions %></span>
|
|
15
|
+
<% end %>
|
|
16
|
+
</p>
|
|
17
|
+
<p class="commit-meta">
|
|
18
|
+
<%= timeago_tag(commit.committed_at, force: true) %>
|
|
19
|
+
</p>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="commit-lock" >
|
|
22
|
+
<%= link_to stack_commit_path(commit.stack, commit), class: 'action-lock-commit', data: {tooltip: t('commit.lock')} do %>
|
|
23
|
+
<i class="icon icon--lock"></i>
|
|
24
|
+
<% end %>
|
|
25
|
+
<%= link_to stack_commit_path(commit.stack, commit), class: 'action-unlock-commit', data: {tooltip: t('commit.unlock'), confirm: t('commit.confirm_unlock')} do %>
|
|
26
|
+
<i class="icon icon--lock"></i>
|
|
27
|
+
<% end %>
|
|
28
|
+
</div>
|
|
29
|
+
<% end %>
|
|
25
30
|
<div class="commit-actions">
|
|
26
31
|
<%= deploy_button(commit) %>
|
|
27
32
|
</div>
|
|
@@ -1,34 +1,39 @@
|
|
|
1
1
|
<%- read_only ||= false -%>
|
|
2
2
|
|
|
3
3
|
<li class="task deploy" id="task-<%= deploy.id %>" data-status="<%= deploy.status %>">
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
<
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
4
|
+
<% cache deploy do %>
|
|
5
|
+
<% cache deploy.author do %>
|
|
6
|
+
<%= render 'shipit/shared/author', author: deploy.author %>
|
|
7
|
+
<% end %>
|
|
8
|
+
<a href="<%= stack_deploy_path(@stack, deploy) %>" class="status status--<%= deploy.status %>" data-tooltip="<%= deploy.status.capitalize %>">
|
|
9
|
+
<i class="status__icon"></i>
|
|
10
|
+
<span class="visually-hidden"><%= deploy.status %></span>
|
|
11
|
+
</a>
|
|
12
|
+
<div class="commit-details">
|
|
13
|
+
<span class="commit-title">
|
|
14
|
+
<a href="<%= stack_deploy_path(@stack, deploy) %>">
|
|
15
|
+
<%= render_commit_message deploy.until_commit %>
|
|
16
|
+
</a>
|
|
17
|
+
</span>
|
|
18
|
+
<p class="commit-meta">
|
|
19
|
+
<%= deploy.rollback? ? 'rolled back' : 'deployed' %>
|
|
20
|
+
<span class="sha"><%= link_to_github_deploy(deploy) %></span>
|
|
21
|
+
<span class="code-additions">+<%= deploy.additions %></span>
|
|
22
|
+
<span class="code-deletions">-<%= deploy.deletions %></span>
|
|
23
|
+
</p>
|
|
24
|
+
<p class="commit-meta">
|
|
25
|
+
<% if read_only %>
|
|
26
|
+
<span class="utc-timecode">on <%= deploy.created_at.strftime('%Y-%m-%d %H:%M:%S') %> UTC</span>
|
|
27
|
+
<% else %>
|
|
28
|
+
<%= timeago_tag(deploy.created_at, force: true) %>
|
|
29
|
+
<% end %>
|
|
30
|
+
<% if deploy.duration? %>
|
|
31
|
+
in <%= deploy.duration %>
|
|
32
|
+
<% end %>
|
|
33
|
+
</p>
|
|
34
|
+
</div>
|
|
35
|
+
<% end %>
|
|
36
|
+
|
|
32
37
|
<% unless read_only %>
|
|
33
38
|
<div class="commit-actions">
|
|
34
39
|
<% if deploy.rollbackable? %>
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
<% if !stack.ignore_ci && !stack.ci_enabled? %>
|
|
2
|
+
<div class="banner">
|
|
3
|
+
<div class="banner__inner wrapper">
|
|
4
|
+
<div class="banner__content">
|
|
5
|
+
<h2 class="banner__title">Heads Up!</h2>
|
|
6
|
+
<p class="banner__text">
|
|
7
|
+
This stack is not configured for CI, but it currently requires a passing build to be able to deploy a commit.<br>
|
|
8
|
+
You can either <a href="https://developer.github.com/v3/repos/statuses/">configure your CI to push statuses to GitHub</a>,
|
|
9
|
+
or ignore CI and deploy any commits you want.
|
|
10
|
+
</p>
|
|
11
|
+
<%= button_to "Ignore CI", stack_path(stack, stack: {ignore_ci: true}, return_to: stack_path(stack)), method: :patch, class: 'banner__btn btn' %>
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
<% end %>
|
|
16
|
+
|
|
17
|
+
<% if stack.inaccessible? %>
|
|
18
|
+
<div class="banner banner--red">
|
|
19
|
+
<div class="banner__inner wrapper">
|
|
20
|
+
<div class="banner__content">
|
|
21
|
+
<h2 class="banner__title">This repository or branch seems to be missing!</h2>
|
|
22
|
+
<p class="banner__text">
|
|
23
|
+
<%= link_to stack.github_repo_name, github_repo_url(stack.repo_owner, stack.repo_name) %>
|
|
24
|
+
has been inaccessible for <%= time_ago_in_words(stack.inaccessible_since) %>.
|
|
25
|
+
|
|
26
|
+
This could be a permission issue, or the repository have been deleted on GitHub.
|
|
27
|
+
</p>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
<% end %>
|
|
32
|
+
|
|
33
|
+
<% if stack.locked? %>
|
|
34
|
+
<div class="banner banner--orange">
|
|
35
|
+
<div class="banner__inner wrapper">
|
|
36
|
+
<div class="banner__content">
|
|
37
|
+
<h2 class="banner__title">
|
|
38
|
+
<i class="icon icon--lock"></i>
|
|
39
|
+
Deploys are locked by <%= stack.lock_author.name %>
|
|
40
|
+
</h2>
|
|
41
|
+
<p class="banner__text">
|
|
42
|
+
<%= auto_link emojify(stack.lock_reason) %>
|
|
43
|
+
</p>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
<% end %>
|
|
48
|
+
|
|
49
|
+
<% if stack.continuous_delivery_delayed? %>
|
|
50
|
+
<div class="banner">
|
|
51
|
+
<div class="banner__inner wrapper">
|
|
52
|
+
<div class="banner__content">
|
|
53
|
+
<h2 class="banner__title">Continuous Delivery Delayed!</h2>
|
|
54
|
+
<p class="banner__text">
|
|
55
|
+
Continuous Delivery for this stack is currently paused because
|
|
56
|
+
<%= link_to 'the pre-deploy checks failed', stack_commit_checks_path(stack, sha: stack.next_commit_to_deploy.sha) %>.
|
|
57
|
+
You can either wait for them to pass, or trigger a deploy manually.
|
|
58
|
+
</p>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
<% end %>
|
|
@@ -1,69 +1,7 @@
|
|
|
1
1
|
<% subscribe events_path(channels: ["stack.#{@stack.id}"]), '#layout-content' %>
|
|
2
2
|
|
|
3
|
-
<%= render partial: 'shipit/stacks/header', locals: {
|
|
4
|
-
|
|
5
|
-
<% if !@stack.ignore_ci && !@stack.ci_enabled? %>
|
|
6
|
-
<div class="banner">
|
|
7
|
-
<div class="banner__inner wrapper">
|
|
8
|
-
<div class="banner__content">
|
|
9
|
-
<h2 class="banner__title">Heads Up!</h2>
|
|
10
|
-
<p class="banner__text">
|
|
11
|
-
This stack is not configured for CI, but it currently requires a passing build to be able to deploy a commit.<br>
|
|
12
|
-
You can either <a href="https://developer.github.com/v3/repos/statuses/">configure your CI to push statuses to GitHub</a>,
|
|
13
|
-
or ignore CI and deploy any commits you want.
|
|
14
|
-
</p>
|
|
15
|
-
<%= button_to "Ignore CI", stack_path(@stack, stack: {ignore_ci: true}, return_to: stack_path(@stack)), method: :patch, class: 'banner__btn btn' %>
|
|
16
|
-
</div>
|
|
17
|
-
</div>
|
|
18
|
-
</div>
|
|
19
|
-
<% end %>
|
|
20
|
-
|
|
21
|
-
<% if @stack.inaccessible? %>
|
|
22
|
-
<div class="banner banner--red">
|
|
23
|
-
<div class="banner__inner wrapper">
|
|
24
|
-
<div class="banner__content">
|
|
25
|
-
<h2 class="banner__title">This repository seems to be missing!</h2>
|
|
26
|
-
<p class="banner__text">
|
|
27
|
-
<%= link_to @stack.github_repo_name, github_repo_url(@stack.repo_owner, @stack.repo_name) %>
|
|
28
|
-
has been inaccessible for <%= time_ago_in_words(@stack.inaccessible_since) %>.
|
|
29
|
-
|
|
30
|
-
This could be a permission issue, or the repository have been deleted on GitHub.
|
|
31
|
-
</p>
|
|
32
|
-
</div>
|
|
33
|
-
</div>
|
|
34
|
-
</div>
|
|
35
|
-
<% end %>
|
|
36
|
-
|
|
37
|
-
<% if @stack.locked? %>
|
|
38
|
-
<div class="banner banner--orange">
|
|
39
|
-
<div class="banner__inner wrapper">
|
|
40
|
-
<div class="banner__content">
|
|
41
|
-
<h2 class="banner__title">
|
|
42
|
-
<i class="icon icon--lock"></i>
|
|
43
|
-
Deploys are locked by <%= @stack.lock_author.name %>
|
|
44
|
-
</h2>
|
|
45
|
-
<p class="banner__text">
|
|
46
|
-
<%= auto_link emojify(@stack.lock_reason) %>
|
|
47
|
-
</p>
|
|
48
|
-
</div>
|
|
49
|
-
</div>
|
|
50
|
-
</div>
|
|
51
|
-
<% end %>
|
|
52
|
-
|
|
53
|
-
<% if @stack.continuous_delivery_delayed? %>
|
|
54
|
-
<div class="banner">
|
|
55
|
-
<div class="banner__inner wrapper">
|
|
56
|
-
<div class="banner__content">
|
|
57
|
-
<h2 class="banner__title">Continuous Delivery Delayed!</h2>
|
|
58
|
-
<p class="banner__text">
|
|
59
|
-
Continuous Delivery for this stack is currently paused because
|
|
60
|
-
<%= link_to 'the pre-deploy checks failed', stack_commit_checks_path(@stack, sha: @stack.next_commit_to_deploy.sha) %>.
|
|
61
|
-
You can either wait for them to pass, or trigger a deploy manually.
|
|
62
|
-
</p>
|
|
63
|
-
</div>
|
|
64
|
-
</div>
|
|
65
|
-
</div>
|
|
66
|
-
<% end %>
|
|
3
|
+
<%= render partial: 'shipit/stacks/header', locals: {stack: @stack} %>
|
|
4
|
+
<%= render partial: 'shipit/stacks/banners', locals: {stack: @stack} %>
|
|
67
5
|
|
|
68
6
|
<div class="wrapper">
|
|
69
7
|
<section>
|
|
@@ -83,10 +21,14 @@
|
|
|
83
21
|
</ul>
|
|
84
22
|
</section>
|
|
85
23
|
|
|
86
|
-
|
|
87
|
-
<
|
|
88
|
-
<
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
24
|
+
<% cache @stack do %>
|
|
25
|
+
<section>
|
|
26
|
+
<header class="section-header">
|
|
27
|
+
<h2>Previous Deploys</h2>
|
|
28
|
+
</header>
|
|
29
|
+
<ul class="commit-list">
|
|
30
|
+
<%= render @tasks %>
|
|
31
|
+
</ul>
|
|
32
|
+
</section>
|
|
33
|
+
<% end %>
|
|
92
34
|
</div>
|
|
@@ -1,27 +1,31 @@
|
|
|
1
|
-
|
|
1
|
+
<% cache task do %>
|
|
2
|
+
<%- read_only ||= false -%>
|
|
2
3
|
|
|
3
|
-
<li class="task" id="task-<%= task.id %>" data-status="<%= task.status %>">
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
<
|
|
8
|
-
|
|
4
|
+
<li class="task" id="task-<%= task.id %>" data-status="<%= task.status %>">
|
|
5
|
+
<% cache task.author do %>
|
|
6
|
+
<%= render 'shipit/shared/author', author: task.author %>
|
|
7
|
+
<% end %>
|
|
8
|
+
<a href="<%= stack_task_path(@stack, task) %>" class="status status--<%= task.status %>" data-tooltip="<%= task.status.capitalize %>">
|
|
9
|
+
<i class="status__icon"></i>
|
|
10
|
+
<span class="visually-hidden"><%= task.status %></span>
|
|
11
|
+
</a>
|
|
9
12
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
</li>
|
|
13
|
+
<div class="commit-details">
|
|
14
|
+
<span class="commit-title">
|
|
15
|
+
<a href="<%= stack_task_path(@stack, task) %>">
|
|
16
|
+
<%= task.definition.action %>
|
|
17
|
+
</a>
|
|
18
|
+
</span>
|
|
19
|
+
<p class="commit-meta">
|
|
20
|
+
ran a command
|
|
21
|
+
</p>
|
|
22
|
+
<p class="commit-meta">
|
|
23
|
+
<% if read_only %>
|
|
24
|
+
<span class="utc-timecode">on <%= task.created_at.strftime('%Y-%m-%d %H:%M:%S') %> UTC</span>
|
|
25
|
+
<% else %>
|
|
26
|
+
<%= timeago_tag(task.created_at, force: true) %>
|
|
27
|
+
<% end %>
|
|
28
|
+
</p>
|
|
29
|
+
</div>
|
|
30
|
+
</li>
|
|
31
|
+
<% end %>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
class FixTasksIndexByStatus < ActiveRecord::Migration[5.1]
|
|
2
|
+
def up
|
|
3
|
+
remove_index :tasks, name: :index_tasks_by_stack_and_status
|
|
4
|
+
add_index :tasks, [:stack_id, :status, :type], name: :index_tasks_by_stack_and_status
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def down
|
|
8
|
+
remove_index :tasks, name: :index_tasks_by_stack_and_status
|
|
9
|
+
add_index :tasks, [:type, :stack_id, :status], name: :index_tasks_by_stack_and_status
|
|
10
|
+
end
|
|
11
|
+
end
|
data/lib/shipit.rb
CHANGED
data/lib/shipit/version.rb
CHANGED
|
@@ -23,6 +23,8 @@ module Shipit
|
|
|
23
23
|
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
|
24
24
|
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
|
25
25
|
# config.i18n.default_locale = :de
|
|
26
|
+
|
|
27
|
+
Rails.application.config.active_record.belongs_to_required_by_default = true
|
|
26
28
|
end
|
|
27
29
|
end
|
|
28
30
|
|
|
Binary file
|
data/test/dummy/db/schema.rb
CHANGED
|
@@ -10,33 +10,33 @@
|
|
|
10
10
|
#
|
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
|
12
12
|
|
|
13
|
-
ActiveRecord::Schema.define(version:
|
|
13
|
+
ActiveRecord::Schema.define(version: 20170524125249) do
|
|
14
14
|
|
|
15
15
|
create_table "api_clients", force: :cascade do |t|
|
|
16
|
-
t.text
|
|
17
|
-
t.integer
|
|
18
|
-
t.datetime "created_at",
|
|
19
|
-
t.datetime "updated_at",
|
|
20
|
-
t.string
|
|
21
|
-
t.integer
|
|
16
|
+
t.text "permissions", limit: 65535
|
|
17
|
+
t.integer "creator_id", limit: 4
|
|
18
|
+
t.datetime "created_at", null: false
|
|
19
|
+
t.datetime "updated_at", null: false
|
|
20
|
+
t.string "name", limit: 255, default: ""
|
|
21
|
+
t.integer "stack_id", limit: 4
|
|
22
22
|
t.index ["creator_id"], name: "index_api_clients_on_creator_id"
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
create_table "commit_deployment_statuses", force: :cascade do |t|
|
|
26
|
-
t.integer
|
|
27
|
-
t.string
|
|
28
|
-
t.integer
|
|
29
|
-
t.string
|
|
30
|
-
t.datetime "created_at",
|
|
31
|
-
t.datetime "updated_at",
|
|
26
|
+
t.integer "commit_deployment_id"
|
|
27
|
+
t.string "status"
|
|
28
|
+
t.integer "github_id"
|
|
29
|
+
t.string "api_url"
|
|
30
|
+
t.datetime "created_at", null: false
|
|
31
|
+
t.datetime "updated_at", null: false
|
|
32
32
|
t.index ["commit_deployment_id"], name: "index_commit_deployment_statuses_on_commit_deployment_id"
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
create_table "commit_deployments", force: :cascade do |t|
|
|
36
|
-
t.integer
|
|
37
|
-
t.integer
|
|
38
|
-
t.integer
|
|
39
|
-
t.string
|
|
36
|
+
t.integer "commit_id"
|
|
37
|
+
t.integer "task_id"
|
|
38
|
+
t.integer "github_id"
|
|
39
|
+
t.string "api_url"
|
|
40
40
|
t.datetime "created_at", null: false
|
|
41
41
|
t.datetime "updated_at", null: false
|
|
42
42
|
t.index ["commit_id", "task_id"], name: "index_commit_deployments_on_commit_id_and_task_id", unique: true
|
|
@@ -44,111 +44,113 @@ ActiveRecord::Schema.define(version: 20170320124156) do
|
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
create_table "commits", force: :cascade do |t|
|
|
47
|
-
t.integer
|
|
48
|
-
t.integer
|
|
49
|
-
t.integer
|
|
50
|
-
t.string
|
|
51
|
-
t.text
|
|
47
|
+
t.integer "stack_id", limit: 4, null: false
|
|
48
|
+
t.integer "author_id", limit: 4, null: false
|
|
49
|
+
t.integer "committer_id", limit: 4, null: false
|
|
50
|
+
t.string "sha", limit: 40, null: false
|
|
51
|
+
t.text "message", limit: 65535, null: false
|
|
52
52
|
t.datetime "created_at"
|
|
53
53
|
t.datetime "updated_at"
|
|
54
|
-
t.boolean
|
|
55
|
-
t.datetime "authored_at",
|
|
56
|
-
t.datetime "committed_at",
|
|
57
|
-
t.integer
|
|
58
|
-
t.integer
|
|
59
|
-
t.integer
|
|
60
|
-
t.string
|
|
61
|
-
t.integer
|
|
62
|
-
t.boolean
|
|
54
|
+
t.boolean "detached", default: false, null: false
|
|
55
|
+
t.datetime "authored_at", null: false
|
|
56
|
+
t.datetime "committed_at", null: false
|
|
57
|
+
t.integer "additions", limit: 4
|
|
58
|
+
t.integer "deletions", limit: 4
|
|
59
|
+
t.integer "pull_request_number"
|
|
60
|
+
t.string "pull_request_title", limit: 1024
|
|
61
|
+
t.integer "pull_request_id"
|
|
62
|
+
t.boolean "locked", default: false, null: false
|
|
63
63
|
t.index ["author_id"], name: "index_commits_on_author_id"
|
|
64
64
|
t.index ["committer_id"], name: "index_commits_on_committer_id"
|
|
65
65
|
t.index ["created_at"], name: "index_commits_on_created_at"
|
|
66
|
+
t.index ["sha", "stack_id"], name: "index_commits_on_sha_and_stack_id", unique: true
|
|
66
67
|
t.index ["stack_id"], name: "index_commits_on_stack_id"
|
|
67
68
|
end
|
|
68
69
|
|
|
69
70
|
create_table "deliveries", force: :cascade do |t|
|
|
70
|
-
t.integer
|
|
71
|
-
t.string
|
|
72
|
-
t.string
|
|
73
|
-
t.string
|
|
74
|
-
t.string
|
|
75
|
-
t.text
|
|
76
|
-
t.integer
|
|
77
|
-
t.text
|
|
78
|
-
t.text
|
|
71
|
+
t.integer "hook_id", limit: 4, null: false
|
|
72
|
+
t.string "status", limit: 50, default: "pending", null: false
|
|
73
|
+
t.string "url", limit: 4096, null: false
|
|
74
|
+
t.string "content_type", limit: 255, null: false
|
|
75
|
+
t.string "event", limit: 50, null: false
|
|
76
|
+
t.text "payload", limit: 16777215, null: false
|
|
77
|
+
t.integer "response_code", limit: 4
|
|
78
|
+
t.text "response_headers", limit: 65535
|
|
79
|
+
t.text "response_body", limit: 65535
|
|
79
80
|
t.datetime "delivered_at"
|
|
80
|
-
t.datetime "created_at",
|
|
81
|
-
t.datetime "updated_at",
|
|
81
|
+
t.datetime "created_at", null: false
|
|
82
|
+
t.datetime "updated_at", null: false
|
|
82
83
|
t.index ["created_at"], name: "index_deliveries_on_created_at"
|
|
83
84
|
t.index ["hook_id", "event", "status"], name: "index_deliveries_on_hook_id_and_event_and_status"
|
|
84
85
|
t.index ["status", "event"], name: "index_deliveries_on_status_and_event"
|
|
85
86
|
end
|
|
86
87
|
|
|
87
88
|
create_table "github_hooks", force: :cascade do |t|
|
|
88
|
-
t.integer
|
|
89
|
-
t.integer
|
|
90
|
-
t.string
|
|
89
|
+
t.integer "stack_id", limit: 4
|
|
90
|
+
t.integer "github_id", limit: 4
|
|
91
|
+
t.string "event", limit: 50, null: false
|
|
91
92
|
t.datetime "created_at"
|
|
92
93
|
t.datetime "updated_at"
|
|
93
|
-
t.string
|
|
94
|
-
t.string
|
|
95
|
-
t.string
|
|
96
|
-
t.string
|
|
94
|
+
t.string "secret", limit: 255
|
|
95
|
+
t.string "api_url", limit: 255
|
|
96
|
+
t.string "type", limit: 255
|
|
97
|
+
t.string "organization", limit: 39
|
|
97
98
|
t.index ["organization", "event"], name: "index_github_hooks_on_organization_and_event", unique: true
|
|
98
99
|
t.index ["stack_id", "event"], name: "index_github_hooks_on_stack_id_and_event", unique: true
|
|
99
100
|
end
|
|
100
101
|
|
|
101
102
|
create_table "hooks", force: :cascade do |t|
|
|
102
|
-
t.integer
|
|
103
|
-
t.string
|
|
104
|
-
t.string
|
|
105
|
-
t.string
|
|
106
|
-
t.string
|
|
107
|
-
t.boolean
|
|
108
|
-
t.datetime "created_at",
|
|
109
|
-
t.datetime "updated_at",
|
|
103
|
+
t.integer "stack_id", limit: 4
|
|
104
|
+
t.string "delivery_url", limit: 4096, null: false
|
|
105
|
+
t.string "content_type", limit: 4, default: "json", null: false
|
|
106
|
+
t.string "secret", limit: 255
|
|
107
|
+
t.string "events", limit: 255, default: "", null: false
|
|
108
|
+
t.boolean "insecure_ssl", default: false, null: false
|
|
109
|
+
t.datetime "created_at", null: false
|
|
110
|
+
t.datetime "updated_at", null: false
|
|
110
111
|
t.index ["stack_id"], name: "index_hooks_on_stack_id"
|
|
111
112
|
end
|
|
112
113
|
|
|
113
114
|
create_table "memberships", force: :cascade do |t|
|
|
114
|
-
t.integer
|
|
115
|
-
t.integer
|
|
116
|
-
t.datetime "created_at",
|
|
117
|
-
t.datetime "updated_at",
|
|
115
|
+
t.integer "team_id", limit: 4
|
|
116
|
+
t.integer "user_id", limit: 4
|
|
117
|
+
t.datetime "created_at", null: false
|
|
118
|
+
t.datetime "updated_at", null: false
|
|
118
119
|
t.index ["team_id", "user_id"], name: "index_memberships_on_team_id_and_user_id", unique: true
|
|
119
120
|
t.index ["user_id"], name: "index_memberships_on_user_id"
|
|
120
121
|
end
|
|
121
122
|
|
|
122
123
|
create_table "output_chunks", force: :cascade do |t|
|
|
123
|
-
t.integer
|
|
124
|
-
t.text
|
|
124
|
+
t.integer "task_id", limit: 4
|
|
125
|
+
t.text "text", limit: 16777215
|
|
125
126
|
t.datetime "created_at"
|
|
126
127
|
t.datetime "updated_at"
|
|
127
128
|
t.index ["task_id"], name: "index_output_chunks_on_task_id"
|
|
128
129
|
end
|
|
129
130
|
|
|
130
131
|
create_table "pull_requests", force: :cascade do |t|
|
|
131
|
-
t.integer
|
|
132
|
-
t.integer
|
|
133
|
-
t.string
|
|
134
|
-
t.integer
|
|
135
|
-
t.string
|
|
136
|
-
t.string
|
|
137
|
-
t.integer
|
|
138
|
-
t.boolean
|
|
139
|
-
t.integer
|
|
140
|
-
t.integer
|
|
141
|
-
t.string
|
|
142
|
-
t.string
|
|
143
|
-
t.datetime "merge_requested_at",
|
|
144
|
-
t.integer
|
|
145
|
-
t.datetime "created_at",
|
|
146
|
-
t.datetime "updated_at",
|
|
147
|
-
t.string
|
|
132
|
+
t.integer "stack_id", null: false
|
|
133
|
+
t.integer "number", null: false
|
|
134
|
+
t.string "title", limit: 256
|
|
135
|
+
t.integer "github_id", limit: 8
|
|
136
|
+
t.string "api_url", limit: 1024
|
|
137
|
+
t.string "state"
|
|
138
|
+
t.integer "head_id"
|
|
139
|
+
t.boolean "mergeable"
|
|
140
|
+
t.integer "additions", default: 0, null: false
|
|
141
|
+
t.integer "deletions", default: 0, null: false
|
|
142
|
+
t.string "merge_status", limit: 30, null: false
|
|
143
|
+
t.string "rejection_reason"
|
|
144
|
+
t.datetime "merge_requested_at", null: false
|
|
145
|
+
t.integer "merge_requested_by_id"
|
|
146
|
+
t.datetime "created_at", null: false
|
|
147
|
+
t.datetime "updated_at", null: false
|
|
148
|
+
t.string "branch"
|
|
148
149
|
t.datetime "revalidated_at"
|
|
149
150
|
t.datetime "merged_at"
|
|
150
151
|
t.index ["head_id"], name: "index_pull_requests_on_head_id"
|
|
151
152
|
t.index ["merge_requested_by_id"], name: "index_pull_requests_on_merge_requested_by_id"
|
|
153
|
+
t.index ["merge_status"], name: "index_pull_requests_on_merge_status"
|
|
152
154
|
t.index ["stack_id", "github_id"], name: "index_pull_requests_on_stack_id_and_github_id", unique: true
|
|
153
155
|
t.index ["stack_id", "merge_status"], name: "index_pull_requests_on_stack_id_and_merge_status"
|
|
154
156
|
t.index ["stack_id", "number"], name: "index_pull_requests_on_stack_id_and_number", unique: true
|
|
@@ -156,94 +158,94 @@ ActiveRecord::Schema.define(version: 20170320124156) do
|
|
|
156
158
|
end
|
|
157
159
|
|
|
158
160
|
create_table "stacks", force: :cascade do |t|
|
|
159
|
-
t.string
|
|
160
|
-
t.string
|
|
161
|
-
t.string
|
|
161
|
+
t.string "repo_name", limit: 100, null: false
|
|
162
|
+
t.string "repo_owner", limit: 39, null: false
|
|
163
|
+
t.string "environment", limit: 50, default: "production", null: false
|
|
162
164
|
t.datetime "created_at"
|
|
163
165
|
t.datetime "updated_at"
|
|
164
|
-
t.string
|
|
165
|
-
t.string
|
|
166
|
-
t.string
|
|
167
|
-
t.integer
|
|
168
|
-
t.boolean
|
|
169
|
-
t.integer
|
|
170
|
-
t.text
|
|
171
|
-
t.integer
|
|
172
|
-
t.boolean
|
|
166
|
+
t.string "branch", limit: 255, default: "master", null: false
|
|
167
|
+
t.string "deploy_url", limit: 255
|
|
168
|
+
t.string "lock_reason", limit: 4096
|
|
169
|
+
t.integer "tasks_count", limit: 4, default: 0, null: false
|
|
170
|
+
t.boolean "continuous_deployment", default: false, null: false
|
|
171
|
+
t.integer "undeployed_commits_count", limit: 4, default: 0, null: false
|
|
172
|
+
t.text "cached_deploy_spec", limit: 65535
|
|
173
|
+
t.integer "lock_author_id", limit: 4
|
|
174
|
+
t.boolean "ignore_ci"
|
|
173
175
|
t.datetime "inaccessible_since"
|
|
174
|
-
t.integer
|
|
176
|
+
t.integer "estimated_deploy_duration", default: 1, null: false
|
|
175
177
|
t.datetime "continuous_delivery_delayed_since"
|
|
176
178
|
t.datetime "locked_since"
|
|
177
|
-
t.boolean
|
|
179
|
+
t.boolean "merge_queue_enabled", default: false, null: false
|
|
178
180
|
t.datetime "last_deployed_at"
|
|
179
181
|
t.index ["repo_owner", "repo_name", "environment"], name: "stack_unicity", unique: true
|
|
180
182
|
end
|
|
181
183
|
|
|
182
184
|
create_table "statuses", force: :cascade do |t|
|
|
183
|
-
t.string
|
|
184
|
-
t.string
|
|
185
|
-
t.text
|
|
186
|
-
t.string
|
|
187
|
-
t.integer
|
|
185
|
+
t.string "state", limit: 255
|
|
186
|
+
t.string "target_url", limit: 255
|
|
187
|
+
t.text "description", limit: 65535
|
|
188
|
+
t.string "context", limit: 255, default: "default", null: false
|
|
189
|
+
t.integer "commit_id", limit: 4
|
|
188
190
|
t.datetime "created_at"
|
|
189
191
|
t.datetime "updated_at"
|
|
190
|
-
t.integer
|
|
192
|
+
t.integer "stack_id", null: false
|
|
191
193
|
t.index ["commit_id"], name: "index_statuses_on_commit_id"
|
|
192
194
|
end
|
|
193
195
|
|
|
194
196
|
create_table "tasks", force: :cascade do |t|
|
|
195
|
-
t.integer
|
|
196
|
-
t.integer
|
|
197
|
-
t.integer
|
|
198
|
-
t.string
|
|
197
|
+
t.integer "stack_id", limit: 4, null: false
|
|
198
|
+
t.integer "since_commit_id", limit: 4, null: false
|
|
199
|
+
t.integer "until_commit_id", limit: 4, null: false
|
|
200
|
+
t.string "status", limit: 10, default: "pending", null: false
|
|
199
201
|
t.datetime "created_at"
|
|
200
202
|
t.datetime "updated_at"
|
|
201
|
-
t.integer
|
|
202
|
-
t.boolean
|
|
203
|
-
t.string
|
|
204
|
-
t.integer
|
|
205
|
-
t.integer
|
|
206
|
-
t.integer
|
|
207
|
-
t.text
|
|
208
|
-
t.binary
|
|
209
|
-
t.boolean
|
|
210
|
-
t.text
|
|
211
|
-
t.integer
|
|
212
|
-
t.boolean
|
|
203
|
+
t.integer "user_id", limit: 4
|
|
204
|
+
t.boolean "rolled_up", default: false, null: false
|
|
205
|
+
t.string "type", limit: 20
|
|
206
|
+
t.integer "parent_id", limit: 4
|
|
207
|
+
t.integer "additions", limit: 4, default: 0
|
|
208
|
+
t.integer "deletions", limit: 4, default: 0
|
|
209
|
+
t.text "definition", limit: 65535
|
|
210
|
+
t.binary "gzip_output"
|
|
211
|
+
t.boolean "rollback_once_aborted", default: false, null: false
|
|
212
|
+
t.text "env"
|
|
213
|
+
t.integer "confirmations", default: 0, null: false
|
|
214
|
+
t.boolean "allow_concurrency", default: false, null: false
|
|
213
215
|
t.datetime "started_at"
|
|
214
216
|
t.datetime "ended_at"
|
|
215
217
|
t.index ["rolled_up", "created_at", "status"], name: "index_tasks_on_rolled_up_and_created_at_and_status"
|
|
216
218
|
t.index ["since_commit_id"], name: "index_tasks_on_since_commit_id"
|
|
217
219
|
t.index ["stack_id", "allow_concurrency", "status"], name: "index_active_tasks"
|
|
218
220
|
t.index ["stack_id", "allow_concurrency"], name: "index_tasks_on_stack_id_and_allow_concurrency"
|
|
221
|
+
t.index ["stack_id", "status", "type"], name: "index_tasks_by_stack_and_status"
|
|
219
222
|
t.index ["type", "stack_id", "parent_id"], name: "index_tasks_by_stack_and_parent"
|
|
220
|
-
t.index ["type", "stack_id", "status"], name: "index_tasks_by_stack_and_status"
|
|
221
223
|
t.index ["until_commit_id"], name: "index_tasks_on_until_commit_id"
|
|
222
224
|
t.index ["user_id"], name: "index_tasks_on_user_id"
|
|
223
225
|
end
|
|
224
226
|
|
|
225
227
|
create_table "teams", force: :cascade do |t|
|
|
226
|
-
t.integer
|
|
227
|
-
t.string
|
|
228
|
-
t.string
|
|
229
|
-
t.string
|
|
230
|
-
t.string
|
|
231
|
-
t.datetime "created_at",
|
|
232
|
-
t.datetime "updated_at",
|
|
228
|
+
t.integer "github_id", limit: 4
|
|
229
|
+
t.string "api_url", limit: 255
|
|
230
|
+
t.string "slug", limit: 50
|
|
231
|
+
t.string "name", limit: 255
|
|
232
|
+
t.string "organization", limit: 39
|
|
233
|
+
t.datetime "created_at", null: false
|
|
234
|
+
t.datetime "updated_at", null: false
|
|
233
235
|
t.index ["organization", "slug"], name: "index_teams_on_organization_and_slug", unique: true
|
|
234
236
|
end
|
|
235
237
|
|
|
236
238
|
create_table "users", force: :cascade do |t|
|
|
237
|
-
t.integer
|
|
238
|
-
t.string
|
|
239
|
-
t.string
|
|
240
|
-
t.string
|
|
241
|
-
t.string
|
|
239
|
+
t.integer "github_id", limit: 4
|
|
240
|
+
t.string "name", limit: 255, null: false
|
|
241
|
+
t.string "email", limit: 255
|
|
242
|
+
t.string "login", limit: 39
|
|
243
|
+
t.string "api_url", limit: 255
|
|
242
244
|
t.datetime "created_at"
|
|
243
245
|
t.datetime "updated_at"
|
|
244
|
-
t.string
|
|
245
|
-
t.string
|
|
246
|
-
t.string
|
|
246
|
+
t.string "avatar_url", limit: 255
|
|
247
|
+
t.string "encrypted_github_access_token"
|
|
248
|
+
t.string "encrypted_github_access_token_iv"
|
|
247
249
|
t.index ["github_id"], name: "index_users_on_github_id"
|
|
248
250
|
t.index ["login"], name: "index_users_on_login"
|
|
249
251
|
t.index ["updated_at"], name: "index_users_on_updated_at"
|
data/test/dummy/db/seeds.rb
CHANGED
|
@@ -152,10 +152,10 @@ module Shipit
|
|
|
152
152
|
)
|
|
153
153
|
end
|
|
154
154
|
|
|
155
|
-
def
|
|
156
|
-
100.times
|
|
155
|
+
def write_output(task)
|
|
156
|
+
100.times do
|
|
157
157
|
status = "\x1b[%s;1m[ %s ]\x1b[0m" % [["31", "error"], ["32", "success"]].sample
|
|
158
|
-
|
|
158
|
+
task.write("[ #{Faker::Date.backward} ] #{status} #{Faker::Lorem.paragraph}\n")
|
|
159
159
|
end
|
|
160
160
|
end
|
|
161
161
|
|
|
@@ -165,28 +165,29 @@ module Shipit
|
|
|
165
165
|
since_commit_id: commits.first.id,
|
|
166
166
|
until_commit_id: commits.last.id,
|
|
167
167
|
status: "success",
|
|
168
|
-
chunks: create_chunks,
|
|
169
168
|
additions: Faker::Number.number(3),
|
|
170
169
|
deletions: Faker::Number.number(3),
|
|
171
170
|
started_at: Random.rand(15.minutes.to_i).seconds.ago,
|
|
172
171
|
ended_at: Time.now.utc,
|
|
173
172
|
user: users.sample,
|
|
174
173
|
)
|
|
174
|
+
write_output(deploy)
|
|
175
175
|
deploy.write("$ cap production deploy SHA=yolo")
|
|
176
176
|
end
|
|
177
177
|
|
|
178
178
|
last_deploy = stack.deploys.last
|
|
179
|
-
stack.rollbacks.create!(
|
|
179
|
+
rollback = stack.rollbacks.create!(
|
|
180
|
+
deploy: last_deploy,
|
|
180
181
|
since_commit_id: last_deploy.until_commit_id,
|
|
181
182
|
until_commit_id: last_deploy.since_commit_id,
|
|
182
183
|
status: 'success',
|
|
183
184
|
user: users.sample,
|
|
184
|
-
chunks: create_chunks,
|
|
185
185
|
started_at: Random.rand(15.minutes.to_i).seconds.ago,
|
|
186
186
|
ended_at: Time.now.utc,
|
|
187
187
|
)
|
|
188
|
+
write_output(rollback)
|
|
188
189
|
|
|
189
|
-
stack.tasks.create!(
|
|
190
|
+
task = stack.tasks.create!(
|
|
190
191
|
since_commit_id: stack.last_deployed_commit.id,
|
|
191
192
|
until_commit_id: stack.last_deployed_commit.id,
|
|
192
193
|
status: "success",
|
|
@@ -196,9 +197,9 @@ module Shipit
|
|
|
196
197
|
'description' => 'Restart unicorns and resques',
|
|
197
198
|
'steps' => ['cap $ENVIRONMENT restart'],
|
|
198
199
|
),
|
|
199
|
-
chunks: create_chunks,
|
|
200
200
|
started_at: Random.rand(15.minutes.to_i).seconds.ago,
|
|
201
201
|
ended_at: Time.now.utc,
|
|
202
202
|
)
|
|
203
|
+
write_output(rollback)
|
|
203
204
|
end
|
|
204
205
|
end
|
data/test/dummy/db/test.sqlite3
CHANGED
|
Binary file
|
data/test/models/commits_test.rb
CHANGED
|
@@ -16,9 +16,9 @@ module Shipit
|
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
test "#pull_request? detects pull requests with unusual branch names" do
|
|
19
|
-
@pr.message = "Merge pull request #7 from Shopify/bump
|
|
19
|
+
@pr.message = "Merge pull request #7 from Shopify/bump-👉-v1.0.1\n\nBump 👉 v1.0.1"
|
|
20
20
|
assert @pr.pull_request?
|
|
21
|
-
assert_equal "Bump
|
|
21
|
+
assert_equal "Bump 👉 v1.0.1", @pr.pull_request_title
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
test "#pull_request_number extract the pull request id from the message" do
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: shipit-engine
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.19.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jean Boussier
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-
|
|
11
|
+
date: 2017-06-28 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|
|
@@ -612,6 +612,7 @@ files:
|
|
|
612
612
|
- app/views/shipit/pull_requests/_pull_request.html.erb
|
|
613
613
|
- app/views/shipit/pull_requests/index.html.erb
|
|
614
614
|
- app/views/shipit/shared/_author.html.erb
|
|
615
|
+
- app/views/shipit/stacks/_banners.html.erb
|
|
615
616
|
- app/views/shipit/stacks/_header.html.erb
|
|
616
617
|
- app/views/shipit/stacks/index.html.erb
|
|
617
618
|
- app/views/shipit/stacks/new.html.erb
|
|
@@ -671,6 +672,9 @@ files:
|
|
|
671
672
|
- db/migrate/20170310164315_add_merged_at_on_pull_requests.rb
|
|
672
673
|
- db/migrate/20170314145604_add_last_deployed_at_to_stack.rb
|
|
673
674
|
- db/migrate/20170320124156_add_locked_to_commits.rb
|
|
675
|
+
- db/migrate/20170524084548_index_pull_requests_on_merge_status.rb
|
|
676
|
+
- db/migrate/20170524104615_index_commits_on_stack_id_and_sha.rb
|
|
677
|
+
- db/migrate/20170524125249_fix_tasks_index_by_status.rb
|
|
674
678
|
- lib/shipit-engine.rb
|
|
675
679
|
- lib/shipit.rb
|
|
676
680
|
- lib/shipit/command.rb
|