-
-
-
+
+
+
+
+
+
+
+
+ {{
+ showCommitId
+ }}
+
+
+
+ {{ __('History') }}
+
-
- {{
- showCommitId
- }}
-
-
-
- {{ __('History') }}
-
-
-
+
+
+
diff --git a/app/assets/javascripts/repository/index.js b/app/assets/javascripts/repository/index.js
index bc5d63bfaec..33127a165f8 100644
--- a/app/assets/javascripts/repository/index.js
+++ b/app/assets/javascripts/repository/index.js
@@ -1,10 +1,8 @@
-import { GlButton } from '@gitlab/ui';
import Vue from 'vue';
// eslint-disable-next-line no-restricted-imports
import Vuex from 'vuex';
import { parseBoolean } from '~/lib/utils/common_utils';
import { joinPaths, visitUrl } from '~/lib/utils/url_utility';
-import { __ } from '~/locale';
import initWebIdeLink from '~/pages/projects/shared/web_ide_link';
import PerformancePlugin from '~/performance/vue_performance_plugin';
import createStore from '~/code_navigation/store';
@@ -269,35 +267,6 @@ export default function setupVueRepositoryList() {
});
}
- const treeHistoryLinkEl = document.getElementById('js-tree-history-link');
- if (treeHistoryLinkEl) {
- const { historyLink } = treeHistoryLinkEl.dataset;
- // eslint-disable-next-line no-new
- new Vue({
- el: treeHistoryLinkEl,
- router,
- render(h) {
- const url = generateHistoryUrl(
- historyLink,
- this.$route.params.path,
- this.$route.meta.refType || this.$route.query.ref_type,
- );
- return h(
- GlButton,
- {
- attrs: {
- href: url.href,
- // Ideally passing this class to `props` should work
- // But it doesn't work here. :(
- class: 'btn btn-default btn-md gl-button',
- },
- },
- [__('History')],
- );
- },
- });
- }
-
initWebIdeLink({ el: document.getElementById('js-tree-web-ide-link'), router });
// eslint-disable-next-line no-new
diff --git a/app/models/namespace.rb b/app/models/namespace.rb
index d8cb6a53d51..84264907dee 100644
--- a/app/models/namespace.rb
+++ b/app/models/namespace.rb
@@ -221,6 +221,7 @@ class Namespace < ApplicationRecord
scope :without_deleted, -> { joins(:namespace_details).where(namespace_details: { deleted_at: nil }) }
scope :user_namespaces, -> { where(type: Namespaces::UserNamespace.sti_name) }
scope :group_namespaces, -> { where(type: Group.sti_name) }
+ scope :project_namespaces, -> { where(type: Namespaces::ProjectNamespace.sti_name) }
scope :without_project_namespaces, -> { where(Namespace.arel_table[:type].not_eq(Namespaces::ProjectNamespace.sti_name)) }
scope :sort_by_type, -> { order(arel_table[:type].asc.nulls_first) }
scope :include_route, -> { includes(:route) }
diff --git a/app/services/ml/increment_version_service.rb b/app/services/ml/increment_version_service.rb
index ef3cbf5269b..6695fb14ed9 100644
--- a/app/services/ml/increment_version_service.rb
+++ b/app/services/ml/increment_version_service.rb
@@ -7,7 +7,7 @@ module Ml
class IncrementVersionService
def initialize(version, increment_type = nil)
@version = version
- @increment_type = increment_type || :major
+ @increment_type = increment_type || :patch
@parsed_version = Packages::SemVer.parse(@version.to_s)
raise "Version must be in a valid SemVer format" unless @parsed_version || @version.nil?
diff --git a/app/views/projects/_files.html.haml b/app/views/projects/_files.html.haml
index a4923942298..6c36bdc9c36 100644
--- a/app/views/projects/_files.html.haml
+++ b/app/views/projects/_files.html.haml
@@ -10,7 +10,7 @@
#tree-holder.tree-holder.clearfix.js-per-page.gl-mt-5{ data: { blame_per_page: Gitlab::Git::BlamePagination::PAGINATION_PER_PAGE } }
- if params[:common_repository_blob_header_app] == 'true'
- #js-repository-blob-header-app{ data: { project_id: @project.id, ref: ref, ref_type: @ref_type.to_s, history_link: project_commits_path(@project, @ref), breadcrumbs: breadcrumb_data_attributes, project_root_path: project_path(@project), project_path: project.full_path, compare_path: compare_path, escaped_ref: ActionDispatch::Journey::Router::Utils.escape_path(ref) } }
+ #js-repository-blob-header-app{ data: { project_id: @project.id, ref: ref, ref_type: @ref_type.to_s, breadcrumbs: breadcrumb_data_attributes, project_root_path: project_path(@project), project_path: project.full_path, compare_path: compare_path, escaped_ref: ActionDispatch::Journey::Router::Utils.escape_path(ref) } }
- else
.nav-block.gl-flex.gl-flex-col.sm:gl-flex-row.gl-items-stretch
@@ -19,10 +19,10 @@
- if project.forked?
#js-fork-info{ data: vue_fork_divergence_data(project, ref) }
- .info-well.gl-hidden.sm:gl-flex.project-last-commit.gl-flex-col.gl-mt-5
+ .info-well.project-last-commit.gl-flex-col.gl-mt-5
#js-last-commit.gl-m-auto{ data: {ref_type: @ref_type.to_s, history_link: project_commits_path(@project, @ref)} }
= gl_loading_icon(size: 'md')
- if project.licensed_feature_available?(:code_owners)
- #js-code-owners{ data: { branch: @ref, can_view_branch_rules: can_view_branch_rules?, branch_rules_path: branch_rules_path } }
+ #js-code-owners.gl-hidden.sm:gl-flex{ data: { branch: @ref, can_view_branch_rules: can_view_branch_rules?, branch_rules_path: branch_rules_path } }
#js-tree-list{ data: vue_file_list_data(project, ref) }
diff --git a/app/views/projects/_readme.html.haml b/app/views/projects/_readme.html.haml
index 08dc61e5694..fea04813828 100644
--- a/app/views/projects/_readme.html.haml
+++ b/app/views/projects/_readme.html.haml
@@ -7,7 +7,7 @@
- if (readme = @repository.readme) && readme.rich_viewer
.tree-holder.gl-mt-5
- if params[:common_repository_blob_header_app] == 'true'
- #js-repository-blob-header-app{ data: { project_id: @project.id, ref: ref, ref_type: @ref_type.to_s, history_link: project_commits_path(@project, @ref), breadcrumbs: breadcrumb_data_attributes, project_root_path: project_path(@project), project_path: project.full_path, compare_path: compare_path, escaped_ref: ActionDispatch::Journey::Router::Utils.escape_path(ref) } }
+ #js-repository-blob-header-app{ data: { project_id: @project.id, ref: ref, ref_type: @ref_type.to_s, breadcrumbs: breadcrumb_data_attributes, project_root_path: project_path(@project), project_path: project.full_path, compare_path: compare_path, escaped_ref: ActionDispatch::Journey::Router::Utils.escape_path(ref) } }
- else
.nav-block.mt-0
diff --git a/app/views/projects/tree/_tree_header.html.haml b/app/views/projects/tree/_tree_header.html.haml
index 2b4d5c92658..8d353c4c4a7 100644
--- a/app/views/projects/tree/_tree_header.html.haml
+++ b/app/views/projects/tree/_tree_header.html.haml
@@ -10,9 +10,6 @@
= render_if_exists 'projects/tree/lock_link'
= render 'projects/buttons/compare', project: @project, ref: @ref, root_ref: @repository&.root_ref
- .gl-block.sm:gl-hidden.gl-w-full
- #js-tree-history-link{ data: { history_link: project_commits_path(@project, @ref) } }
-
= render 'projects/find_file_link'
= render 'shared/web_ide_button', blob: nil, css_classes: 'gl-w-full sm:gl-w-auto'
diff --git a/app/workers/prune_old_events_worker.rb b/app/workers/prune_old_events_worker.rb
index 9a4d1a38086..b527b75ba83 100644
--- a/app/workers/prune_old_events_worker.rb
+++ b/app/workers/prune_old_events_worker.rb
@@ -13,11 +13,16 @@ class PruneOldEventsWorker # rubocop:disable Scalability/IdempotentWorker
feature_category :user_profile
DELETE_LIMIT = 10_000
+ # Contribution calendar shows maximum 12 months of events, we retain 3 years for data integrity.
+ CUTOFF_DATE = (3.years + 1.day).freeze
+
+ def self.pruning_enabled?
+ Feature.enabled?(:ops_prune_old_events, type: :ops)
+ end
def perform
- if Feature.enabled?(:ops_prune_old_events, type: :ops)
- # Contribution calendar shows maximum 12 months of events, we retain 3 years for data integrity.
- cutoff_date = (3.years + 1.day).ago
+ if self.class.pruning_enabled?
+ cutoff_date = CUTOFF_DATE.ago
Event.unscoped.created_before(cutoff_date).delete_with_limit(DELETE_LIMIT)
else
diff --git a/config/feature_flags/development/handle_structured_gitaly_errors.yml b/config/feature_flags/development/handle_structured_gitaly_errors.yml
deleted file mode 100644
index 26a8082dec4..00000000000
--- a/config/feature_flags/development/handle_structured_gitaly_errors.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-name: handle_structured_gitaly_errors
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/128366
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/420865
-milestone: '16.3'
-type: development
-group: group::source code
-default_enabled: false
diff --git a/doc/ci/runners/img/project_runner_ip_address_v17_6.png b/doc/ci/runners/img/project_runner_ip_address_v17_6.png
new file mode 100644
index 00000000000..f89c3466451
Binary files /dev/null and b/doc/ci/runners/img/project_runner_ip_address_v17_6.png differ
diff --git a/doc/ci/runners/runners_scope.md b/doc/ci/runners/runners_scope.md
index 631cc2ad830..9a8bc5aa02d 100644
--- a/doc/ci/runners/runners_scope.md
+++ b/doc/ci/runners/runners_scope.md
@@ -75,9 +75,10 @@ the authentication token is stored in the `config.toml`.
### Create an instance runner with a registration token (deprecated)
WARNING:
-The ability to pass a runner registration token, and support for certain configuration arguments was
-[deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/380872) in GitLab 15.6 and will be removed in GitLab 18.0. Runner authentication tokens
-should be used instead. For more information, see [Migrating to the new runner registration workflow](new_creation_workflow.md).
+The option to pass a runner registration token and support for certain configuration arguments was
+[deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/380872) in GitLab 15.6. They are scheduled for removal
+in GitLab 18.0. Use runner authentication tokens instead. For more information, see
+[Migrating to the new runner registration workflow](new_creation_workflow.md).
Prerequisites:
@@ -172,7 +173,7 @@ To disable instance runners for a project:
Instance runners are automatically disabled for a project:
- If the instance runners setting for the parent group is disabled, and
-- If overriding this setting is not permitted at the project level.
+- If overriding this setting is not permitted for projects.
### Disable instance runners for a group
@@ -274,9 +275,10 @@ The runner authentication token displays in the UI for only a short period of ti
> - Path changed from **Settings > CI/CD > Runners**.
WARNING:
-The ability to pass a runner registration token, and support for certain configuration arguments was
-[deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/380872) in GitLab 15.6 and will be removed in GitLab 18.0. Authentication tokens
-should be used instead. For more information, see [Migrating to the new runner registration workflow](new_creation_workflow.md).
+The option to pass a runner registration token and support for certain configuration arguments was
+[deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/380872) in GitLab 15.6. They are scheduled for removal
+in GitLab 18.0. Use runner authentication tokens instead. For more information, see
+[Migrating to the new runner registration workflow](new_creation_workflow.md).
Prerequisites:
@@ -476,9 +478,10 @@ The runner authentication token displays in the UI for only a short period of ti
### Create a project runner with a registration token (deprecated)
WARNING:
-The ability to pass a runner registration token, and support for certain configuration arguments was
-[deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/380872) in GitLab 15.6 and will be removed in GitLab 18.0. Runner authentication tokens
-should be used instead. For more information, see [Migrating to the new runner registration workflow](new_creation_workflow.md).
+The option to pass a runner registration token and support for certain configuration arguments was
+[deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/380872) in GitLab 15.6. They are scheduled for removal
+in GitLab 18.0. Use runner authentication tokens instead. For more information, see
+[Migrating to the new runner registration workflow](new_creation_workflow.md).
Prerequisites:
@@ -587,7 +590,7 @@ A runner can have one of the following statuses.
| Status | Description |
|---------|-------------|
-| `online` | The runner has contacted GitLab within the last 2 hours and is available to run jobs. |
+| `online` | The runner has contacted GitLab in the last 2 hours and is available to run jobs. |
| `offline` | The runner has not contacted GitLab in more than 2 hours and is not available to run jobs. Check the runner to see if you can bring it online. |
| `stale` | The runner has not contacted GitLab in more than 7 days. If the runner was created more than 7 days ago, but it never contacted the instance, it is also considered **stale**. |
| `never_contacted` | The runner has never contacted GitLab. To make the runner contact GitLab, run `gitlab-runner run`. |
@@ -606,8 +609,8 @@ The **Median job queued time** value is calculated by sampling the queue duratio
most recent 100 jobs that were run by Instance runners. Jobs from only the latest 5000
runners are considered.
-The median is a value that falls into the 50th percentile: half of the jobs
-queued for longer than the median value, and half of the jobs queued for less than the
+The median is a value that falls into the 50th percentile. Half of the jobs
+queue longer than the median value, and half queue for less time than the
median value.
To view runner statistics:
@@ -646,11 +649,10 @@ To determine which runners need to be upgraded:
## Determine the IP address of a runner
-It may be useful to know the IP address of a runner so you can troubleshoot
-issues with that runner. GitLab stores and displays the IP address by viewing
-the source of the HTTP requests it makes to GitLab when polling for jobs. The
-IP address is always kept up to date so if the runner IP changes it
-automatically updates in GitLab.
+To troubleshoot runner issues, you might need to know the runner's IP address.
+GitLab stores and displays the IP address by viewing the source of the
+HTTP requests when the runner polls for jobs.
+GitLab automatically updates the runner's IP address whenever it is updated.
The IP address for instance runners and project runners can be found in
different places.
@@ -678,24 +680,26 @@ project.
1. Go to the project's **Settings > CI/CD** and expand the **Runners** section.
1. Select the runner name and find the **IP Address** row.
-
+
## Enable use of runner registration tokens in projects and groups
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/148557) in GitLab 16.11
WARNING:
-The ability to pass a runner registration token, and support for certain configuration arguments was deprecated in GitLab 15.6 and will be removed in GitLab 18.0. Runner authentication tokens should be used instead. For more information, see [Migrating to the new runner registration workflow](../../ci/runners/new_creation_workflow.md).
+The option to pass a runner registration token and support for certain configuration arguments was
+[deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/380872) in GitLab 15.6. They are scheduled for removal
+in GitLab 18.0. Use runner authentication tokens instead. For more information, see
+[Migrating to the new runner registration workflow](new_creation_workflow.md).
-In GitLab 17.0, the use of runner registration tokens to create runners will be disabled in all GitLab instances.
-Users must use runner authentication tokens instead.
-If you have not yet [migrated to the use of runner authentication tokens](../../ci/runners/new_creation_workflow.md),
-you can enable runner registration tokens for projects and groups. This setting and support for runner registration tokens will be removed in GitLab 18.0.
+In GitLab 17.0, the use of runner registration tokens is disabled in all GitLab instances.
Prerequisites:
- Runner registration tokens must be [enabled](../../administration/settings/continuous_integration.md#allow-runner-registrations-tokens) in the **Admin** area.
+To enable the use of runner registration token in project and groups:
+
1. On the left sidebar, select **Search or go to** and find your group.
1. Select **Settings > CI/CD**.
1. Expand **Runners**.
diff --git a/doc/user/analytics/dora_metrics.md b/doc/user/analytics/dora_metrics.md
index 639415cb9b4..85799302ac9 100644
--- a/doc/user/analytics/dora_metrics.md
+++ b/doc/user/analytics/dora_metrics.md
@@ -156,8 +156,8 @@ DETAILS:
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/96561) in GitLab 15.4 [with a flag](../../administration/feature_flags.md) named `dora_configuration`. Disabled by default. This feature is an [experiment](../../policy/development_stages_support.md).
FLAG:
-On self-managed GitLab, by default this feature is not available. To make it available per project or for your entire instance, an administrator can [enable the feature flag](../../administration/feature_flags.md) named `dora_configuration`.
-On GitLab.com and GitLab Dedicated, this feature is not available.
+The availability of this feature is controlled by a feature flag.
+For more information, see the history.
This feature is an [experiment](../../policy/development_stages_support.md).
To join the list of users testing this feature, [here is a suggested test flow](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/96561#steps-to-check-on-localhost).
diff --git a/doc/user/enterprise_user/index.md b/doc/user/enterprise_user/index.md
index 00b86eefd31..a9073bc57b4 100644
--- a/doc/user/enterprise_user/index.md
+++ b/doc/user/enterprise_user/index.md
@@ -194,8 +194,12 @@ To disable 2FA:
### Enable the extension marketplace for the Web IDE and workspaces
+DETAILS:
+**Status:** Beta
+
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/161819) as a [beta](../../policy/development_stages_support.md#beta) in GitLab 17.0 [with flags](../../administration/feature_flags.md) named `web_ide_oauth` and `web_ide_extensions_marketplace`. Disabled by default.
-> - Feature flag `web_ide_oauth` [enabled on GitLab.com, self-managed, and GitLab Dedicated](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/163181) and feature flag `web_ide_extensions_marketplace` [enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/459028) in GitLab 17.4.
+> - Feature flag `web_ide_oauth` [enabled on GitLab.com, self-managed, and GitLab Dedicated](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/163181) in GitLab 17.4.
+> - Feature flag `web_ide_extensions_marketplace` [enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/459028) in GitLab 17.4.
> - Feature flag `web_ide_oauth` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/167464) in GitLab 17.5.
FLAG:
diff --git a/doc/user/okrs.md b/doc/user/okrs.md
index 03b7b0829d8..f2a834309c8 100644
--- a/doc/user/okrs.md
+++ b/doc/user/okrs.md
@@ -16,10 +16,9 @@ OKRs are an [experiment](../policy/development_stages_support.md#experiment).
For the OKR feature roadmap, see [epic 7864](https://gitlab.com/groups/gitlab-org/-/epics/7864).
FLAG:
-On self-managed GitLab, by default this feature is not available. To make it available per project, an administrator can [enable the featured flag](../administration/feature_flags.md) named `okrs_mvc`.
-On GitLab.com, by default this feature is not available, but can be configured by GitLab.com administrators.
-On GitLab Dedicated, this feature is not available.
-This feature is not ready for production use.
+The availability of this feature is controlled by a feature flag.
+For more information, see the history.
+This feature is available for testing, but not ready for production use.
[Objectives and key results](https://en.wikipedia.org/wiki/OKR) (OKRs) are a framework for setting
and tracking goals that are aligned with your organization's overall strategy and vision.
@@ -113,6 +112,7 @@ To edit an OKR:
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/378949) in GitLab 15.7 [with a flag](../administration/feature_flags.md) named `work_items_mvc_2`. Disabled by default.
> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/378949) to feature flag named `work_items_mvc` in GitLab 15.8. Disabled by default.
+> - Feature flag [changed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/144141) from `work_items_mvc` to `work_items_beta` in GitLab 16.10.
> - Changing activity sort order [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/378949) in GitLab 15.8.
> - Filtering activity [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/389971) in GitLab 15.10.
> - [Enabled on GitLab.com and self-managed](https://gitlab.com/gitlab-org/gitlab/-/issues/334812) in GitLab 15.10.
@@ -382,9 +382,9 @@ To reorder them, drag them around.
> - [Changed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/169256) the minimum user role from Reporter to Planner in GitLab 17.7.
FLAG:
-On self-managed GitLab, by default this feature is not available. To make it available, an administrator can [enable the feature flag](../administration/feature_flags.md) named `okr_checkin_reminders`.
-On GitLab.com and GitLab Dedicated, this feature is not available.
-This feature is not ready for production use.
+The availability of this feature is controlled by a feature flag.
+For more information, see the history.
+This feature is available for testing, but not ready for production use.
Schedule check-in reminders to remind your team to provide status updates on the key results you care
about.
@@ -525,9 +525,9 @@ system note in the OKR's comments, for example:
> - [Changed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/169256) the minimum user role from Reporter to Planner in GitLab 17.7.
FLAG:
-On self-managed GitLab, by default this feature is not available. To make it available, an administrator can [enable the feature flag](../administration/feature_flags.md) named `work_items_beta`.
-On GitLab.com and GitLab Dedicated, this feature is not available.
-This feature is not ready for production use.
+The availability of this feature is controlled by a feature flag.
+For more information, see the history.
+This feature is available for testing, but not ready for production use.
You can prevent public comments in an OKR.
When you do, only project members can add and edit comments.
diff --git a/lib/api/repositories.rb b/lib/api/repositories.rb
index e0f331d1c81..70651b018e4 100644
--- a/lib/api/repositories.rb
+++ b/lib/api/repositories.rb
@@ -96,10 +96,6 @@ module API
params
]
end
-
- def rescue_not_found?
- Feature.disabled?(:handle_structured_gitaly_errors)
- end
end
desc 'Get a project repository tree' do
@@ -128,7 +124,7 @@ module API
end
end
get ':id/repository/tree', urgency: :low do
- tree_finder = ::Repositories::TreeFinder.new(user_project, declared_params(include_missing: false).merge(rescue_not_found: rescue_not_found?))
+ tree_finder = ::Repositories::TreeFinder.new(user_project, declared_params(include_missing: false).merge(rescue_not_found: false))
not_found!("Tree") unless tree_finder.commit_exists?
diff --git a/lib/gitlab/github_import/importer/events/base_importer.rb b/lib/gitlab/github_import/importer/events/base_importer.rb
index 534e6adcbb7..95a1b96ec51 100644
--- a/lib/gitlab/github_import/importer/events/base_importer.rb
+++ b/lib/gitlab/github_import/importer/events/base_importer.rb
@@ -42,6 +42,12 @@ module Gitlab
issue_event.issuable_type == MergeRequest.name
end
+ # `PruneOldEventsWorker` deletes Event records older than a cutoff date.
+ # Before importing Events, check if they would be pruned.
+ def event_outside_cutoff?(issue_event)
+ issue_event.created_at < PruneOldEventsWorker::CUTOFF_DATE.ago && PruneOldEventsWorker.pruning_enabled?
+ end
+
def resource_event_belongs_to(issue_event)
belongs_to_key = merge_request_event?(issue_event) ? :merge_request_id : :issue_id
{ belongs_to_key => issuable_db_id(issue_event) }
diff --git a/lib/gitlab/github_import/importer/events/closed.rb b/lib/gitlab/github_import/importer/events/closed.rb
index f99d8e58e23..3a757728a57 100644
--- a/lib/gitlab/github_import/importer/events/closed.rb
+++ b/lib/gitlab/github_import/importer/events/closed.rb
@@ -13,6 +13,8 @@ module Gitlab
private
def create_event(issue_event)
+ return if event_outside_cutoff?(issue_event)
+
created_event = Event.create!(
project_id: project.id,
author_id: author_id(issue_event),
diff --git a/lib/gitlab/github_import/importer/events/merged.rb b/lib/gitlab/github_import/importer/events/merged.rb
index bc04ab4cd48..9522dcfbcfa 100644
--- a/lib/gitlab/github_import/importer/events/merged.rb
+++ b/lib/gitlab/github_import/importer/events/merged.rb
@@ -14,6 +14,8 @@ module Gitlab
private
def create_event(issue_event)
+ return if event_outside_cutoff?(issue_event)
+
event = Event.create!(
project_id: project.id,
author_id: author_id(issue_event),
diff --git a/lib/gitlab/github_import/importer/events/reopened.rb b/lib/gitlab/github_import/importer/events/reopened.rb
index 5721b2dc5e5..060f509958c 100644
--- a/lib/gitlab/github_import/importer/events/reopened.rb
+++ b/lib/gitlab/github_import/importer/events/reopened.rb
@@ -13,6 +13,8 @@ module Gitlab
private
def create_event(issue_event)
+ return if event_outside_cutoff?(issue_event)
+
created_event = Event.create!(
project_id: project.id,
author_id: author_id(issue_event),
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index bcfa667331a..2dc61e496f1 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -18951,6 +18951,9 @@ msgstr ""
msgid "Deployment|Flux sync failed"
msgstr ""
+msgid "Deployment|Flux sync is suspended"
+msgstr ""
+
msgid "Deployment|Flux sync reconciled successfully"
msgstr ""
diff --git a/rubocop/cop/migration/create_table_with_foreign_keys.rb b/rubocop/cop/migration/create_table_with_foreign_keys.rb
index e3039ac76a9..093e054950e 100644
--- a/rubocop/cop/migration/create_table_with_foreign_keys.rb
+++ b/rubocop/cop/migration/create_table_with_foreign_keys.rb
@@ -9,7 +9,8 @@ module RuboCop
include MigrationHelpers
MSG = 'Creating a table with more than one foreign key at once violates our migration style guide. ' \
- 'For more details check the https://docs.gitlab.com/ee/development/migration_style_guide.html#examples'
+ 'For more details check the ' \
+ 'https://docs.gitlab.com/ee/development/migration_style_guide.html#creating-a-new-table-when-we-have-two-foreign-keys'
def_node_matcher :create_table_with_block?, <<~PATTERN
(block
diff --git a/scripts/frontend/quarantined_vue3_specs.txt b/scripts/frontend/quarantined_vue3_specs.txt
index 2a53bcd9842..3303e4d1c89 100644
--- a/scripts/frontend/quarantined_vue3_specs.txt
+++ b/scripts/frontend/quarantined_vue3_specs.txt
@@ -170,7 +170,6 @@ spec/frontend/ci/pipelines_page/components/pipeline_multi_actions_spec.js
spec/frontend/ci/pipelines_page/components/pipelines_artifacts_spec.js
spec/frontend/ci/runner/components/runner_details_spec.js
spec/frontend/ci/runner/components/runner_form_fields_spec.js
-spec/frontend/ci/runner/components/runner_managers_table_spec.js
spec/frontend/ci/runner/components/runner_platforms_radio_spec.js
spec/frontend/ci/runner/group_runner_show/group_runner_show_app_spec.js
spec/frontend/ci_settings_pipeline_triggers/components/edit_trigger_modal_spec.js
diff --git a/spec/features/projects/files/user_browses_files_spec.rb b/spec/features/projects/files/user_browses_files_spec.rb
index 8b611a0f8ed..59bf3922865 100644
--- a/spec/features/projects/files/user_browses_files_spec.rb
+++ b/spec/features/projects/files/user_browses_files_spec.rb
@@ -61,7 +61,9 @@ RSpec.describe "User browses files", :js, feature_category: :source_code_managem
click_link("README.md")
end
- click_link("History")
+ page.within(".commit-actions") do
+ click_link("History")
+ end
history_path = project_commits_path(project, "master/README.md")
expect(page).to have_current_path(history_path)
diff --git a/spec/features/projects/settings/secure_files_spec.rb b/spec/features/projects/settings/secure_files_spec.rb
index 13a001de286..c9412824a1c 100644
--- a/spec/features/projects/settings/secure_files_spec.rb
+++ b/spec/features/projects/settings/secure_files_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe 'Secure Files', :js, feature_category: :source_code_management do
+RSpec.describe 'Secure Files', :js, feature_category: :secrets_management do
let(:project) { create(:project) }
let(:user) { create(:user) }
diff --git a/spec/frontend/environments/environment_details/components/kubernetes/kubernetes_overview_spec.js b/spec/frontend/environments/environment_details/components/kubernetes/kubernetes_overview_spec.js
index 96e8d3a2a45..909a165ef36 100644
--- a/spec/frontend/environments/environment_details/components/kubernetes/kubernetes_overview_spec.js
+++ b/spec/frontend/environments/environment_details/components/kubernetes/kubernetes_overview_spec.js
@@ -162,7 +162,7 @@ describe('~/environments/environment_details/components/kubernetes/kubernetes_ov
namespace: kubernetesNamespace,
resourceType: k8sResourceType.k8sPods,
fluxApiError: '',
- fluxResourceStatus: [],
+ fluxResourceStatus: { conditions: [] },
});
});
@@ -240,7 +240,7 @@ describe('~/environments/environment_details/components/kubernetes/kubernetes_ov
});
it('provides empty `fluxResourceStatus` to KubernetesStatusBar', () => {
- expect(findKubernetesStatusBar().props('fluxResourceStatus')).toEqual([]);
+ expect(findKubernetesStatusBar().props('fluxResourceStatus')).toEqual({ conditions: [] });
});
it('provides empty `fluxKustomization` to KubernetesTabs', () => {
@@ -305,9 +305,9 @@ describe('~/environments/environment_details/components/kubernetes/kubernetes_ov
await waitForPromises();
});
it('provides correct `fluxResourceStatus` to KubernetesStatusBar', () => {
- expect(findKubernetesStatusBar().props('fluxResourceStatus')).toEqual(
- fluxResourceStatus,
- );
+ expect(findKubernetesStatusBar().props('fluxResourceStatus')).toEqual({
+ conditions: fluxResourceStatus,
+ });
});
it('provides correct `fluxNamespace` to KubernetesStatusBar', () => {
diff --git a/spec/frontend/environments/environment_details/components/kubernetes/kubernetes_status_bar_spec.js b/spec/frontend/environments/environment_details/components/kubernetes/kubernetes_status_bar_spec.js
index c36f3d93927..643939f20e1 100644
--- a/spec/frontend/environments/environment_details/components/kubernetes/kubernetes_status_bar_spec.js
+++ b/spec/frontend/environments/environment_details/components/kubernetes/kubernetes_status_bar_spec.js
@@ -43,7 +43,7 @@ describe('~/environments/environment_details/components/kubernetes/kubernetes_st
const createWrapper = ({
clusterHealthStatus = '',
fluxResourcePath = '',
- fluxResourceStatus = [],
+ fluxResourceStatus = { conditions: [] },
fluxApiError = '',
namespace = kubernetesNamespace,
resourceType = k8sResourceType.k8sPods,
@@ -189,14 +189,16 @@ describe('~/environments/environment_details/components/kubernetes/kubernetes_st
'renders sync status as $statusText when status is $status, type is $type, and reason is $reason',
({ status, type, reason, statusText, statusPopover }) => {
createWrapper({
- fluxResourceStatus: [
- {
- status,
- type,
- reason,
- message,
- },
- ],
+ fluxResourceStatus: {
+ conditions: [
+ {
+ status,
+ type,
+ reason,
+ message,
+ },
+ ],
+ },
});
expect(findSyncBadge().text()).toBe(statusText);
@@ -206,7 +208,7 @@ describe('~/environments/environment_details/components/kubernetes/kubernetes_st
it('renders a clickable badge', () => {
createWrapper({
- fluxResourceStatus: [{ status: 'True', type: 'Ready' }],
+ fluxResourceStatus: { conditions: [{ status: 'True', type: 'Ready' }] },
});
expect(findSyncBadge().attributes('href')).toBe('#');
@@ -214,7 +216,7 @@ describe('~/environments/environment_details/components/kubernetes/kubernetes_st
it('emits `show-flux-resource-details` event when badge is clicked', () => {
createWrapper({
- fluxResourceStatus: [{ status: 'True', type: 'Ready' }],
+ fluxResourceStatus: { conditions: [{ status: 'True', type: 'Ready' }] },
});
findSyncBadge().trigger('click');
diff --git a/spec/frontend/environments/helpers/k8s_integration_helper_spec.js b/spec/frontend/environments/helpers/k8s_integration_helper_spec.js
index 4d1d5224bed..02f4cb823f5 100644
--- a/spec/frontend/environments/helpers/k8s_integration_helper_spec.js
+++ b/spec/frontend/environments/helpers/k8s_integration_helper_spec.js
@@ -67,16 +67,17 @@ describe('k8s_integration_helper', () => {
let fluxConditions;
it.each`
- status | type | reason | statusText | statusMessage
- ${STATUS_TRUE} | ${'Stalled'} | ${''} | ${'stalled'} | ${{ message }}
- ${STATUS_TRUE} | ${'Reconciling'} | ${''} | ${'reconciling'} | ${''}
- ${STATUS_UNKNOWN} | ${'Ready'} | ${REASON_PROGRESSING} | ${'reconcilingWithBadConfig'} | ${{ message }}
- ${STATUS_TRUE} | ${'Ready'} | ${''} | ${'reconciled'} | ${''}
- ${STATUS_FALSE} | ${'Ready'} | ${''} | ${'failed'} | ${{ message }}
- ${STATUS_UNKNOWN} | ${'Ready'} | ${''} | ${'unknown'} | ${''}
+ suspended | status | type | reason | statusText | statusMessage
+ ${false} | ${STATUS_TRUE} | ${'Stalled'} | ${''} | ${'stalled'} | ${{ message }}
+ ${false} | ${STATUS_TRUE} | ${'Reconciling'} | ${''} | ${'reconciling'} | ${''}
+ ${false} | ${STATUS_UNKNOWN} | ${'Ready'} | ${REASON_PROGRESSING} | ${'reconcilingWithBadConfig'} | ${{ message }}
+ ${false} | ${STATUS_TRUE} | ${'Ready'} | ${''} | ${'reconciled'} | ${''}
+ ${false} | ${STATUS_FALSE} | ${'Ready'} | ${''} | ${'failed'} | ${''}
+ ${true} | ${STATUS_FALSE} | ${'Ready'} | ${''} | ${'suspended'} | ${''}
+ ${false} | ${STATUS_UNKNOWN} | ${'Ready'} | ${''} | ${'unknown'} | ${''}
`(
'renders sync status as $statusText when status is $status, type is $type, and reason is $reason',
- ({ status, type, reason, statusText, statusMessage }) => {
+ ({ suspended, status, type, reason, statusText, statusMessage }) => {
fluxConditions = [
{
status,
@@ -86,7 +87,9 @@ describe('k8s_integration_helper', () => {
},
];
- expect(fluxSyncStatus(fluxConditions)).toMatchObject({
+ const fluxResourceStatus = { conditions: fluxConditions, suspend: suspended };
+
+ expect(fluxSyncStatus(fluxResourceStatus)).toMatchObject({
status: statusText,
...statusMessage,
});
diff --git a/spec/frontend/projects/new/components/deployment_target_select_spec.js b/spec/frontend/projects/new/components/deployment_target_select_spec.js
index 9f6d1c45c6a..d5fac294ca4 100644
--- a/spec/frontend/projects/new/components/deployment_target_select_spec.js
+++ b/spec/frontend/projects/new/components/deployment_target_select_spec.js
@@ -60,10 +60,10 @@ describe('Deployment target select', () => {
});
describe.each`
- selectedTarget | formSubmitted | eventSent
- ${null} | ${true} | ${false}
- ${DEPLOYMENT_TARGET_SELECTIONS[0]} | ${false} | ${false}
- ${DEPLOYMENT_TARGET_SELECTIONS[0]} | ${true} | ${true}
+ selectedTarget | formSubmitted | eventSent
+ ${null} | ${true} | ${false}
+ ${DEPLOYMENT_TARGET_SELECTIONS[0].value} | ${false} | ${false}
+ ${DEPLOYMENT_TARGET_SELECTIONS[0].value} | ${true} | ${true}
`('Snowplow tracking event', ({ selectedTarget, formSubmitted, eventSent }) => {
beforeEach(() => {
findSelect().vm.$emit('input', selectedTarget);
@@ -89,10 +89,10 @@ describe('Deployment target select', () => {
});
describe.each`
- selectedTarget | isTextShown
- ${null} | ${false}
- ${DEPLOYMENT_TARGET_SELECTIONS[0]} | ${true}
- ${DEPLOYMENT_TARGET_SELECTIONS[1]} | ${false}
+ selectedTarget | isTextShown
+ ${null} | ${false}
+ ${DEPLOYMENT_TARGET_SELECTIONS[0].value} | ${true}
+ ${DEPLOYMENT_TARGET_SELECTIONS[1].value} | ${false}
`('K8s education text', ({ selectedTarget, isTextShown }) => {
beforeEach(() => {
findSelect().vm.$emit('input', selectedTarget);
@@ -105,7 +105,7 @@ describe('Deployment target select', () => {
describe('when user clicks on the docs link', () => {
beforeEach(async () => {
- findSelect().vm.$emit('input', K8S_OPTION);
+ findSelect().vm.$emit('input', K8S_OPTION.value);
await nextTick();
findLink().trigger('click');
diff --git a/spec/frontend/repository/components/__snapshots__/last_commit_spec.js.snap b/spec/frontend/repository/components/__snapshots__/last_commit_spec.js.snap
index 49f25ac69cc..23650093bbe 100644
--- a/spec/frontend/repository/components/__snapshots__/last_commit_spec.js.snap
+++ b/spec/frontend/repository/components/__snapshots__/last_commit_spec.js.snap
@@ -1,60 +1,68 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Repository last commit component renders commit widget 1`] = `
-
-
+
-
-
-
+
+
+
+
+
+ 12345678
+
+
+
- 12345678
+ History
-
-
-
- History
-
-
-
+
+
+