Commit 406a0c80 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

GitLabCi Service imtegration

parent 85007434
app/assets/images/service-gitlab-ci.png

2.69 KB | W: | H:

app/assets/images/service-gitlab-ci.png

2.34 KB | W: | H:

app/assets/images/service-gitlab-ci.png
app/assets/images/service-gitlab-ci.png
app/assets/images/service-gitlab-ci.png
app/assets/images/service-gitlab-ci.png
  • 2-up
  • Swipe
  • Onion skin
...@@ -73,6 +73,7 @@ img.avatar.s16 { width:16px; height:16px; margin-right:6px; } ...@@ -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.s24 { width:24px; height:24px; margin-right:8px; }
img.avatar.s32 { width:32px; height:32px; margin-right:10px; } img.avatar.s32 { width:32px; height:32px; margin-right:10px; }
img.lil_av { padding-left: 4px; padding-right:3px; } img.lil_av { padding-left: 4px; padding-right:3px; }
img.small { width: 80px; }
/** HELPERS **/ /** HELPERS **/
.nothing_here_message { text-align:center; padding:20px; color:#777; } .nothing_here_message { text-align:center; padding:20px; color:#777; }
...@@ -87,3 +88,5 @@ input[type='search'].search-text-input { ...@@ -87,3 +88,5 @@ input[type='search'].search-text-input {
@include border-radius(4px); @include border-radius(4px);
border:1px solid #ccc; border:1px solid #ccc;
} }
fieldset legend { font-size: 17px; }
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
# == 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
...@@ -48,6 +48,7 @@ class Project < ActiveRecord::Base ...@@ -48,6 +48,7 @@ class Project < ActiveRecord::Base
has_many :protected_branches, dependent: :destroy has_many :protected_branches, dependent: :destroy
has_one :last_event, class_name: 'Event', order: 'events.created_at DESC', foreign_key: 'project_id' has_one :last_event, class_name: 'Event', order: 'events.created_at DESC', foreign_key: 'project_id'
has_many :services, dependent: :destroy has_many :services, dependent: :destroy
has_one :gitlab_ci_service, dependent: :destroy
delegate :name, to: :owner, allow_nil: true, prefix: true delegate :name, to: :owner, allow_nil: true, prefix: true
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
# #
class Service < ActiveRecord::Base class Service < ActiveRecord::Base
attr_accessible :title, :token, :type attr_accessible :title, :token, :type, :active
belongs_to :project belongs_to :project
has_one :service_hook has_one :service_hook
......
...@@ -56,8 +56,8 @@ module PushObserver ...@@ -56,8 +56,8 @@ module PushObserver
def execute_services(data) def execute_services(data)
services.each do |service| services.each do |service|
# Call service hook for service if it has one # Call service hook only if it is active
service.service_hook.execute if service.service_hook service.execute if service.active
end end
end end
......
...@@ -21,6 +21,10 @@ ...@@ -21,6 +21,10 @@
= link_to project_hooks_path(@project) do = link_to project_hooks_path(@project) do
%span %span
Hooks 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 = nav_link(path: 'projects#edit', html_options: {class: 'right'}) do
= link_to edit_project_path(@project), class: "stat-tab tab " do = link_to edit_project_path(@project), class: "stat-tab tab " do
%i.icon-edit %i.icon-edit
......
%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'
= render "projects/project_head"
= render 'gitlab_ci'
= 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'
...@@ -133,6 +133,12 @@ Gitlab::Application.routes.draw do ...@@ -133,6 +133,12 @@ Gitlab::Application.routes.draw do
end end
end end
resources :services, constraints: { id: /[^\/]+/ }, only: [:index, :edit, :update] do
member do
get :test
end
end
resources :deploy_keys resources :deploy_keys
resources :protected_branches, only: [:index, :create, :destroy] resources :protected_branches, only: [:index, :create, :destroy]
......
class AddActiveToService < ActiveRecord::Migration
def change
add_column :services, :active, :boolean, default: false, null: false
end
end
class AddProjectUrlToService < ActiveRecord::Migration
def change
add_column :services, :project_url, :string, null: true
end
end
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
# #
# It's strongly recommended to check this file into your version control system. # 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| create_table "events", :force => true do |t|
t.string "target_type" t.string "target_type"
...@@ -131,9 +131,11 @@ ActiveRecord::Schema.define(:version => 20121120051432) do ...@@ -131,9 +131,11 @@ ActiveRecord::Schema.define(:version => 20121120051432) do
t.string "type" t.string "type"
t.string "title" t.string "title"
t.string "token" t.string "token"
t.integer "project_id", :null => false t.integer "project_id", :null => false
t.datetime "created_at", :null => false t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false t.datetime "updated_at", :null => false
t.boolean "active", :default => false, :null => false
t.string "project_url"
end end
create_table "snippets", :force => true do |t| create_table "snippets", :force => true do |t|
......
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