shipit-engine 0.20.1 → 0.21.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 +5 -5
- data/README.md +43 -6
- data/app/assets/stylesheets/_base/_base.scss +4 -0
- data/app/assets/stylesheets/_pages/_commits.scss +3 -1
- data/app/assets/stylesheets/_pages/_deploy.scss +4 -2
- data/app/controllers/concerns/shipit/authentication.rb +1 -1
- data/app/controllers/shipit/api/base_controller.rb +6 -1
- data/app/controllers/shipit/api/pull_requests_controller.rb +1 -1
- data/app/controllers/shipit/commit_checks_controller.rb +1 -1
- data/app/controllers/shipit/shipit_controller.rb +1 -5
- data/app/controllers/shipit/stacks_controller.rb +2 -0
- data/app/controllers/shipit/tasks_controller.rb +1 -1
- data/app/controllers/shipit/webhooks_controller.rb +2 -2
- data/app/helpers/shipit/deploys_helper.rb +9 -0
- data/app/helpers/shipit/shipit_helper.rb +17 -15
- data/app/helpers/shipit/stacks_helper.rb +6 -1
- data/app/jobs/shipit/destroy_stack_job.rb +4 -2
- data/app/jobs/shipit/fetch_deployed_revision_job.rb +1 -1
- data/app/jobs/shipit/github_sync_job.rb +1 -1
- data/app/jobs/shipit/merge_pull_requests_job.rb +3 -3
- data/app/jobs/shipit/perform_task_job.rb +3 -0
- data/app/jobs/shipit/purge_old_deliveries_job.rb +1 -0
- data/app/models/shipit/api_client.rb +1 -1
- data/app/models/shipit/commit.rb +29 -6
- data/app/models/shipit/commit_deployment.rb +1 -1
- data/app/models/shipit/commit_deployment_status.rb +1 -1
- data/app/models/shipit/deploy_spec.rb +19 -2
- data/app/models/shipit/deploy_spec/bundler_discovery.rb +1 -10
- data/app/models/shipit/deploy_spec/file_system.rb +6 -0
- data/app/models/shipit/deploy_spec/kubernetes_discovery.rb +1 -1
- data/app/models/shipit/deploy_spec/lerna_discovery.rb +85 -0
- data/app/models/shipit/deploy_spec/npm_discovery.rb +103 -5
- data/app/models/shipit/deploy_spec/pypi_discovery.rb +4 -2
- data/app/models/shipit/deploy_spec/rubygems_discovery.rb +4 -2
- data/app/models/shipit/duration.rb +1 -1
- data/app/models/shipit/github_status.rb +1 -1
- data/app/models/shipit/hook.rb +4 -5
- data/app/models/shipit/output_chunk.rb +1 -1
- data/app/models/shipit/pull_request.rb +36 -15
- data/app/models/shipit/stack.rb +15 -9
- data/app/models/shipit/status/common.rb +4 -0
- data/app/models/shipit/status/group.rb +4 -0
- data/app/models/shipit/task.rb +20 -8
- data/app/models/shipit/task_definition.rb +2 -2
- data/app/models/shipit/undeployed_commit.rb +13 -2
- data/app/models/shipit/user.rb +1 -1
- data/app/serializers/shipit/pull_request_serializer.rb +1 -1
- data/app/serializers/shipit/tail_task_serializer.rb +1 -1
- data/app/views/shipit/ccmenu/project.xml.builder +9 -8
- data/app/views/shipit/deploys/_deploy.html.erb +3 -2
- data/app/views/shipit/stacks/_banners.html.erb +4 -1
- data/app/views/shipit/stacks/settings.html.erb +4 -0
- data/app/views/shipit/statuses/_group.html.erb +1 -1
- data/app/views/shipit/statuses/_status.html.erb +1 -1
- data/app/views/shipit/tasks/_task.html.erb +1 -2
- data/config/locales/en.yml +2 -0
- data/config/secrets.development.example.yml +0 -4
- data/config/secrets.development.shopify.yml +1 -5
- data/db/migrate/20170904103242_reindex_deliveries.rb +7 -0
- data/db/migrate/20171120161420_add_base_info_to_pull_request.rb +7 -0
- data/db/migrate/20180202220850_add_aborted_by_to_tasks.rb +5 -0
- data/lib/shipit.rb +15 -23
- data/lib/shipit/command.rb +11 -3
- data/lib/shipit/engine.rb +0 -4
- data/lib/shipit/stack_commands.rb +3 -1
- data/lib/shipit/version.rb +1 -1
- data/lib/snippets/assert-lerna-fixed-version-tag +21 -0
- data/lib/snippets/assert-lerna-independent-version-tags +28 -0
- data/lib/snippets/generate-local-npmrc +19 -0
- data/lib/snippets/misconfigured-npm-publish-config +8 -0
- data/lib/snippets/publish-lerna-independent-packages +39 -0
- data/lib/snippets/push-to-heroku +5 -5
- data/lib/tasks/cron.rake +1 -1
- data/lib/tasks/dev.rake +1 -1
- data/test/controllers/api/deploys_controller_test.rb +19 -0
- data/test/controllers/api/stacks_controller_test.rb +1 -1
- data/test/controllers/github_authentication_controller_test.rb +1 -1
- data/test/controllers/stacks_controller_test.rb +10 -0
- data/test/controllers/tasks_controller_test.rb +2 -0
- data/test/controllers/webhooks_controller_test.rb +0 -7
- data/test/dummy/config/secrets.yml +0 -2
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/schema.rb +5 -3
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/fixtures/shipit/commits.yml +53 -0
- data/test/fixtures/shipit/pull_requests.yml +52 -0
- data/test/fixtures/shipit/stacks.yml +35 -0
- data/test/fixtures/shipit/statuses.yml +27 -0
- data/test/fixtures/shipit/tasks.yml +14 -0
- data/test/helpers/queries_helper.rb +1 -1
- data/test/jobs/merge_pull_requests_job_test.rb +19 -2
- data/test/jobs/perform_task_job_test.rb +26 -2
- data/test/models/commits_test.rb +55 -6
- data/test/models/deploy_spec_test.rb +288 -52
- data/test/models/deploys_test.rb +7 -7
- data/test/models/hook_test.rb +4 -3
- data/test/models/pull_request_test.rb +78 -24
- data/test/models/stacks_test.rb +21 -17
- data/test/models/status/group_test.rb +6 -0
- data/test/models/undeployed_commits_test.rb +9 -0
- data/test/models/users_test.rb +2 -2
- data/test/test_helper.rb +1 -1
- metadata +211 -222
- data/app/assets/javascripts/shipit_bs.js.coffee +0 -2
- data/app/assets/stylesheets/shipit_bs.scss +0 -22
- data/app/views/bootstrap/shipit/missing_settings.html.erb +0 -97
- data/app/views/bootstrap/shipit/stacks/new.html.erb +0 -44
- data/app/views/layouts/shipit_bootstrap.html.erb +0 -44
- data/lib/shipit/template_renderer_extension.rb +0 -16
data/lib/shipit/command.rb
CHANGED
|
@@ -8,11 +8,19 @@ module Shipit
|
|
|
8
8
|
MAX_READ = 64.kilobytes
|
|
9
9
|
|
|
10
10
|
Error = Class.new(StandardError)
|
|
11
|
-
Failed = Class.new(Error)
|
|
12
11
|
NotFound = Class.new(Error)
|
|
13
12
|
Denied = Class.new(Error)
|
|
14
13
|
TimedOut = Class.new(Error)
|
|
15
14
|
|
|
15
|
+
class Failed < Error
|
|
16
|
+
attr_reader :exit_code
|
|
17
|
+
|
|
18
|
+
def initialize(message, exit_code)
|
|
19
|
+
super(message)
|
|
20
|
+
@exit_code = exit_code
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
16
24
|
attr_reader :out, :code, :chdir, :env, :args, :pid, :timeout
|
|
17
25
|
|
|
18
26
|
def initialize(*args, default_timeout: Shipit.default_inactivity_timeout, env: {}, chdir:)
|
|
@@ -44,7 +52,7 @@ module Shipit
|
|
|
44
52
|
end
|
|
45
53
|
|
|
46
54
|
def success?
|
|
47
|
-
code
|
|
55
|
+
!code.nil? && code.zero?
|
|
48
56
|
end
|
|
49
57
|
|
|
50
58
|
def exit_message
|
|
@@ -121,7 +129,7 @@ module Shipit
|
|
|
121
129
|
|
|
122
130
|
def stream!(&block)
|
|
123
131
|
stream(&block)
|
|
124
|
-
raise Failed.new(exit_message) unless success?
|
|
132
|
+
raise Failed.new(exit_message, code) unless success?
|
|
125
133
|
self
|
|
126
134
|
end
|
|
127
135
|
|
data/lib/shipit/engine.rb
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
require 'bootstrap'
|
|
2
|
-
|
|
3
1
|
module Shipit
|
|
4
2
|
class Engine < ::Rails::Engine
|
|
5
3
|
isolate_namespace Shipit
|
|
@@ -17,8 +15,6 @@ module Shipit
|
|
|
17
15
|
task.js
|
|
18
16
|
shipit.js
|
|
19
17
|
shipit.css
|
|
20
|
-
shipit_bs.js
|
|
21
|
-
shipit_bs.css
|
|
22
18
|
)
|
|
23
19
|
app.config.assets.precompile << proc do |path|
|
|
24
20
|
path =~ %r{\Aplugins/[\-\w]+\.(js|css)\Z}
|
|
@@ -26,7 +26,7 @@ module Shipit
|
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def fetch_deployed_revision
|
|
29
|
-
with_temporary_working_directory do |dir|
|
|
29
|
+
with_temporary_working_directory(commit: @stack.commits.last) do |dir|
|
|
30
30
|
spec = DeploySpec::FileSystem.new(dir, @stack.environment)
|
|
31
31
|
outputs = spec.fetch_deployed_revision_steps!.map do |command_line|
|
|
32
32
|
Command.new(command_line, env: env, chdir: dir).run
|
|
@@ -42,6 +42,8 @@ module Shipit
|
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
def with_temporary_working_directory(commit: nil)
|
|
45
|
+
commit ||= @stack.last_deployed_commit.presence || @stack.commits.last
|
|
46
|
+
|
|
45
47
|
@stack.acquire_git_cache_lock do
|
|
46
48
|
if !commit || !fetched?(commit).tap(&:run).success?
|
|
47
49
|
fetch.run!
|
data/lib/shipit/version.rb
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
VERSION=$(node --eval "console.log(require('./lerna.json').version);")
|
|
4
|
+
echo -e "\033[0;32mTrying to publish version $VERSION\033[0m"
|
|
5
|
+
|
|
6
|
+
git tag | grep "^v$VERSION$" > /dev/null
|
|
7
|
+
if [ $? != '0' ]; then
|
|
8
|
+
echo -e "\033[1;31mYou need to create the \033[0;33mv$VERSION\033[1;31m tag first.\033[0m"
|
|
9
|
+
exit 1
|
|
10
|
+
fi
|
|
11
|
+
|
|
12
|
+
TAG_REV=$(git rev-list -n1 "v$VERSION")
|
|
13
|
+
HEAD_REV=$(git rev-parse HEAD)
|
|
14
|
+
|
|
15
|
+
if [ "$TAG_REV" != "$HEAD_REV" ]; then
|
|
16
|
+
echo -e "\033[1;31mYou're attempting to publish \033[0;33m$HEAD_REV\033[1;31m as \033[0;33mv$VERSION\033[1;31m but it already points to \033[0;33m$TAG_REV\033[1;31m.\033[0m"
|
|
17
|
+
exit 1
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
echo -e "\033[0;32mAll clear!\033[0m"
|
|
21
|
+
exit 0
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
TAGS=$(git tag --points-at HEAD)
|
|
4
|
+
|
|
5
|
+
if [ -z "$TAGS" ]; then
|
|
6
|
+
HEAD_REV=$(git rev-parse HEAD)
|
|
7
|
+
echo -e "\033[1;31mNo tags associated with $HEAD_REV. Did you push your commits and tags?\033[0m"
|
|
8
|
+
exit 1
|
|
9
|
+
fi
|
|
10
|
+
|
|
11
|
+
for TAG in $TAGS
|
|
12
|
+
do
|
|
13
|
+
if [[ "${TAG}" == @* ]]; then
|
|
14
|
+
TAG=$(echo "$TAG" | cut -d \/ -f 2)
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
PACKAGE_NAME=$(echo "$TAG" | cut -d \@ -f 1)
|
|
18
|
+
TAG_PACKAGE_VERSION=$(echo "$TAG" | cut -d \@ -f 2)
|
|
19
|
+
ACTUAL_PACKAGE_VERSION=$(node -e "console.log(require('./packages/$PACKAGE_NAME/package.json').version)")
|
|
20
|
+
|
|
21
|
+
if [ "$TAG_PACKAGE_VERSION" != "$ACTUAL_PACKAGE_VERSION" ]; then
|
|
22
|
+
echo -e "\033[1;31m$PACKAGE_NAME is tagged as $TAG_PACKAGE_VERSION, but its package.json version is $ACTUAL_PACKAGE_VERSION.\033[0m"
|
|
23
|
+
exit 1
|
|
24
|
+
fi
|
|
25
|
+
done
|
|
26
|
+
|
|
27
|
+
echo -e "\033[0;32mAll clear!\033[0m"
|
|
28
|
+
exit 0
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const {resolve} = require('path');
|
|
3
|
+
const {existsSync, writeFileSync, readFileSync} = require('fs');
|
|
4
|
+
const npmrc = resolve('.', '.npmrc');
|
|
5
|
+
const npmrcContents = process.argv[2];
|
|
6
|
+
|
|
7
|
+
if (!npmrcContents) {
|
|
8
|
+
console.error('npmrc contents not specified.');
|
|
9
|
+
process.exit(1);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
if (existsSync(npmrc)) {
|
|
13
|
+
console.log('.npmrc already exists.')
|
|
14
|
+
} else {
|
|
15
|
+
writeFileSync(npmrc, npmrcContents)
|
|
16
|
+
|
|
17
|
+
console.log('\nGenerated .npmrc:');
|
|
18
|
+
console.log(readFileSync(npmrc, {encoding: 'utf8'}))
|
|
19
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
echo -e "\033[1;31m Misconfigured package.json, please ensure the following has been met:\n \033[0m"
|
|
4
|
+
|
|
5
|
+
echo -e "\033[1;31m * Please add a publishConfig with an access setting in your package.json. e.g.,\033[0m"
|
|
6
|
+
echo -e "\n\033[1;31m\t\"publishConfig:\" {\n\t \"access\": \"<public|restricted>\" \n\t} \033[0m"
|
|
7
|
+
echo -e "\n\033[1;31m * If your package is private, ensure your the package name is scoped (@organization/package) \033[0m"
|
|
8
|
+
exit 1
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const {resolve} = require('path');
|
|
3
|
+
const {execSync} = require('child_process')
|
|
4
|
+
const Repository = require(resolve('.', 'node_modules', 'lerna', 'lib', 'Repository'));
|
|
5
|
+
const PackageUtilities = require(resolve('.', 'node_modules', 'lerna', 'lib', 'PackageUtilities'));
|
|
6
|
+
|
|
7
|
+
function npmTag(version) {
|
|
8
|
+
const isNext = ['-beta', '-alpha', '-rc', '-next'].some(distributionType =>
|
|
9
|
+
version.includes(distributionType),
|
|
10
|
+
);
|
|
11
|
+
return isNext ? 'next' : 'latest';
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const taggedPackages = execSync('git tag --points-at HEAD')
|
|
15
|
+
.toString()
|
|
16
|
+
.trim()
|
|
17
|
+
.split('\n')
|
|
18
|
+
.map(tag => {
|
|
19
|
+
if (tag.startsWith('@')) {
|
|
20
|
+
return `@${tag.split('@')[1]}`;
|
|
21
|
+
}
|
|
22
|
+
return tag.split('@')[0];
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
const repository = new Repository('.');
|
|
26
|
+
const unsortedPackages = PackageUtilities.getPackages({rootPath: '.', packageConfigs: repository.packageConfigs});
|
|
27
|
+
const packages = PackageUtilities.topologicallyBatchPackages(unsortedPackages, true)
|
|
28
|
+
.reduce((acc, packageGroup) => [...acc, ...packageGroup], [])
|
|
29
|
+
.filter(({name}) => taggedPackages.includes(name));
|
|
30
|
+
|
|
31
|
+
packages.forEach(({name, version}) => {
|
|
32
|
+
const command = `node_modules/.bin/lerna publish --yes --npm-client=npm --skip-npm=false --skip-git --force-publish=${name} --repo-version=${version} --scope=${name} --npm-tag=${npmTag(
|
|
33
|
+
version,
|
|
34
|
+
)}`;
|
|
35
|
+
|
|
36
|
+
// eslint-disable-next-line no-console
|
|
37
|
+
console.log(command);
|
|
38
|
+
require('child_process').execSync(command);
|
|
39
|
+
});
|
data/lib/snippets/push-to-heroku
CHANGED
|
@@ -23,17 +23,17 @@ if [[ -z "${HEROKU_APP}" ]]; then
|
|
|
23
23
|
exit 1;
|
|
24
24
|
fi
|
|
25
25
|
|
|
26
|
-
echo "$HEROKU_RELEASES" |
|
|
26
|
+
echo "$HEROKU_RELEASES" | grep 'Current: \(v[0-9]\+\)' >/dev/null
|
|
27
27
|
|
|
28
28
|
if [[ $? -ne 0 ]]; then
|
|
29
29
|
red "Error detecting current heroku release. Message from 'heroku releases':"
|
|
30
30
|
echo "${HEROKU_RELEASES}"
|
|
31
31
|
red "Please contact a heroku collaborator for ${HEROKU_APP}:"
|
|
32
|
-
heroku
|
|
32
|
+
heroku access --app $HEROKU_APP
|
|
33
33
|
exit 1;
|
|
34
34
|
fi
|
|
35
35
|
|
|
36
|
-
HEROKU_LAST_GOOD_RELEASE=`echo "$HEROKU_RELEASES" |
|
|
36
|
+
HEROKU_LAST_GOOD_RELEASE=`echo "$HEROKU_RELEASES" | grep 'Current: \(v[0-9]\+\)' | sed -e 's/.*\(v[0-9]\+\).*/\1/'`
|
|
37
37
|
green "Current heroku release: ${HEROKU_LAST_GOOD_RELEASE}"
|
|
38
38
|
|
|
39
39
|
green "Pushing to heroku."
|
|
@@ -41,7 +41,7 @@ $GIT_COMMAND
|
|
|
41
41
|
if [[ $? -ne 0 ]]; then
|
|
42
42
|
red "Heroku push rejected. See message above."
|
|
43
43
|
red "Please contact a heroku collaborator for ${HEROKU_APP}:"
|
|
44
|
-
heroku
|
|
44
|
+
heroku access --app $HEROKU_APP
|
|
45
45
|
exit 1;
|
|
46
46
|
fi
|
|
47
47
|
|
|
@@ -58,7 +58,7 @@ if [[ "${MIGRATION_STATUS}" != "" ]]; then
|
|
|
58
58
|
if [[ "${POST_MIGRATION_STATUS}" != "" ]]; then
|
|
59
59
|
red "Migration failed! This is bad."
|
|
60
60
|
red "Please contact a heroku collaborator for ${HEROKU_APP}:"
|
|
61
|
-
heroku
|
|
61
|
+
heroku access --app $HEROKU_APP
|
|
62
62
|
red "The app ${HEROKU_APP} will now be reverted to its last working version ${HEROKU_LAST_GOOD_RELEASE}."
|
|
63
63
|
heroku releases:rollback $HEROKU_LAST_GOOD_RELEASE --app $HEROKU_APP
|
|
64
64
|
red "Abort."
|
data/lib/tasks/cron.rake
CHANGED
data/lib/tasks/dev.rake
CHANGED
|
@@ -40,6 +40,13 @@ module Shipit
|
|
|
40
40
|
deploy.user == @user
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
+
test "#create normalises the claimed user" do
|
|
44
|
+
request.headers['X-Shipit-User'] = @user.login.swapcase
|
|
45
|
+
post :create, params: {stack_id: @stack.to_param, sha: @commit.sha}
|
|
46
|
+
deploy = Deploy.last
|
|
47
|
+
assert_equal deploy.user, @user
|
|
48
|
+
end
|
|
49
|
+
|
|
43
50
|
test "#create renders a 422 if the sha isn't found" do
|
|
44
51
|
post :create, params: {stack_id: @stack.to_param, sha: '123443543545'}
|
|
45
52
|
assert_response :unprocessable_entity
|
|
@@ -52,6 +59,18 @@ module Shipit
|
|
|
52
59
|
assert_json 'errors', 'sha' => ['is too short (minimum is 6 characters)']
|
|
53
60
|
end
|
|
54
61
|
|
|
62
|
+
test "#create renders a 409 if a concurrent task is already running" do
|
|
63
|
+
assert_difference -> { @stack.deploys.count }, 1 do
|
|
64
|
+
post :create, params: {stack_id: @stack.to_param, sha: @commit.sha}
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
assert_no_difference -> { @stack.deploys.count } do
|
|
68
|
+
post :create, params: {stack_id: @stack.to_param, sha: @commit.sha}
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
assert_response :conflict
|
|
72
|
+
end
|
|
73
|
+
|
|
55
74
|
test "#create refuses to deploy locked stacks" do
|
|
56
75
|
@stack.update!(lock_reason: 'Something broken')
|
|
57
76
|
|
|
@@ -149,6 +149,11 @@ module Shipit
|
|
|
149
149
|
assert_redirected_to stack_settings_path(@stack)
|
|
150
150
|
end
|
|
151
151
|
|
|
152
|
+
test "#sync_webhooks displays a flash message" do
|
|
153
|
+
post :sync_webhooks, params: {id: @stack.to_param}
|
|
154
|
+
assert_equal 'Webhooks syncing scheduled', flash[:success]
|
|
155
|
+
end
|
|
156
|
+
|
|
152
157
|
test "#clear_git_cache queues a ClearGitCacheJob" do
|
|
153
158
|
assert_enqueued_with(job: ClearGitCacheJob, args: [@stack]) do
|
|
154
159
|
post :clear_git_cache, params: {id: @stack.to_param}
|
|
@@ -156,6 +161,11 @@ module Shipit
|
|
|
156
161
|
assert_redirected_to stack_settings_path(@stack)
|
|
157
162
|
end
|
|
158
163
|
|
|
164
|
+
test "#clear_git_cache displays a flash message" do
|
|
165
|
+
post :clear_git_cache, params: {id: @stack.to_param}
|
|
166
|
+
assert_equal 'Git Cache clearing scheduled', flash[:success]
|
|
167
|
+
end
|
|
168
|
+
|
|
159
169
|
test "#update redirects to return_to parameter" do
|
|
160
170
|
patch :update, params: {id: @stack.to_param, stack: {ignore_ci: false}, return_to: stack_path(@stack)}
|
|
161
171
|
assert_redirected_to stack_path(@stack)
|
|
@@ -70,6 +70,7 @@ module Shipit
|
|
|
70
70
|
@task.reload
|
|
71
71
|
assert_response :success
|
|
72
72
|
assert_equal 'aborting', @task.reload.status
|
|
73
|
+
assert_equal shipit_users(:walrus).id, @task.aborted_by_id
|
|
73
74
|
assert_equal false, @task.rollback_once_aborted?
|
|
74
75
|
end
|
|
75
76
|
|
|
@@ -81,6 +82,7 @@ module Shipit
|
|
|
81
82
|
@task.reload
|
|
82
83
|
assert_response :success
|
|
83
84
|
assert_equal 'aborting', @task.status
|
|
85
|
+
assert_equal shipit_users(:walrus).id, @task.aborted_by_id
|
|
84
86
|
assert_equal true, @task.rollback_once_aborted?
|
|
85
87
|
end
|
|
86
88
|
|
|
@@ -150,13 +150,6 @@ module Shipit
|
|
|
150
150
|
end
|
|
151
151
|
end
|
|
152
152
|
|
|
153
|
-
test ":membership can append a user membership for an organization with capitals" do
|
|
154
|
-
assert_difference -> { Membership.count }, 1 do
|
|
155
|
-
post :membership, params: membership_params.merge(organization: {login: 'Shopify'}, member: {login: 'bob'})
|
|
156
|
-
assert_response :ok
|
|
157
|
-
end
|
|
158
|
-
end
|
|
159
|
-
|
|
160
153
|
private
|
|
161
154
|
|
|
162
155
|
def membership_params
|
|
Binary file
|
data/test/dummy/db/schema.rb
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
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: 20180202220850) do
|
|
14
14
|
|
|
15
15
|
create_table "api_clients", force: :cascade do |t|
|
|
16
16
|
t.text "permissions", limit: 65535
|
|
@@ -80,9 +80,8 @@ ActiveRecord::Schema.define(version: 20170629141736) do
|
|
|
80
80
|
t.datetime "delivered_at"
|
|
81
81
|
t.datetime "created_at", null: false
|
|
82
82
|
t.datetime "updated_at", null: false
|
|
83
|
-
t.index ["created_at"], name: "index_deliveries_on_created_at"
|
|
84
83
|
t.index ["hook_id", "event", "status"], name: "index_deliveries_on_hook_id_and_event_and_status"
|
|
85
|
-
t.index ["
|
|
84
|
+
t.index ["hook_id", "status"], name: "index_deliveries_on_hook_id_and_status"
|
|
86
85
|
end
|
|
87
86
|
|
|
88
87
|
create_table "github_hooks", force: :cascade do |t|
|
|
@@ -148,6 +147,8 @@ ActiveRecord::Schema.define(version: 20170629141736) do
|
|
|
148
147
|
t.string "branch"
|
|
149
148
|
t.datetime "revalidated_at"
|
|
150
149
|
t.datetime "merged_at"
|
|
150
|
+
t.string "base_ref", limit: 1024
|
|
151
|
+
t.integer "base_commit_id"
|
|
151
152
|
t.index ["head_id"], name: "index_pull_requests_on_head_id"
|
|
152
153
|
t.index ["merge_requested_by_id"], name: "index_pull_requests_on_merge_requested_by_id"
|
|
153
154
|
t.index ["merge_status"], name: "index_pull_requests_on_merge_status"
|
|
@@ -215,6 +216,7 @@ ActiveRecord::Schema.define(version: 20170629141736) do
|
|
|
215
216
|
t.datetime "started_at"
|
|
216
217
|
t.datetime "ended_at"
|
|
217
218
|
t.boolean "ignored_safeties", default: false, null: false
|
|
219
|
+
t.integer "aborted_by_id"
|
|
218
220
|
t.index ["rolled_up", "created_at", "status"], name: "index_tasks_on_rolled_up_and_created_at_and_status"
|
|
219
221
|
t.index ["since_commit_id"], name: "index_tasks_on_since_commit_id"
|
|
220
222
|
t.index ["stack_id", "allow_concurrency", "status"], name: "index_active_tasks"
|
data/test/dummy/db/test.sqlite3
CHANGED
|
Binary file
|
|
@@ -102,3 +102,56 @@ shipit_pending_pr_head:
|
|
|
102
102
|
deletions: 24
|
|
103
103
|
updated_at: <%= 8.days.ago.to_s(:db) %>
|
|
104
104
|
detached: true
|
|
105
|
+
|
|
106
|
+
cyclimse_merged:
|
|
107
|
+
id: 9
|
|
108
|
+
sha: 772b4795871e4a45aa17d53f02aa45d0
|
|
109
|
+
message: "Merge pull request #66 from cyclimse/yoloshipit\n\nyoloshipit!"
|
|
110
|
+
stack: cyclimse
|
|
111
|
+
author: walrus
|
|
112
|
+
committer: walrus
|
|
113
|
+
authored_at: <%= 4.days.ago.to_s(:db) %>
|
|
114
|
+
committed_at: <%= 3.days.ago.to_s(:db) %>
|
|
115
|
+
additions: 420
|
|
116
|
+
deletions: 342
|
|
117
|
+
updated_at: <%= 8.days.ago.to_s(:db) %>
|
|
118
|
+
pull_request_id: 99
|
|
119
|
+
|
|
120
|
+
soc_first:
|
|
121
|
+
id: 101
|
|
122
|
+
sha: 5e9278037b872fd9a6690523e411ecb3aa181355
|
|
123
|
+
message: "lets go"
|
|
124
|
+
stack: soc
|
|
125
|
+
author: walrus
|
|
126
|
+
committer: walrus
|
|
127
|
+
authored_at: <%= 10.days.ago.to_s(:db) %>
|
|
128
|
+
committed_at: <%= 9.days.ago.to_s(:db) %>
|
|
129
|
+
additions: 42
|
|
130
|
+
deletions: 24
|
|
131
|
+
updated_at: <%= 8.days.ago.to_s(:db) %>
|
|
132
|
+
|
|
133
|
+
soc_second:
|
|
134
|
+
id: 102
|
|
135
|
+
sha: e790fd8b5f2be05d1fedb763a3605ee461c39074
|
|
136
|
+
message: "sheep it!"
|
|
137
|
+
stack: soc
|
|
138
|
+
author: walrus
|
|
139
|
+
committer: walrus
|
|
140
|
+
authored_at: <%= 8.days.ago.to_s(:db) %>
|
|
141
|
+
committed_at: <%= 7.days.ago.to_s(:db) %>
|
|
142
|
+
additions: 1
|
|
143
|
+
deletions: 1
|
|
144
|
+
updated_at: <%= 8.days.ago.to_s(:db) %>
|
|
145
|
+
|
|
146
|
+
soc_third:
|
|
147
|
+
id: 103
|
|
148
|
+
sha: 477578b362bf2b4df5903e1c7960929361c39074
|
|
149
|
+
message: "fix it!"
|
|
150
|
+
stack: soc
|
|
151
|
+
author: walrus
|
|
152
|
+
committer: walrus
|
|
153
|
+
authored_at: <%= 6.days.ago.to_s(:db) %>
|
|
154
|
+
committed_at: <%= 5.days.ago.to_s(:db) %>
|
|
155
|
+
additions: 12
|
|
156
|
+
deletions: 64
|
|
157
|
+
updated_at: <%= 8.days.ago.to_s(:db) %>
|