diff --git a/.gitlab/ci/package-and-test/main.gitlab-ci.yml b/.gitlab/ci/package-and-test/main.gitlab-ci.yml index d80b1b44a22..8db781ddff2 100644 --- a/.gitlab/ci/package-and-test/main.gitlab-ci.yml +++ b/.gitlab/ci/package-and-test/main.gitlab-ci.yml @@ -130,6 +130,7 @@ trigger-omnibus-env: echo "OMNIBUS_GITLAB_BUILD_ON_ALL_OS=${OMNIBUS_GITLAB_BUILD_ON_ALL_OS:-false}" >> $BUILD_ENV echo "GITLAB_ASSETS_TAG=$(assets_image_tag)" >> $BUILD_ENV echo "EE=$([[ $FOSS_ONLY == '1' ]] && echo 'false' || echo 'true')" >> $BUILD_ENV + echo "TRIGGER_BRANCH=$([[ "$CI_COMMIT_REF_NAME" =~ ^[0-9-]+-stable(-ee)?$ ]] && echo ${CI_COMMIT_REF_NAME%-ee} || echo 'master')" >> $BUILD_ENV echo "Built environment file for omnibus build:" cat $BUILD_ENV artifacts: @@ -173,6 +174,7 @@ trigger-omnibus: ee: $EE trigger: project: gitlab-org/build/omnibus-gitlab-mirror + branch: $TRIGGER_BRANCH strategy: depend trigger-omnibus-ce: diff --git a/app/assets/javascripts/analytics/shared/constants.js b/app/assets/javascripts/analytics/shared/constants.js index 7ced658f483..a07e2c3b799 100644 --- a/app/assets/javascripts/analytics/shared/constants.js +++ b/app/assets/javascripts/analytics/shared/constants.js @@ -30,18 +30,13 @@ export const DORA_METRICS = { CHANGE_FAILURE_RATE: 'change_failure_rate', }; -export const VSA_METRICS_GROUPS = [ - { - key: 'key_metrics', - title: s__('ValueStreamAnalytics|Key metrics'), - keys: Object.values(KEY_METRICS), - }, - { - key: 'dora_metrics', - title: s__('ValueStreamAnalytics|DORA metrics'), - keys: Object.values(DORA_METRICS), - }, -]; +const VSA_FLOW_METRICS_GROUP = { + key: 'key_metrics', + title: s__('ValueStreamAnalytics|Key metrics'), + keys: Object.values(KEY_METRICS), +}; + +export const VSA_METRICS_GROUPS = [VSA_FLOW_METRICS_GROUP]; export const METRIC_TOOLTIPS = { [DORA_METRICS.DEPLOYMENT_FREQUENCY]: { diff --git a/app/assets/javascripts/commit/pipelines/pipelines_bundle.js b/app/assets/javascripts/commit/pipelines/pipelines_bundle.js index 2109aecdf03..96c274225d8 100644 --- a/app/assets/javascripts/commit/pipelines/pipelines_bundle.js +++ b/app/assets/javascripts/commit/pipelines/pipelines_bundle.js @@ -1,6 +1,14 @@ import Vue from 'vue'; +import VueApollo from 'vue-apollo'; +import createDefaultClient from '~/lib/graphql'; import { initPipelineCountListener } from './utils'; +Vue.use(VueApollo); + +const apolloProvider = new VueApollo({ + defaultClient: createDefaultClient(), +}); + /** * Used in: * - Project Pipelines List (projects:pipelines:index) @@ -20,9 +28,12 @@ export default () => { components: { CommitPipelinesTable: () => import('~/commit/pipelines/pipelines_table.vue'), }, + apolloProvider, provide: { artifactsEndpoint: pipelineTableViewEl.dataset.artifactsEndpoint, artifactsEndpointPlaceholder: pipelineTableViewEl.dataset.artifactsEndpointPlaceholder, + fullPath: pipelineTableViewEl.dataset.fullPath, + manualActionsLimit: 50, }, render(createElement) { return createElement('commit-pipelines-table', { diff --git a/app/assets/javascripts/error_tracking/components/error_details.vue b/app/assets/javascripts/error_tracking/components/error_details.vue index 61c0ddef639..0a661d51576 100644 --- a/app/assets/javascripts/error_tracking/components/error_details.vue +++ b/app/assets/javascripts/error_tracking/components/error_details.vue @@ -2,7 +2,6 @@ import { GlButton, GlFormInput, - GlLink, GlLoadingIcon, GlBadge, GlAlert, @@ -10,7 +9,6 @@ import { GlDropdown, GlDropdownItem, GlDropdownDivider, - GlIcon, } from '@gitlab/ui'; import { mapActions, mapGetters, mapState } from 'vuex'; import { createAlert, VARIANT_WARNING } from '~/alert'; @@ -18,16 +16,11 @@ import { __, sprintf, n__ } from '~/locale'; import Tracking from '~/tracking'; import TimeAgoTooltip from '~/vue_shared/components/time_ago_tooltip.vue'; import TooltipOnTruncate from '~/vue_shared/components/tooltip_on_truncate/tooltip_on_truncate.vue'; -import TrackEventDirective from '~/vue_shared/directives/track_event'; import query from '../queries/details.query.graphql'; -import { - trackClickErrorLinkToSentryOptions, - trackErrorDetailsViewsOptions, - trackErrorStatusUpdateOptions, -} from '../utils'; - +import { trackErrorDetailsViewsOptions, trackErrorStatusUpdateOptions } from '../utils'; import { severityLevel, severityLevelVariant, errorStatus } from '../constants'; import Stacktrace from './stacktrace.vue'; +import ErrorDetailsInfo from './error_details_info.vue'; const SENTRY_TIMEOUT = 10000; @@ -35,10 +28,8 @@ export default { components: { GlButton, GlFormInput, - GlLink, GlLoadingIcon, TooltipOnTruncate, - GlIcon, Stacktrace, GlBadge, GlAlert, @@ -47,9 +38,7 @@ export default { GlDropdownItem, GlDropdownDivider, TimeAgoTooltip, - }, - directives: { - TrackEvent: TrackEventDirective, + ErrorDetailsInfo, }, props: { issueUpdatePath: { @@ -122,18 +111,7 @@ export default { 'errorStatus', ]), ...mapGetters('details', ['stacktrace']), - firstReleaseLink() { - return `${this.error.externalBaseUrl}/releases/${this.error.firstReleaseVersion}`; - }, - lastReleaseLink() { - return `${this.error.externalBaseUrl}/releases/${this.error.lastReleaseVersion}`; - }, - firstCommitLink() { - return `${this.error.externalBaseUrl}/-/commit/${this.error.firstReleaseVersion}`; - }, - lastCommitLink() { - return `${this.error.externalBaseUrl}/-/commit/${this.error.lastReleaseVersion}`; - }, + showStacktrace() { return Boolean(this.stacktrace?.length); }, @@ -204,7 +182,6 @@ export default { 'updateResolveStatus', 'updateIgnoreStatus', ]), - trackClickErrorLinkToSentryOptions, createIssue() { this.issueCreationInProgress = true; this.$refs.sentryIssueForm.submit(); @@ -257,6 +234,7 @@ export default {
+
{{ error.tags.logger }} -
    -
  • - {{ __('GitLab commit') }}: - - {{ error.gitlabCommit.substr(0, 10) }} - -
  • -
  • - {{ __('GitLab Issue') }}: - - {{ error.gitlabIssuePath }} - -
  • -
  • - {{ __('Sentry event') }}: - - {{ error.externalUrl }} - - -
  • -
  • - {{ __('First seen') }}: - - - {{ __('GitLab commit') }}: {{ error.firstReleaseVersion }} - - - {{ __('Release') }}: {{ error.firstReleaseVersion }} - -
  • -
  • - {{ __('Last seen') }}: - - - {{ __('GitLab commit') }}: {{ error.lastReleaseVersion }} - - - {{ __('Release') }}: {{ error.lastReleaseVersion }} - -
  • -
  • - {{ __('Events') }}: - {{ error.count }} -
  • -
  • - {{ __('Users') }}: - {{ error.userCount }} -
  • -
+ +
diff --git a/app/assets/javascripts/error_tracking/components/error_details_info.vue b/app/assets/javascripts/error_tracking/components/error_details_info.vue new file mode 100644 index 00000000000..bbc7b0de7cf --- /dev/null +++ b/app/assets/javascripts/error_tracking/components/error_details_info.vue @@ -0,0 +1,174 @@ + + + diff --git a/app/assets/javascripts/merge_request_tabs.js b/app/assets/javascripts/merge_request_tabs.js index 237e8c68be4..b927654a3f5 100644 --- a/app/assets/javascripts/merge_request_tabs.js +++ b/app/assets/javascripts/merge_request_tabs.js @@ -1,6 +1,8 @@ /* eslint-disable class-methods-use-this */ import $ from 'jquery'; import Vue from 'vue'; +import VueApollo from 'vue-apollo'; +import createDefaultClient from '~/lib/graphql'; import { createAlert } from '~/alert'; import { getCookie, isMetaClick, parseBoolean, scrollToElement } from '~/lib/utils/common_utils'; import { parseUrlPathname } from '~/lib/utils/url_utility'; @@ -16,6 +18,12 @@ import { isInVueNoteablePage } from './lib/utils/dom_utils'; import { __, s__ } from './locale'; import syntaxHighlight from './syntax_highlight'; +Vue.use(VueApollo); + +const apolloProvider = new VueApollo({ + defaultClient: createDefaultClient(), +}); + // MergeRequestTabs // // Handles persisting and restoring the current tab selection and lazily-loading @@ -94,10 +102,13 @@ function mountPipelines() { components: { CommitPipelinesTable: () => import('~/commit/pipelines/pipelines_table.vue'), }, + apolloProvider, provide: { artifactsEndpoint: pipelineTableViewEl.dataset.artifactsEndpoint, artifactsEndpointPlaceholder: pipelineTableViewEl.dataset.artifactsEndpointPlaceholder, targetProjectFullPath: mrWidgetData?.target_project_full_path || '', + fullPath: pipelineTableViewEl.dataset.fullPath, + manualActionsLimit: 50, }, render(createElement) { return createElement('commit-pipelines-table', { diff --git a/app/assets/javascripts/releases/components/app_index.vue b/app/assets/javascripts/releases/components/app_index.vue index 515d9efaefd..eebaeeea286 100644 --- a/app/assets/javascripts/releases/components/app_index.vue +++ b/app/assets/javascripts/releases/components/app_index.vue @@ -4,9 +4,10 @@ import { createAlert } from '~/alert'; import { historyPushState } from '~/lib/utils/common_utils'; import { scrollUp } from '~/lib/utils/scroll_utils'; import { setUrlParams, getParameterByName } from '~/lib/utils/url_utility'; -import { __, sprintf } from '~/locale'; +import { __ } from '~/locale'; import { PAGE_SIZE, DEFAULT_SORT } from '~/releases/constants'; -import { convertAllReleasesGraphQLResponse, deleteReleaseSessionKey } from '~/releases/util'; +import { convertAllReleasesGraphQLResponse } from '~/releases/util'; +import { popDeleteReleaseNotification } from '~/releases/release_notification_service'; import allReleasesQuery from '../graphql/queries/all_releases.query.graphql'; import ReleaseBlock from './release_block.vue'; import ReleaseSkeletonLoader from './release_skeleton_loader.vue'; @@ -173,18 +174,7 @@ export default { }, }, mounted() { - const key = deleteReleaseSessionKey(this.projectPath); - const deletedRelease = window.sessionStorage.getItem(key); - - if (deletedRelease) { - this.$toast.show( - sprintf(__('Release %{deletedRelease} has been successfully deleted.'), { - deletedRelease, - }), - ); - } - - window.sessionStorage.removeItem(key); + popDeleteReleaseNotification(this.projectPath); }, created() { this.updateQueryParamsFromUrl(); diff --git a/app/assets/javascripts/releases/release_notification_service.js b/app/assets/javascripts/releases/release_notification_service.js index 775c62802d4..20fbab3241e 100644 --- a/app/assets/javascripts/releases/release_notification_service.js +++ b/app/assets/javascripts/releases/release_notification_service.js @@ -1,4 +1,4 @@ -import { s__, sprintf } from '~/locale'; +import { s__, __, sprintf } from '~/locale'; import { createAlert, VARIANT_SUCCESS } from '~/alert'; const createReleaseSessionKey = (projectPath) => `createRelease:${projectPath}`; @@ -21,3 +21,24 @@ export const popCreateReleaseNotification = (projectPath) => { window.sessionStorage.removeItem(key); } }; + +export const deleteReleaseSessionKey = (projectPath) => `deleteRelease:${projectPath}`; + +export const putDeleteReleaseNotification = (projectPath, releaseName) => { + window.sessionStorage.setItem(deleteReleaseSessionKey(projectPath), releaseName); +}; + +export const popDeleteReleaseNotification = (projectPath) => { + const key = deleteReleaseSessionKey(projectPath); + const deletedRelease = window.sessionStorage.getItem(key); + + if (deletedRelease) { + createAlert({ + message: sprintf(__('Release %{deletedRelease} has been successfully deleted.'), { + deletedRelease, + }), + variant: VARIANT_SUCCESS, + }); + window.sessionStorage.removeItem(key); + } +}; diff --git a/app/assets/javascripts/releases/stores/modules/edit_new/actions.js b/app/assets/javascripts/releases/stores/modules/edit_new/actions.js index f5191e000f7..2ea31518dd0 100644 --- a/app/assets/javascripts/releases/stores/modules/edit_new/actions.js +++ b/app/assets/javascripts/releases/stores/modules/edit_new/actions.js @@ -8,11 +8,8 @@ import createReleaseAssetLinkMutation from '~/releases/graphql/mutations/create_ import deleteReleaseAssetLinkMutation from '~/releases/graphql/mutations/delete_release_link.mutation.graphql'; import updateReleaseMutation from '~/releases/graphql/mutations/update_release.mutation.graphql'; import oneReleaseForEditingQuery from '~/releases/graphql/queries/one_release_for_editing.query.graphql'; -import { - gqClient, - convertOneReleaseGraphQLResponse, - deleteReleaseSessionKey, -} from '~/releases/util'; +import { gqClient, convertOneReleaseGraphQLResponse } from '~/releases/util'; +import { putDeleteReleaseNotification } from '~/releases/release_notification_service'; import * as types from './mutation_types'; @@ -261,10 +258,7 @@ export const deleteRelease = ({ commit, getters, dispatch, state }) => { }) .then((response) => checkForErrorsAsData(response, 'releaseDelete')) .then(() => { - window.sessionStorage.setItem( - deleteReleaseSessionKey(state.projectPath), - state.originalRelease.name, - ); + putDeleteReleaseNotification(state.projectPath, state.originalRelease.name); return dispatch('receiveSaveReleaseSuccess', state.releasesPagePath); }) .catch((error) => { diff --git a/app/assets/javascripts/releases/util.js b/app/assets/javascripts/releases/util.js index 10d7887c0b1..018a9352beb 100644 --- a/app/assets/javascripts/releases/util.js +++ b/app/assets/javascripts/releases/util.js @@ -135,5 +135,3 @@ export const convertOneReleaseGraphQLResponse = (response) => { return { data: release }; }; - -export const deleteReleaseSessionKey = (projectPath) => `deleteRelease:${projectPath}`; diff --git a/app/assets/javascripts/super_sidebar/components/super_sidebar.vue b/app/assets/javascripts/super_sidebar/components/super_sidebar.vue index 050b05a6324..1d4f910482c 100644 --- a/app/assets/javascripts/super_sidebar/components/super_sidebar.vue +++ b/app/assets/javascripts/super_sidebar/components/super_sidebar.vue @@ -154,6 +154,7 @@ export default { @toggle="onContextSwitcherToggled" />