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
0
Merge Requests
0
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
Boxiang Sun
gitlab-ce
Commits
051f385e
Commit
051f385e
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
5c34c3fc
Changes
19
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
134 additions
and
140 deletions
+134
-140
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
-6
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 @
051f385e
...
...
@@ -56,12 +56,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
...
...
@@ -117,8 +120,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
...
...
@@ -257,19 +260,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 @
051f385e
...
...
@@ -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 @
051f385e
...
...
@@ -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 @
051f385e
...
...
@@ -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 @
051f385e
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 @
051f385e
...
...
@@ -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
is_shared
true
runner_type
:instance_type
trait
:
shared
do
trait
:
instance
do
is_shared
true
runner_type
:instance_type
end
trait
:specific
do
is_shared
false
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 @
051f385e
...
...
@@ -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 @
051f385e
...
...
@@ -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 @
051f385e
...
...
@@ -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 @
051f385e
...
...
@@ -148,10 +148,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
...
...
@@ -1388,12 +1387,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 @
051f385e
...
...
@@ -1589,7 +1589,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 @
051f385e
...
...
@@ -21,7 +21,7 @@ describe Ci::Runner do
end
end
context
'#
on
ly_one_group'
do
context
'#
exact
ly_one_group'
do
let
(
:group
)
{
create
(
:group
)
}
let
(
:runner
)
{
create
(
:ci_runner
,
:group
,
groups:
[
group
])
}
...
...
@@ -29,42 +29,43 @@ describe Ci::Runner do
runner
.
groups
<<
build
(
:group
)
expect
(
runner
).
not_to
be_valid
expect
(
runner
.
errors
.
full_messages
).
to
include
(
'Runner
can only be assigned to
one group'
)
expect
(
runner
.
errors
.
full_messages
).
to
include
(
'Runner
needs to be assigned to exactly
one group'
)
end
end
context
'runner_type validations'
do
let
(
:group
)
{
create
(
:group
)
}
set
(
:group
)
{
create
(
:group
)
}
set
(
:project
)
{
create
(
:project
)
}
let
(
:group_runner
)
{
create
(
:ci_runner
,
:group
,
groups:
[
group
])
}
let
(
:project_runner
)
{
create
(
:ci_runner
,
:project
)
}
let
(
:project_runner
)
{
create
(
:ci_runner
,
:project
,
projects:
[
project
]
)
}
let
(
:instance_runner
)
{
create
(
:ci_runner
,
:instance
)
}
it
'disallows assigning group to project_type runner'
do
project_runner
.
groups
<<
build
(
:group
)
expect
(
project_runner
).
not_to
be_valid
expect
(
project_runner
.
errors
.
full_messages
).
to
include
(
'Runner cannot
assign group to a non-group runner
'
)
expect
(
project_runner
.
errors
.
full_messages
).
to
include
(
'Runner cannot
have groups assigned
'
)
end
it
'disallows assigning group to instance_type runner'
do
instance_runner
.
groups
<<
build
(
:group
)
expect
(
instance_runner
).
not_to
be_valid
expect
(
instance_runner
.
errors
.
full_messages
).
to
include
(
'Runner cannot
assign group to a non-group runner
'
)
expect
(
instance_runner
.
errors
.
full_messages
).
to
include
(
'Runner cannot
have groups assigned
'
)
end
it
'disallows assigning project to group_type runner'
do
group_runner
.
projects
<<
build
(
:project
)
expect
(
group_runner
).
not_to
be_valid
expect
(
group_runner
.
errors
.
full_messages
).
to
include
(
'Runner cannot
assign project to a non-project runner
'
)
expect
(
group_runner
.
errors
.
full_messages
).
to
include
(
'Runner cannot
have projects assigned
'
)
end
it
'disallows assigning project to instance_type runner'
do
instance_runner
.
projects
<<
build
(
:project
)
expect
(
instance_runner
).
not_to
be_valid
expect
(
instance_runner
.
errors
.
full_messages
).
to
include
(
'Runner cannot
assign project to a non-project runner
'
)
expect
(
instance_runner
.
errors
.
full_messages
).
to
include
(
'Runner cannot
have projects assigned
'
)
end
it
'should fail to save a group assigned to a project runner even if the runner is already saved'
do
...
...
@@ -107,8 +108,8 @@ describe Ci::Runner do
describe
'.shared'
do
let
(
:group
)
{
create
(
:group
)
}
let
(
:project
)
{
create
(
:project
)
}
let!
(
:group_runner
)
{
create
(
:ci_runner
,
:group
)
}
let!
(
:project_runner
)
{
create
(
:ci_runner
,
:project
)
}
let!
(
:group_runner
)
{
create
(
:ci_runner
,
:group
,
groups:
[
group
]
)
}
let!
(
:project_runner
)
{
create
(
:ci_runner
,
:project
,
projects:
[
project
]
)
}
let!
(
:shared_runner
)
{
create
(
:ci_runner
,
:instance
)
}
it
'returns only shared runners'
do
...
...
@@ -120,11 +121,11 @@ describe Ci::Runner do
it
'returns the specific project runner'
do
# own
specific_project
=
create
(
:project
)
specific_runner
=
create
(
:ci_runner
,
:
specific
,
projects:
[
specific_project
])
specific_runner
=
create
(
:ci_runner
,
:
project
,
projects:
[
specific_project
])
# other
other_project
=
create
(
:project
)
create
(
:ci_runner
,
:
specific
,
projects:
[
other_project
])
create
(
:ci_runner
,
:
project
,
projects:
[
other_project
])
expect
(
described_class
.
belonging_to_project
(
specific_project
.
id
)).
to
eq
[
specific_runner
]
end
...
...
@@ -175,31 +176,32 @@ describe Ci::Runner do
describe
'#display_name'
do
it
'returns the description if it has a value'
do
runner
=
FactoryBot
.
build
(
:ci_runner
,
description:
'Linux/Ruby-1.9.3-p448'
)
runner
=
build
(
:ci_runner
,
description:
'Linux/Ruby-1.9.3-p448'
)
expect
(
runner
.
display_name
).
to
eq
'Linux/Ruby-1.9.3-p448'
end
it
'returns the token if it does not have a description'
do
runner
=
FactoryBot
.
create
(
:ci_runner
)
runner
=
create
(
:ci_runner
)
expect
(
runner
.
display_name
).
to
eq
runner
.
description
end
it
'returns the token if the description is an empty string'
do
runner
=
FactoryBot
.
build
(
:ci_runner
,
description:
''
,
token:
'token'
)
runner
=
build
(
:ci_runner
,
description:
''
,
token:
'token'
)
expect
(
runner
.
display_name
).
to
eq
runner
.
token
end
end
describe
'#assign_to'
do
let
!
(
:project
)
{
FactoryBot
.
create
(
:project
)
}
let
(
:project
)
{
create
(
:project
)
}
subject
{
runner
.
assign_to
(
project
)
}
context
'with shared_runner'
do
let
!
(
:runner
)
{
FactoryBot
.
create
(
:ci_runner
,
:shared
)
}
let
(
:runner
)
{
create
(
:ci_runner
,
:instance
)
}
it
'transitions shared runner to project runner and assigns project'
do
subject
expect
(
runner
).
to
be_specific
expect
(
runner
).
to
be_project_type
expect
(
runner
.
projects
).
to
eq
([
project
])
...
...
@@ -208,7 +210,8 @@ describe Ci::Runner do
end
context
'with group runner'
do
let!
(
:runner
)
{
FactoryBot
.
create
(
:ci_runner
,
:group
)
}
let
(
:group
)
{
create
(
:group
)
}
let
(
:runner
)
{
create
(
:ci_runner
,
:group
,
groups:
[
group
])
}
it
'raises an error'
do
expect
{
subject
}
...
...
@@ -221,15 +224,15 @@ describe Ci::Runner do
subject
{
described_class
.
online
}
before
do
@runner1
=
FactoryBot
.
create
(
:ci_runner
,
:shared
,
contacted_at:
1
.
year
.
ago
)
@runner2
=
FactoryBot
.
create
(
:ci_runner
,
:shared
,
contacted_at:
1
.
second
.
ago
)
@runner1
=
create
(
:ci_runner
,
:instance
,
contacted_at:
1
.
year
.
ago
)
@runner2
=
create
(
:ci_runner
,
:instance
,
contacted_at:
1
.
second
.
ago
)
end
it
{
is_expected
.
to
eq
([
@runner2
])}
end
describe
'#online?'
do
let
(
:runner
)
{
FactoryBot
.
create
(
:ci_runner
,
:shared
)
}
let
(
:runner
)
{
create
(
:ci_runner
,
:instance
)
}
subject
{
runner
.
online?
}
...
...
@@ -299,21 +302,20 @@ describe Ci::Runner do
end
describe
'#can_pick?'
do
l
et
(
:pipeline
)
{
create
(
:ci_pipeline
)
}
s
et
(
:pipeline
)
{
create
(
:ci_pipeline
)
}
let
(
:build
)
{
create
(
:ci_build
,
pipeline:
pipeline
)
}
let
(
:runner
)
{
create
(
:ci_runner
,
tag_list:
tag_list
,
run_untagged:
run_untagged
)
}
let
(
:runner_project
)
{
build
.
project
}
let
(
:runner
)
{
create
(
:ci_runner
,
:project
,
projects:
[
runner_project
],
tag_list:
tag_list
,
run_untagged:
run_untagged
)
}
let
(
:tag_list
)
{
[]
}
let
(
:run_untagged
)
{
true
}
subject
{
runner
.
can_pick?
(
build
)
}
before
do
build
.
project
.
runners
<<
runner
end
context
'a different runner'
do
let
(
:other_project
)
{
create
(
:project
)
}
let
(
:other_runner
)
{
create
(
:ci_runner
,
:project
,
projects:
[
other_project
],
tag_list:
tag_list
,
run_untagged:
run_untagged
)
}
it
'cannot handle builds'
do
other_runner
=
create
(
:ci_runner
)
expect
(
other_runner
.
can_pick?
(
build
)).
to
be_falsey
end
end
...
...
@@ -367,18 +369,14 @@ describe Ci::Runner do
end
context
'when runner is shared'
do
let
(
:runner
)
{
create
(
:ci_runner
,
:shared
)
}
before
do
build
.
project
.
runners
=
[]
end
let
(
:runner
)
{
create
(
:ci_runner
,
:instance
)
}
it
'can handle builds'
do
expect
(
runner
.
can_pick?
(
build
)).
to
be_truthy
end
context
'when runner is locked'
do
let
(
:runner
)
{
create
(
:ci_runner
,
:
shared
,
locked:
true
)
}
let
(
:runner
)
{
create
(
:ci_runner
,
:
instance
,
locked:
true
)
}
it
'can handle builds'
do
expect
(
runner
.
can_pick?
(
build
)).
to
be_truthy
...
...
@@ -393,10 +391,8 @@ describe Ci::Runner do
end
end
context
'when runner is not assigned to a project'
do
before
do
build
.
project
.
runners
=
[]
end
context
'when runner is assigned to another project'
do
let
(
:runner_project
)
{
create
(
:project
)
}
it
'cannot handle builds'
do
expect
(
runner
.
can_pick?
(
build
)).
to
be_falsey
...
...
@@ -404,10 +400,8 @@ describe Ci::Runner do
end
context
'when runner is assigned to a group'
do
before
do
build
.
project
.
runners
=
[]
runner
.
groups
<<
create
(
:group
,
projects:
[
build
.
project
])
end
let
(
:group
)
{
create
(
:group
,
projects:
[
build
.
project
])
}
let
(
:runner
)
{
create
(
:ci_runner
,
:group
,
tag_list:
tag_list
,
run_untagged:
run_untagged
,
groups:
[
group
])
}
it
'can handle builds'
do
expect
(
runner
.
can_pick?
(
build
)).
to
be_truthy
...
...
@@ -461,7 +455,7 @@ describe Ci::Runner do
end
describe
'#status'
do
let
(
:runner
)
{
FactoryBot
.
create
(
:ci_runner
,
:shared
,
contacted_at:
1
.
second
.
ago
)
}
let
(
:runner
)
{
create
(
:ci_runner
,
:instance
,
contacted_at:
1
.
second
.
ago
)
}
subject
{
runner
.
status
}
...
...
@@ -618,15 +612,32 @@ describe Ci::Runner do
end
describe
'.assignable_for'
do
let!
(
:unlocked_project_runner
)
{
create
(
:ci_runner
,
runner_type: :project_type
,
projects:
[
project
])
}
let!
(
:locked_project_runner
)
{
create
(
:ci_runner
,
runner_type: :project_type
,
locked:
true
,
projects:
[
project
])
}
let!
(
:group_runner
)
{
create
(
:ci_runner
,
runner_type: :group_type
)
}
let!
(
:instance_runner
)
{
create
(
:ci_runner
,
:shared
)
}
let
(
:runner
)
{
create
(
:ci_runner
,
:project
,
projects:
[
project
])
}
let
(
:project
)
{
create
(
:project
)
}
let
(
:another_project
)
{
create
(
:project
)
}
context
'with already assigned project'
do
subject
{
described_class
.
assignable_for
(
project
)
}
context
'with shared runners'
do
let
(
:runner
)
{
create
(
:ci_runner
,
:instance
)
}
context
'does not give owned runner'
do
subject
{
described_class
.
assignable_for
(
project
)
}
it
{
is_expected
.
to
be_empty
}
end
context
'does not give shared runner'
do
subject
{
described_class
.
assignable_for
(
another_project
)
}
it
{
is_expected
.
to
be_empty
}
end
end
context
'with unlocked runner'
do
context
'does not give owned runner'
do
subject
{
described_class
.
assignable_for
(
project
)
}
it
{
is_expected
.
to
be_empty
}
end
it
{
is_expected
.
to
be_empty
}
end
...
...
@@ -643,19 +654,16 @@ describe Ci::Runner do
describe
"belongs_to_one_project?"
do
it
"returns false if there are two projects runner assigned to"
do
runner
=
FactoryBot
.
create
(
:ci_runner
)
project
=
FactoryBot
.
create
(
:project
)
project1
=
FactoryBot
.
create
(
:project
)
project
.
runners
<<
runner
project1
.
runners
<<
runner
project1
=
create
(
:project
)
project2
=
create
(
:project
)
runner
=
create
(
:ci_runner
,
:project
,
projects:
[
project1
,
project2
])
expect
(
runner
.
belongs_to_one_project?
).
to
be_falsey
end
it
"returns true"
do
runner
=
FactoryBot
.
create
(
:ci_runner
)
project
=
FactoryBot
.
create
(
:project
)
project
.
runners
<<
runner
project
=
create
(
:project
)
runner
=
create
(
:ci_runner
,
:project
,
projects:
[
project
])
expect
(
runner
.
belongs_to_one_project?
).
to
be_truthy
end
...
...
@@ -705,14 +713,14 @@ describe Ci::Runner do
subject
{
runner
.
assigned_to_group?
}
context
'when project runner'
do
let
(
:runner
)
{
create
(
:ci_runner
,
description:
'Project runner'
,
projects:
[
project
])
}
let
(
:runner
)
{
create
(
:ci_runner
,
:project
,
description:
'Project runner'
,
projects:
[
project
])
}
let
(
:project
)
{
create
(
:project
)
}
it
{
is_expected
.
to
be_falsey
}
end
context
'when shared runner'
do
let
(
:runner
)
{
create
(
:ci_runner
,
:
shared
,
description:
'Shared runner'
)
}
let
(
:runner
)
{
create
(
:ci_runner
,
:
instance
,
description:
'Shared runner'
)
}
it
{
is_expected
.
to
be_falsey
}
end
...
...
@@ -740,7 +748,7 @@ describe Ci::Runner do
end
context
'when project runner'
do
let
(
:runner
)
{
create
(
:ci_runner
,
description:
'Project runner'
,
projects:
[
project
])
}
let
(
:runner
)
{
create
(
:ci_runner
,
:project
,
description:
'Project runner'
,
projects:
[
project
])
}
let
(
:project
)
{
create
(
:project
)
}
it
{
is_expected
.
to
be_truthy
}
...
...
This diff is collapsed.
Click to expand it.
spec/models/project_spec.rb
View file @
051f385e
...
...
@@ -1177,8 +1177,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
}
...
...
@@ -1188,7 +1188,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
...
...
@@ -1200,13 +1200,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 @
051f385e
...
...
@@ -1858,8 +1858,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 @
051f385e
...
...
@@ -262,16 +262,12 @@ 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"
)
end
before
do
project
.
runners
<<
runner
end
describe
'POST /api/v4/jobs/request'
do
let!
(
:last_update
)
{}
let!
(
:new_update
)
{
}
...
...
@@ -379,7 +375,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 @
051f385e
...
...
@@ -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 @
051f385e
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 @
051f385e
...
...
@@ -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 @
051f385e
...
...
@@ -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