diff --git a/app/models/pivotaltracker_service.rb b/app/models/pivotaltracker_service.rb new file mode 100644 index 0000000000000000000000000000000000000000..f28e142da77e82d5ee52bcaf0845209136c6d96c --- /dev/null +++ b/app/models/pivotaltracker_service.rb @@ -0,0 +1,59 @@ +# == Schema Information +# +# Table name: services +# +# id :integer not null, primary key +# type :string(255) +# title :string(255) +# token :string(255) +# project_id :integer not null +# created_at :datetime not null +# updated_at :datetime not null +# active :boolean default(FALSE), not null +# + +class PivotaltrackerService < Service + include HTTParty + + validates :token, presence: true, if: :activated? + + def title + 'PivotalTracker' + end + + def description + 'Project Management Software (Source Commits Endpoint)' + end + + def to_param + 'pivotaltracker' + end + + def fields + [ + { type: 'text', name: 'token', placeholder: '' } + ] + end + + def execute(push) + url = 'https://www.pivotaltracker.com/services/v5/source_commits' + push[:commits].each do |commit| + message = { + 'source_commit' => { + 'commit_id' => commit[:id], + 'author' => commit[:author][:name], + 'url' => commit[:url], + 'message' => commit[:message] + } + } + PivotaltrackerService.post( + url, + body: message.to_json, + headers: { + 'Content-Type' => 'application/json', + 'X-TrackerToken' => token + } + ) + end + end +end diff --git a/app/models/project.rb b/app/models/project.rb index f4d915179e82705a4cbdefb630fb0b8fd2b4cfd9..63cd3505ec4ccf43ba6af0bee06bdaf14183e1b8 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -46,6 +46,7 @@ class Project < ActiveRecord::Base has_one :last_event, class_name: 'Event', order: 'events.created_at DESC', foreign_key: 'project_id' has_one :gitlab_ci_service, dependent: :destroy has_one :campfire_service, dependent: :destroy + has_one :pivotaltracker_service, dependent: :destroy has_one :hipchat_service, dependent: :destroy has_one :forked_project_link, dependent: :destroy, foreign_key: "forked_to_project_id" has_one :forked_from_project, through: :forked_project_link @@ -220,7 +221,7 @@ class Project < ActiveRecord::Base end def available_services_names - %w(gitlab_ci campfire hipchat) + %w(gitlab_ci campfire hipchat pivotaltracker) end def gitlab_ci? diff --git a/features/project/service.feature b/features/project/service.feature index 6bb0c3e2c5734527b960151ba579746ca4683fb0..e685c385d1df3047f2ab6cdc3eaf278fac4c84da 100644 --- a/features/project/service.feature +++ b/features/project/service.feature @@ -18,3 +18,9 @@ Feature: Project Services And I click hipchat service link And I fill hipchat settings Then I should see hipchat service settings saved + + Scenario: Activate pivotaltracker service + When I visit project "Shop" services page + And I click pivotaltracker service link + And I fill pivotaltracker settings + Then I should see pivotaltracker service settings saved diff --git a/features/steps/project/project_services.rb b/features/steps/project/project_services.rb index 10feb8ea8be0376c70169a5bc7d78a0ecb7f23ef..a24100ff8c07866cd0999fccc9eb7d710dc2282b 100644 --- a/features/steps/project/project_services.rb +++ b/features/steps/project/project_services.rb @@ -44,4 +44,18 @@ class ProjectServices < Spinach::FeatureSteps find_field('Room').value.should == 'gitlab' end + + And 'I click pivotaltracker service link' do + click_link 'PivotalTracker' + end + + And 'I fill pivotaltracker settings' do + check 'Active' + fill_in 'Token', with: 'verySecret' + click_button 'Save' + end + + Then 'I should see pivotaltracker service settings saved' do + find_field('Token').value.should == 'verySecret' + end end diff --git a/lib/tasks/gitlab/check.rake b/lib/tasks/gitlab/check.rake index 72a6743ee725c48ecfa37e924119757349dfac3c..346712e1321895d7164c989d4ff86809cdc8e1ae 100644 --- a/lib/tasks/gitlab/check.rake +++ b/lib/tasks/gitlab/check.rake @@ -22,6 +22,7 @@ namespace :gitlab do check_tmp_writable check_init_script_exists check_init_script_up_to_date + check_projects_have_namespace check_satellites_exist check_redis_version check_git_version @@ -570,6 +571,32 @@ namespace :gitlab do end end + def check_projects_have_namespace + print "projects have namespace: ... " + + unless Project.count > 0 + puts "can't check, you have no projects".magenta + return + end + puts "" + + Project.find_each(batch_size: 100) do |project| + print "#{project.name_with_namespace.yellow} ... " + + if project.namespace + puts "yes".green + else + puts "no".red + try_fixing_it( + "Migrate global projects" + ) + for_more_information( + "doc/update/5.4-to-6.0.md in section \"#global-projects\"" + ) + fix_and_rerun + end + end + end # Helper methods ######################## @@ -677,7 +704,7 @@ namespace :gitlab do end def check_gitlab_shell - required_version = Gitlab::VersionInfo.new(1, 7, 0) + required_version = Gitlab::VersionInfo.new(1, 7, 1) current_version = Gitlab::VersionInfo.parse(gitlab_shell_version) print "GitLab Shell version >= #{required_version} ? ... "