Commit 2cbdfbfd authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets
Browse files

Merge branch 'master' of github.com:gitlabhq/gitlabhq

......@@ -10,6 +10,7 @@ v 7.11.0 (unreleased)
- Add "Reply quoting selected text" shortcut key (`r`)
- Fix bug causing `@whatever` inside an issue's first code block to be picked up as a user mention.
- Fix bug causing `@whatever` inside an inline code snippet (backtick-style) to be picked up as a user mention.
- Added GitLab Event header for project hooks
-
- Show Atom feed buttons everywhere where applicable.
- Add project activity atom feed.
......@@ -23,8 +24,9 @@ v 7.11.0 (unreleased)
- Improve new project command options (Ben Bodenmiller)
- Prevent sending empty messages to HipChat (Chulki Lee)
- Improve UI for mobile phones on dashboard and project pages
- Add room notification and message color option for HipChat
v 7.10.0 (unreleased)
v 7.10.0
- Ignore submodules that are defined in .gitmodules but are checked in as directories.
- Allow projects to be imported from Google Code.
- Remove access control for uploaded images to fix broken images in emails (Hannes Rosenögger)
......
7.10.0.pre
7.11.0.pre
......@@ -33,7 +33,7 @@ def test
owner_name: "Someone",
owner_email: "example@gitlabhq.com"
}
@hook.execute(data)
@hook.execute(data, 'system_hooks')
redirect_to :back
end
......
......@@ -6,7 +6,8 @@ class Projects::ServicesController < Projects::ApplicationController
:description, :issues_url, :new_issue_url, :restrict_to_branch, :channel,
:colorize_messages, :channels,
:push_events, :issues_events, :merge_requests_events, :tag_push_events,
:note_events, :send_from_committer_email, :disable_diffs, :external_wiki_url]
:note_events, :send_from_committer_email, :disable_diffs, :external_wiki_url,
:notify, :color]
# Authorize
before_action :authorize_admin_project!
before_action :service, only: [:edit, :update, :test]
......
......@@ -30,12 +30,15 @@ class WebHook < ActiveRecord::Base
validates :url, presence: true,
format: { with: /\A#{URI.regexp(%w(http https))}\z/, message: "should be a valid url" }
def execute(data)
def execute(data, hook_name)
parsed_url = URI.parse(url)
if parsed_url.userinfo.blank?
WebHook.post(url,
body: data.to_json,
headers: { "Content-Type" => "application/json" },
headers: {
"Content-Type" => "application/json",
"X-Gitlab-Event" => hook_name.singularize.titleize
},
verify: false)
else
post_url = url.gsub("#{parsed_url.userinfo}@", "")
......@@ -45,7 +48,10 @@ def execute(data)
}
WebHook.post(post_url,
body: data.to_json,
headers: { "Content-Type" => "application/json" },
headers: {
"Content-Type" => "application/json",
"X-Gitlab-Event" => hook_name.singularize.titleize
},
verify: false,
basic_auth: auth)
end
......@@ -54,7 +60,7 @@ def execute(data)
false
end
def async_execute(data)
Sidekiq::Client.enqueue(ProjectWebHookWorker, id, data)
def async_execute(data, hook_name)
Sidekiq::Client.enqueue(ProjectWebHookWorker, id, data, hook_name)
end
end
......@@ -483,7 +483,7 @@ def path_with_namespace
def execute_hooks(data, hooks_scope = :push_hooks)
hooks.send(hooks_scope).each do |hook|
hook.async_execute(data)
hook.async_execute(data, hooks_scope.to_s)
end
end
......
......@@ -20,7 +20,7 @@
class HipchatService < Service
MAX_COMMITS = 3
prop_accessor :token, :room, :server
prop_accessor :token, :room, :server, :notify, :color
validates :token, presence: true, if: :activated?
def title
......@@ -39,6 +39,8 @@ def fields
[
{ type: 'text', name: 'token', placeholder: 'Room token' },
{ type: 'text', name: 'room', placeholder: 'Room name or ID' },
{ type: 'checkbox', name: 'notify' },
{ type: 'select', name: 'color', choices: ['yellow', 'red', 'green', 'purple', 'gray', 'random'] },
{ type: 'text', name: 'server',
placeholder: 'Leave blank for default. https://hipchat.example.com' }
]
......@@ -52,7 +54,7 @@ def execute(data)
return unless supported_events.include?(data[:object_kind])
message = create_message(data)
return unless message.present?
gate[room].send('GitLab', message)
gate[room].send('GitLab', message, message_options)
end
private
......@@ -63,6 +65,10 @@ def gate
@gate ||= HipChat::Client.new(token, options)
end
def message_options
{ notify: notify.present? && notify == '1', color: color || 'yellow' }
end
def create_message(data)
object_kind = data[:object_kind]
......
......@@ -7,12 +7,12 @@ def execute_hooks_for(model, event)
def execute_hooks(data)
SystemHook.all.each do |sh|
async_execute_hook sh, data
async_execute_hook(sh, data, 'system_hooks')
end
end
def async_execute_hook(hook, data)
Sidekiq::Client.enqueue(SystemHookWorker, hook.id, data)
def async_execute_hook(hook, data, hook_name)
Sidekiq::Client.enqueue(SystemHookWorker, hook.id, data, hook_name)
end
def build_event_data(model, event)
......
class TestHookService
def execute(hook, current_user)
data = Gitlab::PushDataBuilder.build_sample(hook.project, current_user)
hook.execute(data)
hook.execute(data, 'push_hooks')
end
end
......@@ -3,8 +3,8 @@ class ProjectWebHookWorker
sidekiq_options queue: :project_web_hook
def perform(hook_id, data)
def perform(hook_id, data, hook_name)
data = data.with_indifferent_access
WebHook.find(hook_id).execute(data)
WebHook.find(hook_id).execute(data, hook_name)
end
end
......@@ -3,7 +3,7 @@ class SystemHookWorker
sidekiq_options queue: :system_hook
def perform(hook_id, data)
SystemHook.find(hook_id).execute data
def perform(hook_id, data, hook_name)
SystemHook.find(hook_id).execute(data, hook_name)
end
end
......@@ -7,11 +7,11 @@ If correctly setup, emails that require an action will be marked in Gmail.
![gitlab_actions](gitlab_actions.png)
To get this functioning, you need to be registered with Google.
[See how to register with google in this document.](https://developers.google.com/gmail/markup/registering-with-google)
[See how to register with Google in this document.](https://developers.google.com/gmail/markup/registering-with-google)
To aid the registering with google, GitLab offers a rake task that will send an email to google whitelisting email address from your GitLab server.
To aid the registering with Google, GitLab offers a rake task that will send an email to Google whitelisting email address from your GitLab server.
To check what would be sent to the google email address, run the rake task:
To check what would be sent to the Google email address, run the rake task:
```bash
bundle exec rake gitlab:mail_google_schema_whitelisting RAILS_ENV=production
......@@ -19,7 +19,7 @@ bundle exec rake gitlab:mail_google_schema_whitelisting RAILS_ENV=production
**This will not send the email but give you the output of how the mail will look.**
Copy the output of the rake task to [google email markup tester](https://www.google.com/webmasters/markup-tester/u/0/) and press "Validate".
Copy the output of the rake task to [Google email markup tester](https://www.google.com/webmasters/markup-tester/u/0/) and press "Validate".
If you receive "No errors detected" message from the tester you can send the email using:
......
......@@ -47,7 +47,7 @@ class SystemHooks < Grape::API
owner_name: "Someone",
owner_email: "example@gitlabhq.com"
}
@hook.execute(data)
@hook.execute(data, 'system_hooks')
data
end
......
......@@ -17,7 +17,7 @@ def timestamps
events = Event.reorder(nil).contributions.where(author_id: user.id).
where("created_at > ?", date_from).where(project_id: projects).
group('date(created_at)').
select('date(created_at), count(id) as total_amount').
select('date(created_at) as date, count(id) as total_amount').
map(&:attributes)
dates = (1.year.ago.to_date..(Date.today + 1.day)).to_a
......
......@@ -282,7 +282,8 @@ namespace :gitlab do
def check_redis_version
print "Redis version >= 2.0.0? ... "
if run_and_match(%W(redis-cli --version), /redis-cli 2.\d.\d/)
redis_version = run(%W(redis-cli --version))
if redis_version.try(:match, /redis-cli 2.\d.\d/) || redis_version.try(:match, /redis-cli 3.\d.\d/)
puts "yes".green
else
puts "no".red
......
......@@ -52,22 +52,26 @@
end
it "POSTs to the web hook URL" do
@project_hook.execute(@data)
expect(WebMock).to have_requested(:post, @project_hook.url).once
@project_hook.execute(@data, 'push_hooks')
expect(WebMock).to have_requested(:post, @project_hook.url).
with(headers: {'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'Push Hook'}).
once
end
it "POSTs the data as JSON" do
json = @data.to_json
@project_hook.execute(@data)
expect(WebMock).to have_requested(:post, @project_hook.url).with(body: json).once
@project_hook.execute(@data, 'push_hooks')
expect(WebMock).to have_requested(:post, @project_hook.url).
with(headers: {'Content-Type'=>'application/json', 'X-Gitlab-Event'=>'Push Hook'}).
once
end
it "catches exceptions" do
expect(WebHook).to receive(:post).and_raise("Some HTTP Post error")
expect {
@project_hook.execute(@data)
@project_hook.execute(@data, 'push_hooks')
}.to raise_error
end
end
......
......@@ -213,5 +213,21 @@
"<pre>snippet note</pre>")
end
end
context "#message_options" do
it "should be set to the defaults" do
expect(hipchat.send(:message_options)).to eq({notify: false, color: 'yellow'})
end
it "should set notfiy to true" do
hipchat.stub(notify: '1')
expect(hipchat.send(:message_options)).to eq({notify: true, color: 'yellow'})
end
it "should set the color" do
hipchat.stub(color: 'red')
expect(hipchat.send(:message_options)).to eq({notify: false, color: 'red'})
end
end
end
end
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment