Commit 062ef121 authored by Filipa Lacerda's avatar Filipa Lacerda Committed by Kamil Trzciński

Removes get requests for upstream/downstream

Recursively updates isExpanded property for
all triggered and triggered by pipelines
parent 0286eafe
......@@ -2,7 +2,7 @@ import Vue from 'vue';
import Flash from '~/flash';
import Translate from '~/vue_shared/translate';
import { __ } from '~/locale';
import PipelinesMediator from 'ee/pipelines/pipeline_details_mediator';
import PipelinesMediator from './pipeline_details_mediator';
import pipelineGraph from 'ee/pipelines/components/graph/graph_component.vue';
import pipelineHeader from './components/header_component.vue';
import eventHub from './event_hub';
......@@ -53,10 +53,10 @@ export default () => {
on: {
refreshPipelineGraph: this.requestRefreshPipelineGraph,
// EE-only start
refreshTriggeredPipelineGraph: this.mediator.refreshTriggeredByPipelineGraph,
refreshTriggeredByPipelineGraph: this.mediator.refreshTriggeredByPipelineGraph,
onClickTriggeredBy: pipeline => this.clickTriggeredBy(pipeline),
onClickTriggered: pipeline => this.clickTriggered(pipeline),
// refreshTriggeredPipelineGraph: this.mediator.refreshTriggeredByPipelineGraph,
// refreshTriggeredByPipelineGraph: this.mediator.refreshTriggeredByPipelineGraph,
onClickTriggeredBy: pipeline => this.clickTriggeredByPipeline(pipeline),
onClickTriggered: pipeline => this.clickTriggeredPipeline(pipeline),
// EE-only end
},
});
......
......@@ -2,8 +2,8 @@ import Visibility from 'visibilityjs';
import Flash from '../flash';
import Poll from '../lib/utils/poll';
import { __ } from '../locale';
import PipelineService from '~/pipelines/services/pipeline_service';
import PipelineStore from 'ee/pipelines/stores/pipeline_store'; // eslint-disable-line import/order
import PipelineService from 'ee/pipelines/services/pipeline_service'; // eslint-disable-line import/order
export default class pipelinesMediator {
constructor(options = {}) {
......
......@@ -6,6 +6,7 @@ import EEGraphMixin from 'ee/pipelines/mixins/graph_component_mixin';
import StageColumnComponent from '~/pipelines/components/graph/stage_column_component.vue';
export default {
name: 'PipelineGraph',
components: {
LinkedPipelinesColumn,
StageColumnComponent,
......@@ -62,21 +63,6 @@ export default {
<div class="pipeline-visualization pipeline-graph pipeline-tab-content">
<div class="text-center"><gl-loading-icon v-if="isLoading" :size="3" /></div>
<ul v-if="shouldRenderTriggeredByPipeline" class="d-inline-block upstream-pipeline align-top">
<stage-column-component
v-for="(stage, indexUpstream) in triggeredByGraph"
:key="stage.name"
:class="{
'has-only-one-job': hasOnlyOneJob(stage),
}"
:title="capitalizeStageName(stage.name)"
:groups="stage.groups"
:stage-connector-class="stageConnectorClass(indexUpstream, stage)"
:is-first-column="isFirstColumn(indexUpstream)"
@refreshPipelineGraph="refreshTriggeredByPipelineGraph"
/>
</ul>
<linked-pipelines-column
v-if="hasTriggeredBy"
:linked-pipelines="triggeredByPipelines"
......@@ -116,25 +102,6 @@ export default {
graph-position="right"
@linkedPipelineClick="handleClickedDownstream"
/>
<ul
v-if="shouldRenderTriggeredPipeline"
class="d-inline-block downstream-pipeline position-relative align-top"
:style="{ 'margin-top': marginTop }"
>
<stage-column-component
v-for="(stage, indexDownstream) in triggeredGraph"
:key="stage.name"
:class="{
'has-only-one-job': hasOnlyOneJob(stage),
}"
:title="capitalizeStageName(stage.name)"
:groups="stage.groups"
:stage-connector-class="stageConnectorClass(indexDownstream, stage)"
:is-first-column="isFirstColumn(indexDownstream)"
@refreshPipelineGraph="refreshTriggeredPipelineGraph"
/>
</ul>
</div>
</div>
</template>
......@@ -12,30 +12,23 @@ export default {
GlButton,
},
props: {
pipelineId: {
type: Number,
required: true,
},
pipelineStatus: {
pipeline: {
type: Object,
required: true,
},
projectName: {
type: String,
required: true,
},
isLoading: {
type: Boolean,
required: false,
default: false,
},
},
computed: {
tooltipText() {
return `${this.projectName} - ${this.pipelineStatus.label}`;
},
buttonId() {
return `js-linked-pipeline-${this.pipelineId}`;
return `js-linked-pipeline-${this.pipeline.id}`;
},
pipelineStatus() {
return this.pipeline.details.status;
},
projectName() {
return this.pipeline.project.name;
},
},
methods: {
......@@ -57,10 +50,10 @@ export default {
class="js-linked-pipeline-content linked-pipeline-content"
@click="onClickLinkedPipeline"
>
<gl-loading-icon v-if="isLoading" class="js-linked-pipeline-loading d-inline" />
<gl-loading-icon v-if="pipeline.isLoading" class="js-linked-pipeline-loading d-inline" />
<ci-status v-else :status="pipelineStatus" class="js-linked-pipeline-status" />
<span class="str-truncated align-bottom"> {{ projectName }} &#8226; #{{ pipelineId }} </span>
<span class="str-truncated align-bottom"> {{ projectName }} &#8226; #{{ pipeline.id }} </span>
</gl-button>
</li>
</template>
export default {
triggeredPipelines: 'triggeredPipelines',
triggeredByPipelines: 'triggeredByPipelines',
triggeredBy: 'triggeredBy',
triggeredBy: 'triggered_by',
triggered: 'triggered',
};
import _ from 'underscore';
export default {
props: {
triggered: {
type: Object,
required: false,
default: () => ({}),
},
triggeredBy: {
type: Object,
required: false,
default: () => ({}),
},
triggeredByPipelines: {
type: Array,
required: false,
default: () => [],
},
triggeredPipelines: {
type: Array,
required: false,
default: () => [],
},
},
data() {
return {
triggeredTopIndex: 1,
};
},
computed: {
triggeredGraph() {
return this.triggered && this.triggered.details && this.triggered.details.stages;
hasTriggeredBy() {
return this.pipeline.triggered_by && this.pipeline.triggered_by != null;
},
triggeredByGraph() {
return this.triggeredBy && this.triggeredBy.details && this.triggeredBy.details.stages;
triggeredByPipelines() {
return this.pipeline.triggered_by;
},
hasTriggered() {
return this.triggeredPipelines.length > 0;
},
hasTriggeredBy() {
return this.triggeredByPipelines.length > 0;
},
shouldRenderTriggeredPipeline() {
return !this.isLoading && !_.isEmpty(this.triggered);
return this.pipeline.triggered && this.pipeline.triggered.length > 0;
},
shouldRenderTriggeredByPipeline() {
return !this.isLoading && !_.isEmpty(this.triggeredBy);
triggeredPipelines() {
return this.pipeline.triggered;
},
/**
* Calculates the margin top of the clicked downstream pipeline by
......@@ -56,6 +26,7 @@ export default {
},
},
methods: {
// TODO FILIPA: REMOVE THIS
refreshTriggeredPipelineGraph() {
this.$emit('refreshTriggeredPipelineGraph');
},
......
import pipelinesKeys from 'ee/pipelines/constants';
import keys from '../constants';
export default {
methods: {
......@@ -13,30 +13,19 @@ export default {
* @param {String} resetStoreKey Store key for the visible pipeline that will need to be reset
* @param {Object} pipeline The clicked pipeline
*/
clickPipeline(method, storeKey, resetStoreKey, pipeline, pollKey) {
clickPipeline(pipeline, method) {
debugger;
if (!pipeline.isExpanded) {
this.mediator[method](pipeline);
this.mediator.store[method](pipeline);
} else {
this.mediator.resetPipeline(storeKey, pipeline, resetStoreKey, pollKey);
this.mediator.store.closePipeline(pipeline);
}
},
clickTriggered(triggered) {
this.clickPipeline(
'fetchTriggeredPipeline',
pipelinesKeys.triggeredPipelines,
pipelinesKeys.triggered,
triggered,
'pollTriggered',
);
clickTriggeredByPipeline(pipeline) {
this.clickPipeline(pipeline, 'openTriggeredByPipeline');
},
clickTriggeredBy(triggeredBy) {
this.clickPipeline(
'fetchTriggeredByPipeline',
pipelinesKeys.triggeredByPipelines,
pipelinesKeys.triggeredBy,
triggeredBy,
'pollTriggeredBy',
);
clickTriggeredPipeline(pipeline) {
this.clickPipeline(pipeline, 'openTriggeredPipeline');
},
},
};
{
"id": 23211253,
"user": {
"id": 3585,
"name": "Achilleas Pipinellis",
"username": "axil",
"state": "active",
"avatar_url": "https://assets.gitlab-static.net/uploads/-/system/user/avatar/3585/avatar.png",
"web_url": "https://gitlab.com/axil",
"status_tooltip_html": "\u003cspan class=\"user-status-emoji has-tooltip\" title=\"I like pizza\" data-html=\"true\" data-placement=\"top\"\u003e\u003cgl-emoji title=\"slice of pizza\" data-name=\"pizza\" data-unicode-version=\"6.0\"\u003e🍕\u003c/gl-emoji\u003e\u003c/span\u003e",
"path": "/axil"
},
"active": false,
"coverage": null,
"source": "push",
"created_at": "2018-06-05T11:31:30.452Z",
"updated_at": "2018-10-31T16:35:31.305Z",
"path": "/gitlab-org/gitlab-runner/pipelines/23211253",
"flags": {
"latest": false,
"stuck": false,
"auto_devops": false,
"merge_request": false,
"yaml_errors": false,
"retryable": false,
"cancelable": false,
"failure_reason": false
},
"details": {
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/gitlab-org/gitlab-runner/pipelines/23211253",
"illustration": null,
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
},
"duration": 53,
"finished_at": "2018-10-31T16:35:31.299Z",
"stages": [
{
"name": "prebuild",
"title": "prebuild: passed",
"groups": [
{
"name": "review-docs-deploy",
"size": 1,
"status": {
"icon": "status_success",
"text": "passed",
"label": "manual play action",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/gitlab-org/gitlab-runner/-/jobs/72469032",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
"size": "svg-394",
"title": "This job requires a manual action",
"content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "play",
"title": "Play",
"path": "/gitlab-org/gitlab-runner/-/jobs/72469032/play",
"method": "post",
"button_title": "Trigger this manual action"
}
},
"jobs": [
{
"id": 72469032,
"name": "review-docs-deploy",
"started": "2018-10-31T16:34:58.778Z",
"archived": false,
"build_path": "/gitlab-org/gitlab-runner/-/jobs/72469032",
"retry_path": "/gitlab-org/gitlab-runner/-/jobs/72469032/retry",
"play_path": "/gitlab-org/gitlab-runner/-/jobs/72469032/play",
"playable": true,
"scheduled": false,
"created_at": "2018-06-05T11:31:30.495Z",
"updated_at": "2018-10-31T16:35:31.251Z",
"status": {
"icon": "status_success",
"text": "passed",
"label": "manual play action",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/gitlab-org/gitlab-runner/-/jobs/72469032",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
"size": "svg-394",
"title": "This job requires a manual action",
"content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "play",
"title": "Play",
"path": "/gitlab-org/gitlab-runner/-/jobs/72469032/play",
"method": "post",
"button_title": "Trigger this manual action"
}
}
}
]
}
],
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/gitlab-org/gitlab-runner/pipelines/23211253#prebuild",
"illustration": null,
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
},
"path": "/gitlab-org/gitlab-runner/pipelines/23211253#prebuild",
"dropdown_path": "/gitlab-org/gitlab-runner/pipelines/23211253/stage.json?stage=prebuild"
},
{
"name": "test",
"title": "test: passed",
"groups": [
{
"name": "docs check links",
"size": 1,
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/gitlab-org/gitlab-runner/-/jobs/72469033",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/gitlab-org/gitlab-runner/-/jobs/72469033/retry",
"method": "post",
"button_title": "Retry this job"
}
},
"jobs": [
{
"id": 72469033,
"name": "docs check links",
"started": "2018-06-05T11:31:33.240Z",
"archived": false,
"build_path": "/gitlab-org/gitlab-runner/-/jobs/72469033",
"retry_path": "/gitlab-org/gitlab-runner/-/jobs/72469033/retry",
"playable": false,
"scheduled": false,
"created_at": "2018-06-05T11:31:30.627Z",
"updated_at": "2018-06-05T11:31:54.363Z",
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/gitlab-org/gitlab-runner/-/jobs/72469033",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/gitlab-org/gitlab-runner/-/jobs/72469033/retry",
"method": "post",
"button_title": "Retry this job"
}
}
}
]
}
],
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/gitlab-org/gitlab-runner/pipelines/23211253#test",
"illustration": null,
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
},
"path": "/gitlab-org/gitlab-runner/pipelines/23211253#test",
"dropdown_path": "/gitlab-org/gitlab-runner/pipelines/23211253/stage.json?stage=test"
},
{
"name": "cleanup",
"title": "cleanup: skipped",
"groups": [
{
"name": "review-docs-cleanup",
"size": 1,
"status": {
"icon": "status_manual",
"text": "manual",
"label": "manual stop action",
"group": "manual",
"tooltip": "manual action",
"has_details": true,
"details_path": "/gitlab-org/gitlab-runner/-/jobs/72469034",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
"size": "svg-394",
"title": "This job requires a manual action",
"content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
"action": {
"icon": "stop",
"title": "Stop",
"path": "/gitlab-org/gitlab-runner/-/jobs/72469034/play",
"method": "post",
"button_title": "Stop this environment"
}
},
"jobs": [
{
"id": 72469034,
"name": "review-docs-cleanup",
"started": null,
"archived": false,
"build_path": "/gitlab-org/gitlab-runner/-/jobs/72469034",
"play_path": "/gitlab-org/gitlab-runner/-/jobs/72469034/play",
"playable": true,
"scheduled": false,
"created_at": "2018-06-05T11:31:30.760Z",
"updated_at": "2018-06-05T11:31:56.037Z",
"status": {
"icon": "status_manual",
"text": "manual",
"label": "manual stop action",
"group": "manual",
"tooltip": "manual action",
"has_details": true,
"details_path": "/gitlab-org/gitlab-runner/-/jobs/72469034",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
"size": "svg-394",
"title": "This job requires a manual action",
"content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
"action": {
"icon": "stop",
"title": "Stop",
"path": "/gitlab-org/gitlab-runner/-/jobs/72469034/play",
"method": "post",
"button_title": "Stop this environment"
}
}
}
]
}
],
"status": {
"icon": "status_skipped",
"text": "skipped",
"label": "skipped",
"group": "skipped",
"tooltip": "skipped",
"has_details": true,
"details_path": "/gitlab-org/gitlab-runner/pipelines/23211253#cleanup",
"illustration": null,
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
},
"path": "/gitlab-org/gitlab-runner/pipelines/23211253#cleanup",
"dropdown_path": "/gitlab-org/gitlab-runner/pipelines/23211253/stage.json?stage=cleanup"
}
],
"artifacts": [],
"manual_actions": [
{
"name": "review-docs-cleanup",
"path": "/gitlab-org/gitlab-runner/-/jobs/72469034/play",
"playable": true,
"scheduled": false
},
{
"name": "review-docs-deploy",
"path": "/gitlab-org/gitlab-runner/-/jobs/72469032/play",
"playable": true,
"scheduled": false
}
],
"scheduled_actions": []
},
"ref": {
"name": "docs/add-development-guide-to-readme",
"path": "/gitlab-org/gitlab-runner/commits/docs/add-development-guide-to-readme",
"tag": false,
"branch": true,
"merge_request": false
},
"commit": {
"id": "8083eb0a920572214d0dccedd7981f05d535ad46",
"short_id": "8083eb0a",
"title": "Add link to development guide in readme",
"created_at": "2018-06-05T11:30:48.000Z",
"parent_ids": [
"1d7cf79b5a1a2121b9474ac20d61c1b8f621289d"
],
"message": "Add link to development guide in readme\n\nCloses https://gitlab.com/gitlab-org/gitlab-runner/issues/3122\n",
"author_name": "Achilleas Pipinellis",
"author_email": "axil@gitlab.com",
"authored_date": "2018-06-05T11:30:48.000Z",
"committer_name": "Achilleas Pipinellis",
"committer_email": "axil@gitlab.com",
"committed_date": "2018-06-05T11:30:48.000Z",
"author": {
"id": 3585,
"name": "Achilleas Pipinellis",
"username": "axil",
"state": "active",
"avatar_url": "https://assets.gitlab-static.net/uploads/-/system/user/avatar/3585/avatar.png",
"web_url": "https://gitlab.com/axil",
"status_tooltip_html": null,
"path": "/axil"
},
"author_gravatar_url": "https://secure.gravatar.com/avatar/1d37af00eec153a8333a4ce18e9aea41?s=80\u0026d=identicon",
"commit_url": "https://gitlab.com/gitlab-org/gitlab-runner/commit/8083eb0a920572214d0dccedd7981f05d535ad46",
"commit_path": "/gitlab-org/gitlab-runner/commit/8083eb0a920572214d0dccedd7981f05d535ad46"
},
"triggered_by": {
"id": 34993231051,
"user": {
"id": 376774,
"name": "Alessio Caiazza",
"username": "nolith",
"state": "active",
"avatar_url": "https://assets.gitlab-static.net/uploads/-/system/user/avatar/376774/avatar.png",
"web_url": "https://gitlab.com/nolith",
"status_tooltip_html": null,
"path": "/nolith"
},
"active": false,
"coverage": null,
"source": "pipeline",
"path": "/gitlab-com/gitlab-docs/pipelines/34993051",
"details": {
"status": {
"icon": "status_failed",
"text": "failed",
"label": "failed",
"group": "failed",
"tooltip": "failed",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/pipelines/34993051",
"illustration": null,
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"
},
"duration": 118,
"finished_at": "2018-10-31T16:41:40.615Z",
"stages": [
{
"name": "build-images",
"title": "build-images: skipped",
"groups": [
{
"name": "image:bootstrap",
"size": 1,
"status": {
"icon": "status_manual",
"text": "manual",
"label": "manual play action",
"group": "manual",
"tooltip": "manual action",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982853",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
"size": "svg-394",
"title": "This job requires a manual action",
"content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
"action": {
"icon": "play",
"title": "Play",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
"method": "post",
"button_title": "Trigger this manual action"
}
},
"jobs": [
{
"id": 11421321982853,
"name": "image:bootstrap",
"started": null,
"archived": false,
"build_path": "/gitlab-com/gitlab-docs/-/jobs/114982853",
"play_path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
"playable": true,
"scheduled": false,
"created_at": "2018-10-31T16:35:23.704Z",
"updated_at": "2018-10-31T16:35:24.118Z",
"status": {
"icon": "status_manual",
"text": "manual",
"label": "manual play action",
"group": "manual",
"tooltip": "manual action",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982853",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
"size": "svg-394",
"title": "This job requires a manual action",
"content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
"action": {
"icon": "play",
"title": "Play",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
"method": "post",
"button_title": "Trigger this manual action"
}
}
}
]
},
{
"name": "image:builder-onbuild",
"size": 1,
"status": {
"icon": "status_manual",
"text": "manual",
"label": "manual play action",
"group": "manual",
"tooltip": "manual action",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982854",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
"size": "svg-394",
"title": "This job requires a manual action",
"content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
"action": {
"icon": "play",
"title": "Play",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
"method": "post",
"button_title": "Trigger this manual action"
}
},
"jobs": [
{
"id": 1149822131854,
"name": "image:builder-onbuild",
"started": null,
"archived": false,
"build_path": "/gitlab-com/gitlab-docs/-/jobs/114982854",
"play_path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
"playable": true,
"scheduled": false,
"created_at": "2018-10-31T16:35:23.728Z",
"updated_at": "2018-10-31T16:35:24.070Z",
"status": {
"icon": "status_manual",
"text": "manual",
"label": "manual play action",
"group": "manual",
"tooltip": "manual action",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982854",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
"size": "svg-394",
"title": "This job requires a manual action",
"content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
"action": {
"icon": "play",
"title": "Play",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
"method": "post",
"button_title": "Trigger this manual action"
}
}
}
]
},
{
"name": "image:nginx-onbuild",
"size": 1,
"status": {
"icon": "status_manual",
"text": "manual",
"label": "manual play action",
"group": "manual",
"tooltip": "manual action",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982855",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
"size": "svg-394",
"title": "This job requires a manual action",
"content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
"action": {
"icon": "play",
"title": "Play",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
"method": "post",
"button_title": "Trigger this manual action"
}
},
"jobs": [
{
"id": 11498285523424,
"name": "image:nginx-onbuild",
"started": null,
"archived": false,
"build_path": "/gitlab-com/gitlab-docs/-/jobs/114982855",
"play_path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
"playable": true,
"scheduled": false,
"created_at": "2018-10-31T16:35:23.753Z",
"updated_at": "2018-10-31T16:35:24.033Z",
"status": {
"icon": "status_manual",
"text": "manual",
"label": "manual play action",
"group": "manual",
"tooltip": "manual action",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982855",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
"size": "svg-394",
"title": "This job requires a manual action",
"content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
"action": {
"icon": "play",
"title": "Play",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
"method": "post",
"button_title": "Trigger this manual action"
}
}
}
]
}
],
"status": {
"icon": "status_skipped",
"text": "skipped",
"label": "skipped",
"group": "skipped",
"tooltip": "skipped",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/pipelines/34993051#build-images",
"illustration": null,
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
},
"path": "/gitlab-com/gitlab-docs/pipelines/34993051#build-images",
"dropdown_path": "/gitlab-com/gitlab-docs/pipelines/34993051/stage.json?stage=build-images"
},
{
"name": "build",
"title": "build: failed",
"groups": [
{
"name": "compile_dev",
"size": 1,
"status": {
"icon": "status_failed",
"text": "failed",
"label": "failed",
"group": "failed",
"tooltip": "failed - (script failure)",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114984694",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/gitlab-com/gitlab-docs/-/jobs/114984694/retry",
"method": "post",
"button_title": "Retry this job"
}
},
"jobs": [
{
"id": 1149846949786,
"name": "compile_dev",
"started": "2018-10-31T16:39:41.598Z",
"archived": false,
"build_path": "/gitlab-com/gitlab-docs/-/jobs/114984694",
"retry_path": "/gitlab-com/gitlab-docs/-/jobs/114984694/retry",
"playable": false,
"scheduled": false,
"created_at": "2018-10-31T16:39:41.138Z",
"updated_at": "2018-10-31T16:41:40.072Z",
"status": {
"icon": "status_failed",
"text": "failed",
"label": "failed",
"group": "failed",
"tooltip": "failed - (script failure)",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114984694",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/gitlab-com/gitlab-docs/-/jobs/114984694/retry",
"method": "post",
"button_title": "Retry this job"
}
},
"recoverable": false
}
]
}
],
"status": {
"icon": "status_failed",
"text": "failed",
"label": "failed",
"group": "failed",
"tooltip": "failed",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/pipelines/34993051#build",
"illustration": null,
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"
},
"path": "/gitlab-com/gitlab-docs/pipelines/34993051#build",
"dropdown_path": "/gitlab-com/gitlab-docs/pipelines/34993051/stage.json?stage=build"
},
{
"name": "deploy",
"title": "deploy: skipped",
"groups": [
{
"name": "review",
"size": 1,
"status": {
"icon": "status_skipped",
"text": "skipped",
"label": "skipped",
"group": "skipped",
"tooltip": "skipped",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982857",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job has been skipped"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
},
"jobs": [
{
"id": 11498282342357,
"name": "review",
"started": null,
"archived": false,
"build_path": "/gitlab-com/gitlab-docs/-/jobs/114982857",
"playable": false,
"scheduled": false,
"created_at": "2018-10-31T16:35:23.805Z",
"updated_at": "2018-10-31T16:41:40.569Z",
"status": {
"icon": "status_skipped",
"text": "skipped",
"label": "skipped",
"group": "skipped",
"tooltip": "skipped",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982857",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job has been skipped"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
}
}
]
},
{
"name": "review_stop",
"size": 1,
"status": {
"icon": "status_skipped",
"text": "skipped",
"label": "skipped",
"group": "skipped",
"tooltip": "skipped",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982858",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job has been skipped"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
},
"jobs": [
{
"id": 114982858,
"name": "review_stop",
"started": null,
"archived": false,
"build_path": "/gitlab-com/gitlab-docs/-/jobs/114982858",
"playable": false,
"scheduled": false,
"created_at": "2018-10-31T16:35:23.840Z",
"updated_at": "2018-10-31T16:41:40.480Z",
"status": {
"icon": "status_skipped",
"text": "skipped",
"label": "skipped",
"group": "skipped",
"tooltip": "skipped",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982858",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job has been skipped"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
}
}
]
}
],
"status": {
"icon": "status_skipped",
"text": "skipped",
"label": "skipped",
"group": "skipped",
"tooltip": "skipped",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/pipelines/34993051#deploy",
"illustration": null,
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
},
"path": "/gitlab-com/gitlab-docs/pipelines/34993051#deploy",
"dropdown_path": "/gitlab-com/gitlab-docs/pipelines/34993051/stage.json?stage=deploy"
}
],
"artifacts": [],
"manual_actions": [
{
"name": "image:bootstrap",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
"playable": true,
"scheduled": false
},
{
"name": "image:builder-onbuild",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
"playable": true,
"scheduled": false
},
{
"name": "image:nginx-onbuild",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
"playable": true,
"scheduled": false
},
{
"name": "review_stop",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982858/play",
"playable": false,
"scheduled": false
}
],
"scheduled_actions": []
},
"project": {
"id": 1794617,
"name": "GitLab Docs",
"full_path": "/gitlab-com/gitlab-docs",
"full_name": "GitLab.com / GitLab Docs"
}
},
"triggered": [
{
"id": 34993051,
"user": {
"id": 376774,
"name": "Alessio Caiazza",
"username": "nolith",
"state": "active",
"avatar_url": "https://assets.gitlab-static.net/uploads/-/system/user/avatar/376774/avatar.png",
"web_url": "https://gitlab.com/nolith",
"status_tooltip_html": null,
"path": "/nolith"
},
"active": false,
"coverage": null,
"source": "pipeline",
"path": "/gitlab-com/gitlab-docs/pipelines/34993051",
"details": {
"status": {
"icon": "status_failed",
"text": "failed",
"label": "failed",
"group": "failed",
"tooltip": "failed",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/pipelines/34993051",
"illustration": null,
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"
},
"duration": 118,
"finished_at": "2018-10-31T16:41:40.615Z",
"stages": [
{
"name": "build-images",
"title": "build-images: skipped",
"groups": [
{
"name": "image:bootstrap",
"size": 1,
"status": {
"icon": "status_manual",
"text": "manual",
"label": "manual play action",
"group": "manual",
"tooltip": "manual action",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982853",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
"size": "svg-394",
"title": "This job requires a manual action",
"content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
"action": {
"icon": "play",
"title": "Play",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
"method": "post",
"button_title": "Trigger this manual action"
}
},
"jobs": [
{
"id": 114982853,
"name": "image:bootstrap",
"started": null,
"archived": false,
"build_path": "/gitlab-com/gitlab-docs/-/jobs/114982853",
"play_path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
"playable": true,
"scheduled": false,
"created_at": "2018-10-31T16:35:23.704Z",
"updated_at": "2018-10-31T16:35:24.118Z",
"status": {
"icon": "status_manual",
"text": "manual",
"label": "manual play action",
"group": "manual",
"tooltip": "manual action",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982853",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
"size": "svg-394",
"title": "This job requires a manual action",
"content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
"action": {
"icon": "play",
"title": "Play",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
"method": "post",
"button_title": "Trigger this manual action"
}
}
}
]
},
{
"name": "image:builder-onbuild",
"size": 1,
"status": {
"icon": "status_manual",
"text": "manual",
"label": "manual play action",
"group": "manual",
"tooltip": "manual action",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982854",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
"size": "svg-394",
"title": "This job requires a manual action",
"content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
"action": {
"icon": "play",
"title": "Play",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
"method": "post",
"button_title": "Trigger this manual action"
}
},
"jobs": [
{
"id": 114982854,
"name": "image:builder-onbuild",
"started": null,
"archived": false,
"build_path": "/gitlab-com/gitlab-docs/-/jobs/114982854",
"play_path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
"playable": true,
"scheduled": false,
"created_at": "2018-10-31T16:35:23.728Z",
"updated_at": "2018-10-31T16:35:24.070Z",
"status": {
"icon": "status_manual",
"text": "manual",
"label": "manual play action",
"group": "manual",
"tooltip": "manual action",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982854",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
"size": "svg-394",
"title": "This job requires a manual action",
"content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
"action": {
"icon": "play",
"title": "Play",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
"method": "post",
"button_title": "Trigger this manual action"
}
}
}
]
},
{
"name": "image:nginx-onbuild",
"size": 1,
"status": {
"icon": "status_manual",
"text": "manual",
"label": "manual play action",
"group": "manual",
"tooltip": "manual action",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982855",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
"size": "svg-394",
"title": "This job requires a manual action",
"content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
"action": {
"icon": "play",
"title": "Play",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
"method": "post",
"button_title": "Trigger this manual action"
}
},
"jobs": [
{
"id": 114982855,
"name": "image:nginx-onbuild",
"started": null,
"archived": false,
"build_path": "/gitlab-com/gitlab-docs/-/jobs/114982855",
"play_path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
"playable": true,
"scheduled": false,
"created_at": "2018-10-31T16:35:23.753Z",
"updated_at": "2018-10-31T16:35:24.033Z",
"status": {
"icon": "status_manual",
"text": "manual",
"label": "manual play action",
"group": "manual",
"tooltip": "manual action",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982855",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
"size": "svg-394",
"title": "This job requires a manual action",
"content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
"action": {
"icon": "play",
"title": "Play",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
"method": "post",
"button_title": "Trigger this manual action"
}
}
}
]
}
],
"status": {
"icon": "status_skipped",
"text": "skipped",
"label": "skipped",
"group": "skipped",
"tooltip": "skipped",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/pipelines/34993051#build-images",
"illustration": null,
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
},
"path": "/gitlab-com/gitlab-docs/pipelines/34993051#build-images",
"dropdown_path": "/gitlab-com/gitlab-docs/pipelines/34993051/stage.json?stage=build-images"
},
{
"name": "build",
"title": "build: failed",
"groups": [
{
"name": "compile_dev",
"size": 1,
"status": {
"icon": "status_failed",
"text": "failed",
"label": "failed",
"group": "failed",
"tooltip": "failed - (script failure)",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114984694",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/gitlab-com/gitlab-docs/-/jobs/114984694/retry",
"method": "post",
"button_title": "Retry this job"
}
},
"jobs": [
{
"id": 114984694,
"name": "compile_dev",
"started": "2018-10-31T16:39:41.598Z",
"archived": false,
"build_path": "/gitlab-com/gitlab-docs/-/jobs/114984694",
"retry_path": "/gitlab-com/gitlab-docs/-/jobs/114984694/retry",
"playable": false,
"scheduled": false,
"created_at": "2018-10-31T16:39:41.138Z",
"updated_at": "2018-10-31T16:41:40.072Z",
"status": {
"icon": "status_failed",
"text": "failed",
"label": "failed",
"group": "failed",
"tooltip": "failed - (script failure)",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114984694",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/gitlab-com/gitlab-docs/-/jobs/114984694/retry",
"method": "post",
"button_title": "Retry this job"
}
},
"recoverable": false
}
]
}
],
"status": {
"icon": "status_failed",
"text": "failed",
"label": "failed",
"group": "failed",
"tooltip": "failed",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/pipelines/34993051#build",
"illustration": null,
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"
},
"path": "/gitlab-com/gitlab-docs/pipelines/34993051#build",
"dropdown_path": "/gitlab-com/gitlab-docs/pipelines/34993051/stage.json?stage=build"
},
{
"name": "deploy",
"title": "deploy: skipped",
"groups": [
{
"name": "review",
"size": 1,
"status": {
"icon": "status_skipped",
"text": "skipped",
"label": "skipped",
"group": "skipped",
"tooltip": "skipped",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982857",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job has been skipped"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
},
"jobs": [
{
"id": 114982857,
"name": "review",
"started": null,
"archived": false,
"build_path": "/gitlab-com/gitlab-docs/-/jobs/114982857",
"playable": false,
"scheduled": false,
"created_at": "2018-10-31T16:35:23.805Z",
"updated_at": "2018-10-31T16:41:40.569Z",
"status": {
"icon": "status_skipped",
"text": "skipped",
"label": "skipped",
"group": "skipped",
"tooltip": "skipped",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982857",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job has been skipped"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
}
}
]
},
{
"name": "review_stop",
"size": 1,
"status": {
"icon": "status_skipped",
"text": "skipped",
"label": "skipped",
"group": "skipped",
"tooltip": "skipped",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982858",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job has been skipped"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
},
"jobs": [
{
"id": 114982858,
"name": "review_stop",
"started": null,
"archived": false,
"build_path": "/gitlab-com/gitlab-docs/-/jobs/114982858",
"playable": false,
"scheduled": false,
"created_at": "2018-10-31T16:35:23.840Z",
"updated_at": "2018-10-31T16:41:40.480Z",
"status": {
"icon": "status_skipped",
"text": "skipped",
"label": "skipped",
"group": "skipped",
"tooltip": "skipped",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982858",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job has been skipped"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
}
}
]
}
],
"status": {
"icon": "status_skipped",
"text": "skipped",
"label": "skipped",
"group": "skipped",
"tooltip": "skipped",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/pipelines/34993051#deploy",
"illustration": null,
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
},
"path": "/gitlab-com/gitlab-docs/pipelines/34993051#deploy",
"dropdown_path": "/gitlab-com/gitlab-docs/pipelines/34993051/stage.json?stage=deploy"
}
],
"artifacts": [],
"manual_actions": [
{
"name": "image:bootstrap",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
"playable": true,
"scheduled": false
},
{
"name": "image:builder-onbuild",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
"playable": true,
"scheduled": false
},
{
"name": "image:nginx-onbuild",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
"playable": true,
"scheduled": false
},
{
"name": "review_stop",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982858/play",
"playable": false,
"scheduled": false
}
],
"scheduled_actions": []
},
"project": {
"id": 1794617,
"name": "GitLab Docs",
"full_path": "/gitlab-com/gitlab-docs",
"full_name": "GitLab.com / GitLab Docs"
}
},
{
"id": 34993052,
"user": {
"id": 376774,
"name": "Alessio Caiazza",
"username": "nolith",
"state": "active",
"avatar_url": "https://assets.gitlab-static.net/uploads/-/system/user/avatar/376774/avatar.png",
"web_url": "https://gitlab.com/nolith",
"status_tooltip_html": null,
"path": "/nolith"
},
"active": false,
"coverage": null,
"source": "pipeline",
"path": "/gitlab-com/gitlab-docs/pipelines/34993051",
"details": {
"status": {
"icon": "status_failed",
"text": "failed",
"label": "failed",
"group": "failed",
"tooltip": "failed",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/pipelines/34993051",
"illustration": null,
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"
},
"duration": 118,
"finished_at": "2018-10-31T16:41:40.615Z",
"stages": [
{
"name": "build-images",
"title": "build-images: skipped",
"groups": [
{
"name": "image:bootstrap",
"size": 1,
"status": {
"icon": "status_manual",
"text": "manual",
"label": "manual play action",
"group": "manual",
"tooltip": "manual action",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982853",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
"size": "svg-394",
"title": "This job requires a manual action",
"content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
"action": {
"icon": "play",
"title": "Play",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
"method": "post",
"button_title": "Trigger this manual action"
}
},
"jobs": [
{
"id": 114982853,
"name": "image:bootstrap",
"started": null,
"archived": false,
"build_path": "/gitlab-com/gitlab-docs/-/jobs/114982853",
"play_path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
"playable": true,
"scheduled": false,
"created_at": "2018-10-31T16:35:23.704Z",
"updated_at": "2018-10-31T16:35:24.118Z",
"status": {
"icon": "status_manual",
"text": "manual",
"label": "manual play action",
"group": "manual",
"tooltip": "manual action",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982853",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
"size": "svg-394",
"title": "This job requires a manual action",
"content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
"action": {
"icon": "play",
"title": "Play",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
"method": "post",
"button_title": "Trigger this manual action"
}
}
}
]
},
{
"name": "image:builder-onbuild",
"size": 1,
"status": {
"icon": "status_manual",
"text": "manual",
"label": "manual play action",
"group": "manual",
"tooltip": "manual action",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982854",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
"size": "svg-394",
"title": "This job requires a manual action",
"content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
"action": {
"icon": "play",
"title": "Play",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
"method": "post",
"button_title": "Trigger this manual action"
}
},
"jobs": [
{
"id": 114982854,
"name": "image:builder-onbuild",
"started": null,
"archived": false,
"build_path": "/gitlab-com/gitlab-docs/-/jobs/114982854",
"play_path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
"playable": true,
"scheduled": false,
"created_at": "2018-10-31T16:35:23.728Z",
"updated_at": "2018-10-31T16:35:24.070Z",
"status": {
"icon": "status_manual",
"text": "manual",
"label": "manual play action",
"group": "manual",
"tooltip": "manual action",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982854",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
"size": "svg-394",
"title": "This job requires a manual action",
"content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
"action": {
"icon": "play",
"title": "Play",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
"method": "post",
"button_title": "Trigger this manual action"
}
}
}
]
},
{
"name": "image:nginx-onbuild",
"size": 1,
"status": {
"icon": "status_manual",
"text": "manual",
"label": "manual play action",
"group": "manual",
"tooltip": "manual action",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982855",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
"size": "svg-394",
"title": "This job requires a manual action",
"content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
"action": {
"icon": "play",
"title": "Play",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
"method": "post",
"button_title": "Trigger this manual action"
}
},
"jobs": [
{
"id": 1224982855,
"name": "image:nginx-onbuild",
"started": null,
"archived": false,
"build_path": "/gitlab-com/gitlab-docs/-/jobs/114982855",
"play_path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
"playable": true,
"scheduled": false,
"created_at": "2018-10-31T16:35:23.753Z",
"updated_at": "2018-10-31T16:35:24.033Z",
"status": {
"icon": "status_manual",
"text": "manual",
"label": "manual play action",
"group": "manual",
"tooltip": "manual action",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982855",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/manual_action-2b4ca0d1bcfd92aebf33d484e36cbf7a102d007f76b5a0cfea636033a629d601.svg",
"size": "svg-394",
"title": "This job requires a manual action",
"content": "This job depends on a user to trigger its process. Often they are used to deploy code to production environments"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png",
"action": {
"icon": "play",
"title": "Play",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
"method": "post",
"button_title": "Trigger this manual action"
}
}
}
]
}
],
"status": {
"icon": "status_skipped",
"text": "skipped",
"label": "skipped",
"group": "skipped",
"tooltip": "skipped",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/pipelines/34993051#build-images",
"illustration": null,
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
},
"path": "/gitlab-com/gitlab-docs/pipelines/34993051#build-images",
"dropdown_path": "/gitlab-com/gitlab-docs/pipelines/34993051/stage.json?stage=build-images"
},
{
"name": "build",
"title": "build: failed",
"groups": [
{
"name": "compile_dev",
"size": 1,
"status": {
"icon": "status_failed",
"text": "failed",
"label": "failed",
"group": "failed",
"tooltip": "failed - (script failure)",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114984694",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/gitlab-com/gitlab-docs/-/jobs/114984694/retry",
"method": "post",
"button_title": "Retry this job"
}
},
"jobs": [
{
"id": 1123984694,
"name": "compile_dev",
"started": "2018-10-31T16:39:41.598Z",
"archived": false,
"build_path": "/gitlab-com/gitlab-docs/-/jobs/114984694",
"retry_path": "/gitlab-com/gitlab-docs/-/jobs/114984694/retry",
"playable": false,
"scheduled": false,
"created_at": "2018-10-31T16:39:41.138Z",
"updated_at": "2018-10-31T16:41:40.072Z",
"status": {
"icon": "status_failed",
"text": "failed",
"label": "failed",
"group": "failed",
"tooltip": "failed - (script failure)",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114984694",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/gitlab-com/gitlab-docs/-/jobs/114984694/retry",
"method": "post",
"button_title": "Retry this job"
}
},
"recoverable": false
}
]
}
],
"status": {
"icon": "status_failed",
"text": "failed",
"label": "failed",
"group": "failed",
"tooltip": "failed",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/pipelines/34993051#build",
"illustration": null,
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"
},
"path": "/gitlab-com/gitlab-docs/pipelines/34993051#build",
"dropdown_path": "/gitlab-com/gitlab-docs/pipelines/34993051/stage.json?stage=build"
},
{
"name": "deploy",
"title": "deploy: skipped",
"groups": [
{
"name": "review",
"size": 1,
"status": {
"icon": "status_skipped",
"text": "skipped",
"label": "skipped",
"group": "skipped",
"tooltip": "skipped",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982857",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job has been skipped"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
},
"jobs": [
{
"id": 1143232982857,
"name": "review",
"started": null,
"archived": false,
"build_path": "/gitlab-com/gitlab-docs/-/jobs/114982857",
"playable": false,
"scheduled": false,
"created_at": "2018-10-31T16:35:23.805Z",
"updated_at": "2018-10-31T16:41:40.569Z",
"status": {
"icon": "status_skipped",
"text": "skipped",
"label": "skipped",
"group": "skipped",
"tooltip": "skipped",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982857",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job has been skipped"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
}
}
]
},
{
"name": "review_stop",
"size": 1,
"status": {
"icon": "status_skipped",
"text": "skipped",
"label": "skipped",
"group": "skipped",
"tooltip": "skipped",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982858",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job has been skipped"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
},
"jobs": [
{
"id": 114921313182858,
"name": "review_stop",
"started": null,
"archived": false,
"build_path": "/gitlab-com/gitlab-docs/-/jobs/114982858",
"playable": false,
"scheduled": false,
"created_at": "2018-10-31T16:35:23.840Z",
"updated_at": "2018-10-31T16:41:40.480Z",
"status": {
"icon": "status_skipped",
"text": "skipped",
"label": "skipped",
"group": "skipped",
"tooltip": "skipped",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/-/jobs/114982858",
"illustration": {
"image": "https://assets.gitlab-static.net/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job has been skipped"
},
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
}
}
]
}
],
"status": {
"icon": "status_skipped",
"text": "skipped",
"label": "skipped",
"group": "skipped",
"tooltip": "skipped",
"has_details": true,
"details_path": "/gitlab-com/gitlab-docs/pipelines/34993051#deploy",
"illustration": null,
"favicon": "https://gitlab.com/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
},
"path": "/gitlab-com/gitlab-docs/pipelines/34993051#deploy",
"dropdown_path": "/gitlab-com/gitlab-docs/pipelines/34993051/stage.json?stage=deploy"
}
],
"artifacts": [],
"manual_actions": [
{
"name": "image:bootstrap",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982853/play",
"playable": true,
"scheduled": false
},
{
"name": "image:builder-onbuild",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982854/play",
"playable": true,
"scheduled": false
},
{
"name": "image:nginx-onbuild",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982855/play",
"playable": true,
"scheduled": false
},
{
"name": "review_stop",
"path": "/gitlab-com/gitlab-docs/-/jobs/114982858/play",
"playable": false,
"scheduled": false
}
],
"scheduled_actions": []
},
"project": {
"id": 1794617,
"name": "GitLab Docs",
"full_path": "/gitlab-com/gitlab-docs",
"full_name": "GitLab.com / GitLab Docs"
}
}
]
}
\ No newline at end of file
import CePipelineMediator from '~/pipelines/pipeline_details_mediator';
import createFlash from '~/flash';
import Poll from '~/lib/utils/poll';
import { __ } from '~/locale';
import PipelineService from 'ee/pipelines/services/pipeline_service';
/**
* Extends CE mediator with the logic to handle the upstream/downstream pipelines
*/
export default class EePipelineMediator extends CePipelineMediator {
/**
* Requests the clicked downstream pipeline pipeline
*
* @param {Object} pipeline
*/
fetchTriggeredPipeline(pipeline) {
if (this.pollTriggered) {
this.pollTriggered.stop();
this.pollTriggered = null;
}
this.store.requestTriggeredPipeline(pipeline);
this.pollTriggered = new Poll({
resource: PipelineService,
method: 'getUpstreamDownstream',
data: pipeline.path,
successCallback: ({ data }) => this.store.receiveTriggeredPipelineSuccess(pipeline, data),
errorCallback: () => {
this.store.receiveTriggeredPipelineError(pipeline);
createFlash(
__('An error occured while fetching this downstream pipeline. Please try again'),
);
},
});
this.pollTriggered.makeRequest();
}
refreshTriggeredPipelineGraph() {
this.pollTriggered.stop();
this.pollTriggered.restart();
}
/**
* Requests the clicked upstream pipeline pipeline
* @param {*} pipeline
*/
fetchTriggeredByPipeline(pipeline) {
if (this.pollTriggeredBy) {
this.pollTriggeredBy.stop();
this.pollTriggeredBy = null;
}
this.store.requestTriggeredByPipeline(pipeline);
this.pollTriggeredBy = new Poll({
resource: PipelineService,
method: 'getUpstreamDownstream',
data: pipeline.path,
successCallback: ({ data }) => this.store.receiveTriggeredByPipelineSuccess(pipeline, data),
errorCallback: () => {
this.store.receiveTriggeredByPipelineError(pipeline);
createFlash(__('An error occured while fetching this upstream pipeline. Please try again'));
},
});
this.pollTriggeredBy.makeRequest();
}
refreshTriggeredByPipelineGraph() {
this.pollTriggeredBy.stop();
this.pollTriggeredBy.restart();
}
resetPipeline(storeKey, pipeline, resetStoreKey, pollKey) {
this[pollKey].stop();
this.store.closePipeline(storeKey, pipeline, resetStoreKey);
}
}
import axios from '~/lib/utils/axios_utils';
import CePipelineService from '~/pipelines/services/pipeline_service';
export default class PipelineStore extends CePipelineService {
static getUpstreamDownstream(endpoint) {
return axios.get(`${endpoint}.json`);
}
}
import CePipelineStore from '~/pipelines/stores/pipeline_store';
import pipelinesKeys from '../constants';
import data from '../mock.json';
import Vue from 'vue';
/**
* Extends CE store with the logic to handle the upstream/downstream pipelines
......@@ -7,18 +8,6 @@ import pipelinesKeys from '../constants';
export default class PipelineStore extends CePipelineStore {
constructor() {
super();
// Stores the dowsntream collapsed pipelines
// with basic info sent in the main request
this.state.triggeredPipelines = [];
// Stores the upstream collapsed pipelines
// with basic info sent in the main request
this.state.triggeredByPipelines = [];
// Visible downstream pipeline
this.state.triggered = {};
// Visible upstream pipeline
this.state.triggeredBy = {};
}
/**
......@@ -30,218 +19,114 @@ export default class PipelineStore extends CePipelineStore {
* @param {Object} pipeline
*/
storePipeline(pipeline = {}) {
pipeline = Object.assign({}, data);
super.storePipeline(pipeline);
if (pipeline.triggered && pipeline.triggered.length) {
this.state.triggeredPipelines = pipeline.triggered.map(triggered => {
// because we are polling we need to make sure we do not hijack user's clicks.
const oldPipeline = this.state.triggeredPipelines.find(
oldValue => oldValue.id === triggered.id,
);
return Object.assign({}, triggered, {
isExpanded: oldPipeline ? oldPipeline.isExpanded : false,
isLoading: oldPipeline ? oldPipeline.isLoading : false,
});
});
if (pipeline.triggered_by) {
this.state.pipeline.triggered_by = [pipeline.triggered_by];
this.parseTriggeredByPipelines(this.state.pipeline, pipeline.triggered_by);
}
if (pipeline.triggered_by) {
this.state.triggeredByPipelines = [
Object.assign({}, pipeline.triggered_by, {
isExpanded: this.state.triggeredByPipelines.length
? this.state.triggeredByPipelines[0].isExpanded
: false,
isLoading: this.state.triggeredByPipelines.length
? this.state.triggeredByPipelines[0].isLoading
: false,
}),
];
if (pipeline.triggered && pipeline.triggered.length) {
this.state.triggeredPipelines = pipeline.triggered.map(triggered =>
this.parseTriggeredPipelines(this.state.pipeline, triggered),
);
}
}
//
// Downstream pipeline's methods
//
/**
* Called when the user clicks on a pipeline that was triggered by the main one.
* Recursiverly parses the triggered by pipelines.
*
* Resets isExpanded and isLoading props for all triggered (downstream) pipelines
* Sets isLoading to true for the requested one.
* Sets triggered_by as an array, there is always only 1 triggered_by pipeline.
* Adds key `isExpanding`
* Keeps old isExpading value due to polling
*
* @param {Array} parentPipeline
* @param {Object} pipeline
*/
requestTriggeredPipeline(pipeline) {
this.updateStoreOnRequest(pipelinesKeys.triggeredPipelines, pipeline);
}
parseTriggeredByPipelines(parentPipeline, pipeline) {
// keep old value in case it's opened because we're polling
Vue.set(pipeline, 'isExpanded', pipeline.isExpanded || false);
/**
* Called when we receive success callback for the downstream pipeline requested.
*
* Updates loading state for the request pipeline
* Updates the visible pipeline with the response
*
* @param {Object} pipeline
* @param {Object} response
*/
receiveTriggeredPipelineSuccess(pipeline, response) {
this.updatePipeline(
pipelinesKeys.triggeredPipelines,
pipeline,
{ isLoading: false, isExpanded: true },
pipelinesKeys.triggered,
response,
);
if (pipeline.triggered_by) {
pipeline.triggered_by = [pipeline.triggered_by];
this.parseTriggeredByPipelines(pipeline, pipeline.triggered_by);
}
}
/**
* Called when we receive an error callback for the downstream pipeline requested
* Resets the loading state + collpased state
* Resets triggered pipeline
*
* Recursively parses the triggered pipelines
* @param {Array} parentPipeline
* @param {Object} pipeline
*/
receiveTriggeredPipelineError(pipeline) {
this.updatePipeline(
pipelinesKeys.triggeredPipelines,
pipeline,
{ isLoading: false, isExpanded: false },
pipelinesKeys.triggered,
{},
);
}
parseTriggeredPipelines(parentPipeline, pipeline) {
// keep old value in case it's opened because we're polling
Vue.set(pipeline, 'isExpanded', pipeline.isExpanded || false);
//
// Upstream pipeline's methods
//
if (pipeline.triggered && pipeline.triggered.length > 0) {
pipeline.triggered.forEach(el => this.parseTriggeredPipelines(el));
}
}
/**
* Called when the user clicks on the pipeline that triggered the main one.
* Recursively resets all triggered by pipelines
*
* Handle the request for the upstream pipeline
* Updates the given pipeline with isLoading: true and isExpanded: true
*
* @param {Object} pipeline
*/
requestTriggeredByPipeline(pipeline) {
this.updateStoreOnRequest(pipelinesKeys.triggeredByPipelines, pipeline);
}
resetTriggeredByPipeline(pipeline) {
this.closePipeline(pipeline);
/**
* Success callback for the upstream pipeline received
*
* @param {Object} pipeline
* @param {Object} response
*/
receiveTriggeredByPipelineSuccess(pipeline, response) {
this.updatePipeline(
pipelinesKeys.triggeredByPipelines,
pipeline,
{ isLoading: false, isExpanded: true },
pipelinesKeys.triggeredBy,
response,
);
if (pipeline.triggered_by && pipeline.triggered_by) {
this.resetTriggeredByPipeline(pipeline.triggered_by);
}
}
/**
* Error callback for the upstream callback
* Opens the clicked pipeline and closes all other ones.
* @param {Object} pipeline
*/
receiveTriggeredByPipelineError(pipeline) {
this.updatePipeline(
pipelinesKeys.triggeredByPipelines,
pipeline,
{ isLoading: false, isExpanded: false },
pipelinesKeys.triggeredBy,
{},
);
}
openTriggeredByPipeline(pipeline) {
// first we need to reset all triggeredBy pipelines
this.resetTriggeredByPipeline(pipeline);
//
// Common utils between upstream & dowsntream pipelines
//
this.openPipeline(pipeline);
}
/**
* Adds isLoading and isCollpased keys to the given pipeline
*
* Used to know when to render the spinning icon
* and the blue background when the pipeline is expanded.
*
* Closes the given pipeline
* @param {Object} pipeline
* @returns {Object}
*/
static parsePipeline(pipeline) {
return Object.assign({}, pipeline, {
isExpanded: false,
isLoading: false,
});
closePipeline(pipeline) {
Vue.set(pipeline, 'isExpanded', false);
}
/**
* Returns the index of the upstream/downstream that matches the given ID
*
* Closes the given pipeline
* @param {Object} pipeline
* @returns {Number}
*/
getPipelineIndex(storeKey, pipelineId) {
return this.state[storeKey].findIndex(triggered => triggered.id === pipelineId);
openPipeline(pipeline) {
Vue.set(pipeline, 'isExpanded', true);
}
/**
* Updates the pipelines to reflect which one was requested.
* It sets isLoading to true and isExpanded to false
* Opens the clicked triggered pipeline and closes all other ones.
*
* @param {String} storeKey which property to update: `triggeredPipelines|triggeredByPipelines`
* @param {Object} pipeline the requested pipeline
* @param {Object} pipeline
*/
updateStoreOnRequest(storeKey, pipeline) {
this.state[storeKey] = this.state[storeKey].map(triggered => {
if (triggered.id === pipeline.id) {
return Object.assign({}, triggered, { isLoading: true, isExpanded: true });
}
// reset the others, in case another was one opened
return PipelineStore.parsePipeline(triggered);
});
openTriggeredPipeline(pipeline) {
this.resetTriggeredPipelines(pipeline);
this.openPipeline(pipeline);
}
/**
* Updates a single pipeline with the new props and the visible pipeline
* Used for success and error callbacks for both upstream and downstream requests.
* Recursively closes all triggered pipelines for the given one.
*
* @param {String} storeKey Which array needs to be updated: `triggeredPipelines|triggeredByPipelines`
* @param {Object} pipeline Which pipeline should be updated
* @param {Object} props The new properties to be updated for the given pipeline
* @param {String} visiblePipelineKey Which visible pipeline needs to be updated: `triggered|triggeredBy`
* @param {Object} visiblePipeline The new visible pipeline value
* @param {Object} pipeline
*/
updatePipeline(storeKey, pipeline, props, visiblePipelineKey, visiblePipeline = {}) {
this.state[storeKey].splice(
this.getPipelineIndex(storeKey, pipeline.id),
1,
Object.assign({}, pipeline, props),
);
this.state[visiblePipelineKey] = visiblePipeline;
}
resetTriggeredPipelines(pipeline) {
this.closePipeline(pipeline);
/**
* When the user clicks on a non collapsed pipeline we need to close it
*
* @param {String} storeKey Which array needs to be updated: `triggeredPipelines|triggeredByPipelines`
* @param {Object} pipeline Which pipeline should be updated
* @param {String} visiblePipelineKey Which visible pipeline needs to be updated: `triggered|triggeredBy`
*/
closePipeline(storeKey, pipeline, visiblePipelineKey) {
this.updatePipeline(
storeKey,
pipeline,
{
isLoading: false,
isExpanded: false,
},
visiblePipelineKey,
{},
);
if (pipeline.triggered && pipeline.triggered.length) {
pipeline.triggered.forEach(el => this.resetTriggeredPipelines(el));
}
}
}
......@@ -150,89 +150,4 @@ describe('EE Pipeline store', () => {
});
});
});
describe('utils', () => {
describe('parsePipeline', () => {
let parsed;
beforeAll(() => {
parsed = PipelineStore.parsePipeline(pipeline);
});
it('adds isLoading key set to false', () => {
expect(parsed.isLoading).toEqual(false);
});
it('adds isExpanded key set to false', () => {
expect(parsed.isExpanded).toEqual(false);
});
});
describe('getPipelineIndex', () => {
beforeAll(() => {
store.storePipeline(pipelineWithBoth);
});
it('returns the pipeline index for the provided pipeline and storeKey', () => {
store.getPipelineIndex('triggeredPipelines', store.triggeredPipelines[1]).toEqual(1);
});
});
describe('updateStoreOnRequest', () => {
beforeAll(() => {
store.storePipeline(pipelineWithBoth);
});
it('sets clicked pipeline isLoading to true', () => {
store.updateStoreOnRequest('triggeredPipelines', store.triggeredPipelines[1]);
expect(store.triggeredPipelines[1].isLoading).isLoading(true);
});
it('sets clicked pipeline isExpanded to true', () => {
store.updateStoreOnRequest('triggeredPipelines', store.triggeredPipelines[1]);
expect(store.triggeredPipelines[1].isExpanded).isLoading(true);
});
});
describe('updatePipeline', () => {
beforeAll(() => {
store.storePipeline(pipelineWithBoth);
store.updatePipeline(
'triggeredPipelines',
store.triggeredPipelines[1],
{ isLoading: true },
'triggered',
store.triggeredPipelines[1],
);
});
it('updates the given pipeline in the correct array', () => {
expect(store.triggeredPipelines[1].isLoading).toEqual(true);
expect(store.triggered).toEqual(store.triggeredPipelines[1]);
});
it('updates the visible pipeline to the given value', () => {});
});
describe('closePipeline', () => {
beforeAll(() => {
store.storePipeline(pipelineWithBoth);
});
it('closes the given pipeline', () => {
const clickedPipeline = store.triggeredPipelines[1];
// open it first
clickedPipeline.isExpanded = true;
store.triggered = clickedPipeline;
store.closePipeline('triggeredPipelines', clickedPipeline, 'triggered');
expect(store.triggeredPipelines[1].isExpanded).toEqual(true);
expect(store.triggered).toEqual({});
});
});
});
});
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment