Remove network from CI
This commit is contained in:
parent
187face620
commit
2ed2ef9210
|
@ -4,14 +4,8 @@ module Ci
|
||||||
"app/helpers/ci"
|
"app/helpers/ci"
|
||||||
end
|
end
|
||||||
|
|
||||||
include Ci::UserSessionsHelper
|
|
||||||
|
|
||||||
rescue_from Ci::Network::UnauthorizedError, with: :invalid_token
|
|
||||||
before_filter :default_headers
|
|
||||||
helper_method :gl_project
|
helper_method :gl_project
|
||||||
|
|
||||||
protect_from_forgery
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def authenticate_public_page!
|
def authenticate_public_page!
|
||||||
|
@ -75,27 +69,6 @@ module Ci
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_config
|
|
||||||
redirect_to oauth2_ci_help_path unless valid_config?
|
|
||||||
end
|
|
||||||
|
|
||||||
def valid_config?
|
|
||||||
server = GitlabCi.config.gitlab_server
|
|
||||||
|
|
||||||
if server.blank? || server.url.blank? || server.app_id.blank? || server.app_secret.blank?
|
|
||||||
false
|
|
||||||
else
|
|
||||||
true
|
|
||||||
end
|
|
||||||
rescue Settingslogic::MissingSetting, NoMethodError
|
|
||||||
false
|
|
||||||
end
|
|
||||||
|
|
||||||
def invalid_token
|
|
||||||
reset_session
|
|
||||||
redirect_to ci_root_path
|
|
||||||
end
|
|
||||||
|
|
||||||
def gl_project
|
def gl_project
|
||||||
::Project.find(@project.gitlab_id)
|
::Project.find(@project.gitlab_id)
|
||||||
end
|
end
|
||||||
|
|
|
@ -27,7 +27,7 @@ module Ci
|
||||||
|
|
||||||
@projects = Ci::Project.where(gitlab_id: @gl_projects.map(&:id)).ordered_by_last_commit_date
|
@projects = Ci::Project.where(gitlab_id: @gl_projects.map(&:id)).ordered_by_last_commit_date
|
||||||
@total_count = @gl_projects.size
|
@total_count = @gl_projects.size
|
||||||
|
|
||||||
@gl_projects = @gl_projects.where.not(id: @projects.map(&:gitlab_id))
|
@gl_projects = @gl_projects.where.not(id: @projects.map(&:gitlab_id))
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
|
@ -35,8 +35,6 @@ module Ci
|
||||||
pager_json("ci/projects/gitlab", @total_count)
|
pager_json("ci/projects/gitlab", @total_count)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
rescue Ci::Network::UnauthorizedError
|
|
||||||
raise
|
|
||||||
rescue
|
rescue
|
||||||
@error = 'Failed to fetch GitLab projects'
|
@error = 'Failed to fetch GitLab projects'
|
||||||
end
|
end
|
||||||
|
@ -82,8 +80,8 @@ module Ci
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
|
project.gl_project.gitlab_ci_service.update_attributes(active: false)
|
||||||
project.destroy
|
project.destroy
|
||||||
Ci::Network.new.disable_ci(project.gitlab_id, current_user.authenticate_options)
|
|
||||||
|
|
||||||
Ci::EventService.new.remove_project(current_user, project)
|
Ci::EventService.new.remove_project(current_user, project)
|
||||||
|
|
||||||
|
|
|
@ -1,122 +0,0 @@
|
||||||
module Ci
|
|
||||||
class Network
|
|
||||||
class UnauthorizedError < StandardError; end
|
|
||||||
|
|
||||||
include HTTParty
|
|
||||||
|
|
||||||
API_PREFIX = '/api/v3/'
|
|
||||||
|
|
||||||
def authenticate(api_opts)
|
|
||||||
opts = {
|
|
||||||
query: api_opts
|
|
||||||
}
|
|
||||||
|
|
||||||
endpoint = File.join(url, API_PREFIX, 'user')
|
|
||||||
response = self.class.get(endpoint, default_opts.merge(opts))
|
|
||||||
|
|
||||||
build_response(response)
|
|
||||||
end
|
|
||||||
|
|
||||||
def projects(api_opts, scope = :owned)
|
|
||||||
# Dont load archived projects
|
|
||||||
api_opts.merge!(archived: false)
|
|
||||||
|
|
||||||
opts = {
|
|
||||||
query: api_opts
|
|
||||||
}
|
|
||||||
|
|
||||||
query = if scope == :owned
|
|
||||||
'projects/owned.json'
|
|
||||||
else
|
|
||||||
'projects.json'
|
|
||||||
end
|
|
||||||
|
|
||||||
endpoint = File.join(url, API_PREFIX, query)
|
|
||||||
response = self.class.get(endpoint, default_opts.merge(opts))
|
|
||||||
|
|
||||||
build_response(response)
|
|
||||||
end
|
|
||||||
|
|
||||||
def project(api_opts, project_id)
|
|
||||||
opts = {
|
|
||||||
query: api_opts
|
|
||||||
}
|
|
||||||
|
|
||||||
query = "projects/#{project_id}.json"
|
|
||||||
|
|
||||||
endpoint = File.join(url, API_PREFIX, query)
|
|
||||||
response = self.class.get(endpoint, default_opts.merge(opts))
|
|
||||||
|
|
||||||
build_response(response)
|
|
||||||
end
|
|
||||||
|
|
||||||
def project_hooks(api_opts, project_id)
|
|
||||||
opts = {
|
|
||||||
query: api_opts
|
|
||||||
}
|
|
||||||
|
|
||||||
query = "projects/#{project_id}/hooks.json"
|
|
||||||
|
|
||||||
endpoint = File.join(url, API_PREFIX, query)
|
|
||||||
response = self.class.get(endpoint, default_opts.merge(opts))
|
|
||||||
|
|
||||||
build_response(response)
|
|
||||||
end
|
|
||||||
|
|
||||||
def enable_ci(project_id, data, api_opts)
|
|
||||||
opts = {
|
|
||||||
body: data.to_json,
|
|
||||||
query: api_opts
|
|
||||||
}
|
|
||||||
|
|
||||||
query = "projects/#{project_id}/services/gitlab-ci.json"
|
|
||||||
endpoint = File.join(url, API_PREFIX, query)
|
|
||||||
response = self.class.put(endpoint, default_opts.merge(opts))
|
|
||||||
|
|
||||||
case response.code
|
|
||||||
when 200
|
|
||||||
true
|
|
||||||
when 401
|
|
||||||
raise UnauthorizedError
|
|
||||||
else
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def disable_ci(project_id, api_opts)
|
|
||||||
opts = {
|
|
||||||
query: api_opts
|
|
||||||
}
|
|
||||||
|
|
||||||
query = "projects/#{project_id}/services/gitlab-ci.json"
|
|
||||||
|
|
||||||
endpoint = File.join(url, API_PREFIX, query)
|
|
||||||
response = self.class.delete(endpoint, default_opts.merge(opts))
|
|
||||||
|
|
||||||
build_response(response)
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def url
|
|
||||||
Gitlab.config.gitlab.url
|
|
||||||
end
|
|
||||||
|
|
||||||
def default_opts
|
|
||||||
{
|
|
||||||
headers: { "Content-Type" => "application/json" },
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def build_response(response)
|
|
||||||
case response.code
|
|
||||||
when 200
|
|
||||||
response.parsed_response
|
|
||||||
when 401
|
|
||||||
raise UnauthorizedError
|
|
||||||
else
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -31,7 +31,7 @@ module Ci
|
||||||
|
|
||||||
include Ci::ProjectStatus
|
include Ci::ProjectStatus
|
||||||
|
|
||||||
belongs_to :gl_project, class_name: 'Project', foreign_key: :gitlab_id
|
belongs_to :gl_project, class_name: '::Project', foreign_key: :gitlab_id
|
||||||
|
|
||||||
has_many :commits, ->() { order(:committed_at) }, dependent: :destroy, class_name: 'Ci::Commit'
|
has_many :commits, ->() { order(:committed_at) }, dependent: :destroy, class_name: 'Ci::Commit'
|
||||||
has_many :builds, through: :commits, dependent: :destroy, class_name: 'Ci::Build'
|
has_many :builds, through: :commits, dependent: :destroy, class_name: 'Ci::Build'
|
||||||
|
@ -92,11 +92,13 @@ module Ci
|
||||||
project
|
project
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# TODO: remove
|
||||||
def from_gitlab(user, scope = :owned, options)
|
def from_gitlab(user, scope = :owned, options)
|
||||||
opts = user.authenticate_options
|
opts = user.authenticate_options
|
||||||
opts.merge! options
|
opts.merge! options
|
||||||
|
|
||||||
projects = Ci::Network.new.projects(opts.compact, scope)
|
raise 'Implement me of fix'
|
||||||
|
#projects = Ci::Network.new.projects(opts.compact, scope)
|
||||||
|
|
||||||
if projects
|
if projects
|
||||||
projects.map { |pr| OpenStruct.new(pr) }
|
projects.map { |pr| OpenStruct.new(pr) }
|
||||||
|
|
|
@ -13,9 +13,9 @@ module Ci
|
||||||
project_url: project_route.gsub(":project_id", @project.id.to_s),
|
project_url: project_route.gsub(":project_id", @project.id.to_s),
|
||||||
}
|
}
|
||||||
|
|
||||||
unless Ci::Network.new.enable_ci(@project.gitlab_id, data, {private_token: current_user.private_token})
|
gl_project = ::Project.find(@project.gitlab_id)
|
||||||
raise ActiveRecord::Rollback
|
gl_project.build_missing_services
|
||||||
end
|
gl_project.gitlab_ci_service.update_attributes(data.merge(active: true))
|
||||||
end
|
end
|
||||||
|
|
||||||
if forked_project
|
if forked_project
|
||||||
|
|
|
@ -20,7 +20,7 @@ module API
|
||||||
end
|
end
|
||||||
|
|
||||||
required_attributes! validators.map(&:attributes).flatten.uniq
|
required_attributes! validators.map(&:attributes).flatten.uniq
|
||||||
attrs = attributes_for_keys service_attributes
|
attrs = attributes_for_keys service_attributes
|
||||||
|
|
||||||
if project_service.update_attributes(attrs.merge(active: true))
|
if project_service.update_attributes(attrs.merge(active: true))
|
||||||
true
|
true
|
||||||
|
@ -41,7 +41,7 @@ module API
|
||||||
attrs = service_attributes.inject({}) do |hash, key|
|
attrs = service_attributes.inject({}) do |hash, key|
|
||||||
hash.merge!(key => nil)
|
hash.merge!(key => nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
if project_service.update_attributes(attrs.merge(active: false))
|
if project_service.update_attributes(attrs.merge(active: false))
|
||||||
true
|
true
|
||||||
else
|
else
|
||||||
|
|
|
@ -18,7 +18,7 @@ module Ci
|
||||||
project = Ci::Project.find(params[:project_id])
|
project = Ci::Project.find(params[:project_id])
|
||||||
|
|
||||||
unauthorized! unless current_user.can_manage_project?(project.gitlab_id)
|
unauthorized! unless current_user.can_manage_project?(project.gitlab_id)
|
||||||
|
|
||||||
web_hook = project.web_hooks.new({ url: params[:web_hook] })
|
web_hook = project.web_hooks.new({ url: params[:web_hook] })
|
||||||
|
|
||||||
if web_hook.save
|
if web_hook.save
|
||||||
|
|
|
@ -1,54 +0,0 @@
|
||||||
require 'spec_helper'
|
|
||||||
|
|
||||||
describe Network do
|
|
||||||
let(:network) { Network.new }
|
|
||||||
|
|
||||||
describe :enable_ci do
|
|
||||||
subject { network.enable_ci '', '', '' }
|
|
||||||
|
|
||||||
context 'on success' do
|
|
||||||
before do
|
|
||||||
response = double
|
|
||||||
allow(response).to receive(:code) { 200 }
|
|
||||||
allow(network.class).to receive(:put) { response }
|
|
||||||
end
|
|
||||||
|
|
||||||
it { is_expected.to be_truthy }
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'on failure' do
|
|
||||||
before do
|
|
||||||
response = double
|
|
||||||
allow(response).to receive(:code) { 404 }
|
|
||||||
allow(network.class).to receive(:put) { response }
|
|
||||||
end
|
|
||||||
|
|
||||||
it { is_expected.to be_nil }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe :disable_ci do
|
|
||||||
let(:response) { double }
|
|
||||||
subject { network.disable_ci '', '' }
|
|
||||||
|
|
||||||
context 'on success' do
|
|
||||||
let(:parsed_response) { 'parsed' }
|
|
||||||
before do
|
|
||||||
allow(response).to receive(:code) { 200 }
|
|
||||||
allow(response).to receive(:parsed_response) { parsed_response }
|
|
||||||
allow(network.class).to receive(:delete) { response }
|
|
||||||
end
|
|
||||||
|
|
||||||
it { is_expected.to equal(parsed_response) }
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'on failure' do
|
|
||||||
before do
|
|
||||||
allow(response).to receive(:code) { 404 }
|
|
||||||
allow(network.class).to receive(:delete) { response }
|
|
||||||
end
|
|
||||||
|
|
||||||
it { is_expected.to be_nil }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in New Issue