GitLabCi Service imtegration
This commit is contained in:
parent
8500743464
commit
406a0c809b
16 changed files with 158 additions and 7 deletions
BIN
app/assets/images/service-disabled-gitlab-ci.png
Normal file
BIN
app/assets/images/service-disabled-gitlab-ci.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
Binary file not shown.
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.3 KiB |
|
@ -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 {
|
||||||
@include border-radius(4px);
|
@include border-radius(4px);
|
||||||
border:1px solid #ccc;
|
border:1px solid #ccc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fieldset legend { font-size: 17px; }
|
||||||
|
|
37
app/controllers/services_controller.rb
Normal file
37
app/controllers/services_controller.rb
Normal file
|
@ -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
|
29
app/models/gitlab_ci_service.rb
Normal file
29
app/models/gitlab_ci_service.rb
Normal file
|
@ -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
|
|
@ -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 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
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
|
||||||
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 @@
|
||||||
= 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
|
||||||
|
|
42
app/views/services/_gitlab_ci.html.haml
Normal file
42
app/views/services/_gitlab_ci.html.haml
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
%h3.page_title
|
||||||
|
Services → 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'
|
||||||
|
|
||||||
|
= link_to 'Test settings', test_project_service_path(@project), class: 'btn btn-small'
|
2
app/views/services/edit.html.haml
Normal file
2
app/views/services/edit.html.haml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
= render "projects/project_head"
|
||||||
|
= render 'gitlab_ci'
|
15
app/views/services/index.html.haml
Normal file
15
app/views/services/index.html.haml
Normal file
|
@ -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'
|
||||||
|
|
|
@ -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]
|
||||||
|
|
||||||
|
|
5
db/migrate/20121120103700_add_active_to_service.rb
Normal file
5
db/migrate/20121120103700_add_active_to_service.rb
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
class AddActiveToService < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
add_column :services, :active, :boolean, default: false, null: false
|
||||||
|
end
|
||||||
|
end
|
5
db/migrate/20121120113838_add_project_url_to_service.rb
Normal file
5
db/migrate/20121120113838_add_project_url_to_service.rb
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
class AddProjectUrlToService < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
add_column :services, :project_url, :string, null: true
|
||||||
|
end
|
||||||
|
end
|
10
db/schema.rb
10
db/schema.rb
|
@ -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
|
||||||
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|
|
||||||
|
|
Loading…
Add table
Reference in a new issue