diff --git a/.gitlab/ci/build-images.gitlab-ci.yml b/.gitlab/ci/build-images.gitlab-ci.yml
index 1361f1fe412..d4a9582ded3 100644
--- a/.gitlab/ci/build-images.gitlab-ci.yml
+++ b/.gitlab/ci/build-images.gitlab-ci.yml
@@ -34,7 +34,7 @@ build-gdk-image:
- .base-image-build-buildx
- .build-images:rules:build-gdk-image
tags:
- - high-cpu
+ - saas-linux-xlarge-amd64
stage: build-images
needs: []
script:
diff --git a/.gitlab/ci/qa-common/rules.gitlab-ci.yml b/.gitlab/ci/qa-common/rules.gitlab-ci.yml
index 16440aa4cbc..c0a4e8d206f 100644
--- a/.gitlab/ci/qa-common/rules.gitlab-ci.yml
+++ b/.gitlab/ci/qa-common/rules.gitlab-ci.yml
@@ -43,6 +43,10 @@
.not-canonical-project: ¬-canonical-project
if: '$CI_PROJECT_PATH != "gitlab-org/gitlab" && $CI_PROJECT_PATH != "gitlab-cn/gitlab"'
+# If Schedule pipeline
+.if-schedule-pipeline: &if-schedule-pipeline
+ if: '$CI_PIPELINE_SOURCE == "schedule"'
+
# Selective test execution against omnibus instance have following execution scenarios:
# * only e2e spec files changed - runs only changed specs
# * qa framework changes - runs full test suite
@@ -149,6 +153,17 @@
when: never
- !reference [.rules:test:qa, rules]
+.rules:test:never-schedule-pipeline:
+ rules:
+ - <<: *if-schedule-pipeline
+ when: never
+
+.rules:test:gdk-load-balancer-changes:
+ rules:
+ - changes:
+ - ".gitlab/ci/test-on-gdk/**"
+ - "lib/gitlab/database/load_balancing/**/*"
+
.rules:test:qa-default-branch:
rules:
- *qa-run-all-e2e-label
diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml
index 3ccd5995531..9361563c1d9 100644
--- a/.gitlab/ci/rules.gitlab-ci.yml
+++ b/.gitlab/ci/rules.gitlab-ci.yml
@@ -923,16 +923,9 @@
- !reference [".qa:rules:package-and-test-never-run", rules]
- <<: *if-default-branch-schedule-nightly # already executed in the 2-hourly schedule
when: never
- # Rebuild base only when relevant components change
- - <<: *if-default-branch-refs
- changes: *gdk-component-patterns
- variables:
- BUILD_GDK_BASE: "true"
- <<: *if-default-branch-refs
- <<: *if-merge-request
changes: *gdk-component-patterns
- variables:
- BUILD_GDK_BASE: "true"
# The rest are included to be consistent with .qa:rules:e2e:test-on-gdk
- <<: *if-merge-request-targeting-stable-branch
changes: *setup-test-env-patterns
diff --git a/.gitlab/ci/test-on-gdk/main.gitlab-ci.yml b/.gitlab/ci/test-on-gdk/main.gitlab-ci.yml
index 8f60a8505f3..8e94338bb68 100644
--- a/.gitlab/ci/test-on-gdk/main.gitlab-ci.yml
+++ b/.gitlab/ci/test-on-gdk/main.gitlab-ci.yml
@@ -146,9 +146,8 @@ gdk-qa-smoke-with-load-balancer:
reports:
dotenv: ""
rules:
- - changes:
- - ".gitlab/ci/test-on-gdk/**"
- - "lib/gitlab/database/load_balancing/**/*"
+ - !reference [".rules:test:never-schedule-pipeline", rules]
+ - !reference [".rules:test:gdk-load-balancer-changes", rules]
allow_failure: true
gdk-qa-reliable:
@@ -177,9 +176,8 @@ gdk-qa-reliable-with-load-balancer:
reports:
dotenv: ""
rules:
- - changes:
- - ".gitlab/ci/test-on-gdk/**"
- - "lib/gitlab/database/load_balancing/**/*"
+ - !reference [".rules:test:never-schedule-pipeline", rules]
+ - !reference [".rules:test:gdk-load-balancer-changes", rules]
allow_failure: true
gdk-qa-non-blocking:
diff --git a/app/assets/javascripts/ci/pipeline_details/components/jobs_shared/action_component.vue b/app/assets/javascripts/ci/common/private/job_action_component.vue
similarity index 98%
rename from app/assets/javascripts/ci/pipeline_details/components/jobs_shared/action_component.vue
rename to app/assets/javascripts/ci/common/private/job_action_component.vue
index ffb6ab71b22..f649750ce8a 100644
--- a/app/assets/javascripts/ci/pipeline_details/components/jobs_shared/action_component.vue
+++ b/app/assets/javascripts/ci/common/private/job_action_component.vue
@@ -5,7 +5,7 @@ import axios from '~/lib/utils/axios_utils';
import { BV_HIDE_TOOLTIP } from '~/lib/utils/constants';
import { dasherize } from '~/lib/utils/text_utility';
import { __ } from '~/locale';
-import { reportToSentry } from '../../utils';
+import { reportToSentry } from '~/ci/utils';
/**
* Renders either a cancel, retry or play icon button and handles the post request
diff --git a/app/assets/javascripts/ci/pipeline_details/components/graph_shared/links_layer.vue b/app/assets/javascripts/ci/common/private/job_links_layer.vue
similarity index 88%
rename from app/assets/javascripts/ci/pipeline_details/components/graph_shared/links_layer.vue
rename to app/assets/javascripts/ci/common/private/job_links_layer.vue
index ef24694e494..59260ca3f81 100644
--- a/app/assets/javascripts/ci/pipeline_details/components/graph_shared/links_layer.vue
+++ b/app/assets/javascripts/ci/common/private/job_links_layer.vue
@@ -1,8 +1,8 @@
-
+
-
+
diff --git a/app/assets/javascripts/ci/pipeline_details/components/graph/constants.js b/app/assets/javascripts/ci/pipeline_details/graph/constants.js
similarity index 100%
rename from app/assets/javascripts/ci/pipeline_details/components/graph/constants.js
rename to app/assets/javascripts/ci/pipeline_details/graph/constants.js
diff --git a/app/assets/javascripts/ci/pipeline_details/components/graph/graph_component_wrapper.vue b/app/assets/javascripts/ci/pipeline_details/graph/graph_component_wrapper.vue
similarity index 95%
rename from app/assets/javascripts/ci/pipeline_details/components/graph/graph_component_wrapper.vue
rename to app/assets/javascripts/ci/pipeline_details/graph/graph_component_wrapper.vue
index b2cef7c37b9..bd7325f7925 100644
--- a/app/assets/javascripts/ci/pipeline_details/components/graph/graph_component_wrapper.vue
+++ b/app/assets/javascripts/ci/pipeline_details/graph/graph_component_wrapper.vue
@@ -4,10 +4,10 @@ import getPipelineDetails from 'shared_queries/pipelines/get_pipeline_details.qu
import getUserCallouts from '~/graphql_shared/queries/get_user_callouts.query.graphql';
import { __, s__ } from '~/locale';
import LocalStorageSync from '~/vue_shared/components/local_storage_sync.vue';
-import { DEFAULT, DRAW_FAILURE, LOAD_FAILURE } from '../../constants';
-import DismissPipelineGraphCallout from '../../graphql/mutations/dismiss_pipeline_notification.graphql';
-import getPipelineQuery from '../../graphql/queries/get_pipeline_header_data.query.graphql';
-import { reportToSentry, reportMessageToSentry } from '../../utils';
+import { DEFAULT, DRAW_FAILURE, LOAD_FAILURE } from '~/ci/pipeline_details/constants';
+import getPipelineQuery from '~/ci/pipeline_details/header/graphql/queries/get_pipeline_header_data.query.graphql';
+import { reportToSentry, reportMessageToSentry } from '~/ci/utils';
+import DismissPipelineGraphCallout from './graphql/mutations/dismiss_pipeline_notification.graphql';
import {
ACTION_FAILURE,
IID_FAILURE,
@@ -16,8 +16,8 @@ import {
STAGE_VIEW,
VIEW_TYPE_KEY,
} from './constants';
-import PipelineGraph from './graph_component.vue';
-import GraphViewSelector from './graph_view_selector.vue';
+import PipelineGraph from './components/graph_component.vue';
+import GraphViewSelector from './components/graph_view_selector.vue';
import {
calculatePipelineLayersInfo,
getQueryHeaders,
diff --git a/app/assets/javascripts/ci/pipeline_details/graphql/mutations/dismiss_pipeline_notification.graphql b/app/assets/javascripts/ci/pipeline_details/graph/graphql/mutations/dismiss_pipeline_notification.graphql
similarity index 100%
rename from app/assets/javascripts/ci/pipeline_details/graphql/mutations/dismiss_pipeline_notification.graphql
rename to app/assets/javascripts/ci/pipeline_details/graph/graphql/mutations/dismiss_pipeline_notification.graphql
diff --git a/app/assets/javascripts/ci/pipeline_details/components/graph/perf_utils.js b/app/assets/javascripts/ci/pipeline_details/graph/perf_utils.js
similarity index 96%
rename from app/assets/javascripts/ci/pipeline_details/components/graph/perf_utils.js
rename to app/assets/javascripts/ci/pipeline_details/graph/perf_utils.js
index 3737a209f5c..511dcbe6889 100644
--- a/app/assets/javascripts/ci/pipeline_details/components/graph/perf_utils.js
+++ b/app/assets/javascripts/ci/pipeline_details/graph/perf_utils.js
@@ -8,7 +8,7 @@ import {
} from '~/performance/constants';
import { performanceMarkAndMeasure } from '~/performance/utils';
-import { reportPerformance } from '../graph_shared/api';
+import { reportPerformance } from './api_utils';
export const beginPerfMeasure = () => {
performanceMarkAndMeasure({ mark: PIPELINES_DETAIL_LINKS_MARK_CALCULATE_START });
diff --git a/app/assets/javascripts/ci/pipeline_details/components/graph/utils.js b/app/assets/javascripts/ci/pipeline_details/graph/utils.js
similarity index 93%
rename from app/assets/javascripts/ci/pipeline_details/components/graph/utils.js
rename to app/assets/javascripts/ci/pipeline_details/graph/utils.js
index c888c8a5537..9a8d6440d4d 100644
--- a/app/assets/javascripts/ci/pipeline_details/components/graph/utils.js
+++ b/app/assets/javascripts/ci/pipeline_details/graph/utils.js
@@ -1,8 +1,9 @@
import { isEmpty } from 'lodash';
import { getIdFromGraphQLId, etagQueryHeaders } from '~/graphql_shared/utils';
-import { reportToSentry } from '../../utils';
-import { listByLayers } from '../parsing_utils';
-import { unwrapStagesWithNeedsAndLookup } from '../unwrapping_utils';
+import { reportToSentry } from '~/ci/utils';
+
+import { listByLayers } from '~/ci/pipeline_details/utils/parsing_utils';
+import { unwrapStagesWithNeedsAndLookup } from '~/ci/pipeline_details/utils/unwrapping_utils';
import { beginPerfMeasure, finishPerfMeasureAndSend } from './perf_utils';
export { toggleQueryPollingByVisibility } from '~/graphql_shared/utils';
diff --git a/app/assets/javascripts/ci/pipeline_details/graphql/queries/get_pipeline_header_data.query.graphql b/app/assets/javascripts/ci/pipeline_details/header/graphql/queries/get_pipeline_header_data.query.graphql
similarity index 100%
rename from app/assets/javascripts/ci/pipeline_details/graphql/queries/get_pipeline_header_data.query.graphql
rename to app/assets/javascripts/ci/pipeline_details/header/graphql/queries/get_pipeline_header_data.query.graphql
diff --git a/app/assets/javascripts/ci/pipeline_details/components/pipeline_details_header.vue b/app/assets/javascripts/ci/pipeline_details/header/pipeline_details_header.vue
similarity index 99%
rename from app/assets/javascripts/ci/pipeline_details/components/pipeline_details_header.vue
rename to app/assets/javascripts/ci/pipeline_details/header/pipeline_details_header.vue
index 98798d3b8ad..4a15f5b581a 100644
--- a/app/assets/javascripts/ci/pipeline_details/components/pipeline_details_header.vue
+++ b/app/assets/javascripts/ci/pipeline_details/header/pipeline_details_header.vue
@@ -30,8 +30,8 @@ import {
import cancelPipelineMutation from '../graphql/mutations/cancel_pipeline.mutation.graphql';
import deletePipelineMutation from '../graphql/mutations/delete_pipeline.mutation.graphql';
import retryPipelineMutation from '../graphql/mutations/retry_pipeline.mutation.graphql';
-import getPipelineQuery from '../graphql/queries/get_pipeline_header_data.query.graphql';
-import { getQueryHeaders } from './graph/utils';
+import { getQueryHeaders } from '../graph/utils';
+import getPipelineQuery from './graphql/queries/get_pipeline_header_data.query.graphql';
const DELETE_MODAL_ID = 'pipeline-delete-modal';
const POLL_INTERVAL = 10000;
diff --git a/app/assets/javascripts/ci/pipeline_details/components/jobs/failed_jobs_table.vue b/app/assets/javascripts/ci/pipeline_details/jobs/components/failed_jobs_table.vue
similarity index 97%
rename from app/assets/javascripts/ci/pipeline_details/components/jobs/failed_jobs_table.vue
rename to app/assets/javascripts/ci/pipeline_details/jobs/components/failed_jobs_table.vue
index f84ae13180d..98431bd1fcc 100644
--- a/app/assets/javascripts/ci/pipeline_details/components/jobs/failed_jobs_table.vue
+++ b/app/assets/javascripts/ci/pipeline_details/jobs/components/failed_jobs_table.vue
@@ -6,7 +6,7 @@ import { createAlert } from '~/alert';
import Tracking from '~/tracking';
import { redirectTo } from '~/lib/utils/url_utility'; // eslint-disable-line import/no-deprecated
import CiBadgeLink from '~/vue_shared/components/ci_badge_link.vue';
-import RetryFailedJobMutation from '../../graphql/mutations/retry_failed_job.mutation.graphql';
+import RetryFailedJobMutation from '../graphql/mutations/retry_failed_job.mutation.graphql';
import { DEFAULT_FIELDS, TRACKING_CATEGORIES } from '../../constants';
export default {
diff --git a/app/assets/javascripts/ci/pipeline_details/components/jobs/failed_jobs_app.vue b/app/assets/javascripts/ci/pipeline_details/jobs/failed_jobs_app.vue
similarity index 89%
rename from app/assets/javascripts/ci/pipeline_details/components/jobs/failed_jobs_app.vue
rename to app/assets/javascripts/ci/pipeline_details/jobs/failed_jobs_app.vue
index c24862f828b..b946a40e590 100644
--- a/app/assets/javascripts/ci/pipeline_details/components/jobs/failed_jobs_app.vue
+++ b/app/assets/javascripts/ci/pipeline_details/jobs/failed_jobs_app.vue
@@ -2,8 +2,8 @@
import { GlLoadingIcon } from '@gitlab/ui';
import { s__ } from '~/locale';
import { createAlert } from '~/alert';
-import GetFailedJobsQuery from '../../graphql/queries/get_failed_jobs.query.graphql';
-import FailedJobsTable from './failed_jobs_table.vue';
+import GetFailedJobsQuery from './graphql/queries/get_failed_jobs.query.graphql';
+import FailedJobsTable from './components/failed_jobs_table.vue';
export default {
components: {
diff --git a/app/assets/javascripts/ci/pipeline_details/graphql/mutations/retry_failed_job.mutation.graphql b/app/assets/javascripts/ci/pipeline_details/jobs/graphql/mutations/retry_failed_job.mutation.graphql
similarity index 100%
rename from app/assets/javascripts/ci/pipeline_details/graphql/mutations/retry_failed_job.mutation.graphql
rename to app/assets/javascripts/ci/pipeline_details/jobs/graphql/mutations/retry_failed_job.mutation.graphql
diff --git a/app/assets/javascripts/ci/pipeline_details/graphql/queries/get_failed_jobs.query.graphql b/app/assets/javascripts/ci/pipeline_details/jobs/graphql/queries/get_failed_jobs.query.graphql
similarity index 100%
rename from app/assets/javascripts/ci/pipeline_details/graphql/queries/get_failed_jobs.query.graphql
rename to app/assets/javascripts/ci/pipeline_details/jobs/graphql/queries/get_failed_jobs.query.graphql
diff --git a/app/assets/javascripts/ci/pipeline_details/graphql/queries/get_pipeline_jobs.query.graphql b/app/assets/javascripts/ci/pipeline_details/jobs/graphql/queries/get_pipeline_jobs.query.graphql
similarity index 100%
rename from app/assets/javascripts/ci/pipeline_details/graphql/queries/get_pipeline_jobs.query.graphql
rename to app/assets/javascripts/ci/pipeline_details/jobs/graphql/queries/get_pipeline_jobs.query.graphql
diff --git a/app/assets/javascripts/ci/pipeline_details/components/jobs/jobs_app.vue b/app/assets/javascripts/ci/pipeline_details/jobs/jobs_app.vue
similarity index 97%
rename from app/assets/javascripts/ci/pipeline_details/components/jobs/jobs_app.vue
rename to app/assets/javascripts/ci/pipeline_details/jobs/jobs_app.vue
index 61748860983..7a09dd27ad8 100644
--- a/app/assets/javascripts/ci/pipeline_details/components/jobs/jobs_app.vue
+++ b/app/assets/javascripts/ci/pipeline_details/jobs/jobs_app.vue
@@ -6,7 +6,7 @@ import { __ } from '~/locale';
import eventHub from '~/jobs/components/table/event_hub';
import JobsTable from '~/jobs/components/table/jobs_table.vue';
import { JOBS_TAB_FIELDS } from '~/jobs/components/table/constants';
-import getPipelineJobs from '../../graphql/queries/get_pipeline_jobs.query.graphql';
+import getPipelineJobs from './graphql/queries/get_pipeline_jobs.query.graphql';
export default {
fields: JOBS_TAB_FIELDS,
diff --git a/app/assets/javascripts/ci/pipeline_details/mixins/stage_column_mixin.js b/app/assets/javascripts/ci/pipeline_details/mixins/stage_column_mixin.js
deleted file mode 100644
index 578ff498358..00000000000
--- a/app/assets/javascripts/ci/pipeline_details/mixins/stage_column_mixin.js
+++ /dev/null
@@ -1,14 +0,0 @@
-export default {
- props: {
- hasUpstream: {
- type: Boolean,
- required: false,
- default: false,
- },
- },
- methods: {
- buildConnnectorClass(index) {
- return index === 0 && (!this.isFirstColumn || this.hasUpstream) ? 'left-connector' : '';
- },
- },
-};
diff --git a/app/assets/javascripts/ci/pipeline_details/pipeline_details_header.js b/app/assets/javascripts/ci/pipeline_details/pipeline_details_header.js
index c79aaef23e8..067ec3f305e 100644
--- a/app/assets/javascripts/ci/pipeline_details/pipeline_details_header.js
+++ b/app/assets/javascripts/ci/pipeline_details/pipeline_details_header.js
@@ -1,7 +1,7 @@
import Vue from 'vue';
import VueApollo from 'vue-apollo';
import { parseBoolean } from '~/lib/utils/common_utils';
-import PipelineDetailsHeader from './components/pipeline_details_header.vue';
+import PipelineDetailsHeader from './header/pipeline_details_header.vue';
Vue.use(VueApollo);
diff --git a/app/assets/javascripts/ci/pipeline_details/pipeline_tabs.js b/app/assets/javascripts/ci/pipeline_details/pipeline_tabs.js
index 8d4c9d1220a..0ca9a68e70d 100644
--- a/app/assets/javascripts/ci/pipeline_details/pipeline_tabs.js
+++ b/app/assets/javascripts/ci/pipeline_details/pipeline_tabs.js
@@ -4,10 +4,11 @@ import VueRouter from 'vue-router';
import Vuex from 'vuex';
import VueApollo from 'vue-apollo';
import { GlToast } from '@gitlab/ui';
-import PipelineTabs from 'ee_else_ce/ci/pipeline_details/components/pipeline_tabs.vue';
+import PipelineTabs from 'ee_else_ce/ci/pipeline_details/tabs/pipeline_tabs.vue';
+import { reportToSentry } from '~/ci/utils';
import { parseBoolean } from '~/lib/utils/common_utils';
import createTestReportsStore from './stores/test_reports';
-import { getPipelineDefaultTab, reportToSentry } from './utils';
+import { getPipelineDefaultTab } from './utils';
Vue.use(GlToast);
Vue.use(VueApollo);
diff --git a/app/assets/javascripts/ci/pipeline_details/pipelines_index.js b/app/assets/javascripts/ci/pipeline_details/pipelines_index.js
index 20fd0915e28..86b565d7821 100644
--- a/app/assets/javascripts/ci/pipeline_details/pipelines_index.js
+++ b/app/assets/javascripts/ci/pipeline_details/pipelines_index.js
@@ -10,7 +10,7 @@ import {
import { doesHashExistInUrl } from '~/lib/utils/url_utility';
import { __ } from '~/locale';
import Translate from '~/vue_shared/translate';
-import Pipelines from './components/pipelines_list/pipelines.vue';
+import Pipelines from './pipelines_list/pipelines.vue';
import PipelinesStore from './stores/pipelines_store';
Vue.use(Translate);
diff --git a/app/assets/javascripts/ci/pipeline_details/components/pipelines_list/nav_controls.vue b/app/assets/javascripts/ci/pipeline_details/pipelines_list/components/nav_controls.vue
similarity index 100%
rename from app/assets/javascripts/ci/pipeline_details/components/pipelines_list/nav_controls.vue
rename to app/assets/javascripts/ci/pipeline_details/pipelines_list/components/nav_controls.vue
diff --git a/app/assets/javascripts/ci/pipeline_details/components/pipelines_list/pipeline_labels.vue b/app/assets/javascripts/ci/pipeline_details/pipelines_list/components/pipeline_labels.vue
similarity index 98%
rename from app/assets/javascripts/ci/pipeline_details/components/pipelines_list/pipeline_labels.vue
rename to app/assets/javascripts/ci/pipeline_details/pipelines_list/components/pipeline_labels.vue
index f8b4299485e..082ede60244 100644
--- a/app/assets/javascripts/ci/pipeline_details/components/pipelines_list/pipeline_labels.vue
+++ b/app/assets/javascripts/ci/pipeline_details/pipelines_list/components/pipeline_labels.vue
@@ -1,7 +1,7 @@