diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/assets/javascripts/ide/components/jobs/detail.vue | 14 | ||||
-rw-r--r-- | app/assets/javascripts/lib/logger/hello.js | 29 | ||||
-rw-r--r-- | app/helpers/ci/jobs_helper.rb | 2 | ||||
-rw-r--r-- | app/models/ci/bridge.rb | 6 | ||||
-rw-r--r-- | app/models/namespace.rb | 8 | ||||
-rw-r--r-- | app/models/namespaces/user_namespace.rb | 2 | ||||
-rw-r--r-- | app/models/operations/feature_flag.rb | 30 | ||||
-rw-r--r-- | app/models/operations/feature_flag_scope.rb | 66 | ||||
-rw-r--r-- | app/models/user.rb | 6 | ||||
-rw-r--r-- | app/serializers/feature_flag_entity.rb | 4 | ||||
-rw-r--r-- | app/serializers/feature_flag_scope_entity.rb | 12 | ||||
-rw-r--r-- | app/workers/all_queues.yml | 9 | ||||
-rw-r--r-- | app/workers/ci/create_downstream_pipeline_worker.rb | 19 |
13 files changed, 78 insertions, 129 deletions
diff --git a/app/assets/javascripts/ide/components/jobs/detail.vue b/app/assets/javascripts/ide/components/jobs/detail.vue index c142992a9d1..cc54dd52561 100644 --- a/app/assets/javascripts/ide/components/jobs/detail.vue +++ b/app/assets/javascripts/ide/components/jobs/detail.vue @@ -44,18 +44,18 @@ export default { methods: { ...mapActions('pipelines', ['fetchJobLogs', 'setDetailJob']), scrollDown() { - if (this.$refs.buildTrace) { - this.$refs.buildTrace.scrollTo(0, this.$refs.buildTrace.scrollHeight); + if (this.$refs.buildJobLog) { + this.$refs.buildJobLog.scrollTo(0, this.$refs.buildJobLog.scrollHeight); } }, scrollUp() { - if (this.$refs.buildTrace) { - this.$refs.buildTrace.scrollTo(0, 0); + if (this.$refs.buildJobLog) { + this.$refs.buildJobLog.scrollTo(0, 0); } }, scrollBuildLog: throttle(function buildLogScrollDebounce() { - const { scrollTop } = this.$refs.buildTrace; - const { offsetHeight, scrollHeight } = this.$refs.buildTrace; + const { scrollTop } = this.$refs.buildJobLog; + const { offsetHeight, scrollHeight } = this.$refs.buildJobLog; if (scrollTop + offsetHeight === scrollHeight) { this.scrollPos = scrollPositions.bottom; @@ -97,7 +97,7 @@ export default { <scroll-button :disabled="isScrolledToBottom" direction="down" @click="scrollDown" /> </div> </div> - <pre ref="buildTrace" class="build-trace mb-0 h-100 mr-3" @scroll="scrollBuildLog"> + <pre ref="buildJobLog" class="build-trace mb-0 h-100 mr-3" @scroll="scrollBuildLog"> <code v-show="!detailJob.isLoading" class="bash" diff --git a/app/assets/javascripts/lib/logger/hello.js b/app/assets/javascripts/lib/logger/hello.js index 18fa35ab55b..ccfdfe91e60 100644 --- a/app/assets/javascripts/lib/logger/hello.js +++ b/app/assets/javascripts/lib/logger/hello.js @@ -1,15 +1,36 @@ +import { s__, sprintf } from '~/locale'; + const HANDSHAKE = String.fromCodePoint(0x1f91d); const MAG = String.fromCodePoint(0x1f50e); +const ROCKET = String.fromCodePoint(0x1f680); export const logHello = () => { // eslint-disable-next-line no-console console.log( - `%cWelcome to GitLab!%c + `%c${s__('HelloMessage|Welcome to GitLab!')}%c -Does this page need fixes or improvements? Open an issue or contribute a merge request to help make GitLab more lovable. At GitLab, everyone can contribute! +${s__( + 'HelloMessage|Does this page need fixes or improvements? Open an issue or contribute a merge request to help make GitLab more lovable. At GitLab, everyone can contribute!', +)} -${HANDSHAKE} Contribute to GitLab: https://about.gitlab.com/community/contribute/ -${MAG} Create a new GitLab issue: https://gitlab.com/gitlab-org/gitlab/-/issues/new`, +${sprintf(s__('HelloMessage|%{handshake_emoji} Contribute to GitLab: %{contribute_link}'), { + handshake_emoji: `${HANDSHAKE}`, + contribute_link: 'https://about.gitlab.com/community/contribute/', +})} +${sprintf(s__('HelloMessage|%{magnifier_emoji} Create a new GitLab issue: %{new_issue_link}'), { + magnifier_emoji: `${MAG}`, + new_issue_link: 'https://gitlab.com/gitlab-org/gitlab/-/issues/new', +})} +${ + window.gon?.dot_com + ? `${sprintf( + s__( + 'HelloMessage|%{rocket_emoji} We like your curiosity! Help us improve GitLab by joining the team: %{jobs_page_link}', + ), + { rocket_emoji: `${ROCKET}`, jobs_page_link: 'https://about.gitlab.com/jobs/' }, + )}` + : '' +}`, `padding-top: 0.5em; font-size: 2em;`, 'padding-bottom: 0.5em;', ); diff --git a/app/helpers/ci/jobs_helper.rb b/app/helpers/ci/jobs_helper.rb index 882302f05ad..d02fe3f20b0 100644 --- a/app/helpers/ci/jobs_helper.rb +++ b/app/helpers/ci/jobs_helper.rb @@ -7,7 +7,7 @@ module Ci "endpoint" => project_job_path(@project, @build, format: :json), "project_path" => @project.full_path, "artifact_help_url" => help_page_path('user/gitlab_com/index.html', anchor: 'gitlab-cicd'), - "deployment_help_url" => help_page_path('user/project/clusters/index.html', anchor: 'troubleshooting'), + "deployment_help_url" => help_page_path('user/project/clusters/deploy_to_cluster.html', anchor: 'troubleshooting'), "runner_settings_url" => project_runners_path(@build.project, anchor: 'js-runners-settings'), "page_path" => project_job_path(@project, @build), "build_status" => @build.status, diff --git a/app/models/ci/bridge.rb b/app/models/ci/bridge.rb index 97fb8233d34..29bedd07a55 100644 --- a/app/models/ci/bridge.rb +++ b/app/models/ci/bridge.rb @@ -31,7 +31,11 @@ module Ci next unless bridge.triggers_downstream_pipeline? bridge.run_after_commit do - ::Ci::CreateCrossProjectPipelineWorker.perform_async(bridge.id) + if ::Feature.enabled?(:create_cross_project_pipeline_worker_rename, default_enabled: :yaml) + ::Ci::CreateDownstreamPipelineWorker.perform_async(bridge.id) + else + ::Ci::CreateCrossProjectPipelineWorker.perform_async(bridge.id) + end end end diff --git a/app/models/namespace.rb b/app/models/namespace.rb index b7895f6cbf3..3ffd377251c 100644 --- a/app/models/namespace.rb +++ b/app/models/namespace.rb @@ -101,7 +101,9 @@ class Namespace < ApplicationRecord saved_change_to_name? || saved_change_to_path? || saved_change_to_parent_id? } - scope :for_user, -> { where(type: nil) } + # TODO: change to `type: Namespaces::UserNamespace.sti_name` when + # working on issue https://gitlab.com/gitlab-org/gitlab/-/issues/341070 + scope :user_namespaces, -> { where(type: [nil, Namespaces::UserNamespace.sti_name]) } scope :sort_by_type, -> { order(Gitlab::Database.nulls_first_order(:type)) } scope :include_route, -> { includes(:route) } scope :by_parent, -> (parent) { where(parent_id: parent) } @@ -143,9 +145,7 @@ class Namespace < ApplicationRecord when Namespaces::ProjectNamespace.sti_name Namespaces::ProjectNamespace when Namespaces::UserNamespace.sti_name - # TODO: We create a normal Namespace until - # https://gitlab.com/gitlab-org/gitlab/-/merge_requests/68894 is ready - Namespace + Namespaces::UserNamespace else Namespace end diff --git a/app/models/namespaces/user_namespace.rb b/app/models/namespaces/user_namespace.rb index 517d68b118d..22b7a0a3b2b 100644 --- a/app/models/namespaces/user_namespace.rb +++ b/app/models/namespaces/user_namespace.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true # TODO: currently not created/mapped in the database, will be done in another issue -# https://gitlab.com/gitlab-org/gitlab/-/issues/337102 +# https://gitlab.com/gitlab-org/gitlab/-/issues/341070 module Namespaces class UserNamespace < Namespace def self.sti_name diff --git a/app/models/operations/feature_flag.rb b/app/models/operations/feature_flag.rb index 46810749b18..28e8cf52d83 100644 --- a/app/models/operations/feature_flag.rb +++ b/app/models/operations/feature_flag.rb @@ -19,13 +19,10 @@ module Operations default_value_for :active, true default_value_for :version, :new_version_flag - # scopes exists only for the first version - has_many :scopes, class_name: 'Operations::FeatureFlagScope' # strategies exists only for the second version has_many :strategies, class_name: 'Operations::FeatureFlags::Strategy' has_many :feature_flag_issues has_many :issues, through: :feature_flag_issues - has_one :default_scope, -> { where(environment_scope: '*') }, class_name: 'Operations::FeatureFlagScope' validates :project, presence: true validates :name, @@ -37,10 +34,7 @@ module Operations } validates :name, uniqueness: { scope: :project_id } validates :description, allow_blank: true, length: 0..255 - validate :first_default_scope, on: :create, if: :has_scopes? - validate :version_associations - accepts_nested_attributes_for :scopes, allow_destroy: true accepts_nested_attributes_for :strategies, allow_destroy: true scope :ordered, -> { order(:name) } @@ -56,7 +50,7 @@ module Operations class << self def preload_relations - preload(:scopes, strategies: :scopes) + preload(strategies: :scopes) end def for_unleash_client(project, environment) @@ -119,27 +113,5 @@ module Operations active: active } end - - private - - def version_associations - if new_version_flag? && scopes.any? - errors.add(:version_associations, 'version 2 feature flags may not have scopes') - end - end - - def first_default_scope - unless scopes.first.environment_scope == '*' - errors.add(:default_scope, 'has to be the first element') - end - end - - def build_default_scope - scopes.build(environment_scope: '*', active: self.active) - end - - def has_scopes? - scopes.any? - end end end diff --git a/app/models/operations/feature_flag_scope.rb b/app/models/operations/feature_flag_scope.rb deleted file mode 100644 index 9068ca0f588..00000000000 --- a/app/models/operations/feature_flag_scope.rb +++ /dev/null @@ -1,66 +0,0 @@ -# frozen_string_literal: true - -# All of the legacy flags have been removed in 14.1, including all of the -# `operations_feature_flag_scopes` rows. Therefore, this model and the database -# table are unused and should be removed. - -module Operations - class FeatureFlagScope < ApplicationRecord - prepend HasEnvironmentScope - include Gitlab::Utils::StrongMemoize - - self.table_name = 'operations_feature_flag_scopes' - - belongs_to :feature_flag - - validates :environment_scope, uniqueness: { - scope: :feature_flag, - message: "(%{value}) has already been taken" - } - - validates :environment_scope, - if: :default_scope?, on: :update, - inclusion: { in: %w(*), message: 'cannot be changed from default scope' } - - validates :strategies, feature_flag_strategies: true - - before_destroy :prevent_destroy_default_scope, if: :default_scope? - - scope :ordered, -> { order(:id) } - scope :enabled, -> { where(active: true) } - scope :disabled, -> { where(active: false) } - - def self.with_name_and_description - joins(:feature_flag) - .select(FeatureFlag.arel_table[:name], FeatureFlag.arel_table[:description]) - end - - def self.for_unleash_client(project, environment) - select_columns = [ - 'DISTINCT ON (operations_feature_flag_scopes.feature_flag_id) operations_feature_flag_scopes.id', - '(operations_feature_flags.active AND operations_feature_flag_scopes.active) AS active', - 'operations_feature_flag_scopes.strategies', - 'operations_feature_flag_scopes.environment_scope', - 'operations_feature_flag_scopes.created_at', - 'operations_feature_flag_scopes.updated_at' - ] - - select(select_columns) - .with_name_and_description - .where(feature_flag_id: project.operations_feature_flags.select(:id)) - .order(:feature_flag_id) - .on_environment(environment) - .reverse_order - end - - private - - def default_scope? - environment_scope_was == '*' - end - - def prevent_destroy_default_scope - raise ActiveRecord::ReadOnlyRecord, "default scope cannot be destroyed" - end - end -end diff --git a/app/models/user.rb b/app/models/user.rb index 311712bba1e..ae75e0f8011 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -112,7 +112,9 @@ class User < ApplicationRecord # # Namespace for personal projects - has_one :namespace, -> { where(type: nil) }, dependent: :destroy, foreign_key: :owner_id, inverse_of: :owner, autosave: true # rubocop:disable Cop/ActiveRecordDependent + # TODO: change to `type: Namespaces::UserNamespace.sti_name` when + # working on issue https://gitlab.com/gitlab-org/gitlab/-/issues/341070 + has_one :namespace, -> { where(type: [nil, Namespaces::UserNamespace.sti_name]) }, dependent: :destroy, foreign_key: :owner_id, inverse_of: :owner, autosave: true # rubocop:disable Cop/ActiveRecordDependent # Profile has_many :keys, -> { regular_keys }, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent @@ -728,7 +730,7 @@ class User < ApplicationRecord end def find_by_full_path(path, follow_redirects: false) - namespace = Namespace.for_user.find_by_full_path(path, follow_redirects: follow_redirects) + namespace = Namespace.user_namespaces.find_by_full_path(path, follow_redirects: follow_redirects) namespace&.owner end diff --git a/app/serializers/feature_flag_entity.rb b/app/serializers/feature_flag_entity.rb index 80cf869a389..196a4cd504f 100644 --- a/app/serializers/feature_flag_entity.rb +++ b/app/serializers/feature_flag_entity.rb @@ -24,8 +24,8 @@ class FeatureFlagEntity < Grape::Entity project_feature_flag_path(feature_flag.project, feature_flag) end - expose :scopes, with: FeatureFlagScopeEntity do |feature_flag| - feature_flag.scopes.sort_by(&:id) + expose :scopes do |_ff| + [] end expose :strategies, with: FeatureFlags::StrategyEntity do |feature_flag| diff --git a/app/serializers/feature_flag_scope_entity.rb b/app/serializers/feature_flag_scope_entity.rb deleted file mode 100644 index 0450797a545..00000000000 --- a/app/serializers/feature_flag_scope_entity.rb +++ /dev/null @@ -1,12 +0,0 @@ -# frozen_string_literal: true - -class FeatureFlagScopeEntity < Grape::Entity - include RequestAwareEntity - - expose :id - expose :active - expose :environment_scope - expose :created_at - expose :updated_at - expose :strategies -end diff --git a/app/workers/all_queues.yml b/app/workers/all_queues.yml index 0a600666ccd..281889153be 100644 --- a/app/workers/all_queues.yml +++ b/app/workers/all_queues.yml @@ -1474,6 +1474,15 @@ :weight: 3 :idempotent: :tags: [] +- :name: pipeline_default:ci_create_downstream_pipeline + :worker_name: Ci::CreateDownstreamPipelineWorker + :feature_category: :continuous_integration + :has_external_dependencies: + :urgency: :low + :resource_boundary: :cpu + :weight: 3 + :idempotent: + :tags: [] - :name: pipeline_default:ci_drop_pipeline :worker_name: Ci::DropPipelineWorker :feature_category: :continuous_integration diff --git a/app/workers/ci/create_downstream_pipeline_worker.rb b/app/workers/ci/create_downstream_pipeline_worker.rb new file mode 100644 index 00000000000..6d4cd2539c1 --- /dev/null +++ b/app/workers/ci/create_downstream_pipeline_worker.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module Ci + class CreateDownstreamPipelineWorker # rubocop:disable Scalability/IdempotentWorker + include ::ApplicationWorker + include ::PipelineQueue + + sidekiq_options retry: 3 + worker_resource_boundary :cpu + + def perform(bridge_id) + ::Ci::Bridge.find_by_id(bridge_id).try do |bridge| + ::Ci::CreateDownstreamPipelineService + .new(bridge.project, bridge.user) + .execute(bridge) + end + end + end +end |