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
3883a5f9
Commit
3883a5f9
authored
Mar 13, 2017
by
Jacob Vosmaer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Rake task that can install gitaly at a tag version
parent
0ebf1462
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
111 additions
and
0 deletions
+111
-0
lib/gitlab/gitaly_client.rb
lib/gitlab/gitaly_client.rb
+7
-0
lib/tasks/gitlab/gitaly.rake
lib/tasks/gitlab/gitaly.rake
+23
-0
spec/tasks/gitlab/gitaly_rake_spec.rb
spec/tasks/gitlab/gitaly_rake_spec.rb
+81
-0
No files found.
lib/gitlab/gitaly_client.rb
View file @
3883a5f9
...
...
@@ -2,6 +2,8 @@ require 'gitaly'
module
Gitlab
module
GitalyClient
SERVER_VERSION_FILE
=
'GITALY_SERVER_VERSION'
.
freeze
def
self
.
gitaly_address
if
Gitlab
.
config
.
gitaly
.
socket_path
"unix://
#{
Gitlab
.
config
.
gitaly
.
socket_path
}
"
...
...
@@ -39,5 +41,10 @@ module Gitlab
yield
is_enabled
end
end
def
self
.
expected_server_version
path
=
Rails
.
root
.
join
(
SERVER_VERSION_FILE
)
path
.
read
.
chomp
end
end
end
lib/tasks/gitlab/gitaly.rake
0 → 100644
View file @
3883a5f9
namespace
:gitlab
do
namespace
:gitaly
do
desc
"GitLab | Install or upgrade gitaly"
task
:install
,
[
:dir
]
=>
:environment
do
|
t
,
args
|
warn_user_is_not_gitlab
unless
args
.
dir
.
present?
abort
%(Please specify the directory where you want to install gitaly:\n rake "gitlab:gitaly:install[/home/git/gitaly]")
end
tag
=
"v
#{
Gitlab
::
GitalyClient
.
expected_server_version
}
"
repo
=
'https://gitlab.com/gitlab-org/gitaly.git'
checkout_or_clone_tag
(
tag:
tag
,
repo:
repo
,
target_dir:
args
.
dir
)
_
,
status
=
Gitlab
::
Popen
.
popen
(
%w[which gmake]
)
command
=
status
.
zero?
?
'gmake'
:
'make'
Dir
.
chdir
(
args
.
dir
)
do
run_command!
([
command
])
end
end
end
end
spec/tasks/gitlab/gitaly_rake_spec.rb
0 → 100644
View file @
3883a5f9
require
'rake_helper'
describe
'gitlab:gitaly namespace rake task'
do
before
:all
do
Rake
.
application
.
rake_require
'tasks/gitlab/gitaly'
end
describe
'install'
do
let
(
:repo
)
{
'https://gitlab.com/gitlab-org/gitaly.git'
}
let
(
:clone_path
)
{
Rails
.
root
.
join
(
'tmp/tests/gitaly'
).
to_s
}
let
(
:tag
)
{
"v
#{
File
.
read
(
Rails
.
root
.
join
(
Gitlab
::
GitalyClient
::
SERVER_VERSION_FILE
)).
chomp
}
"
}
before
do
allow
(
ENV
).
to
receive
(
:[]
)
end
context
'no dir given'
do
it
'aborts and display a help message'
do
# avoid writing task output to spec progress
allow
(
$stderr
).
to
receive
:write
expect
{
run_rake_task
(
'gitlab:gitaly:install'
)
}.
to
raise_error
/Please specify the directory where you want to install gitaly/
end
end
context
'when an underlying Git command fail'
do
it
'aborts and display a help message'
do
expect_any_instance_of
(
Object
).
to
receive
(
:checkout_or_clone_tag
).
and_raise
'Git error'
expect
{
run_rake_task
(
'gitlab:gitaly:install'
,
clone_path
)
}.
to
raise_error
'Git error'
end
end
describe
'checkout or clone'
do
before
do
expect
(
Dir
).
to
receive
(
:chdir
).
with
(
clone_path
)
end
it
'calls checkout_or_clone_tag with the right arguments'
do
expect_any_instance_of
(
Object
).
to
receive
(
:checkout_or_clone_tag
).
with
(
tag:
tag
,
repo:
repo
,
target_dir:
clone_path
)
run_rake_task
(
'gitlab:gitaly:install'
,
clone_path
)
end
end
describe
'gmake/make'
do
before
do
FileUtils
.
mkdir_p
(
clone_path
)
expect
(
Dir
).
to
receive
(
:chdir
).
with
(
clone_path
).
and_call_original
end
context
'gmake is available'
do
before
do
expect_any_instance_of
(
Object
).
to
receive
(
:checkout_or_clone_tag
)
allow_any_instance_of
(
Object
).
to
receive
(
:run_command!
).
with
([
'gmake'
]).
and_return
(
true
)
end
it
'calls gmake in the gitaly directory'
do
expect
(
Gitlab
::
Popen
).
to
receive
(
:popen
).
with
(
%w[which gmake]
).
and_return
([
'/usr/bin/gmake'
,
0
])
expect_any_instance_of
(
Object
).
to
receive
(
:run_command!
).
with
([
'gmake'
]).
and_return
(
true
)
run_rake_task
(
'gitlab:gitaly:install'
,
clone_path
)
end
end
context
'gmake is not available'
do
before
do
expect_any_instance_of
(
Object
).
to
receive
(
:checkout_or_clone_tag
)
allow_any_instance_of
(
Object
).
to
receive
(
:run_command!
).
with
([
'make'
]).
and_return
(
true
)
end
it
'calls make in the gitaly directory'
do
expect
(
Gitlab
::
Popen
).
to
receive
(
:popen
).
with
(
%w[which gmake]
).
and_return
([
''
,
42
])
expect_any_instance_of
(
Object
).
to
receive
(
:run_command!
).
with
([
'make'
]).
and_return
(
true
)
run_rake_task
(
'gitlab:gitaly:install'
,
clone_path
)
end
end
end
end
end
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