Skip to content

Instantly share code, notes, and snippets.

@darinkes
Created March 3, 2014 13:35
Show Gist options
  • Save darinkes/9325003 to your computer and use it in GitHub Desktop.
Save darinkes/9325003 to your computer and use it in GitHub Desktop.
teamcity diff for gitlab
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index 51509ec..e4a472e 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -166,7 +166,11 @@ class Projects::MergeRequestsController < Projects::ApplicationController
end
def ci_status
- status = @merge_request.source_project.gitlab_ci_service.commit_status(merge_request.last_commit.sha)
+ if @merge_request.source_project.gitlab_ci?
+ status = @merge_request.source_project.gitlab_ci_service.commit_status(merge_request.last_commit.sha)
+ elsif @merge_request.source_project.teamcity?
+ status = @merge_request.source_project.teamcity_service.commit_status(merge_request.last_commit.sha)
+ end
response = {status: status}
render json: response
diff --git a/app/helpers/merge_requests_helper.rb b/app/helpers/merge_requests_helper.rb
index b8285d4..b438af9 100644
--- a/app/helpers/merge_requests_helper.rb
+++ b/app/helpers/merge_requests_helper.rb
@@ -32,7 +32,11 @@ module MergeRequestsHelper
end
def ci_build_details_path merge_request
- merge_request.source_project.gitlab_ci_service.build_page(merge_request.last_commit.sha)
+ if merge_request.source_project.gitlab_ci?
+ merge_request.source_project.gitlab_ci_service.build_page(merge_request.last_commit.sha)
+ elsif
+ merge_request.source_project.teamcity_service.build_page(merge_request.last_commit.sha)
+ end
end
def merge_path_description(merge_request, separator)
diff --git a/app/models/project.rb b/app/models/project.rb
index 47dc8a1..14290e9 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -50,6 +50,7 @@ class Project < ActiveRecord::Base
has_one :last_event, -> {order 'events.created_at DESC'}, class_name: 'Event', foreign_key: 'project_id'
has_one :gitlab_ci_service, dependent: :destroy
+ has_one :teamcity_service, dependent: :destroy
has_one :campfire_service, dependent: :destroy
has_one :emails_on_push_service, dependent: :destroy
has_one :pivotaltracker_service, dependent: :destroy
@@ -277,11 +278,15 @@ class Project < ActiveRecord::Base
end
def available_services_names
- %w(gitlab_ci campfire hipchat pivotaltracker flowdock assembla emails_on_push gemnasium)
+ %w(gitlab_ci teamcity campfire hipchat pivotaltracker flowdock assembla emails_on_push gemnasium)
end
def gitlab_ci?
- gitlab_ci_service && gitlab_ci_service.active
+ gitlab_ci_service && gitlab_ci_service.active
+ end
+
+ def teamcity?
+ teamcity_service && teamcity_service.active
end
# For compatibility with old code
diff --git a/app/models/project_services/teamcity_service.rb b/app/models/project_services/teamcity_service.rb
new file mode 100644
index 0000000..dbc409d
--- /dev/null
+++ b/app/models/project_services/teamcity_service.rb
@@ -0,0 +1,77 @@
+# == 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
+# project_url :string(255)
+# subdomain :string(255)
+# room :string(255)
+# api_key :string(255)
+#
+
+class TeamcityService < Service
+ delegate :execute, to: :service_hook, prefix: nil
+
+ after_save :compose_service_hook, if: :activated?
+
+ def compose_service_hook
+ hook = service_hook || build_service_hook
+ hook.url = [project_url, "/build", "?token=#{token}"].join("")
+ hook.save
+ end
+
+ def commit_status_path sha
+ #project_url + "/builds/#{sha}/status.json?token=#{token}"
+ "blabla"
+ end
+
+ def commit_status sha
+ return "failed"
+ response = HTTParty.get(commit_status_path(sha))
+
+ if response.code == 200 and response["status"]
+ response["status"]
+ else
+ :error
+ end
+ end
+
+ def build_page sha
+ #project_url + "/builds/#{sha}"
+ end
+
+ def builds_path
+ #project_url + "?ref=" + project.default_branch
+ end
+
+ def status_img_path
+ #project_url + "/status.png?ref=" + project.default_branch
+ "http://172.16.4.10/app/rest/builds/buildType:(id:bt3)/statusIcon"
+ end
+
+ def title
+ 'TeamCity'
+ end
+
+ def description
+ 'Continuous integration server TeamCity'
+ end
+
+ def to_param
+ 'teamcity'
+ end
+
+ def fields
+ [
+ # { type: 'text', name: 'token', placeholder: 'GitLab CI project specific token' },
+ # { type: 'text', name: 'project_url', placeholder: 'http://ci.gitlabhq.com/projects/3'}
+ ]
+ end
+end
diff --git a/app/views/projects/merge_requests/_show.html.haml b/app/views/projects/merge_requests/_show.html.haml
index c82afeb..c9ffacb 100644
--- a/app/views/projects/merge_requests/_show.html.haml
+++ b/app/views/projects/merge_requests/_show.html.haml
@@ -7,7 +7,7 @@
= render "projects/merge_requests/show/mr_accept"
- else
= render "projects/merge_requests/show/no_accept"
- - if @merge_request.source_project.gitlab_ci?
+ - if @merge_request.source_project.gitlab_ci? || @merge_request.source_project.teamcity?
= render "projects/merge_requests/show/mr_ci"
= render "projects/merge_requests/show/commits"
@@ -42,7 +42,7 @@
url_to_automerge_check: "#{automerge_check_project_merge_request_path(@project, @merge_request)}",
check_enable: #{@merge_request.unchecked? ? "true" : "false"},
url_to_ci_check: "#{ci_status_project_merge_request_path(@project, @merge_request)}",
- ci_enable: #{@project.gitlab_ci? ? "true" : "false"},
+ ci_enable: #{@project.gitlab_ci? || @project.teamcity? ? "true" : "false"},
current_status: "#{@merge_request.merge_status_name}",
action: "#{controller.action_name}"
});
diff --git a/app/views/projects/show.html.haml b/app/views/projects/show.html.haml
index 8a1e1d3..436a213 100644
--- a/app/views/projects/show.html.haml
+++ b/app/views/projects/show.html.haml
@@ -60,3 +60,7 @@
%hr
= link_to @project.gitlab_ci_service.builds_path do
= image_tag @project.gitlab_ci_service.status_img_path, alt: "build status"
+ - if @project.teamcity?
+ %hr
+ = link_to @project.teamcity_service.builds_path do
+ = image_tag @project.teamcity_service.status_img_path, alt: "build status"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment