Permalink
Browse files

GitLabCi Service imtegration

  • Loading branch information...
1 parent 8500743 commit 406a0c809b3c10d8fb2754cf626094b98ee78aeb @randx randx committed Nov 19, 2012
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@@ -73,6 +73,7 @@ img.avatar.s16 { width:16px; height:16px; margin-right:6px; }
img.avatar.s24 { width:24px; height:24px; margin-right:8px; }
img.avatar.s32 { width:32px; height:32px; margin-right:10px; }
img.lil_av { padding-left: 4px; padding-right:3px; }
+img.small { width: 80px; }
/** HELPERS **/
.nothing_here_message { text-align:center; padding:20px; color:#777; }
@@ -87,3 +88,5 @@ input[type='search'].search-text-input {
@include border-radius(4px);
border:1px solid #ccc;
}
+
+fieldset legend { font-size: 17px; }
@@ -0,0 +1,37 @@
+class ServicesController < ProjectResourceController
+ # Authorize
+ before_filter :authorize_admin_project!
+
+ respond_to :html
+
+ def index
+ @gitlab_ci_service = @project.gitlab_ci_service
+ end
+
+ def edit
+ @service = @project.gitlab_ci_service
+
+ # Create if missing
+ @service = @project.create_gitlab_ci_service unless @service
+ end
+
+ def update
+ @service = @project.gitlab_ci_service
+
+ if @service.update_attributes(params[:service])
+ redirect_to :back
+ else
+ render 'edit'
+ end
+ end
+
+ def test
+ commits = project.commits(project.default_branch, nil, 3)
+ data = project.post_receive_data(commits.last.id, commits.first.id, "refs/heads/#{project.default_branch}", current_user)
+
+ @service = project.gitlab_ci_service
+ @service.execute(data)
+
+ redirect_to :back
+ end
+end
@@ -0,0 +1,29 @@
+# == 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
+#
+
+class GitlabCiService < Service
+ attr_accessible :project_url
+
+ validates :project_url, presence: true
+ validates :token, presence: true
+
+ delegate :execute, to: :service_hook, prefix: nil
+
+ after_save :compose_service_hook
+
+ def compose_service_hook
+ hook = service_hook || build_service_hook
+ hook.url = [project_url, "/build", "?token=#{token}"].join("")
+ hook.save
+ end
+end
View
@@ -48,6 +48,7 @@ class Project < ActiveRecord::Base
has_many :protected_branches, dependent: :destroy
has_one :last_event, class_name: 'Event', order: 'events.created_at DESC', foreign_key: 'project_id'
has_many :services, dependent: :destroy
+ has_one :gitlab_ci_service, dependent: :destroy
delegate :name, to: :owner, allow_nil: true, prefix: true
View
@@ -12,7 +12,7 @@
#
class Service < ActiveRecord::Base
- attr_accessible :title, :token, :type
+ attr_accessible :title, :token, :type, :active
belongs_to :project
has_one :service_hook
@@ -56,8 +56,8 @@ def execute_hooks(data)
def execute_services(data)
services.each do |service|
- # Call service hook for service if it has one
- service.service_hook.execute if service.service_hook
+ # Call service hook only if it is active
+ service.execute if service.active
end
end
@@ -21,6 +21,10 @@
= link_to project_hooks_path(@project) do
%span
Hooks
+ = nav_link(controller: :services, html_options: {class: 'right'}) do
+ = link_to project_services_path(@project) do
+ %span
+ Services
= nav_link(path: 'projects#edit', html_options: {class: 'right'}) do
= link_to edit_project_path(@project), class: "stat-tab tab " do
%i.icon-edit
@@ -0,0 +1,42 @@
+%h3.page_title
+ Services &rarr; GitLab CI Integration
+
+ .right
+ .thumbnail
+ - if @service.active
+ = image_tag 'service-gitlab-ci.png', class: 'small'
+ - else
+ = image_tag 'service-disabled-gitlab-ci.png', class: 'small'
+
+%hr
+
+
+= form_for(@service, :as => :service, :url => project_service_path(@project, @service), :method => :put) do |f|
+ - if @service.errors.any?
+ .alert-message.block-message.error
+ %ul
+ - @service.errors.full_messages.each do |msg|
+ %li= msg
+
+
+ .control-group
+ = f.label :active, "Active", class: "control-label"
+ .controls
+ = f.check_box :active
+
+ .control-group
+ = f.label :active, "Project URL", class: "control-label"
+ .controls
+ = f.text_field :project_url, class: "input-xlarge", placeholder: "http://ci.gitlabhq.com/projects/3"
+
+ .control-group
+ = f.label :token, class: "control-label" do
+ CI Project token
+ .controls
+ = f.text_field :token, class: "input-xlarge", placeholder: "GitLab CI project specific token"
+
+
+ .form-actions
+ = f.submit 'Save', class: 'btn save-btn'
+ &nbsp;
+ = link_to 'Test settings', test_project_service_path(@project), class: 'btn btn-small'
@@ -0,0 +1,2 @@
+= render "projects/project_head"
+= render 'gitlab_ci'
@@ -0,0 +1,15 @@
+= render "projects/project_head"
+%h3.page_title Services
+%hr
+
+.row
+ .span6
+ .padded
+ %p.slead Continuous integration server from GitLab
+ .thumbnail.left
+ = link_to edit_project_service_path(@project, :gitlab_ci) do
+ - if @gitlab_ci_service.try :active
+ = image_tag 'service-gitlab-ci.png'
+ - else
+ = image_tag 'service-disabled-gitlab-ci.png'
+
View
@@ -133,6 +133,12 @@
end
end
+ resources :services, constraints: { id: /[^\/]+/ }, only: [:index, :edit, :update] do
+ member do
+ get :test
+ end
+ end
+
resources :deploy_keys
resources :protected_branches, only: [:index, :create, :destroy]
@@ -0,0 +1,5 @@
+class AddActiveToService < ActiveRecord::Migration
+ def change
+ add_column :services, :active, :boolean, default: false, null: false
+ end
+end
@@ -0,0 +1,5 @@
+class AddProjectUrlToService < ActiveRecord::Migration
+ def change
+ add_column :services, :project_url, :string, null: true
+ end
+end
View
@@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 20121120051432) do
+ActiveRecord::Schema.define(:version => 20121120113838) do
create_table "events", :force => true do |t|
t.string "target_type"
@@ -131,9 +131,11 @@
t.string "type"
t.string "title"
t.string "token"
- t.integer "project_id", :null => false
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
+ t.integer "project_id", :null => false
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.boolean "active", :default => false, :null => false
+ t.string "project_url"
end
create_table "snippets", :force => true do |t|

0 comments on commit 406a0c8

Please sign in to comment.