Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
		
							parent
							
								
									41fa0ffbf2
								
							
						
					
					
						commit
						c487f26d13
					
				| 
						 | 
					@ -382,6 +382,7 @@ jest predictive:
 | 
				
			||||||
    - "detect-tests"
 | 
					    - "detect-tests"
 | 
				
			||||||
  script:
 | 
					  script:
 | 
				
			||||||
    - if [[ -s "$RSPEC_CHANGED_FILES_PATH" ]] || [[ -s "$RSPEC_MATCHING_JS_FILES_PATH" ]]; then run_timed_command "yarn jest:ci:predictive-without-fixtures"; fi
 | 
					    - if [[ -s "$RSPEC_CHANGED_FILES_PATH" ]] || [[ -s "$RSPEC_MATCHING_JS_FILES_PATH" ]]; then run_timed_command "yarn jest:ci:predictive-without-fixtures"; fi
 | 
				
			||||||
 | 
					  parallel: 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
jest-with-fixtures predictive:
 | 
					jest-with-fixtures predictive:
 | 
				
			||||||
  extends:
 | 
					  extends:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,7 +43,9 @@ export default {
 | 
				
			||||||
            this.$emit('hidden', ...args);
 | 
					            this.$emit('hidden', ...args);
 | 
				
			||||||
            this.menuVisible = false;
 | 
					            this.menuVisible = false;
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          strategy: 'fixed',
 | 
					          popperOptions: {
 | 
				
			||||||
 | 
					            strategy: 'fixed',
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
          maxWidth: '400px',
 | 
					          maxWidth: '400px',
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -701,7 +701,7 @@ export default {
 | 
				
			||||||
              :class="{ 'is-modal': isModal }"
 | 
					              :class="{ 'is-modal': isModal }"
 | 
				
			||||||
            >
 | 
					            >
 | 
				
			||||||
              <work-item-attributes-wrapper
 | 
					              <work-item-attributes-wrapper
 | 
				
			||||||
                :class="{ 'gl-top-3': isDrawer }"
 | 
					                :class="{ 'gl-top-11': isDrawer }"
 | 
				
			||||||
                :full-path="workItemFullPath"
 | 
					                :full-path="workItemFullPath"
 | 
				
			||||||
                :work-item="workItem"
 | 
					                :work-item="workItem"
 | 
				
			||||||
                :group-path="groupPath"
 | 
					                :group-path="groupPath"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -88,8 +88,9 @@ export default {
 | 
				
			||||||
  <gl-drawer
 | 
					  <gl-drawer
 | 
				
			||||||
    :open="open"
 | 
					    :open="open"
 | 
				
			||||||
    data-testid="work-item-drawer"
 | 
					    data-testid="work-item-drawer"
 | 
				
			||||||
 | 
					    header-sticky
 | 
				
			||||||
    header-height="calc(var(--top-bar-height) + var(--performance-bar-height))"
 | 
					    header-height="calc(var(--top-bar-height) + var(--performance-bar-height))"
 | 
				
			||||||
    class="gl-w-full gl-leading-reset sm:gl-w-4/10"
 | 
					    class="gl-w-full gl-leading-reset lg:gl-w-[480px] xl:gl-w-[768px] min-[1440px]:gl-w-[912px]"
 | 
				
			||||||
    @close="$emit('close')"
 | 
					    @close="$emit('close')"
 | 
				
			||||||
  >
 | 
					  >
 | 
				
			||||||
    <template #title>
 | 
					    <template #title>
 | 
				
			||||||
| 
						 | 
					@ -107,7 +108,7 @@ export default {
 | 
				
			||||||
        :modal-work-item-full-path="activeItemFullPath"
 | 
					        :modal-work-item-full-path="activeItemFullPath"
 | 
				
			||||||
        :modal-is-group="modalIsGroup"
 | 
					        :modal-is-group="modalIsGroup"
 | 
				
			||||||
        is-drawer
 | 
					        is-drawer
 | 
				
			||||||
        class="work-item-drawer !gl-pt-0"
 | 
					        class="work-item-drawer !gl-pt-0 xl:!gl-px-6"
 | 
				
			||||||
        @deleteWorkItem="deleteWorkItem"
 | 
					        @deleteWorkItem="deleteWorkItem"
 | 
				
			||||||
        v-on="$listeners"
 | 
					        v-on="$listeners"
 | 
				
			||||||
      />
 | 
					      />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -229,7 +229,7 @@ export const FORM_TYPES = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const DEFAULT_PAGE_SIZE_NOTES = 30;
 | 
					export const DEFAULT_PAGE_SIZE_NOTES = 30;
 | 
				
			||||||
export const DEFAULT_PAGE_SIZE_EMOJIS = 100;
 | 
					export const DEFAULT_PAGE_SIZE_EMOJIS = 100;
 | 
				
			||||||
export const DEFAULT_PAGE_SIZE_CHILD_ITEMS = 20;
 | 
					export const DEFAULT_PAGE_SIZE_CHILD_ITEMS = 50;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const WORK_ITEM_NOTES_SORT_ORDER_KEY = 'sort_direction_work_item';
 | 
					export const WORK_ITEM_NOTES_SORT_ORDER_KEY = 'sort_direction_work_item';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -35,7 +35,7 @@ $work-item-overview-gap-width: 2rem;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@include container-and-media("max-width: #{calc($breakpoint-md - 0.02px)}") {
 | 
					@include container-and-media("max-width: #{calc($breakpoint-md - 4rem - 0.02px)}") {
 | 
				
			||||||
  .work-item-overview {
 | 
					  .work-item-overview {
 | 
				
			||||||
    display: block !important;
 | 
					    display: block !important;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,8 +4,11 @@ description: >-
 | 
				
			||||||
  This migration deduplicates lfs_objects_projects by lfs_object_id, project_id and repository_type.
 | 
					  This migration deduplicates lfs_objects_projects by lfs_object_id, project_id and repository_type.
 | 
				
			||||||
  After the migration is finalized, we need to add a unique index on all three columns to ensure
 | 
					  After the migration is finalized, we need to add a unique index on all three columns to ensure
 | 
				
			||||||
  data consistency since the unique validation already exists at the model level.
 | 
					  data consistency since the unique validation already exists at the model level.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Originally introduced by https://gitlab.com/gitlab-org/gitlab/-/merge_requests/154323
 | 
				
			||||||
 | 
					  Re-enqueued because we found some duplicates were still being introduced
 | 
				
			||||||
feature_category: source_code_management
 | 
					feature_category: source_code_management
 | 
				
			||||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/154323
 | 
					introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/164127
 | 
				
			||||||
milestone: '17.3'
 | 
					milestone: '17.4'
 | 
				
			||||||
queued_migration_version: 20240808125149
 | 
					queued_migration_version: 20240827204855
 | 
				
			||||||
finalize_after: '2024-08-02' # required upgrade stop due date
 | 
					finalize_after: '2024-10-17' # required upgrade stop due date
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,18 +13,12 @@ class QueueDeduplicateLfsObjectsProjects < Gitlab::Database::Migration[2.2]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  restrict_gitlab_migration gitlab_schema: :gitlab_main
 | 
					  restrict_gitlab_migration gitlab_schema: :gitlab_main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # To be re-enqueued by db/post_migrate/20240827204855_reenqueue_deduplicate_lfs_objects_projects.rb
 | 
				
			||||||
  def up
 | 
					  def up
 | 
				
			||||||
    queue_batched_background_migration(
 | 
					    # no-op
 | 
				
			||||||
      MIGRATION,
 | 
					 | 
				
			||||||
      :lfs_objects_projects,
 | 
					 | 
				
			||||||
      :id,
 | 
					 | 
				
			||||||
      job_interval: DELAY_INTERVAL,
 | 
					 | 
				
			||||||
      batch_size: BATCH_SIZE,
 | 
					 | 
				
			||||||
      sub_batch_size: SUB_BATCH_SIZE
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def down
 | 
					  def down
 | 
				
			||||||
    delete_batched_background_migration(MIGRATION, :lfs_objects_projects, :id, [])
 | 
					    # no-op
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,32 @@
 | 
				
			||||||
 | 
					# frozen_string_literal: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ReenqueueDeduplicateLfsObjectsProjects < Gitlab::Database::Migration[2.2]
 | 
				
			||||||
 | 
					  milestone '17.4'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  MIGRATION = 'DeduplicateLfsObjectsProjects'
 | 
				
			||||||
 | 
					  TABLE_NAME = :lfs_objects_projects
 | 
				
			||||||
 | 
					  DELAY_INTERVAL = 100
 | 
				
			||||||
 | 
					  BATCH_SIZE = 10_000
 | 
				
			||||||
 | 
					  SUB_BATCH_SIZE = 2_500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  disable_ddl_transaction!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  restrict_gitlab_migration gitlab_schema: :gitlab_main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def up
 | 
				
			||||||
 | 
					    delete_batched_background_migration(MIGRATION, :lfs_objects_projects, :id, [])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    queue_batched_background_migration(
 | 
				
			||||||
 | 
					      MIGRATION,
 | 
				
			||||||
 | 
					      :lfs_objects_projects,
 | 
				
			||||||
 | 
					      :id,
 | 
				
			||||||
 | 
					      job_interval: DELAY_INTERVAL,
 | 
				
			||||||
 | 
					      batch_size: BATCH_SIZE,
 | 
				
			||||||
 | 
					      sub_batch_size: SUB_BATCH_SIZE
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def down
 | 
				
			||||||
 | 
					    delete_batched_background_migration(MIGRATION, :lfs_objects_projects, :id, [])
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					44b6b9fba52b6c7459db0787dbff61678c56c2fc3c51cfab4be32920450b2341
 | 
				
			||||||
| 
						 | 
					@ -16,7 +16,7 @@ DETAILS:
 | 
				
			||||||
> - Feature flags `kas_user_access`, `kas_user_access_project`, and `expose_authorized_cluster_agents` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/125835) in GitLab 16.2.
 | 
					> - Feature flags `kas_user_access`, `kas_user_access_project`, and `expose_authorized_cluster_agents` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/125835) in GitLab 16.2.
 | 
				
			||||||
> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/431746) to the environment details page in 16.10.
 | 
					> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/431746) to the environment details page in 16.10.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Use the Dashboard for Kubernetes to understand the status of your clusters with an intuitive visual interface.
 | 
					Use the dashboard for Kubernetes to understand the status of your clusters with an intuitive visual interface.
 | 
				
			||||||
The dashboard works with every connected Kubernetes cluster, whether you deployed them
 | 
					The dashboard works with every connected Kubernetes cluster, whether you deployed them
 | 
				
			||||||
with CI/CD or GitOps.
 | 
					with CI/CD or GitOps.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -35,7 +35,7 @@ add one when you create an environment.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Prerequisites:
 | 
					Prerequisites:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- A GitLab agent for Kubernetes is [installed](../../user/clusters/agent/install/index.md) and [`user_access`](../../user/clusters/agent/user_access.md) for the environment's project or its parent group.
 | 
					- A GitLab agent for Kubernetes is [installed](../../user/clusters/agent/install/index.md) and [`user_access`](../../user/clusters/agent/user_access.md) is configured for the environment's project or its parent group.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
::Tabs
 | 
					::Tabs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -69,7 +69,7 @@ Prerequisites:
 | 
				
			||||||
> - Kubernetes watch API integration [enabled by default](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/136831) in GitLab 16.7.
 | 
					> - Kubernetes watch API integration [enabled by default](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/136831) in GitLab 16.7.
 | 
				
			||||||
> - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/427762) in GitLab 17.1. Feature flag `k8s_watch_api` removed.
 | 
					> - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/427762) in GitLab 17.1. Feature flag `k8s_watch_api` removed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
View a dashboard to see the status of any connected clusters.
 | 
					View a dashboard to see the status of connected clusters.
 | 
				
			||||||
If the `k8s_watch_api` feature flag is enabled, the status of your
 | 
					If the `k8s_watch_api` feature flag is enabled, the status of your
 | 
				
			||||||
Kubernetes resources and Flux reconciliation updates in real time.
 | 
					Kubernetes resources and Flux reconciliation updates in real time.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -80,6 +80,8 @@ To view a configured dashboard:
 | 
				
			||||||
1. Select the environment associated with the agent for Kubernetes.
 | 
					1. Select the environment associated with the agent for Kubernetes.
 | 
				
			||||||
1. Select the **Kubernetes overview** tab.
 | 
					1. Select the **Kubernetes overview** tab.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A list of pods is displayed. Select a pod to view its details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Flux sync status
 | 
					### Flux sync status
 | 
				
			||||||
 | 
					
 | 
				
			||||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/391581) in GitLab 16.3.
 | 
					> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/391581) in GitLab 16.3.
 | 
				
			||||||
| 
						 | 
					@ -103,58 +105,39 @@ A dashboard displays one of the following status badges:
 | 
				
			||||||
| **Unknown** | The sync status of the deployment couldn't be retrieved. |
 | 
					| **Unknown** | The sync status of the deployment couldn't be retrieved. |
 | 
				
			||||||
| **Unavailable** | The `Kustomization` or `HelmRelease` resource couldn't be retrieved. |
 | 
					| **Unavailable** | The `Kustomization` or `HelmRelease` resource couldn't be retrieved. |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Trigger Flux reconciliation
 | 
					### Trigger Flux reconciliation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/434248) in GitLab 17.3.
 | 
					> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/434248) in GitLab 17.3.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
You can trigger the reconciliation of a Flux recourse (`Kustomization` or `HelmRelease`) manually from the Kubernetes dashboard.
 | 
					You can manually reconcile your deployment with its Flux resources.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
To trigger reconciliation:
 | 
					To trigger a reconciliation:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. From a dashboard, select the sync status badge of a Flux deployment.
 | 
					1. On a dashboard, select the sync status badge of a Flux deployment.
 | 
				
			||||||
1. Select  **Actions > Trigger reconciliation** (**{retry}**).
 | 
					1. Select **Actions** (**{ellipsis_v}**) **> Trigger reconciliation** (**{retry}**).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Delete a pod
 | 
					### View pod logs
 | 
				
			||||||
 | 
					 | 
				
			||||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/467653) in GitLab 17.3.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
You can delete a pod from the Kubernetes dashboard to restart a failed pod.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
To delete a pod:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
::Tabs
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
:::TabTitle From the pods list
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- Select **Actions** (**{ellipsis_v}**), then **Delete pod**.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
:::TabTitle From the pods details view
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Select a pod from the pod list to view its details.
 | 
					 | 
				
			||||||
1. Select **Actions > Delete pod** (**{remove}**).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
::EndTabs
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## View pod logs
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/13793) in GitLab 17.2.
 | 
					> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/13793) in GitLab 17.2.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
View pod logs when you want to quickly understand and troubleshoot issues across your environments from a configured dashboard. You can view logs for each container in a pod.
 | 
					View pod logs when you want to quickly understand and troubleshoot issues across your environments from a configured dashboard. You can view logs for each container in a pod.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
To view your pod logs:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
::Tabs
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
:::TabTitle From the pods list
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- Select **View logs**, then select the container you want to view logs for.
 | 
					- Select **View logs**, then select the container you want to view logs for.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:::TabTitle From the pods details view
 | 
					You can also view pod logs from the pod details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. Select a pod from the pod list to view its details.
 | 
					### Delete a pod
 | 
				
			||||||
1. Select the container you want to view logs for, then select **View logs**.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
::EndTabs
 | 
					> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/467653) in GitLab 17.3.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To restart a failed pod, delete it from the Kubernetes dashboard.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To delete a pod:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. On the **Kubernetes overview** tab, find the pod you want to delete.
 | 
				
			||||||
 | 
					1. Select **Actions** (**{ellipsis_v}**) **> Delete pod** (**{remove}**).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can also delete a pod from the pod details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Detailed dashboard
 | 
					## Detailed dashboard
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -213,11 +196,9 @@ To view a detailed dashboard:
 | 
				
			||||||
   | Jobs | `https://myinstance.gitlab.com/-/kubernetes/<agent_id>/jobs` |
 | 
					   | Jobs | `https://myinstance.gitlab.com/-/kubernetes/<agent_id>/jobs` |
 | 
				
			||||||
   | CronJobs | `https://myinstance.gitlab.com/-/kubernetes/<agent_id>/cronJobs` |
 | 
					   | CronJobs | `https://myinstance.gitlab.com/-/kubernetes/<agent_id>/cronJobs` |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The detailed dashboard is displayed.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Troubleshooting
 | 
					## Troubleshooting
 | 
				
			||||||
 | 
					
 | 
				
			||||||
When working with the Dashboard for Kubernetes, you might encounter the following issues.
 | 
					When working with the dashboard for Kubernetes, you might encounter the following issues.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### User cannot list resource in API group
 | 
					### User cannot list resource in API group
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -237,7 +237,7 @@ considered equivalent to rebasing.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Rebase without CI/CD pipeline
 | 
					### Rebase without CI/CD pipeline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
> - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/350262) in GitLab 15.3. Feature flag `rebase_without_ci_ui` removed.
 | 
					> - Changed to [Generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/350262) in GitLab 15.3. Feature flag `rebase_without_ci_ui` removed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
To rebase a merge request's branch without triggering a CI/CD pipeline, select
 | 
					To rebase a merge request's branch without triggering a CI/CD pipeline, select
 | 
				
			||||||
**Rebase without pipeline** from the merge request reports section.
 | 
					**Rebase without pipeline** from the merge request reports section.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -97,8 +97,7 @@ module Gitlab
 | 
				
			||||||
            return organization if organization
 | 
					            return organization if organization
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            logger.info(message: 'Creating organization', **args)
 | 
					            logger.info(message: 'Creating organization', **args)
 | 
				
			||||||
 | 
					            execute_service!(::Organizations::CreateService.new(current_user: @user, params: args), :organization)
 | 
				
			||||||
            ensure_success(::Organizations::CreateService.new(current_user: @user, params: args).execute[:organization])
 | 
					 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          def create_groups_and_projects
 | 
					          def create_groups_and_projects
 | 
				
			||||||
| 
						 | 
					@ -182,7 +181,7 @@ module Gitlab
 | 
				
			||||||
          def create_group(**args)
 | 
					          def create_group(**args)
 | 
				
			||||||
            logger.info(message: 'Creating group', **args)
 | 
					            logger.info(message: 'Creating group', **args)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            ensure_success(::Groups::CreateService.new(@user, **args).execute[:group])
 | 
					            execute_service!(::Groups::CreateService.new(@user, **args), :group)
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          def ensure_project(name:, namespace_id:, **args)
 | 
					          def ensure_project(name:, namespace_id:, **args)
 | 
				
			||||||
| 
						 | 
					@ -198,7 +197,7 @@ module Gitlab
 | 
				
			||||||
          def create_project(**args)
 | 
					          def create_project(**args)
 | 
				
			||||||
            logger.info(message: 'Creating project', **args)
 | 
					            logger.info(message: 'Creating project', **args)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            ensure_success(::Projects::CreateService.new(@user, **args).execute)
 | 
					            execute_service!(::Projects::CreateService.new(@user, **args))
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          def register_record(record, records)
 | 
					          def register_record(record, records)
 | 
				
			||||||
| 
						 | 
					@ -214,6 +213,17 @@ module Gitlab
 | 
				
			||||||
            raise RuntimeError
 | 
					            raise RuntimeError
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          def execute_service!(service, payload_attr = nil)
 | 
				
			||||||
 | 
					            response = service.execute
 | 
				
			||||||
 | 
					            if response.is_a?(ServiceResponse) && response.error?
 | 
				
			||||||
 | 
					              logger.error(response.message)
 | 
				
			||||||
 | 
					              raise RuntimeError
 | 
				
			||||||
 | 
					            end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            record = payload_attr ? response[payload_attr] : response
 | 
				
			||||||
 | 
					            ensure_success(record)
 | 
				
			||||||
 | 
					          end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          def create_runner(name:, scope: nil, **args)
 | 
					          def create_runner(name:, scope: nil, **args)
 | 
				
			||||||
            name = generate_name(name)
 | 
					            name = generate_name(name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20137,18 +20137,18 @@ msgstr ""
 | 
				
			||||||
msgid "DuoProTrial|Apply your GitLab Duo Pro trial to an existing group"
 | 
					msgid "DuoProTrial|Apply your GitLab Duo Pro trial to an existing group"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msgid "DuoProTrial|Chat"
 | 
					msgid "DuoProTrial|Chat within the IDE"
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msgid "DuoProTrial|Code Explanation"
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msgid "DuoProTrial|Code Refactoring"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msgid "DuoProTrial|Code completion and code generation with Code Suggestions"
 | 
					msgid "DuoProTrial|Code completion and code generation with Code Suggestions"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msgid "DuoProTrial|Code explanation"
 | 
					 | 
				
			||||||
msgstr ""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
msgid "DuoProTrial|Code refactorization"
 | 
					 | 
				
			||||||
msgstr ""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
msgid "DuoProTrial|Congratulations, your free GitLab Duo Pro trial is activated and will expire on %{exp_date}. The new license might take a minute to show on the page. To give members access to new GitLab Duo Pro features, %{assign_link_start}assign them%{assign_link_end} to GitLab Duo Pro seats."
 | 
					msgid "DuoProTrial|Congratulations, your free GitLab Duo Pro trial is activated and will expire on %{exp_date}. The new license might take a minute to show on the page. To give members access to new GitLab Duo Pro features, %{assign_link_start}assign them%{assign_link_end} to GitLab Duo Pro seats."
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20173,7 +20173,7 @@ msgstr ""
 | 
				
			||||||
msgid "DuoProTrial|Looking to do more with AI?"
 | 
					msgid "DuoProTrial|Looking to do more with AI?"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msgid "DuoProTrial|Organizational controls"
 | 
					msgid "DuoProTrial|Organizational user controls"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msgid "DuoProTrial|Purchase now"
 | 
					msgid "DuoProTrial|Purchase now"
 | 
				
			||||||
| 
						 | 
					@ -20188,7 +20188,7 @@ msgstr ""
 | 
				
			||||||
msgid "DuoProTrial|Start your free GitLab Duo Pro trial"
 | 
					msgid "DuoProTrial|Start your free GitLab Duo Pro trial"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msgid "DuoProTrial|Test generation"
 | 
					msgid "DuoProTrial|Test Generation"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msgid "DuoProTrial|To regain access to features like Code Suggestions and Chat, purchase the subscription add-on for GitLab Duo Pro."
 | 
					msgid "DuoProTrial|To regain access to features like Code Suggestions and Chat, purchase the subscription add-on for GitLab Duo Pro."
 | 
				
			||||||
| 
						 | 
					@ -55620,6 +55620,9 @@ msgstr ""
 | 
				
			||||||
msgid "This stage has one or more manual jobs that require confirmation before retrying. Do you want to proceed?"
 | 
					msgid "This stage has one or more manual jobs that require confirmation before retrying. Do you want to proceed?"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msgid "This subscription is for"
 | 
				
			||||||
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msgid "This suggestion already matches its content."
 | 
					msgid "This suggestion already matches its content."
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -64,7 +64,9 @@ describe('content_editor/components/bubble_menus/bubble_menu', () => {
 | 
				
			||||||
      tippyOptions: expect.objectContaining({
 | 
					      tippyOptions: expect.objectContaining({
 | 
				
			||||||
        onHidden: expect.any(Function),
 | 
					        onHidden: expect.any(Function),
 | 
				
			||||||
        onShow: expect.any(Function),
 | 
					        onShow: expect.any(Function),
 | 
				
			||||||
        strategy: 'fixed',
 | 
					        popperOptions: {
 | 
				
			||||||
 | 
					          strategy: 'fixed',
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        maxWidth: '400px',
 | 
					        maxWidth: '400px',
 | 
				
			||||||
        ...tippyOptions,
 | 
					        ...tippyOptions,
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -91,5 +91,17 @@ RSpec.describe ::Gitlab::Seeders::Ci::Runner::RunnerFleetSeeder, feature_categor
 | 
				
			||||||
        expect { seed }.not_to change { Ci::Runner.count }
 | 
					        expect { seed }.not_to change { Ci::Runner.count }
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    context 'when organization cannot be created' do
 | 
				
			||||||
 | 
					      before do
 | 
				
			||||||
 | 
					        allow_next_instance_of(::Organizations::CreateService, current_user: user, params: anything) do |service|
 | 
				
			||||||
 | 
					          allow(service).to receive(:execute).and_return(ServiceResponse.error(message: 'test error'))
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      it 'raises RuntimeError' do
 | 
				
			||||||
 | 
					        expect { seed }.to raise_error(RuntimeError)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,23 +4,10 @@ require 'spec_helper'
 | 
				
			||||||
require_migration!
 | 
					require_migration!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RSpec.describe QueueDeduplicateLfsObjectsProjects, feature_category: :source_code_management do
 | 
					RSpec.describe QueueDeduplicateLfsObjectsProjects, feature_category: :source_code_management do
 | 
				
			||||||
  let!(:batched_migration) { described_class::MIGRATION }
 | 
					  let(:batched_migration) { described_class::MIGRATION }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it 'schedules a new batched migration' do
 | 
					  it 'schedules a new batched migration' do
 | 
				
			||||||
    reversible_migration do |migration|
 | 
					    migrate!
 | 
				
			||||||
      migration.before -> {
 | 
					    expect(batched_migration).not_to have_scheduled_batched_migration
 | 
				
			||||||
        expect(batched_migration).not_to have_scheduled_batched_migration
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      migration.after -> {
 | 
					 | 
				
			||||||
        expect(batched_migration).to have_scheduled_batched_migration(
 | 
					 | 
				
			||||||
          table_name: :lfs_objects_projects,
 | 
					 | 
				
			||||||
          column_name: :id,
 | 
					 | 
				
			||||||
          batch_class_name: described_class::BATCH_CLASS_NAME,
 | 
					 | 
				
			||||||
          batch_size: described_class::BATCH_SIZE,
 | 
					 | 
				
			||||||
          sub_batch_size: described_class::SUB_BATCH_SIZE
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,26 @@
 | 
				
			||||||
 | 
					# frozen_string_literal: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					require 'spec_helper'
 | 
				
			||||||
 | 
					require_migration!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RSpec.describe ReenqueueDeduplicateLfsObjectsProjects, feature_category: :source_code_management do
 | 
				
			||||||
 | 
					  let(:batched_migration) { described_class::MIGRATION }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  it 'schedules a new batched migration' do
 | 
				
			||||||
 | 
					    reversible_migration do |migration|
 | 
				
			||||||
 | 
					      migration.before -> {
 | 
				
			||||||
 | 
					        expect(batched_migration).not_to have_scheduled_batched_migration
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      migration.after -> {
 | 
				
			||||||
 | 
					        expect(batched_migration).to have_scheduled_batched_migration(
 | 
				
			||||||
 | 
					          table_name: :lfs_objects_projects,
 | 
				
			||||||
 | 
					          column_name: :id,
 | 
				
			||||||
 | 
					          batch_class_name: described_class::BATCH_CLASS_NAME,
 | 
				
			||||||
 | 
					          batch_size: described_class::BATCH_SIZE,
 | 
				
			||||||
 | 
					          sub_batch_size: described_class::SUB_BATCH_SIZE
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
		Loading…
	
		Reference in New Issue