diff --git a/.rubocop_todo/lint/non_atomic_file_operation.yml b/.rubocop_todo/lint/non_atomic_file_operation.yml index e9dc875008c..c00fb856d64 100644 --- a/.rubocop_todo/lint/non_atomic_file_operation.yml +++ b/.rubocop_todo/lint/non_atomic_file_operation.yml @@ -2,17 +2,6 @@ # Cop supports --autocorrect. Lint/NonAtomicFileOperation: Exclude: - - 'app/models/merge_request_diff.rb' - - 'app/services/bulk_imports/file_decompression_service.rb' - - 'app/services/projects/import_export/parallel_export_service.rb' - - 'app/services/projects/import_export/relation_export_service.rb' - - 'app/services/projects/lfs_pointers/lfs_download_service.rb' - - 'lib/bulk_imports/common/extractors/json_extractor.rb' - - 'lib/bulk_imports/common/extractors/ndjson_extractor.rb' - - 'lib/bulk_imports/common/pipelines/lfs_objects_pipeline.rb' - - 'lib/bulk_imports/common/pipelines/uploads_pipeline.rb' - - 'lib/bulk_imports/projects/pipelines/design_bundle_pipeline.rb' - - 'lib/bulk_imports/projects/pipelines/repository_bundle_pipeline.rb' - 'lib/gitlab/ci/trace.rb' - 'lib/gitlab/database/migrations/test_batched_background_runner.rb' - 'lib/gitlab/gpg.rb' diff --git a/app/assets/javascripts/ci/common/pipeline_summary/graphql/queries/get_pipeline_summary.query.graphql b/app/assets/javascripts/ci/common/pipeline_summary/graphql/queries/get_pipeline_summary.query.graphql index e1a1f366e62..c496c50f745 100644 --- a/app/assets/javascripts/ci/common/pipeline_summary/graphql/queries/get_pipeline_summary.query.graphql +++ b/app/assets/javascripts/ci/common/pipeline_summary/graphql/queries/get_pipeline_summary.query.graphql @@ -17,20 +17,20 @@ query getPipelineSummary($fullPath: ID!, $iid: ID!, $includeCommitInfo: Boolean! downstream { nodes { id + iid + name detailedStatus { id detailsPath icon label + tooltip } path project { id name - } - sourceJob { - id - retried + fullPath } } } diff --git a/app/assets/javascripts/ci/pipeline_mini_graph/downstream_pipeline_dropdown.vue b/app/assets/javascripts/ci/pipeline_mini_graph/downstream_pipeline_dropdown.vue index 45404144fd8..a49f06608be 100644 --- a/app/assets/javascripts/ci/pipeline_mini_graph/downstream_pipeline_dropdown.vue +++ b/app/assets/javascripts/ci/pipeline_mini_graph/downstream_pipeline_dropdown.vue @@ -1,7 +1,24 @@ diff --git a/app/assets/javascripts/ci/pipeline_mini_graph/graphql/queries/get_downstream_pipeline_jobs.query.graphql b/app/assets/javascripts/ci/pipeline_mini_graph/graphql/queries/get_downstream_pipeline_jobs.query.graphql index f9b64c981bc..4d6b0d4e384 100644 --- a/app/assets/javascripts/ci/pipeline_mini_graph/graphql/queries/get_downstream_pipeline_jobs.query.graphql +++ b/app/assets/javascripts/ci/pipeline_mini_graph/graphql/queries/get_downstream_pipeline_jobs.query.graphql @@ -3,12 +3,6 @@ query getDownstreamPipelineJobs($fullPath: ID!, $iid: ID!) { id pipeline(iid: $iid) { id - path - name - project { - id - name - } jobs { nodes { id diff --git a/app/assets/javascripts/ci/pipeline_mini_graph/utils/data_utils.js b/app/assets/javascripts/ci/pipeline_mini_graph/utils/data_utils.js index 1127c59d8c2..7ed3eb2ea86 100644 --- a/app/assets/javascripts/ci/pipeline_mini_graph/utils/data_utils.js +++ b/app/assets/javascripts/ci/pipeline_mini_graph/utils/data_utils.js @@ -1,4 +1,5 @@ import { convertToGraphQLId } from '~/graphql_shared/utils'; +import { cleanLeadingSeparator } from '~/lib/utils/url_utility'; import { TYPENAME_CI_PIPELINE, TYPENAME_CI_STAGE } from '~/graphql_shared/constants'; const hasDetailedStatus = (item) => { @@ -17,12 +18,15 @@ export const normalizeDownstreamPipelines = (pipelines) => { return p; } - const { id, details, path, project } = p; + const { id, iid, details, name, path, project } = p; return { id: convertToGraphQLId(TYPENAME_CI_PIPELINE, id), + iid, detailedStatus: details?.status, + name, path, project: { + fullPath: cleanLeadingSeparator(project.full_path), name: project.name, }, }; @@ -53,3 +57,18 @@ export const normalizeStages = (stages) => { }; }); }; + +/** + * sorts jobs by status + * failed > manual > everything else > success + * + * @param {Array} jobs - The jobs to sort + * @returns {Array} - The sorted jobs + */ +export const sortJobsByStatus = (jobs) => { + if (!jobs) return []; + return [...jobs].sort((a, b) => { + const order = { failed: -3, manual: -2, success: 1 }; + return (order[a.detailedStatus.group] || 0) - (order[b.detailedStatus.group] || 0); + }); +}; diff --git a/app/assets/javascripts/environments/components/deploy_freeze_alert.vue b/app/assets/javascripts/environments/components/deploy_freeze_alert.vue index 8b0af031ffe..24194fbe2f4 100644 --- a/app/assets/javascripts/environments/components/deploy_freeze_alert.vue +++ b/app/assets/javascripts/environments/components/deploy_freeze_alert.vue @@ -57,7 +57,7 @@ export default { 'Environments|A freeze period is in effect from %{startTime} to %{endTime}. Deployments might fail during this time. For more information, see the %{docsLinkStart}deploy freeze documentation%{docsLinkEnd}.', ), }, - deployFreezeDocsPath: helpPagePath('user/project/releases/index', { + deployFreezeDocsPath: helpPagePath('user/project/releases/_index', { anchor: 'prevent-unintentional-releases-by-setting-a-deploy-freeze', }), }; diff --git a/app/assets/javascripts/import_entities/import_projects/components/provider_repo_table_row.vue b/app/assets/javascripts/import_entities/import_projects/components/provider_repo_table_row.vue index af8094be68e..eb4d1f5d790 100644 --- a/app/assets/javascripts/import_entities/import_projects/components/provider_repo_table_row.vue +++ b/app/assets/javascripts/import_entities/import_projects/components/provider_repo_table_row.vue @@ -149,7 +149,7 @@ export default { }, helpPath: helpPagePath('/user/project/import/github'), - membershipsHelpPath: helpPagePath('user/project/import/index', { + membershipsHelpPath: helpPagePath('user/project/import/_index', { anchor: 'user-contribution-and-membership-mapping', }), }; diff --git a/app/assets/javascripts/issues/list/components/empty_state_without_any_issues.vue b/app/assets/javascripts/issues/list/components/empty_state_without_any_issues.vue index a9dd63143d0..115a92ffa6f 100644 --- a/app/assets/javascripts/issues/list/components/empty_state_without_any_issues.vue +++ b/app/assets/javascripts/issues/list/components/empty_state_without_any_issues.vue @@ -14,7 +14,7 @@ export default { ), }, emptyStateSvg, - issuesHelpPagePath: helpPagePath('user/project/issues/index'), + issuesHelpPagePath: helpPagePath('user/project/issues/_index'), jiraIntegrationPath: helpPagePath('integration/jira/configure', { anchor: 'view-jira-issues' }), components: { CsvImportExportButtons, diff --git a/app/assets/javascripts/members/placeholders/components/app.vue b/app/assets/javascripts/members/placeholders/components/app.vue index 20323290fbf..cfdfa90a227 100644 --- a/app/assets/javascripts/members/placeholders/components/app.vue +++ b/app/assets/javascripts/members/placeholders/components/app.vue @@ -280,7 +280,7 @@ export default { this.sort = sort; }, }, - helpUrl: helpPagePath('user/project/import/index', { + helpUrl: helpPagePath('user/project/import/_index', { anchor: 'security-considerations', }), uploadCsvModalId: UPLOAD_CSV_PLACEHOLDERS_MODAL_ID, diff --git a/app/assets/javascripts/members/placeholders/components/csv_upload_modal.vue b/app/assets/javascripts/members/placeholders/components/csv_upload_modal.vue index e93264e8b6b..17bdd01991b 100644 --- a/app/assets/javascripts/members/placeholders/components/csv_upload_modal.vue +++ b/app/assets/javascripts/members/placeholders/components/csv_upload_modal.vue @@ -86,7 +86,7 @@ export default { }, }, dropzoneAllowList: ['.csv'], - docsLink: helpPagePath('user/project/import/index', { + docsLink: helpPagePath('user/project/import/_index', { anchor: 'request-reassignment-by-using-a-csv-file', }), i18n: { diff --git a/app/assets/javascripts/members/placeholders/components/placeholders_table.vue b/app/assets/javascripts/members/placeholders/components/placeholders_table.vue index f18095b08b9..13cf636f6f4 100644 --- a/app/assets/javascripts/members/placeholders/components/placeholders_table.vue +++ b/app/assets/javascripts/members/placeholders/components/placeholders_table.vue @@ -194,7 +194,7 @@ export default { this.$emit('confirm', item); }, }, - placeholderUsersHelpPath: helpPagePath('user/project/import/index', { + placeholderUsersHelpPath: helpPagePath('user/project/import/_index', { anchor: 'placeholder-users', }), }; diff --git a/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/project_empty_state.vue b/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/project_empty_state.vue index c9090e09ac6..e78a6417c24 100644 --- a/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/project_empty_state.vue +++ b/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/project_empty_state.vue @@ -75,6 +75,7 @@ export default { :value="dockerLoginCommand" readonly type="text" + :aria-label="s__('ContainerRegistry|Docker login command')" class="!gl-font-monospace" />