From 2b6716fbb2c0ec50bd019b3e08aff2c3b95f11fa Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Fri, 6 May 2022 18:09:03 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .gitignore | 1 - .../list/components/issues_list_app.vue | 16 +- .../javascripts/issues/list/constants.js | 22 + .../list/queries/get_issues.query.graphql | 6 + .../queries/get_issues_counts.query.graphql | 14 + ...et_issues_counts_without_crm.query.graphql | 136 + .../get_issues_without_crm.query.graphql | 93 + .../components/list_page/cleanup_status.vue | 64 +- .../components/list_page/image_list.vue | 6 + .../components/list_page/image_list_row.vue | 17 +- .../explorer/constants/details.js | 2 +- .../explorer/constants/expiration_policies.js | 4 +- .../explorer/pages/list.vue | 1 + .../container_registry/explorer/utils.js | 8 + .../components/list/package_list_row.vue | 2 +- .../fragments/package_data.fragment.graphql | 1 + app/models/deploy_token.rb | 4 + .../migration/enqueuer_worker.rb | 36 +- .../development/new_vulnerability_form.yml | 8 - config/gitlab.yml.example | 2 +- db/docs/verification_codes.yml | 2 +- doc/administration/incoming_email.md | 28 +- doc/ci/cloud_services/index.md | 3 - .../index.md | 45 +- doc/ci/secrets/index.md | 12 +- doc/ci/variables/predefined_variables.md | 2 +- doc/development/emails.md | 2 +- .../specification_guide/index.md | 154 +- doc/update/upgrading_from_source.md | 37 +- .../vulnerability_report/index.md | 1 + .../clusters/migrate_to_gitlab_agent.md | 7 +- .../test_coverage_visualization.md | 28 +- .../ghfm_spec_v_0.29.txt | 10227 ++++++++++++++++ .../glfm_example_status.yml | 1 + glfm_specification/output/spec.html | 1 + locale/gitlab.pot | 12 +- .../glfm/example_snapshots/examples_index.yml | 1 + spec/fixtures/glfm/example_snapshots/html.yml | 1 + .../glfm/example_snapshots/markdown.yml | 1 + .../example_snapshots/prosemirror_json.yml | 1 + .../list/components/issues_list_app_spec.js | 4 + spec/frontend/issues/list/mock_data.js | 8 + .../list_page/cleanup_status_spec.js | 32 +- .../container_registry/explorer/utils_spec.js | 21 + .../components/list/package_list_row_spec.js | 7 + spec/models/deploy_token_spec.rb | 6 + .../migration/enqueuer_worker_spec.rb | 39 +- 47 files changed, 10951 insertions(+), 175 deletions(-) create mode 100644 app/assets/javascripts/issues/list/queries/get_issues_counts_without_crm.query.graphql create mode 100644 app/assets/javascripts/issues/list/queries/get_issues_without_crm.query.graphql create mode 100644 app/assets/javascripts/packages_and_registries/container_registry/explorer/utils.js delete mode 100644 config/feature_flags/development/new_vulnerability_form.yml create mode 100644 glfm_specification/input/github_flavored_markdown/ghfm_spec_v_0.29.txt create mode 100644 glfm_specification/input/gitlab_flavored_markdown/glfm_example_status.yml create mode 100644 glfm_specification/output/spec.html create mode 100644 spec/fixtures/glfm/example_snapshots/examples_index.yml create mode 100644 spec/fixtures/glfm/example_snapshots/html.yml create mode 100644 spec/fixtures/glfm/example_snapshots/markdown.yml create mode 100644 spec/fixtures/glfm/example_snapshots/prosemirror_json.yml create mode 100644 spec/frontend/packages_and_registries/container_registry/explorer/utils_spec.js diff --git a/.gitignore b/.gitignore index ae208b5c2c1..bdd3ac98876 100644 --- a/.gitignore +++ b/.gitignore @@ -53,7 +53,6 @@ eslint-report.html /db/data.yml /doc/code/* /dump.rdb -/glfm_specification/input/github_flavored_markdown/ghfm_spec_v_*.txt /jsconfig.json /lefthook-local.yml /log/*.log* diff --git a/app/assets/javascripts/issues/list/components/issues_list_app.vue b/app/assets/javascripts/issues/list/components/issues_list_app.vue index eb7e85bde41..150016ed99d 100644 --- a/app/assets/javascripts/issues/list/components/issues_list_app.vue +++ b/app/assets/javascripts/issues/list/components/issues_list_app.vue @@ -13,6 +13,8 @@ import fuzzaldrinPlus from 'fuzzaldrin-plus'; import IssueCardTimeInfo from 'ee_else_ce/issues/list/components/issue_card_time_info.vue'; import getIssuesQuery from 'ee_else_ce/issues/list/queries/get_issues.query.graphql'; import getIssuesCountsQuery from 'ee_else_ce/issues/list/queries/get_issues_counts.query.graphql'; +import getIssuesWithoutCrmQuery from 'ee_else_ce/issues/list/queries/get_issues_without_crm.query.graphql'; +import getIssuesCountsWithoutCrmQuery from 'ee_else_ce/issues/list/queries/get_issues_counts_without_crm.query.graphql'; import createFlash, { FLASH_TYPES } from '~/flash'; import { TYPE_USER } from '~/graphql_shared/constants'; import { convertToGraphQLId, getIdFromGraphQLId } from '~/graphql_shared/utils'; @@ -154,7 +156,9 @@ export default { }, apollo: { issues: { - query: getIssuesQuery, + query() { + return this.hasCrmParameter ? getIssuesQuery : getIssuesWithoutCrmQuery; + }, variables() { return this.queryVariables; }, @@ -178,7 +182,9 @@ export default { debounce: 200, }, issuesCounts: { - query: getIssuesCountsQuery, + query() { + return this.hasCrmParameter ? getIssuesCountsQuery : getIssuesCountsWithoutCrmQuery; + }, variables() { return this.queryVariables; }, @@ -390,6 +396,12 @@ export default { ...this.urlFilterParams, }; }, + hasCrmParameter() { + return ( + window.location.search.includes('crm_contact_id=') || + window.location.search.includes('crm_organization_id=') + ); + }, }, watch: { $route(newValue, oldValue) { diff --git a/app/assets/javascripts/issues/list/constants.js b/app/assets/javascripts/issues/list/constants.js index d4e2cdcfb1d..4541191730a 100644 --- a/app/assets/javascripts/issues/list/constants.js +++ b/app/assets/javascripts/issues/list/constants.js @@ -132,6 +132,8 @@ export const TOKEN_TYPE_CONFIDENTIAL = 'confidential'; export const TOKEN_TYPE_ITERATION = 'iteration'; export const TOKEN_TYPE_EPIC = 'epic_id'; export const TOKEN_TYPE_WEIGHT = 'weight'; +export const TOKEN_TYPE_CONTACT = 'crm_contact'; +export const TOKEN_TYPE_ORGANIZATION = 'crm_organization'; export const filters = { [TOKEN_TYPE_AUTHOR]: { @@ -294,4 +296,24 @@ export const filters = { }, }, }, + [TOKEN_TYPE_CONTACT]: { + [API_PARAM]: { + [NORMAL_FILTER]: 'crmContactId', + }, + [URL_PARAM]: { + [OPERATOR_IS]: { + [NORMAL_FILTER]: 'crm_contact_id', + }, + }, + }, + [TOKEN_TYPE_ORGANIZATION]: { + [API_PARAM]: { + [NORMAL_FILTER]: 'crmOrganizationId', + }, + [URL_PARAM]: { + [OPERATOR_IS]: { + [NORMAL_FILTER]: 'crm_organization_id', + }, + }, + }, }; diff --git a/app/assets/javascripts/issues/list/queries/get_issues.query.graphql b/app/assets/javascripts/issues/list/queries/get_issues.query.graphql index ec24ea7c56a..dcc0db786b7 100644 --- a/app/assets/javascripts/issues/list/queries/get_issues.query.graphql +++ b/app/assets/javascripts/issues/list/queries/get_issues.query.graphql @@ -20,6 +20,8 @@ query getIssues( $releaseTag: [String!] $releaseTagWildcardId: ReleaseTagWildcardId $types: [IssueType!] + $crmContactId: String + $crmOrganizationId: String $not: NegatedIssueFilterInput $beforeCursor: String $afterCursor: String @@ -43,6 +45,8 @@ query getIssues( milestoneWildcardId: $milestoneWildcardId myReactionEmoji: $myReactionEmoji types: $types + crmContactId: $crmContactId + crmOrganizationId: $crmOrganizationId not: $not before: $beforeCursor after: $afterCursor @@ -76,6 +80,8 @@ query getIssues( releaseTag: $releaseTag releaseTagWildcardId: $releaseTagWildcardId types: $types + crmContactId: $crmContactId + crmOrganizationId: $crmOrganizationId not: $not before: $beforeCursor after: $afterCursor diff --git a/app/assets/javascripts/issues/list/queries/get_issues_counts.query.graphql b/app/assets/javascripts/issues/list/queries/get_issues_counts.query.graphql index 58e7ce32e7c..c1aee772167 100644 --- a/app/assets/javascripts/issues/list/queries/get_issues_counts.query.graphql +++ b/app/assets/javascripts/issues/list/queries/get_issues_counts.query.graphql @@ -14,6 +14,8 @@ query getIssuesCount( $releaseTag: [String!] $releaseTagWildcardId: ReleaseTagWildcardId $types: [IssueType!] + $crmContactId: String + $crmOrganizationId: String $not: NegatedIssueFilterInput ) { group(fullPath: $fullPath) @skip(if: $isProject) { @@ -32,6 +34,8 @@ query getIssuesCount( milestoneWildcardId: $milestoneWildcardId myReactionEmoji: $myReactionEmoji types: $types + crmContactId: $crmContactId + crmOrganizationId: $crmOrganizationId not: $not ) { count @@ -50,6 +54,8 @@ query getIssuesCount( milestoneWildcardId: $milestoneWildcardId myReactionEmoji: $myReactionEmoji types: $types + crmContactId: $crmContactId + crmOrganizationId: $crmOrganizationId not: $not ) { count @@ -68,6 +74,8 @@ query getIssuesCount( milestoneWildcardId: $milestoneWildcardId myReactionEmoji: $myReactionEmoji types: $types + crmContactId: $crmContactId + crmOrganizationId: $crmOrganizationId not: $not ) { count @@ -90,6 +98,8 @@ query getIssuesCount( releaseTag: $releaseTag releaseTagWildcardId: $releaseTagWildcardId types: $types + crmContactId: $crmContactId + crmOrganizationId: $crmOrganizationId not: $not ) { count @@ -109,6 +119,8 @@ query getIssuesCount( releaseTag: $releaseTag releaseTagWildcardId: $releaseTagWildcardId types: $types + crmContactId: $crmContactId + crmOrganizationId: $crmOrganizationId not: $not ) { count @@ -128,6 +140,8 @@ query getIssuesCount( releaseTag: $releaseTag releaseTagWildcardId: $releaseTagWildcardId types: $types + crmContactId: $crmContactId + crmOrganizationId: $crmOrganizationId not: $not ) { count diff --git a/app/assets/javascripts/issues/list/queries/get_issues_counts_without_crm.query.graphql b/app/assets/javascripts/issues/list/queries/get_issues_counts_without_crm.query.graphql new file mode 100644 index 00000000000..ab91aab1218 --- /dev/null +++ b/app/assets/javascripts/issues/list/queries/get_issues_counts_without_crm.query.graphql @@ -0,0 +1,136 @@ +query getIssuesCountWithoutCrm( + $isProject: Boolean = false + $fullPath: ID! + $iid: String + $search: String + $assigneeId: String + $assigneeUsernames: [String!] + $authorUsername: String + $confidential: Boolean + $labelName: [String] + $milestoneTitle: [String] + $milestoneWildcardId: MilestoneWildcardId + $myReactionEmoji: String + $releaseTag: [String!] + $releaseTagWildcardId: ReleaseTagWildcardId + $types: [IssueType!] + $not: NegatedIssueFilterInput +) { + group(fullPath: $fullPath) @skip(if: $isProject) { + id + openedIssues: issues( + includeSubgroups: true + state: opened + iid: $iid + search: $search + assigneeId: $assigneeId + assigneeUsernames: $assigneeUsernames + authorUsername: $authorUsername + confidential: $confidential + labelName: $labelName + milestoneTitle: $milestoneTitle + milestoneWildcardId: $milestoneWildcardId + myReactionEmoji: $myReactionEmoji + types: $types + not: $not + ) { + count + } + closedIssues: issues( + includeSubgroups: true + state: closed + iid: $iid + search: $search + assigneeId: $assigneeId + assigneeUsernames: $assigneeUsernames + authorUsername: $authorUsername + confidential: $confidential + labelName: $labelName + milestoneTitle: $milestoneTitle + milestoneWildcardId: $milestoneWildcardId + myReactionEmoji: $myReactionEmoji + types: $types + not: $not + ) { + count + } + allIssues: issues( + includeSubgroups: true + state: all + iid: $iid + search: $search + assigneeId: $assigneeId + assigneeUsernames: $assigneeUsernames + authorUsername: $authorUsername + confidential: $confidential + labelName: $labelName + milestoneTitle: $milestoneTitle + milestoneWildcardId: $milestoneWildcardId + myReactionEmoji: $myReactionEmoji + types: $types + not: $not + ) { + count + } + } + project(fullPath: $fullPath) @include(if: $isProject) { + id + openedIssues: issues( + state: opened + iid: $iid + search: $search + assigneeId: $assigneeId + assigneeUsernames: $assigneeUsernames + authorUsername: $authorUsername + confidential: $confidential + labelName: $labelName + milestoneTitle: $milestoneTitle + milestoneWildcardId: $milestoneWildcardId + myReactionEmoji: $myReactionEmoji + releaseTag: $releaseTag + releaseTagWildcardId: $releaseTagWildcardId + types: $types + not: $not + ) { + count + } + closedIssues: issues( + state: closed + iid: $iid + search: $search + assigneeId: $assigneeId + assigneeUsernames: $assigneeUsernames + authorUsername: $authorUsername + confidential: $confidential + labelName: $labelName + milestoneTitle: $milestoneTitle + milestoneWildcardId: $milestoneWildcardId + myReactionEmoji: $myReactionEmoji + releaseTag: $releaseTag + releaseTagWildcardId: $releaseTagWildcardId + types: $types + not: $not + ) { + count + } + allIssues: issues( + state: all + iid: $iid + search: $search + assigneeId: $assigneeId + assigneeUsernames: $assigneeUsernames + authorUsername: $authorUsername + confidential: $confidential + labelName: $labelName + milestoneTitle: $milestoneTitle + milestoneWildcardId: $milestoneWildcardId + myReactionEmoji: $myReactionEmoji + releaseTag: $releaseTag + releaseTagWildcardId: $releaseTagWildcardId + types: $types + not: $not + ) { + count + } + } +} diff --git a/app/assets/javascripts/issues/list/queries/get_issues_without_crm.query.graphql b/app/assets/javascripts/issues/list/queries/get_issues_without_crm.query.graphql new file mode 100644 index 00000000000..94948bb7d34 --- /dev/null +++ b/app/assets/javascripts/issues/list/queries/get_issues_without_crm.query.graphql @@ -0,0 +1,93 @@ +#import "~/graphql_shared/fragments/page_info.fragment.graphql" +#import "./issue.fragment.graphql" + +query getIssuesWithoutCrm( + $isProject: Boolean = false + $isSignedIn: Boolean = false + $fullPath: ID! + $iid: String + $search: String + $sort: IssueSort + $state: IssuableState + $assigneeId: String + $assigneeUsernames: [String!] + $authorUsername: String + $confidential: Boolean + $labelName: [String] + $milestoneTitle: [String] + $milestoneWildcardId: MilestoneWildcardId + $myReactionEmoji: String + $releaseTag: [String!] + $releaseTagWildcardId: ReleaseTagWildcardId + $types: [IssueType!] + $not: NegatedIssueFilterInput + $beforeCursor: String + $afterCursor: String + $firstPageSize: Int + $lastPageSize: Int +) { + group(fullPath: $fullPath) @skip(if: $isProject) { + id + issues( + includeSubgroups: true + iid: $iid + search: $search + sort: $sort + state: $state + assigneeId: $assigneeId + assigneeUsernames: $assigneeUsernames + authorUsername: $authorUsername + confidential: $confidential + labelName: $labelName + milestoneTitle: $milestoneTitle + milestoneWildcardId: $milestoneWildcardId + myReactionEmoji: $myReactionEmoji + types: $types + not: $not + before: $beforeCursor + after: $afterCursor + first: $firstPageSize + last: $lastPageSize + ) { + pageInfo { + ...PageInfo + } + nodes { + ...IssueFragment + reference(full: true) + } + } + } + project(fullPath: $fullPath) @include(if: $isProject) { + id + issues( + iid: $iid + search: $search + sort: $sort + state: $state + assigneeId: $assigneeId + assigneeUsernames: $assigneeUsernames + authorUsername: $authorUsername + confidential: $confidential + labelName: $labelName + milestoneTitle: $milestoneTitle + milestoneWildcardId: $milestoneWildcardId + myReactionEmoji: $myReactionEmoji + releaseTag: $releaseTag + releaseTagWildcardId: $releaseTagWildcardId + types: $types + not: $not + before: $beforeCursor + after: $afterCursor + first: $firstPageSize + last: $lastPageSize + ) { + pageInfo { + ...PageInfo + } + nodes { + ...IssueFragment + } + } + } +} diff --git a/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/cleanup_status.vue b/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/cleanup_status.vue index 1f52e319ad0..a720ad75570 100644 --- a/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/cleanup_status.vue +++ b/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/cleanup_status.vue @@ -1,7 +1,9 @@ diff --git a/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/image_list.vue b/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/image_list.vue index 5bd13322ebb..6f1f67e251f 100644 --- a/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/image_list.vue +++ b/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/image_list.vue @@ -22,6 +22,11 @@ export default { type: Object, required: true, }, + expirationPolicy: { + type: Object, + default: () => ({}), + required: false, + }, }, computed: { showPagination() { @@ -38,6 +43,7 @@ export default { :key="index" :item="listItem" :metadata-loading="metadataLoading" + :expiration-policy="expirationPolicy" @delete="$emit('delete', $event)" />
diff --git a/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/image_list_row.vue b/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/image_list_row.vue index 484903354e8..12263c6fc5a 100644 --- a/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/image_list_row.vue +++ b/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/image_list_row.vue @@ -6,12 +6,10 @@ import { n__ } from '~/locale'; import ClipboardButton from '~/vue_shared/components/clipboard_button.vue'; import ListItem from '~/vue_shared/components/registry/list_item.vue'; import { - ASYNC_DELETE_IMAGE_ERROR_MESSAGE, LIST_DELETE_BUTTON_DISABLED, LIST_DELETE_BUTTON_DISABLED_FOR_MIGRATION, REMOVE_REPOSITORY_LABEL, ROW_SCHEDULED_FOR_DELETION, - CLEANUP_TIMED_OUT_ERROR_MESSAGE, IMAGE_DELETE_SCHEDULED_STATUS, IMAGE_FAILED_DELETED_STATUS, IMAGE_MIGRATING_STATE, @@ -45,6 +43,11 @@ export default { default: false, required: false, }, + expirationPolicy: { + type: Object, + default: () => ({}), + required: false, + }, }, i18n: { REMOVE_REPOSITORY_LABEL, @@ -73,15 +76,6 @@ export default { this.item.tagsCount, ); }, - warningIconText() { - if (this.failedDelete) { - return ASYNC_DELETE_IMAGE_ERROR_MESSAGE; - } - if (this.item.expirationPolicyStartedAt) { - return CLEANUP_TIMED_OUT_ERROR_MESSAGE; - } - return null; - }, imageName() { return this.item.name ? this.item.path : `${this.item.path}/ ${ROOT_IMAGE_TEXT}`; }, @@ -140,6 +134,7 @@ export default { v-if="item.expirationPolicyCleanupStatus" class="ml-2" :status="item.expirationPolicyCleanupStatus" + :expiration-policy-next-run-at="expirationPolicy.next_run_at" /> diff --git a/app/assets/javascripts/packages_and_registries/container_registry/explorer/constants/details.js b/app/assets/javascripts/packages_and_registries/container_registry/explorer/constants/details.js index 3c7f7ca9aa8..2a58933cd64 100644 --- a/app/assets/javascripts/packages_and_registries/container_registry/explorer/constants/details.js +++ b/app/assets/javascripts/packages_and_registries/container_registry/explorer/constants/details.js @@ -87,7 +87,7 @@ export const CLEANUP_DISABLED_TOOLTIP = s__( export const CLEANUP_STATUS_SCHEDULED = s__('ContainerRegistry|Cleanup will run soon'); export const CLEANUP_STATUS_ONGOING = s__('ContainerRegistry|Cleanup is ongoing'); -export const CLEANUP_STATUS_UNFINISHED = s__('ContainerRegistry|Cleanup timed out'); +export const CLEANUP_STATUS_UNFINISHED = s__('ContainerRegistry|Partial cleanup complete'); export const DETAILS_DELETE_IMAGE_ERROR_MESSAGE = s__( 'ContainerRegistry|Something went wrong while scheduling the image for deletion.', diff --git a/app/assets/javascripts/packages_and_registries/container_registry/explorer/constants/expiration_policies.js b/app/assets/javascripts/packages_and_registries/container_registry/explorer/constants/expiration_policies.js index e584da23edb..9d0ecfd2dcb 100644 --- a/app/assets/javascripts/packages_and_registries/container_registry/explorer/constants/expiration_policies.js +++ b/app/assets/javascripts/packages_and_registries/container_registry/explorer/constants/expiration_policies.js @@ -10,7 +10,7 @@ export const DELETE_ALERT_TITLE = s__('ContainerRegistry|Some tags were not dele export const DELETE_ALERT_LINK_TEXT = s__( 'ContainerRegistry|The cleanup policy timed out before it could delete all tags. An administrator can %{adminLinkStart}manually run cleanup now%{adminLinkEnd} or you can wait for the cleanup policy to automatically run again. %{docLinkStart}More information%{docLinkEnd}', ); -export const CLEANUP_TIMED_OUT_ERROR_MESSAGE = s__( - 'ContainerRegistry|Cleanup timed out before it could delete all tags', +export const PARTIAL_CLEANUP_CONTINUE_MESSAGE = s__( + 'ContainerRegistry|The cleanup will continue within %{time}. %{linkStart}Learn more%{linkEnd}', ); export const SET_UP_CLEANUP = s__('ContainerRegistry|Set up cleanup'); diff --git a/app/assets/javascripts/packages_and_registries/container_registry/explorer/pages/list.vue b/app/assets/javascripts/packages_and_registries/container_registry/explorer/pages/list.vue index bb116d5f842..c1bd71de646 100644 --- a/app/assets/javascripts/packages_and_registries/container_registry/explorer/pages/list.vue +++ b/app/assets/javascripts/packages_and_registries/container_registry/explorer/pages/list.vue @@ -336,6 +336,7 @@ export default { :images="images" :metadata-loading="$apollo.queries.additionalDetails.loading" :page-info="pageInfo" + :expiration-policy="config.expirationPolicy" @delete="deleteImage" @prev-page="fetchPreviousPage" @next-page="fetchNextPage" diff --git a/app/assets/javascripts/packages_and_registries/container_registry/explorer/utils.js b/app/assets/javascripts/packages_and_registries/container_registry/explorer/utils.js new file mode 100644 index 00000000000..ffdaf9f2f17 --- /dev/null +++ b/app/assets/javascripts/packages_and_registries/container_registry/explorer/utils.js @@ -0,0 +1,8 @@ +import { approximateDuration, calculateRemainingMilliseconds } from '~/lib/utils/datetime_utility'; + +export const timeTilRun = (time) => { + if (!time) return ''; + + const difference = calculateRemainingMilliseconds(time); + return approximateDuration(difference / 1000); +}; diff --git a/app/assets/javascripts/packages_and_registries/package_registry/components/list/package_list_row.vue b/app/assets/javascripts/packages_and_registries/package_registry/components/list/package_list_row.vue index 09988f4e1d9..04faff1a75b 100644 --- a/app/assets/javascripts/packages_and_registries/package_registry/components/list/package_list_row.vue +++ b/app/assets/javascripts/packages_and_registries/package_registry/components/list/package_list_row.vue @@ -159,7 +159,7 @@ export default { -