Incorporate review
This commit is contained in:
parent
a346dbf0af
commit
bcd70c4c46
|
|
@ -51,8 +51,9 @@ module Ci
|
||||||
}
|
}
|
||||||
|
|
||||||
enum config_source: {
|
enum config_source: {
|
||||||
repository: nil,
|
unknown_source: nil,
|
||||||
auto_devops: 1
|
repository_source: 1,
|
||||||
|
auto_devops_source: 2
|
||||||
}
|
}
|
||||||
|
|
||||||
state_machine :status, initial: :created do
|
state_machine :status, initial: :created do
|
||||||
|
|
@ -317,6 +318,11 @@ module Ci
|
||||||
builds.latest.failed_but_allowed.any?
|
builds.latest.failed_but_allowed.any?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def detect_ci_yaml_file
|
||||||
|
ci_yaml_from_repo&.tap { self.repository_source! } ||
|
||||||
|
implied_ci_yaml_file&.tap { self.auto_devops_source! }
|
||||||
|
end
|
||||||
|
|
||||||
def config_processor
|
def config_processor
|
||||||
return unless ci_yaml_file
|
return unless ci_yaml_file
|
||||||
return @config_processor if defined?(@config_processor)
|
return @config_processor if defined?(@config_processor)
|
||||||
|
|
@ -343,8 +349,13 @@ module Ci
|
||||||
def ci_yaml_file
|
def ci_yaml_file
|
||||||
return @ci_yaml_file if defined?(@ci_yaml_file)
|
return @ci_yaml_file if defined?(@ci_yaml_file)
|
||||||
|
|
||||||
@ci_yaml_file = ci_yaml_from_repo
|
@ci_yaml_file =
|
||||||
@ci_yaml_file ||= implied_ci_yaml_file&.tap { self.auto_devops! }
|
case config_source
|
||||||
|
when :repository_source, :unknown_source
|
||||||
|
ci_yaml_from_repo
|
||||||
|
when :auto_devops_source
|
||||||
|
implied_ci_yaml_file
|
||||||
|
end
|
||||||
|
|
||||||
if @ci_yaml_file
|
if @ci_yaml_file
|
||||||
@ci_yaml_file
|
@ci_yaml_file
|
||||||
|
|
@ -437,18 +448,18 @@ module Ci
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def implied_ci_yaml_file
|
|
||||||
if project.auto_devops_enabled?
|
|
||||||
Gitlab::Template::GitlabCiYmlTemplate.find('Auto-DevOps').content
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def ci_yaml_from_repo
|
def ci_yaml_from_repo
|
||||||
project.repository.gitlab_ci_yml_for(sha, ci_yaml_file_path)
|
project.repository.gitlab_ci_yml_for(sha, ci_yaml_file_path)
|
||||||
rescue GRPC::NotFound, Rugged::ReferenceError, GRPC::Internal
|
rescue GRPC::NotFound, Rugged::ReferenceError, GRPC::Internal
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def implied_ci_yaml_file
|
||||||
|
if project.auto_devops_enabled?
|
||||||
|
Gitlab::Template::GitlabCiYmlTemplate.find('Auto-DevOps').content
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def pipeline_data
|
def pipeline_data
|
||||||
Gitlab::DataBuilder::Pipeline.build(self)
|
Gitlab::DataBuilder::Pipeline.build(self)
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -1395,7 +1395,8 @@ class Project < ActiveRecord::Base
|
||||||
{ key: 'CI_PROJECT_PATH', value: full_path, public: true },
|
{ key: 'CI_PROJECT_PATH', value: full_path, public: true },
|
||||||
{ key: 'CI_PROJECT_PATH_SLUG', value: full_path_slug, public: true },
|
{ key: 'CI_PROJECT_PATH_SLUG', value: full_path_slug, public: true },
|
||||||
{ key: 'CI_PROJECT_NAMESPACE', value: namespace.full_path, public: true },
|
{ key: 'CI_PROJECT_NAMESPACE', value: namespace.full_path, public: true },
|
||||||
{ key: 'CI_PROJECT_URL', value: web_url, public: true }
|
{ key: 'CI_PROJECT_URL', value: web_url, public: true },
|
||||||
|
{ key: 'AUTO_DEVOPS_DOMAIN', value: auto_devops.domain, public: true }
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
class ProjectAutoDevops < ActiveRecord::Base
|
class ProjectAutoDevops < ActiveRecord::Base
|
||||||
belongs_to :project
|
belongs_to :project
|
||||||
|
|
||||||
|
validates :domain, presence: true
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -67,10 +67,11 @@ module Ci
|
||||||
return error('Commit not found')
|
return error('Commit not found')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
unless pipeline.detect_ci_yaml_file
|
||||||
|
return error("Missing #{pipeline.ci_yaml_file_path} file")
|
||||||
|
end
|
||||||
|
|
||||||
unless pipeline.config_processor
|
unless pipeline.config_processor
|
||||||
unless pipeline.ci_yaml_file
|
|
||||||
return error("Missing #{pipeline.ci_yaml_file_path} file")
|
|
||||||
end
|
|
||||||
return error(pipeline.yaml_errors, save: save_on_errors)
|
return error(pipeline.yaml_errors, save: save_on_errors)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,6 @@ ActiveSupport::Inflector.inflections do |inflect|
|
||||||
award_emoji
|
award_emoji
|
||||||
project_statistics
|
project_statistics
|
||||||
system_note_metadata
|
system_note_metadata
|
||||||
auto_devops
|
project_auto_devops
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,9 @@ class CreateProjectAutoDevOps < ActiveRecord::Migration
|
||||||
|
|
||||||
def up
|
def up
|
||||||
create_table :project_auto_devops do |t|
|
create_table :project_auto_devops do |t|
|
||||||
t.belongs_to :project, index: true
|
t.belongs_to :project, null: false, index: { unique: true }
|
||||||
t.boolean :enabled, default: nil, null: true
|
t.boolean :enabled, default: nil, null: true
|
||||||
t.string :domain
|
t.string :domain, null: false
|
||||||
end
|
end
|
||||||
|
|
||||||
add_timestamps_with_timezone(:project_auto_devops, null: false)
|
add_timestamps_with_timezone(:project_auto_devops, null: false)
|
||||||
|
|
|
||||||
|
|
@ -1123,14 +1123,14 @@ ActiveRecord::Schema.define(version: 20170831092813) do
|
||||||
add_index "project_authorizations", ["user_id", "project_id", "access_level"], name: "index_project_authorizations_on_user_id_project_id_access_level", unique: true, using: :btree
|
add_index "project_authorizations", ["user_id", "project_id", "access_level"], name: "index_project_authorizations_on_user_id_project_id_access_level", unique: true, using: :btree
|
||||||
|
|
||||||
create_table "project_auto_devops", force: :cascade do |t|
|
create_table "project_auto_devops", force: :cascade do |t|
|
||||||
t.integer "project_id"
|
t.integer "project_id", null: false
|
||||||
t.boolean "enabled"
|
t.boolean "enabled"
|
||||||
t.string "domain"
|
t.string "domain", null: false
|
||||||
t.datetime_with_timezone "created_at", null: false
|
t.datetime_with_timezone "created_at", null: false
|
||||||
t.datetime_with_timezone "updated_at", null: false
|
t.datetime_with_timezone "updated_at", null: false
|
||||||
end
|
end
|
||||||
|
|
||||||
add_index "project_auto_devops", ["project_id"], name: "index_project_auto_devops_on_project_id", using: :btree
|
add_index "project_auto_devops", ["project_id"], name: "index_project_auto_devops_on_project_id", unique: true, using: :btree
|
||||||
|
|
||||||
create_table "project_features", force: :cascade do |t|
|
create_table "project_features", force: :cascade do |t|
|
||||||
t.integer "project_id"
|
t.integer "project_id"
|
||||||
|
|
@ -1215,6 +1215,7 @@ ActiveRecord::Schema.define(version: 20170831092813) do
|
||||||
t.string "repository_storage", default: "default", null: false
|
t.string "repository_storage", default: "default", null: false
|
||||||
t.boolean "request_access_enabled", default: false, null: false
|
t.boolean "request_access_enabled", default: false, null: false
|
||||||
t.boolean "has_external_wiki"
|
t.boolean "has_external_wiki"
|
||||||
|
t.string "ci_config_path"
|
||||||
t.boolean "lfs_enabled"
|
t.boolean "lfs_enabled"
|
||||||
t.text "description_html"
|
t.text "description_html"
|
||||||
t.boolean "only_allow_merge_if_all_discussions_are_resolved"
|
t.boolean "only_allow_merge_if_all_discussions_are_resolved"
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ module Gitlab
|
||||||
create_access_levels: 'ProtectedTag::CreateAccessLevel',
|
create_access_levels: 'ProtectedTag::CreateAccessLevel',
|
||||||
labels: :project_labels,
|
labels: :project_labels,
|
||||||
priorities: :label_priorities,
|
priorities: :label_priorities,
|
||||||
auto_devops: 'ProjectAutoDevops',
|
auto_devops: :project_auto_devops,
|
||||||
label: :project_label }.freeze
|
label: :project_label }.freeze
|
||||||
|
|
||||||
USER_REFERENCES = %w[author_id assignee_id updated_by_id user_id created_by_id last_edited_by_id merge_user_id resolved_by_id].freeze
|
USER_REFERENCES = %w[author_id assignee_id updated_by_id user_id created_by_id last_edited_by_id merge_user_id resolved_by_id].freeze
|
||||||
|
|
|
||||||
|
|
@ -467,3 +467,6 @@ ProjectAutoDevops:
|
||||||
- id
|
- id
|
||||||
- enabled
|
- enabled
|
||||||
- domain
|
- domain
|
||||||
|
- project_id
|
||||||
|
- created_at
|
||||||
|
- updated_at
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,12 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe ProjectAutoDevops, type: :model do
|
describe ProjectAutoDevops do
|
||||||
subject { build_stubbed(:project_auto_devops) }
|
subject { build_stubbed(:project_auto_devops) }
|
||||||
|
|
||||||
it { is_expected.to belong_to(:project) }
|
it { is_expected.to belong_to(:project) }
|
||||||
|
|
||||||
|
it { is_expected.to validate_presence_of(:domain) }
|
||||||
|
|
||||||
it { is_expected.to respond_to(:created_at) }
|
it { is_expected.to respond_to(:created_at) }
|
||||||
it { is_expected.to respond_to(:updated_at) }
|
it { is_expected.to respond_to(:updated_at) }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,7 @@ describe Project do
|
||||||
it { is_expected.to have_one(:import_data).class_name('ProjectImportData') }
|
it { is_expected.to have_one(:import_data).class_name('ProjectImportData') }
|
||||||
it { is_expected.to have_one(:last_event).class_name('Event') }
|
it { is_expected.to have_one(:last_event).class_name('Event') }
|
||||||
it { is_expected.to have_one(:forked_from_project).through(:forked_project_link) }
|
it { is_expected.to have_one(:forked_from_project).through(:forked_project_link) }
|
||||||
|
it { is_expected.to have_one(:auto_devops).class_name('ProjectAutoDevops') }
|
||||||
it { is_expected.to have_many(:commit_statuses) }
|
it { is_expected.to have_many(:commit_statuses) }
|
||||||
it { is_expected.to have_many(:pipelines) }
|
it { is_expected.to have_many(:pipelines) }
|
||||||
it { is_expected.to have_many(:builds) }
|
it { is_expected.to have_many(:builds) }
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue