diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-09-12 15:11:33 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-09-12 15:11:33 +0300 |
commit | 0127158127cb4f21b06ea39cc243d8ac17fc3e41 (patch) | |
tree | fa430e57fd398272df6fda9bbf9a8dd19af063f9 /app/assets/javascripts/ci | |
parent | fab43fda656e091104f79668db65f7c5e2a2e68c (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/assets/javascripts/ci')
4 files changed, 58 insertions, 0 deletions
diff --git a/app/assets/javascripts/ci/job_details/components/sidebar/external_links_block.vue b/app/assets/javascripts/ci/job_details/components/sidebar/external_links_block.vue new file mode 100644 index 00000000000..a87f4b8467e --- /dev/null +++ b/app/assets/javascripts/ci/job_details/components/sidebar/external_links_block.vue @@ -0,0 +1,34 @@ +<script> +import { GlIcon, GlLink } from '@gitlab/ui'; + +export default { + components: { + GlIcon, + GlLink, + }, + props: { + externalLinks: { + type: Array, + required: true, + }, + }, +}; +</script> +<template> + <div> + <div class="title gl-font-weight-bold">{{ s__('Job|External links') }}</div> + <ul class="gl-list-style-none gl-p-0 gl-m-0"> + <li v-for="(externalLink, index) in externalLinks" :key="index"> + <gl-link + :href="externalLink.url" + target="_blank" + rel="noopener noreferrer nofollow" + class="gl-text-blue-600!" + > + <gl-icon name="external-link" class="flex-shrink-0" /> + {{ externalLink.label }} + </gl-link> + </li> + </ul> + </div> +</template> diff --git a/app/assets/javascripts/ci/job_details/components/sidebar/sidebar.vue b/app/assets/javascripts/ci/job_details/components/sidebar/sidebar.vue index 4711d5b00e3..305d7004357 100644 --- a/app/assets/javascripts/ci/job_details/components/sidebar/sidebar.vue +++ b/app/assets/javascripts/ci/job_details/components/sidebar/sidebar.vue @@ -3,8 +3,10 @@ import { isEmpty } from 'lodash'; // eslint-disable-next-line no-restricted-imports import { mapActions, mapGetters, mapState } from 'vuex'; import { forwardDeploymentFailureModalId } from '~/ci/constants'; +import { filterAnnotations } from '~/ci/job_details/utils'; import ArtifactsBlock from './artifacts_block.vue'; import CommitBlock from './commit_block.vue'; +import ExternalLinksBlock from './external_links_block.vue'; import JobsContainer from './jobs_container.vue'; import JobRetryForwardDeploymentModal from './job_retry_forward_deployment_modal.vue'; import JobSidebarDetailsContainer from './sidebar_job_details_container.vue'; @@ -25,6 +27,7 @@ export default { SidebarHeader, StagesDropdown, TriggerBlock, + ExternalLinksBlock, }, props: { artifactHelpUrl: { @@ -40,6 +43,9 @@ export default { // the artifact object will always have a locked property return Object.keys(this.job.artifact).length > 1; }, + hasExternalLinks() { + return this.externalLinks.length > 0; + }, hasTriggers() { return !isEmpty(this.job.trigger); }, @@ -52,6 +58,9 @@ export default { shouldShowJobRetryForwardDeploymentModal() { return this.job.retry_path && this.hasForwardDeploymentFailure; }, + externalLinks() { + return filterAnnotations(this.job.annotations, 'external_link'); + }, }, watch: { job(value, oldValue) { @@ -88,6 +97,13 @@ export default { :help-url="artifactHelpUrl" /> + <external-links-block + v-if="hasExternalLinks" + class="gl-py-4" + :class="$options.borderTopClass" + :external-links="externalLinks" + /> + <trigger-block v-if="hasTriggers" class="gl-py-4" diff --git a/app/assets/javascripts/ci/job_details/utils.js b/app/assets/javascripts/ci/job_details/utils.js index 44182a20c4c..4d06c241b4f 100644 --- a/app/assets/javascripts/ci/job_details/utils.js +++ b/app/assets/javascripts/ci/job_details/utils.js @@ -20,3 +20,10 @@ export const compactJobLog = (jobLog) => { return compactedLog; }; + +export const filterAnnotations = (annotations, type) => { + return [...annotations] + .sort((a, b) => a.name.localeCompare(b.name)) + .flatMap((annotationList) => annotationList.data) + .flatMap((annotation) => annotation[type] ?? []); +}; diff --git a/app/assets/javascripts/ci/pipeline_details/test_reports/empty_state.vue b/app/assets/javascripts/ci/pipeline_details/test_reports/empty_state.vue index 3e7827dc416..055b6742ae1 100644 --- a/app/assets/javascripts/ci/pipeline_details/test_reports/empty_state.vue +++ b/app/assets/javascripts/ci/pipeline_details/test_reports/empty_state.vue @@ -54,6 +54,7 @@ export default { :title="emptyStateText.title" :description="emptyStateText.description" :svg-path="emptyStateImagePath" + :svg-height="150" :primary-button-link="testReportDocPath" :primary-button-text="emptyStateText.button" /> |