Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
36d6b6f8
Commit
36d6b6f8
authored
6 years ago
by
Kamil Trzciński
Committed by
Dylan Griffith
6 years ago
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Refactor validations and make runner factory by default to be instance-wide runner
parent
cb23e111
Changes
19
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
134 additions
and
137 deletions
+134
-137
app/models/ci/runner.rb
app/models/ci/runner.rb
+25
-10
spec/controllers/groups/runners_controller_spec.rb
spec/controllers/groups/runners_controller_spec.rb
+1
-2
spec/controllers/projects/runners_controller_spec.rb
spec/controllers/projects/runners_controller_spec.rb
+1
-2
spec/controllers/projects/settings/ci_cd_controller_spec.rb
spec/controllers/projects/settings/ci_cd_controller_spec.rb
+4
-4
spec/factories/ci/runner_projects.rb
spec/factories/ci/runner_projects.rb
+1
-1
spec/factories/ci/runners.rb
spec/factories/ci/runners.rb
+5
-15
spec/features/admin/admin_runners_spec.rb
spec/features/admin/admin_runners_spec.rb
+10
-7
spec/features/runners_spec.rb
spec/features/runners_spec.rb
+2
-7
spec/finders/runner_jobs_finder_spec.rb
spec/finders/runner_jobs_finder_spec.rb
+1
-1
spec/models/ci/build_spec.rb
spec/models/ci/build_spec.rb
+2
-8
spec/models/ci/pipeline_spec.rb
spec/models/ci/pipeline_spec.rb
+1
-1
spec/models/ci/runner_spec.rb
spec/models/ci/runner_spec.rb
+68
-60
spec/models/project_spec.rb
spec/models/project_spec.rb
+5
-5
spec/models/user_spec.rb
spec/models/user_spec.rb
+1
-2
spec/requests/api/runner_spec.rb
spec/requests/api/runner_spec.rb
+2
-3
spec/requests/api/runners_spec.rb
spec/requests/api/runners_spec.rb
+1
-1
spec/serializers/runner_entity_spec.rb
spec/serializers/runner_entity_spec.rb
+2
-2
spec/services/ci/register_job_service_spec.rb
spec/services/ci/register_job_service_spec.rb
+1
-1
spec/services/ci/update_build_queue_service_spec.rb
spec/services/ci/update_build_queue_service_spec.rb
+1
-5
No files found.
app/models/ci/runner.rb
View file @
36d6b6f8
...
...
@@ -57,12 +57,15 @@ module Ci
end
validate
:tag_constraints
validate
:no_projects
,
unless: :project_type?
validate
:no_groups
,
unless: :group_type?
validate
:only_one_group
,
if: :group_type?
validates
:access_level
,
presence:
true
validates
:runner_type
,
presence:
true
validate
:no_projects
,
unless: :project_type?
validate
:no_groups
,
unless: :group_type?
validate
:any_project
,
if: :project_type?
validate
:exactly_one_group
,
if: :group_type?
validate
:is_shared_is_valid
acts_as_taggable
after_destroy
:cleanup_runner_queue
...
...
@@ -118,8 +121,8 @@ module Ci
raise
ArgumentError
,
'Transitioning a group runner to a project runner is not supported'
end
self
.
save
project
.
runner_projects
.
create
(
runner_id:
self
.
id
)
self
.
projects
<<
project
self
.
save!
end
def
display_name
...
...
@@ -258,19 +261,31 @@ module Ci
def
no_projects
if
projects
.
any?
errors
.
add
(
:runner
,
'cannot
assign project to a non-project runner
'
)
errors
.
add
(
:runner
,
'cannot
have projects assigned
'
)
end
end
def
no_groups
if
groups
.
any?
errors
.
add
(
:runner
,
'cannot assign group to a non-group runner'
)
errors
.
add
(
:runner
,
'cannot have groups assigned'
)
end
end
def
any_project
unless
projects
.
any?
errors
.
add
(
:runner
,
'needs to be assigned to at least one project'
)
end
end
def
exactly_one_group
unless
groups
.
one?
errors
.
add
(
:runner
,
'needs to be assigned to exactly one group'
)
end
end
def
only_one_group
if
groups
.
many
?
errors
.
add
(
:
runner
,
'can only be assigned to one group
'
)
def
is_shared_is_valid
unless
is_shared?
==
instance_type
?
errors
.
add
(
:
is_shared
,
'is not equal to instance_type?
'
)
end
end
...
...
This diff is collapsed.
Click to expand it.
spec/controllers/groups/runners_controller_spec.rb
View file @
36d6b6f8
...
...
@@ -3,7 +3,7 @@ require 'spec_helper'
describe
Groups
::
RunnersController
do
let
(
:user
)
{
create
(
:user
)
}
let
(
:group
)
{
create
(
:group
)
}
let
(
:runner
)
{
create
(
:ci_runner
,
:group
)
}
let
(
:runner
)
{
create
(
:ci_runner
,
:group
,
groups:
[
group
]
)
}
let
(
:params
)
do
{
...
...
@@ -15,7 +15,6 @@ describe Groups::RunnersController do
before
do
sign_in
(
user
)
group
.
add_master
(
user
)
group
.
runners
<<
runner
end
describe
'#update'
do
...
...
This diff is collapsed.
Click to expand it.
spec/controllers/projects/runners_controller_spec.rb
View file @
36d6b6f8
...
...
@@ -3,7 +3,7 @@ require 'spec_helper'
describe
Projects
::
RunnersController
do
let
(
:user
)
{
create
(
:user
)
}
let
(
:project
)
{
create
(
:project
)
}
let
(
:runner
)
{
create
(
:ci_runner
)
}
let
(
:runner
)
{
create
(
:ci_runner
,
:project
,
projects:
[
project
]
)
}
let
(
:params
)
do
{
...
...
@@ -16,7 +16,6 @@ describe Projects::RunnersController do
before
do
sign_in
(
user
)
project
.
add_master
(
user
)
project
.
runners
<<
runner
end
describe
'#update'
do
...
...
This diff is collapsed.
Click to expand it.
spec/controllers/projects/settings/ci_cd_controller_spec.rb
View file @
36d6b6f8
...
...
@@ -19,12 +19,12 @@ describe Projects::Settings::CiCdController do
end
context
'with group runners'
do
let
(
:group_runner
)
{
create
(
:ci_runner
,
runner_type: :group_type
)
}
let
(
:parent_group
)
{
create
(
:group
)
}
let
(
:group
)
{
create
(
:group
,
runners:
[
group_runner
],
parent:
parent_group
)
}
let
(
:group
)
{
create
(
:group
,
parent:
parent_group
)
}
let
(
:group_runner
)
{
create
(
:ci_runner
,
:group
,
groups:
[
group
])
}
let
(
:other_project
)
{
create
(
:project
,
group:
group
)
}
let!
(
:project_runner
)
{
create
(
:ci_runner
,
projects:
[
other_project
],
runner_type: :project_type
)
}
let!
(
:shared_runner
)
{
create
(
:ci_runner
,
:
shared
)
}
let!
(
:project_runner
)
{
create
(
:ci_runner
,
:project
,
projects:
[
other_project
]
)
}
let!
(
:shared_runner
)
{
create
(
:ci_runner
,
:
instance
)
}
it
'sets assignable project runners only'
do
group
.
add_master
(
user
)
...
...
This diff is collapsed.
Click to expand it.
spec/factories/ci/runner_projects.rb
View file @
36d6b6f8
FactoryBot
.
define
do
factory
:ci_runner_project
,
class:
Ci
::
RunnerProject
do
runner
factory:
:ci_runner
runner
factory:
[
:ci_runner
,
:project
]
project
end
end
This diff is collapsed.
Click to expand it.
spec/factories/ci/runners.rb
View file @
36d6b6f8
...
...
@@ -3,37 +3,27 @@ FactoryBot.define do
sequence
(
:description
)
{
|
n
|
"My runner
#{
n
}
"
}
platform
"darwin"
is_shared
false
active
true
access_level
:not_protected
runner_type
:project_type
trait
:online
do
contacted_at
Time
.
now
end
trait
:shared
do
is_shared
true
runner_type
:instance_type
end
trait
:specific
do
is_shared
false
trait
:instance
do
is_shared
true
runner_type
:instance_type
end
trait
:group
do
is_shared
false
runner_type
:group_type
end
trait
:project
do
is_shared
false
runner_type
:project_type
end
trait
:instance
do
is_shared
true
runner_type
:instance_type
end
trait
:inactive
do
active
false
end
...
...
This diff is collapsed.
Click to expand it.
spec/features/admin/admin_runners_spec.rb
View file @
36d6b6f8
...
...
@@ -76,7 +76,7 @@ describe "Admin Runners" do
context
'shared runner'
do
it
'shows the label and does not show the project count'
do
runner
=
create
:ci_runner
,
:
shared
runner
=
create
:ci_runner
,
:
instance
visit
admin_runners_path
...
...
@@ -90,7 +90,7 @@ describe "Admin Runners" do
context
'specific runner'
do
it
'shows the label and the project count'
do
project
=
create
:project
runner
=
create
:ci_runner
,
projects:
[
project
]
runner
=
create
:ci_runner
,
:project
,
projects:
[
project
]
visit
admin_runners_path
...
...
@@ -149,8 +149,9 @@ describe "Admin Runners" do
end
context
'with specific runner'
do
let
(
:runner
)
{
create
(
:ci_runner
,
:project
,
projects:
[
@project1
])
}
before
do
@project1
.
runners
<<
runner
visit
admin_runner_path
(
runner
)
end
...
...
@@ -158,9 +159,9 @@ describe "Admin Runners" do
end
context
'with locked runner'
do
let
(
:runner
)
{
create
(
:ci_runner
,
:project
,
projects:
[
@project1
],
locked:
true
)
}
before
do
runner
.
update
(
locked:
true
)
@project1
.
runners
<<
runner
visit
admin_runner_path
(
runner
)
end
...
...
@@ -168,9 +169,10 @@ describe "Admin Runners" do
end
context
'with shared runner'
do
let
(
:runner
)
{
create
(
:ci_runner
,
:instance
)
}
before
do
@project1
.
destroy
runner
.
update
(
is_shared:
true
)
visit
admin_runner_path
(
runner
)
end
...
...
@@ -179,8 +181,9 @@ describe "Admin Runners" do
end
describe
'disable/destroy'
do
let
(
:runner
)
{
create
(
:ci_runner
,
:project
,
projects:
[
@project1
])
}
before
do
@project1
.
runners
<<
runner
visit
admin_runner_path
(
runner
)
end
...
...
This diff is collapsed.
Click to expand it.
spec/features/runners_spec.rb
View file @
36d6b6f8
...
...
@@ -29,11 +29,7 @@ feature 'Runners' do
end
context
'when a project_type runner is activated on the project'
do
given
(
:specific_runner
)
{
create
(
:ci_runner
,
:project
)
}
background
do
project
.
runners
<<
specific_runner
end
given
(
:specific_runner
)
{
create
(
:ci_runner
,
:project
,
projects:
[
specific_runner
])
}
scenario
'user sees the specific runner'
do
visit
project_runners_path
(
project
)
...
...
@@ -126,11 +122,10 @@ feature 'Runners' do
context
'when a specific runner exists in another project'
do
given
(
:another_project
)
{
create
(
:project
)
}
given
(
:specific_runner
)
{
create
(
:ci_runner
,
:project
)
}
given
(
:specific_runner
)
{
create
(
:ci_runner
,
:project
,
projects:
[
another_project
]
)
}
background
do
another_project
.
add_master
(
user
)
another_project
.
runners
<<
specific_runner
end
scenario
'user enables and disables a specific runner'
do
...
...
This diff is collapsed.
Click to expand it.
spec/finders/runner_jobs_finder_spec.rb
View file @
36d6b6f8
...
...
@@ -2,7 +2,7 @@ require 'spec_helper'
describe
RunnerJobsFinder
do
let
(
:project
)
{
create
(
:project
)
}
let
(
:runner
)
{
create
(
:ci_runner
,
:
shared
)
}
let
(
:runner
)
{
create
(
:ci_runner
,
:
instance
)
}
subject
{
described_class
.
new
(
runner
,
params
).
execute
}
...
...
This diff is collapsed.
Click to expand it.
spec/models/ci/build_spec.rb
View file @
36d6b6f8
...
...
@@ -149,10 +149,9 @@ describe Ci::Build do
end
context
'when there are runners'
do
let
(
:runner
)
{
create
(
:ci_runner
)
}
let
(
:runner
)
{
create
(
:ci_runner
,
:project
,
projects:
[
build
.
project
]
)
}
before
do
build
.
project
.
runners
<<
runner
runner
.
update_attributes
(
contacted_at:
1
.
second
.
ago
)
end
...
...
@@ -1407,12 +1406,7 @@ describe Ci::Build do
it
{
is_expected
.
to
be_truthy
}
context
"and there are specific runner"
do
let
(
:runner
)
{
create
(
:ci_runner
,
contacted_at:
1
.
second
.
ago
)
}
before
do
build
.
project
.
runners
<<
runner
runner
.
save
end
let!
(
:runner
)
{
create
(
:ci_runner
,
:project
,
projects:
[
build
.
project
],
contacted_at:
1
.
second
.
ago
)
}
it
{
is_expected
.
to
be_falsey
}
end
...
...
This diff is collapsed.
Click to expand it.
spec/models/ci/pipeline_spec.rb
View file @
36d6b6f8
...
...
@@ -1598,7 +1598,7 @@ describe Ci::Pipeline, :mailer do
context
'when pipeline is not stuck'
do
before
do
create
(
:ci_runner
,
:
shared
,
:online
)
create
(
:ci_runner
,
:
instance
,
:online
)
end
it
'is not stuck'
do
...
...
This diff is collapsed.
Click to expand it.
spec/models/ci/runner_spec.rb
View file @
36d6b6f8
This diff is collapsed.
Click to expand it.
spec/models/project_spec.rb
View file @
36d6b6f8
...
...
@@ -1306,8 +1306,8 @@ describe Project do
describe
'#any_runners?'
do
context
'shared runners'
do
let
(
:project
)
{
create
(
:project
,
shared_runners_enabled:
shared_runners_enabled
)
}
let
(
:specific_runner
)
{
create
(
:ci_runner
)
}
let
(
:shared_runner
)
{
create
(
:ci_runner
,
:
shared
)
}
let
(
:specific_runner
)
{
create
(
:ci_runner
,
:project
,
projects:
[
project
]
)
}
let
(
:shared_runner
)
{
create
(
:ci_runner
,
:
instance
)
}
context
'for shared runners disabled'
do
let
(
:shared_runners_enabled
)
{
false
}
...
...
@@ -1317,7 +1317,7 @@ describe Project do
end
it
'has a specific runner'
do
project
.
runners
<<
specific_runner
specific_runner
expect
(
project
.
any_runners?
).
to
be_truthy
end
...
...
@@ -1329,13 +1329,13 @@ describe Project do
end
it
'checks the presence of specific runner'
do
project
.
runners
<<
specific_runner
specific_runner
expect
(
project
.
any_runners?
{
|
runner
|
runner
==
specific_runner
}).
to
be_truthy
end
it
'returns false if match cannot be found'
do
project
.
runners
<<
specific_runner
specific_runner
expect
(
project
.
any_runners?
{
false
}).
to
be_falsey
end
...
...
This diff is collapsed.
Click to expand it.
spec/models/user_spec.rb
View file @
36d6b6f8
...
...
@@ -1907,8 +1907,7 @@ describe User do
describe
'#ci_owned_runners'
do
let
(
:user
)
{
create
(
:user
)
}
let
(
:runner_1
)
{
create
(
:ci_runner
)
}
let
(
:runner_2
)
{
create
(
:ci_runner
)
}
let
(
:runner
)
{
create
(
:ci_runner
,
:project
,
projects:
[
project
])
}
context
'without any projects nor groups'
do
let!
(
:project
)
{
create
(
:project
,
runners:
[
runner_1
])
}
...
...
This diff is collapsed.
Click to expand it.
spec/requests/api/runner_spec.rb
View file @
36d6b6f8
...
...
@@ -262,7 +262,7 @@ describe API::Runner, :clean_gitlab_redis_shared_state do
describe
'/api/v4/jobs'
do
let
(
:project
)
{
create
(
:project
,
shared_runners_enabled:
false
)
}
let
(
:pipeline
)
{
create
(
:ci_pipeline_without_jobs
,
project:
project
,
ref:
'master'
)
}
let
(
:runner
)
{
create
(
:ci_runner
)
}
let
(
:runner
)
{
create
(
:ci_runner
,
:project
,
projects:
[
project
]
)
}
let
(
:job
)
do
create
(
:ci_build
,
:artifacts
,
:extended_options
,
pipeline:
pipeline
,
name:
'spinach'
,
stage:
'test'
,
stage_idx:
0
,
commands:
"ls
\n
date"
)
...
...
@@ -271,7 +271,6 @@ describe API::Runner, :clean_gitlab_redis_shared_state do
before
do
stub_artifacts_object_storage
job
project
.
runners
<<
runner
end
describe
'POST /api/v4/jobs/request'
do
...
...
@@ -381,7 +380,7 @@ describe API::Runner, :clean_gitlab_redis_shared_state do
end
context
'when shared runner requests job for project without shared_runners_enabled'
do
let
(
:runner
)
{
create
(
:ci_runner
,
:
shared
)
}
let
(
:runner
)
{
create
(
:ci_runner
,
:
instance
)
}
it_behaves_like
'no jobs available'
end
...
...
This diff is collapsed.
Click to expand it.
spec/requests/api/runners_spec.rb
View file @
36d6b6f8
...
...
@@ -11,7 +11,7 @@ describe API::Runners do
let
(
:group
)
{
create
(
:group
).
tap
{
|
group
|
group
.
add_owner
(
user
)
}
}
let
(
:group2
)
{
create
(
:group
).
tap
{
|
group
|
group
.
add_owner
(
user
)
}
}
let!
(
:shared_runner
)
{
create
(
:ci_runner
,
:
shared
,
description:
'Shared runner'
)
}
let!
(
:shared_runner
)
{
create
(
:ci_runner
,
:
instance
,
description:
'Shared runner'
)
}
let!
(
:unused_project_runner
)
{
create
(
:ci_runner
)
}
let!
(
:project_runner
)
do
...
...
This diff is collapsed.
Click to expand it.
spec/serializers/runner_entity_spec.rb
View file @
36d6b6f8
require
'spec_helper'
describe
RunnerEntity
do
let
(
:runner
)
{
create
(
:ci_runner
,
:specific
)
}
let
(
:project
)
{
create
(
:project
)
}
let
(
:runner
)
{
create
(
:ci_runner
,
:project
,
projects:
[
project
])
}
let
(
:entity
)
{
described_class
.
new
(
runner
,
request:
request
,
current_user:
user
)
}
let
(
:request
)
{
double
(
'request'
)
}
let
(
:project
)
{
create
(
:project
)
}
let
(
:user
)
{
create
(
:admin
)
}
before
do
...
...
This diff is collapsed.
Click to expand it.
spec/services/ci/register_job_service_spec.rb
View file @
36d6b6f8
...
...
@@ -292,7 +292,7 @@ module Ci
end
context
'when access_level of runner is not_protected'
do
let!
(
:specific_runner
)
{
create
(
:ci_runner
,
:
specific
)
}
let!
(
:specific_runner
)
{
create
(
:ci_runner
,
:
project
,
projects:
[
project
]
)
}
context
'when a job is protected'
do
let!
(
:pending_job
)
{
create
(
:ci_build
,
:protected
,
pipeline:
pipeline
)
}
...
...
This diff is collapsed.
Click to expand it.
spec/services/ci/update_build_queue_service_spec.rb
View file @
36d6b6f8
...
...
@@ -6,13 +6,9 @@ describe Ci::UpdateBuildQueueService do
let
(
:pipeline
)
{
create
(
:ci_pipeline
,
project:
project
)
}
context
'when updating specific runners'
do
let
(
:runner
)
{
create
(
:ci_runner
,
:project
)
}
let
(
:runner
)
{
create
(
:ci_runner
,
:project
,
projects:
[
project
]
)
}
context
'when there is a runner that can pick build'
do
before
do
build
.
project
.
runners
<<
runner
end
it
'ticks runner queue value'
do
expect
{
subject
.
execute
(
build
)
}.
to
change
{
runner
.
ensure_runner_queue_value
}
end
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment