Skip to content
Snippets Groups Projects
Commit 4886b2d5 authored by Valery Sizov's avatar Valery Sizov
Browse files

Better support forks

parent 3bbd2f55
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -60,6 +60,10 @@ class ApplicationController < ActionController::Base
end
end
 
def check_fork!
page_404 if @project.fork?
end
def page_404
render file: "#{Rails.root}/public/404.html", status: 404, layout: false
end
Loading
Loading
Loading
Loading
@@ -3,6 +3,7 @@ class JobsController < ApplicationController
before_filter :project
before_filter :authorize_access_project!
before_filter :authorize_manage_project!
before_filter :check_fork!, only: :deploy_jobs
 
layout 'project'
 
Loading
Loading
Loading
Loading
@@ -64,7 +64,7 @@ class ProjectsController < ApplicationController
end
 
def update
if project.update_attributes(project_params)
if project.update_attributes(project.fork? ? project_params_for_forks : project_params)
EventService.new.change_project_settings(current_user, project)
 
redirect_to :back, notice: 'Project was successfully updated.'
Loading
Loading
@@ -124,4 +124,8 @@ class ProjectsController < ApplicationController
:email_recipients, :email_add_pusher, :email_only_broken_builds, :coverage_regex, :shared_runners_enabled,
{ jobs_attributes: [:id, :name, :build_branches, :build_tags, :tag_list, :commands, :refs, :_destroy, :job_type] })
end
def project_params_for_forks
params.require(:project).permit(:always_build, :polling_interval, :default_ref, :skip_refs)
end
end
Loading
Loading
@@ -39,6 +39,7 @@ class Project < ActiveRecord::Base
has_many :services, dependent: :destroy
has_one :slack_service, dependent: :destroy
has_one :mail_service, dependent: :destroy
belongs_to :parent, class_name: "Project", foreign_key: "parent_id"
 
accepts_nested_attributes_for :jobs, allow_destroy: true
 
Loading
Loading
@@ -158,6 +159,10 @@ ls -la
services.any?
end
 
def fork?
!!parent_id
end
def timeout_in_minutes
timeout / 60
end
Loading
Loading
Loading
Loading
@@ -19,17 +19,12 @@ class CreateProjectService
end
 
if forked_project
# Copy jobs
@project.jobs = forked_project.jobs.map do |job|
Job.new(job.attributes.except("id"))
end
# Copy settings
settings = forked_project.attributes.select do |attr_name, value|
["public", "shared_runners_enabled", "allow_git_fetch"].include? attr_name
end
 
@project.update(settings)
@project.update(settings.merge({parent_id: forked_project.id}))
end
 
EventService.new.create_project(current_user, @project)
Loading
Loading
Loading
Loading
@@ -7,7 +7,7 @@
%th Tags
 
%tbody
- @project.jobs.each do |job|
- @project.jobs.parallel.each do |job|
%tr
%td= job.name
%td= check_box_tag nil, nil, job.build_branches, disabled: true
Loading
Loading
%ul.nav.nav-tabs.append-bottom-20
%li{class: "active"}
= link_to 'Test (run in parallel)', project_jobs_path(@project)
%li
= link_to 'Deploy (run on success)', deploy_jobs_project_jobs_path(@project)
- if @project.fork?
= render 'list'
- else
%ul.nav.nav-tabs.append-bottom-20
%li{class: "active"}
= link_to 'Test (run in parallel)', project_jobs_path(@project)
%li
= link_to 'Deploy (run on success)', deploy_jobs_project_jobs_path(@project)
 
.btn-group.pull-right
= link_to project_jobs_path(@project), class: "btn #{'active' unless params[:list]}" do
%i.icon-edit
Edit
= link_to project_jobs_path(@project, list: 'true'), class: "btn #{'active' if params[:list]}" do
%i.icon-list
List
%p.slead
Jobs are scripts you want CI to run on each push to repository
.btn-group.pull-right
= link_to project_jobs_path(@project), class: "btn #{'active' unless params[:list]}" do
%i.icon-edit
Edit
= link_to project_jobs_path(@project, list: 'true'), class: "btn #{'active' if params[:list]}" do
%i.icon-list
List
%p.slead
Jobs are scripts you want CI to run on each push to repository
 
%hr
%hr
 
- if params[:list]
= render 'list'
- else
= render 'edit'
- if params[:list]
= render 'list'
- else
= render 'edit'
\ No newline at end of file
Loading
Loading
@@ -24,10 +24,12 @@
= link_to project_services_path(@project) do
%i.icon-gear
Services
= nav_link path: 'events#index' do
= link_to project_events_path(@project) do
%i.icon-book
Events
- unless @project.fork?
= nav_link path: 'events#index' do
= link_to project_events_path(@project) do
%i.icon-book
Events
%li
%hr
= nav_link path: 'projects#edit' do
Loading
Loading
= nested_form_for @project, html: { class: 'form-horizontal' } do |f|
- if @project.errors.any?
#error_explanation
%p.lead= "#{pluralize(@project.errors.count, "error")} prohibited this project from being saved:"
.alert.alert-error
%ul
- @project.errors.full_messages.each do |msg|
%li= msg
%fieldset
%legend Build Schedule
.form-group
= f.label :always_build, 'Schedule build', class: 'control-label'
.col-sm-10
.checkbox
= f.label :always_build do
= f.check_box :always_build
%span.light Repeat last build after X hours if no builds
.form-group
= f.label :polling_interval, "Build interval", class: 'control-label'
.col-sm-10
= f.number_field :polling_interval, placeholder: '5', min: '0', class: 'form-control'
.light In hours
%fieldset
%legend Project settings
.form-group
= f.label :default_ref, "Make tabs for the following branches", class: 'control-label'
.col-sm-10
= f.text_field :default_ref, class: 'form-control', placeholder: 'master, stable'
.light You will be able to filter builds by the following branches
%fieldset
%legend Advanced settings
.form-group
= f.label :skip_refs, "Skip refs", class: 'control-label'
.col-sm-10
= f.text_field :skip_refs, class: 'form-control', placeholder: 'branch1, branch2, feature/*'
.light
You can specify git references to skip CI builds. Accepts strings and glob pattern syntax
.form-actions
= f.submit 'Save changes', class: 'btn btn-save'
= link_to 'Cancel', projects_path, class: 'btn'
- unless @project.new_record?
= link_to 'Remove Project', project_path(@project), method: :delete, data: { confirm: 'Project will be removed. Are you sure?' }, class: 'btn btn-danger pull-right'
= render 'form'
- if @project.fork?
= render 'form_for_fork'
- else
= render 'form'
class AddParentIdToProject < ActiveRecord::Migration
def change
add_column :projects, :parent_id, :integer
end
end
Loading
Loading
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
 
ActiveRecord::Schema.define(version: 20150417000045) do
ActiveRecord::Schema.define(version: 20150429000160) do
 
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
Loading
Loading
@@ -100,6 +100,7 @@ ActiveRecord::Schema.define(version: 20150417000045) do
t.string "skip_refs"
t.string "coverage_regex"
t.boolean "shared_runners_enabled", default: false
t.integer "parent_id"
end
 
create_table "runner_projects", force: true do |t|
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment