Commit 8ef5ee8e authored by Filipa Lacerda's avatar Filipa Lacerda Committed by Kamil Trzciński

Recursively renders upstream/downstream:

Transforms the graph component to recursively
render both upstream and downstream pipelines
parent c0257f10
...@@ -43,20 +43,17 @@ export default () => { ...@@ -43,20 +43,17 @@ export default () => {
props: { props: {
isLoading: this.mediator.state.isLoading, isLoading: this.mediator.state.isLoading,
pipeline: this.mediator.store.state.pipeline, pipeline: this.mediator.store.state.pipeline,
// EE-only start mediator: this.mediator,
triggeredPipelines: this.mediator.store.state.triggeredPipelines,
triggered: this.mediator.store.state.triggered,
triggeredByPipelines: this.mediator.store.state.triggeredByPipelines,
triggeredBy: this.mediator.store.state.triggeredBy,
// EE-only end
}, },
on: { on: {
refreshPipelineGraph: this.requestRefreshPipelineGraph, refreshPipelineGraph: this.requestRefreshPipelineGraph,
// EE-only start // EE-only start
// refreshTriggeredPipelineGraph: this.mediator.refreshTriggeredByPipelineGraph, // refreshTriggeredPipelineGraph: this.mediator.refreshTriggeredByPipelineGraph,
// refreshTriggeredByPipelineGraph: this.mediator.refreshTriggeredByPipelineGraph, // refreshTriggeredByPipelineGraph: this.mediator.refreshTriggeredByPipelineGraph,
onClickTriggeredBy: pipeline => this.clickTriggeredByPipeline(pipeline), onClickTriggeredBy: (parentPipeline, pipeline) =>
onClickTriggered: pipeline => this.clickTriggeredPipeline(pipeline), this.clickTriggeredByPipeline(parentPipeline, pipeline),
onClickTriggered: (parentPipeline, pipeline) =>
this.clickTriggeredPipeline(parentPipeline, pipeline),
// EE-only end // EE-only end
}, },
}); });
......
...@@ -4,6 +4,7 @@ import { GlLoadingIcon } from '@gitlab/ui'; ...@@ -4,6 +4,7 @@ import { GlLoadingIcon } from '@gitlab/ui';
import LinkedPipelinesColumn from 'ee/pipelines/components/graph/linked_pipelines_column.vue'; import LinkedPipelinesColumn from 'ee/pipelines/components/graph/linked_pipelines_column.vue';
import EEGraphMixin from 'ee/pipelines/mixins/graph_component_mixin'; import EEGraphMixin from 'ee/pipelines/mixins/graph_component_mixin';
import StageColumnComponent from '~/pipelines/components/graph/stage_column_component.vue'; import StageColumnComponent from '~/pipelines/components/graph/stage_column_component.vue';
import GraphEEMixin from 'ee/pipelines/mixins/graph_pipeline_bundle_mixin'; // eslint-disable-line import/order
export default { export default {
name: 'PipelineGraph', name: 'PipelineGraph',
...@@ -12,7 +13,7 @@ export default { ...@@ -12,7 +13,7 @@ export default {
StageColumnComponent, StageColumnComponent,
GlLoadingIcon, GlLoadingIcon,
}, },
mixins: [EEGraphMixin], mixins: [EEGraphMixin, GraphEEMixin],
props: { props: {
isLoading: { isLoading: {
type: Boolean, type: Boolean,
...@@ -22,6 +23,19 @@ export default { ...@@ -22,6 +23,19 @@ export default {
type: Object, type: Object,
required: true, required: true,
}, },
isLinkedPipeline: {
type: Boolean,
default: false,
},
mediator: {
type: Object,
required: true,
},
type: {
type: String,
required: false,
default: 'main',
},
}, },
computed: { computed: {
graph() { graph() {
...@@ -29,6 +43,7 @@ export default { ...@@ -29,6 +43,7 @@ export default {
}, },
}, },
methods: { methods: {
// todo filipa: move this into a ce mixin
capitalizeStageName(name) { capitalizeStageName(name) {
const escapedName = _.escape(name); const escapedName = _.escape(name);
return escapedName.charAt(0).toUpperCase() + escapedName.slice(1); return escapedName.charAt(0).toUpperCase() + escapedName.slice(1);
...@@ -60,15 +75,31 @@ export default { ...@@ -60,15 +75,31 @@ export default {
</script> </script>
<template> <template>
<div class="build-content middle-block js-pipeline-graph"> <div class="build-content middle-block js-pipeline-graph">
<div class="pipeline-visualization pipeline-graph pipeline-tab-content"> <div
<div class="text-center"><gl-loading-icon v-if="isLoading" :size="3" /></div> class="pipeline-visualization pipeline-graph"
:class="{ 'pipeline-tab-content': !isLinkedPipeline }"
>
<div class="text-center" v-if="isLoading"><gl-loading-icon :size="3" /></div>
<pipeline-graph
type="upstream"
class="d-inline-block upstream-pipeline"
v-if="expandedTriggeredBy && type !== 'downstream'"
:is-loading="false"
:pipeline="expandedTriggeredBy"
:is-linked-pipeline="true"
:mediator="mediator"
@onClickTriggeredBy="
(parentPipeline, pipeline) => this.clickTriggeredByPipeline(parentPipeline, pipeline)
"
/>
<linked-pipelines-column <linked-pipelines-column
v-if="hasTriggeredBy" v-if="hasTriggeredBy"
:linked-pipelines="triggeredByPipelines" :linked-pipelines="triggeredByPipelines"
:column-title="__('Upstream')" :column-title="__('Upstream')"
graph-position="left" graph-position="left"
@linkedPipelineClick="pipeline => $emit('onClickTriggeredBy', pipeline)" @linkedPipelineClick="pipeline => $emit('onClickTriggeredBy', this.pipeline, pipeline)"
/> />
<ul <ul
...@@ -102,6 +133,20 @@ export default { ...@@ -102,6 +133,20 @@ export default {
graph-position="right" graph-position="right"
@linkedPipelineClick="handleClickedDownstream" @linkedPipelineClick="handleClickedDownstream"
/> />
<pipeline-graph
type="downstream"
class="d-inline-block"
v-if="expandedTriggered && type !== 'upstream'"
:is-loading="false"
:pipeline="expandedTriggered"
:is-linked-pipeline="true"
:style="{ 'margin-top': marginTop }"
@onClickTriggered="
(parentPipeline, pipeline) => this.clickTriggeredPipeline(parentPipeline, pipeline)
"
:mediator="mediator"
/>
</div> </div>
</div> </div>
</template> </template>
...@@ -28,7 +28,7 @@ export default { ...@@ -28,7 +28,7 @@ export default {
return this.pipeline.details.status; return this.pipeline.details.status;
}, },
projectName() { projectName() {
return this.pipeline.project.name; return this.pipeline.project && this.pipeline.project.name;
}, },
}, },
methods: { methods: {
......
// todo filipa: move this to the ee graph component
import _ from 'underscore';
export default { export default {
data() { data() {
return { return {
...@@ -6,17 +9,34 @@ export default { ...@@ -6,17 +9,34 @@ export default {
}, },
computed: { computed: {
hasTriggeredBy() { hasTriggeredBy() {
return this.pipeline.triggered_by && this.pipeline.triggered_by != null; return (
this.type !== 'downstream' &&
this.pipeline.triggered_by &&
this.pipeline.triggered_by != null
);
}, },
triggeredByPipelines() { triggeredByPipelines() {
return this.pipeline.triggered_by; return this.pipeline.triggered_by;
}, },
hasTriggered() { hasTriggered() {
return this.pipeline.triggered && this.pipeline.triggered.length > 0; return (
this.type !== 'upstream' && this.pipeline.triggered && this.pipeline.triggered.length > 0
);
}, },
triggeredPipelines() { triggeredPipelines() {
return this.pipeline.triggered; return this.pipeline.triggered;
}, },
expandedTriggeredBy() {
return (
this.pipeline.triggered_by &&
_.isArray(this.pipeline.triggered_by) &&
this.pipeline.triggered_by.find(el => el.isExpanded)
);
},
expandedTriggered() {
return this.pipeline.triggered && this.pipeline.triggered.find(el => el.isExpanded);
},
/** /**
* Calculates the margin top of the clicked downstream pipeline by * Calculates the margin top of the clicked downstream pipeline by
* adding the height of each linked pipeline and the margin * adding the height of each linked pipeline and the margin
...@@ -34,8 +54,9 @@ export default { ...@@ -34,8 +54,9 @@ export default {
this.$emit('refreshTriggeredByPipelineGraph'); this.$emit('refreshTriggeredByPipelineGraph');
}, },
handleClickedDownstream(pipeline, clickedIndex) { handleClickedDownstream(pipeline, clickedIndex) {
//filipa: figure out the clickIndex thing
this.triggeredTopIndex = clickedIndex; this.triggeredTopIndex = clickedIndex;
this.$emit('onClickTriggered', pipeline); this.$emit('onClickTriggered', this.pipeline, pipeline);
}, },
}, },
}; };
import keys from '../constants';
export default { export default {
methods: { methods: {
/** /**
...@@ -13,19 +11,28 @@ export default { ...@@ -13,19 +11,28 @@ export default {
* @param {String} resetStoreKey Store key for the visible pipeline that will need to be reset * @param {String} resetStoreKey Store key for the visible pipeline that will need to be reset
* @param {Object} pipeline The clicked pipeline * @param {Object} pipeline The clicked pipeline
*/ */
clickPipeline(pipeline, method) { clickPipeline(parentPipeline, pipeline, openMethod, closeMethod) {
debugger;
if (!pipeline.isExpanded) { if (!pipeline.isExpanded) {
this.mediator.store[method](pipeline); this.mediator.store[openMethod](parentPipeline, pipeline);
} else { } else {
this.mediator.store.closePipeline(pipeline); this.mediator.store[closeMethod](pipeline);
} }
}, },
clickTriggeredByPipeline(pipeline) { clickTriggeredByPipeline(parentPipeline, pipeline) {
this.clickPipeline(pipeline, 'openTriggeredByPipeline'); this.clickPipeline(
parentPipeline,
pipeline,
'openTriggeredByPipeline',
'closeTriggeredByPipeline',
);
}, },
clickTriggeredPipeline(pipeline) { clickTriggeredPipeline(parentPipeline, pipeline) {
this.clickPipeline(pipeline, 'openTriggeredPipeline'); this.clickPipeline(
parentPipeline,
pipeline,
'openTriggeredPipeline',
'closeTriggeredPipeline',
);
}, },
}, },
}; };
...@@ -319,9 +319,7 @@ ...@@ -319,9 +319,7 @@
"short_id": "8083eb0a", "short_id": "8083eb0a",
"title": "Add link to development guide in readme", "title": "Add link to development guide in readme",
"created_at": "2018-06-05T11:30:48.000Z", "created_at": "2018-06-05T11:30:48.000Z",
"parent_ids": [ "parent_ids": ["1d7cf79b5a1a2121b9474ac20d61c1b8f621289d"],
"1d7cf79b5a1a2121b9474ac20d61c1b8f621289d"
],
"message": "Add link to development guide in readme\n\nCloses https://gitlab.com/gitlab-org/gitlab-runner/issues/3122\n", "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_name": "Achilleas Pipinellis",
"author_email": "axil@gitlab.com", "author_email": "axil@gitlab.com",
...@@ -344,7 +342,7 @@ ...@@ -344,7 +342,7 @@
"commit_path": "/gitlab-org/gitlab-runner/commit/8083eb0a920572214d0dccedd7981f05d535ad46" "commit_path": "/gitlab-org/gitlab-runner/commit/8083eb0a920572214d0dccedd7981f05d535ad46"
}, },
"triggered_by": { "triggered_by": {
"id": 34993231051, "id": 12,
"user": { "user": {
"id": 376774, "id": 376774,
"name": "Alessio Caiazza", "name": "Alessio Caiazza",
...@@ -812,14 +810,12 @@ ...@@ -812,14 +810,12 @@
}, },
"project": { "project": {
"id": 1794617, "id": 1794617,
"name": "GitLab Docs", "name": "Filipa Rocks",
"full_path": "/gitlab-com/gitlab-docs", "full_path": "/gitlab-com/gitlab-docs",
"full_name": "GitLab.com / GitLab Docs" "full_name": "GitLab.com / GitLab Docs"
}
}, },
"triggered": [ "triggered_by": {
{ "id": 349932310342451,
"id": 34993051,
"user": { "user": {
"id": 376774, "id": 376774,
"name": "Alessio Caiazza", "name": "Alessio Caiazza",
...@@ -881,7 +877,7 @@ ...@@ -881,7 +877,7 @@
}, },
"jobs": [ "jobs": [
{ {
"id": 114982853, "id": 11421321982853,
"name": "image:bootstrap", "name": "image:bootstrap",
"started": null, "started": null,
"archived": false, "archived": false,
...@@ -945,7 +941,7 @@ ...@@ -945,7 +941,7 @@
}, },
"jobs": [ "jobs": [
{ {
"id": 114982854, "id": 1149822131854,
"name": "image:builder-onbuild", "name": "image:builder-onbuild",
"started": null, "started": null,
"archived": false, "archived": false,
...@@ -1009,7 +1005,7 @@ ...@@ -1009,7 +1005,7 @@
}, },
"jobs": [ "jobs": [
{ {
"id": 114982855, "id": 11498285523424,
"name": "image:nginx-onbuild", "name": "image:nginx-onbuild",
"started": null, "started": null,
"archived": false, "archived": false,
...@@ -1091,7 +1087,7 @@ ...@@ -1091,7 +1087,7 @@
}, },
"jobs": [ "jobs": [
{ {
"id": 114984694, "id": 1149846949786,
"name": "compile_dev", "name": "compile_dev",
"started": "2018-10-31T16:39:41.598Z", "started": "2018-10-31T16:39:41.598Z",
"archived": false, "archived": false,
...@@ -1166,7 +1162,7 @@ ...@@ -1166,7 +1162,7 @@
}, },
"jobs": [ "jobs": [
{ {
"id": 114982857, "id": 11498282342357,
"name": "review", "name": "review",
"started": null, "started": null,
"archived": false, "archived": false,
...@@ -1292,8 +1288,11 @@ ...@@ -1292,8 +1288,11 @@
"full_name": "GitLab.com / GitLab Docs" "full_name": "GitLab.com / GitLab Docs"
} }
}, },
"triggered": []
},
"triggered": [
{ {
"id": 34993052, "id": 34993051,
"user": { "user": {
"id": 376774, "id": 376774,
"name": "Alessio Caiazza", "name": "Alessio Caiazza",
...@@ -1483,7 +1482,7 @@ ...@@ -1483,7 +1482,7 @@
}, },
"jobs": [ "jobs": [
{ {
"id": 1224982855, "id": 114982855,
"name": "image:nginx-onbuild", "name": "image:nginx-onbuild",
"started": null, "started": null,
"archived": false, "archived": false,
...@@ -1565,7 +1564,7 @@ ...@@ -1565,7 +1564,7 @@
}, },
"jobs": [ "jobs": [
{ {
"id": 1123984694, "id": 114984694,
"name": "compile_dev", "name": "compile_dev",
"started": "2018-10-31T16:39:41.598Z", "started": "2018-10-31T16:39:41.598Z",
"archived": false, "archived": false,
...@@ -1640,7 +1639,7 @@ ...@@ -1640,7 +1639,7 @@
}, },
"jobs": [ "jobs": [
{ {
"id": 1143232982857, "id": 114982857,
"name": "review", "name": "review",
"started": null, "started": null,
"archived": false, "archived": false,
...@@ -1687,7 +1686,7 @@ ...@@ -1687,7 +1686,7 @@
}, },
"jobs": [ "jobs": [
{ {
"id": 114921313182858, "id": 114982858,
"name": "review_stop", "name": "review_stop",
"started": null, "started": null,
"archived": false, "archived": false,
...@@ -1765,6 +1764,1769 @@ ...@@ -1765,6 +1764,1769 @@
"full_path": "/gitlab-com/gitlab-docs", "full_path": "/gitlab-com/gitlab-docs",
"full_name": "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"
},
"triggered": [
{
"id": 26,
"user": null,
"active": false,
"coverage": null,
"source": "push",
"created_at": "2019-01-06T17:48:37.599Z",
"updated_at": "2019-01-06T17:48:38.371Z",
"path": "/h5bp/html5-boilerplate/pipelines/26",
"flags": {
"latest": true,
"stuck": false,
"auto_devops": false,
"merge_request": false,
"yaml_errors": false,
"retryable": true,
"cancelable": false,
"failure_reason": false
},
"details": {
"status": {
"icon": "status_warning",
"text": "passed",
"label": "passed with warnings",
"group": "success_with_warnings",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/pipelines/26",
"illustration": null,
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
},
"duration": null,
"finished_at": "2019-01-06T17:48:38.370Z",
"stages": [
{
"name": "build",
"title": "build: passed",
"groups": [
{
"name": "build:linux",
"size": 1,
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/526",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/526/retry",
"method": "post",
"button_title": "Retry this job"
}
},
"jobs": [
{
"id": 526,
"name": "build:linux",
"started": "2019-01-06T08:48:20.236Z",
"archived": false,
"build_path": "/h5bp/html5-boilerplate/-/jobs/526",
"retry_path": "/h5bp/html5-boilerplate/-/jobs/526/retry",
"playable": false,
"scheduled": false,
"created_at": "2019-01-06T17:48:37.806Z",
"updated_at": "2019-01-06T17:48:37.806Z",
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/526",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/526/retry",
"method": "post",
"button_title": "Retry this job"
}
}
}
]
},
{
"name": "build:osx",
"size": 1,
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/527",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/527/retry",
"method": "post",
"button_title": "Retry this job"
}
},
"jobs": [
{
"id": 527,
"name": "build:osx",
"started": "2019-01-06T07:48:20.237Z",
"archived": false,
"build_path": "/h5bp/html5-boilerplate/-/jobs/527",
"retry_path": "/h5bp/html5-boilerplate/-/jobs/527/retry",
"playable": false,
"scheduled": false,
"created_at": "2019-01-06T17:48:37.846Z",
"updated_at": "2019-01-06T17:48:37.846Z",
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/527",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/527/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": "/h5bp/html5-boilerplate/pipelines/26#build",
"illustration": null,
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
},
"path": "/h5bp/html5-boilerplate/pipelines/26#build",
"dropdown_path": "/h5bp/html5-boilerplate/pipelines/26/stage.json?stage=build"
},
{
"name": "test",
"title": "test: passed with warnings",
"groups": [
{
"name": "jenkins",
"size": 1,
"status": {
"icon": "status_success",
"text": "passed",
"label": null,
"group": "success",
"tooltip": null,
"has_details": false,
"details_path": null,
"illustration": null,
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
},
"jobs": [
{
"id": 546,
"name": "jenkins",
"started": "2019-01-06T11:48:20.237Z",
"archived": false,
"build_path": "/h5bp/html5-boilerplate/-/jobs/546",
"playable": false,
"scheduled": false,
"created_at": "2019-01-06T17:48:38.359Z",
"updated_at": "2019-01-06T17:48:38.359Z",
"status": {
"icon": "status_success",
"text": "passed",
"label": null,
"group": "success",
"tooltip": null,
"has_details": false,
"details_path": null,
"illustration": null,
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
}
}
]
},
{
"name": "rspec:linux",
"size": 3,
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": false,
"details_path": null,
"illustration": null,
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
},
"jobs": [
{
"id": 528,
"name": "rspec:linux 0 3",
"started": "2019-01-06T09:48:20.237Z",
"archived": false,
"build_path": "/h5bp/html5-boilerplate/-/jobs/528",
"retry_path": "/h5bp/html5-boilerplate/-/jobs/528/retry",
"playable": false,
"scheduled": false,
"created_at": "2019-01-06T17:48:37.885Z",
"updated_at": "2019-01-06T17:48:37.885Z",
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/528",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/528/retry",
"method": "post",
"button_title": "Retry this job"
}
}
},
{
"id": 529,
"name": "rspec:linux 1 3",
"started": "2019-01-06T09:48:20.237Z",
"archived": false,
"build_path": "/h5bp/html5-boilerplate/-/jobs/529",
"retry_path": "/h5bp/html5-boilerplate/-/jobs/529/retry",
"playable": false,
"scheduled": false,
"created_at": "2019-01-06T17:48:37.907Z",
"updated_at": "2019-01-06T17:48:37.907Z",
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/529",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/529/retry",
"method": "post",
"button_title": "Retry this job"
}
}
},
{
"id": 530,
"name": "rspec:linux 2 3",
"started": "2019-01-06T09:48:20.237Z",
"archived": false,
"build_path": "/h5bp/html5-boilerplate/-/jobs/530",
"retry_path": "/h5bp/html5-boilerplate/-/jobs/530/retry",
"playable": false,
"scheduled": false,
"created_at": "2019-01-06T17:48:37.927Z",
"updated_at": "2019-01-06T17:48:37.927Z",
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/530",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/530/retry",
"method": "post",
"button_title": "Retry this job"
}
}
}
]
},
{
"name": "rspec:osx",
"size": 1,
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/535",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/535/retry",
"method": "post",
"button_title": "Retry this job"
}
},
"jobs": [
{
"id": 535,
"name": "rspec:osx",
"started": "2019-01-06T09:48:20.237Z",
"archived": false,
"build_path": "/h5bp/html5-boilerplate/-/jobs/535",
"retry_path": "/h5bp/html5-boilerplate/-/jobs/535/retry",
"playable": false,
"scheduled": false,
"created_at": "2019-01-06T17:48:38.018Z",
"updated_at": "2019-01-06T17:48:38.018Z",
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/535",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/535/retry",
"method": "post",
"button_title": "Retry this job"
}
}
}
]
},
{
"name": "rspec:windows",
"size": 3,
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": false,
"details_path": null,
"illustration": null,
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
},
"jobs": [
{
"id": 531,
"name": "rspec:windows 0 3",
"started": "2019-01-06T09:48:20.237Z",
"archived": false,
"build_path": "/h5bp/html5-boilerplate/-/jobs/531",
"retry_path": "/h5bp/html5-boilerplate/-/jobs/531/retry",
"playable": false,
"scheduled": false,
"created_at": "2019-01-06T17:48:37.944Z",
"updated_at": "2019-01-06T17:48:37.944Z",
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/531",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/531/retry",
"method": "post",
"button_title": "Retry this job"
}
}
},
{
"id": 532,
"name": "rspec:windows 1 3",
"started": "2019-01-06T09:48:20.237Z",
"archived": false,
"build_path": "/h5bp/html5-boilerplate/-/jobs/532",
"retry_path": "/h5bp/html5-boilerplate/-/jobs/532/retry",
"playable": false,
"scheduled": false,
"created_at": "2019-01-06T17:48:37.962Z",
"updated_at": "2019-01-06T17:48:37.962Z",
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/532",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/532/retry",
"method": "post",
"button_title": "Retry this job"
}
}
},
{
"id": 534,
"name": "rspec:windows 2 3",
"started": "2019-01-06T09:48:20.237Z",
"archived": false,
"build_path": "/h5bp/html5-boilerplate/-/jobs/534",
"retry_path": "/h5bp/html5-boilerplate/-/jobs/534/retry",
"playable": false,
"scheduled": false,
"created_at": "2019-01-06T17:48:37.999Z",
"updated_at": "2019-01-06T17:48:37.999Z",
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/534",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/534/retry",
"method": "post",
"button_title": "Retry this job"
}
}
}
]
},
{
"name": "spinach:linux",
"size": 1,
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/536",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/536/retry",
"method": "post",
"button_title": "Retry this job"
}
},
"jobs": [
{
"id": 536,
"name": "spinach:linux",
"started": "2019-01-06T09:48:20.237Z",
"archived": false,
"build_path": "/h5bp/html5-boilerplate/-/jobs/536",
"retry_path": "/h5bp/html5-boilerplate/-/jobs/536/retry",
"playable": false,
"scheduled": false,
"created_at": "2019-01-06T17:48:38.050Z",
"updated_at": "2019-01-06T17:48:38.050Z",
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/536",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/536/retry",
"method": "post",
"button_title": "Retry this job"
}
}
}
]
},
{
"name": "spinach:osx",
"size": 1,
"status": {
"icon": "status_warning",
"text": "failed",
"label": "failed (allowed to fail)",
"group": "failed_with_warnings",
"tooltip": "failed - (unknown failure) (allowed to fail)",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/537",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/537/retry",
"method": "post",
"button_title": "Retry this job"
}
},
"jobs": [
{
"id": 537,
"name": "spinach:osx",
"started": "2019-01-06T09:48:20.237Z",
"archived": false,
"build_path": "/h5bp/html5-boilerplate/-/jobs/537",
"retry_path": "/h5bp/html5-boilerplate/-/jobs/537/retry",
"playable": false,
"scheduled": false,
"created_at": "2019-01-06T17:48:38.069Z",
"updated_at": "2019-01-06T17:48:38.069Z",
"status": {
"icon": "status_warning",
"text": "failed",
"label": "failed (allowed to fail)",
"group": "failed_with_warnings",
"tooltip": "failed - (unknown failure) (allowed to fail)",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/537",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/537/retry",
"method": "post",
"button_title": "Retry this job"
}
},
"callout_message": "There is an unknown failure, please try again",
"recoverable": true
}
]
}
],
"status": {
"icon": "status_warning",
"text": "passed",
"label": "passed with warnings",
"group": "success_with_warnings",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/pipelines/26#test",
"illustration": null,
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
},
"path": "/h5bp/html5-boilerplate/pipelines/26#test",
"dropdown_path": "/h5bp/html5-boilerplate/pipelines/26/stage.json?stage=test"
},
{
"name": "security",
"title": "security: passed",
"groups": [
{
"name": "container_scanning",
"size": 1,
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/541",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/541/retry",
"method": "post",
"button_title": "Retry this job"
}
},
"jobs": [
{
"id": 541,
"name": "container_scanning",
"started": "2019-01-06T09:48:20.237Z",
"archived": false,
"build_path": "/h5bp/html5-boilerplate/-/jobs/541",
"retry_path": "/h5bp/html5-boilerplate/-/jobs/541/retry",
"playable": false,
"scheduled": false,
"created_at": "2019-01-06T17:48:38.186Z",
"updated_at": "2019-01-06T17:48:38.186Z",
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/541",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/541/retry",
"method": "post",
"button_title": "Retry this job"
}
}
}
]
},
{
"name": "dast",
"size": 1,
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/538",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/538/retry",
"method": "post",
"button_title": "Retry this job"
}
},
"jobs": [
{
"id": 538,
"name": "dast",
"started": "2019-01-06T09:48:20.237Z",
"archived": false,
"build_path": "/h5bp/html5-boilerplate/-/jobs/538",
"retry_path": "/h5bp/html5-boilerplate/-/jobs/538/retry",
"playable": false,
"scheduled": false,
"created_at": "2019-01-06T17:48:38.087Z",
"updated_at": "2019-01-06T17:48:38.087Z",
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/538",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/538/retry",
"method": "post",
"button_title": "Retry this job"
}
}
}
]
},
{
"name": "dependency_scanning",
"size": 1,
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/540",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/540/retry",
"method": "post",
"button_title": "Retry this job"
}
},
"jobs": [
{
"id": 540,
"name": "dependency_scanning",
"started": "2019-01-06T09:48:20.237Z",
"archived": false,
"build_path": "/h5bp/html5-boilerplate/-/jobs/540",
"retry_path": "/h5bp/html5-boilerplate/-/jobs/540/retry",
"playable": false,
"scheduled": false,
"created_at": "2019-01-06T17:48:38.153Z",
"updated_at": "2019-01-06T17:48:38.153Z",
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/540",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/540/retry",
"method": "post",
"button_title": "Retry this job"
}
}
}
]
},
{
"name": "sast",
"size": 1,
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/539",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/539/retry",
"method": "post",
"button_title": "Retry this job"
}
},
"jobs": [
{
"id": 539,
"name": "sast",
"started": "2019-01-06T09:48:20.237Z",
"archived": false,
"build_path": "/h5bp/html5-boilerplate/-/jobs/539",
"retry_path": "/h5bp/html5-boilerplate/-/jobs/539/retry",
"playable": false,
"scheduled": false,
"created_at": "2019-01-06T17:48:38.121Z",
"updated_at": "2019-01-06T17:48:38.121Z",
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/539",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/539/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": "/h5bp/html5-boilerplate/pipelines/26#security",
"illustration": null,
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
},
"path": "/h5bp/html5-boilerplate/pipelines/26#security",
"dropdown_path": "/h5bp/html5-boilerplate/pipelines/26/stage.json?stage=security"
},
{
"name": "deploy",
"title": "deploy: passed",
"groups": [
{
"name": "production",
"size": 1,
"status": {
"icon": "status_skipped",
"text": "skipped",
"label": "skipped",
"group": "skipped",
"tooltip": "skipped",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/544",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job has been skipped"
},
"favicon": "/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
},
"jobs": [
{
"id": 544,
"name": "production",
"started": null,
"archived": false,
"build_path": "/h5bp/html5-boilerplate/-/jobs/544",
"playable": false,
"scheduled": false,
"created_at": "2019-01-06T17:48:38.313Z",
"updated_at": "2019-01-06T17:48:38.313Z",
"status": {
"icon": "status_skipped",
"text": "skipped",
"label": "skipped",
"group": "skipped",
"tooltip": "skipped",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/544",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job has been skipped"
},
"favicon": "/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
}
}
]
},
{
"name": "staging",
"size": 1,
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/542",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/542/retry",
"method": "post",
"button_title": "Retry this job"
}
},
"jobs": [
{
"id": 542,
"name": "staging",
"started": "2019-01-06T11:48:20.237Z",
"archived": false,
"build_path": "/h5bp/html5-boilerplate/-/jobs/542",
"retry_path": "/h5bp/html5-boilerplate/-/jobs/542/retry",
"playable": false,
"scheduled": false,
"created_at": "2019-01-06T17:48:38.219Z",
"updated_at": "2019-01-06T17:48:38.219Z",
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/542",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job does not have a trace."
},
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "retry",
"title": "Retry",
"path": "/h5bp/html5-boilerplate/-/jobs/542/retry",
"method": "post",
"button_title": "Retry this job"
}
}
}
]
},
{
"name": "stop staging",
"size": 1,
"status": {
"icon": "status_skipped",
"text": "skipped",
"label": "skipped",
"group": "skipped",
"tooltip": "skipped",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/543",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job has been skipped"
},
"favicon": "/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
},
"jobs": [
{
"id": 543,
"name": "stop staging",
"started": null,
"archived": false,
"build_path": "/h5bp/html5-boilerplate/-/jobs/543",
"playable": false,
"scheduled": false,
"created_at": "2019-01-06T17:48:38.283Z",
"updated_at": "2019-01-06T17:48:38.283Z",
"status": {
"icon": "status_skipped",
"text": "skipped",
"label": "skipped",
"group": "skipped",
"tooltip": "skipped",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/543",
"illustration": {
"image": "/assets/illustrations/skipped-job_empty-8b877955fbf175e42ae65b6cb95346e15282c6fc5b682756c329af3a0055225e.svg",
"size": "svg-430",
"title": "This job has been skipped"
},
"favicon": "/assets/ci_favicons/favicon_status_skipped-0b9c5e543588945e8c4ca57786bbf2d0c56631959c9f853300392d0315be829b.png"
}
}
]
}
],
"status": {
"icon": "status_success",
"text": "passed",
"label": "passed",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/pipelines/26#deploy",
"illustration": null,
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
},
"path": "/h5bp/html5-boilerplate/pipelines/26#deploy",
"dropdown_path": "/h5bp/html5-boilerplate/pipelines/26/stage.json?stage=deploy"
},
{
"name": "notify",
"title": "notify: passed",
"groups": [
{
"name": "slack",
"size": 1,
"status": {
"icon": "status_success",
"text": "passed",
"label": "manual play action",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/545",
"illustration": {
"image": "/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": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "play",
"title": "Play",
"path": "/h5bp/html5-boilerplate/-/jobs/545/play",
"method": "post",
"button_title": "Trigger this manual action"
}
},
"jobs": [
{
"id": 545,
"name": "slack",
"started": null,
"archived": false,
"build_path": "/h5bp/html5-boilerplate/-/jobs/545",
"retry_path": "/h5bp/html5-boilerplate/-/jobs/545/retry",
"play_path": "/h5bp/html5-boilerplate/-/jobs/545/play",
"playable": true,
"scheduled": false,
"created_at": "2019-01-06T17:48:38.341Z",
"updated_at": "2019-01-06T17:48:38.341Z",
"status": {
"icon": "status_success",
"text": "passed",
"label": "manual play action",
"group": "success",
"tooltip": "passed",
"has_details": true,
"details_path": "/h5bp/html5-boilerplate/-/jobs/545",
"illustration": {
"image": "/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": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png",
"action": {
"icon": "play",
"title": "Play",
"path": "/h5bp/html5-boilerplate/-/jobs/545/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": "/h5bp/html5-boilerplate/pipelines/26#notify",
"illustration": null,
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
},
"path": "/h5bp/html5-boilerplate/pipelines/26#notify",
"dropdown_path": "/h5bp/html5-boilerplate/pipelines/26/stage.json?stage=notify"
}
],
"artifacts": [
{
"name": "build:linux",
"expired": null,
"expire_at": null,
"path": "/h5bp/html5-boilerplate/-/jobs/526/artifacts/download",
"browse_path": "/h5bp/html5-boilerplate/-/jobs/526/artifacts/browse"
},
{
"name": "build:osx",
"expired": null,
"expire_at": null,
"path": "/h5bp/html5-boilerplate/-/jobs/527/artifacts/download",
"browse_path": "/h5bp/html5-boilerplate/-/jobs/527/artifacts/browse"
}
],
"manual_actions": [
{
"name": "stop staging",
"path": "/h5bp/html5-boilerplate/-/jobs/543/play",
"playable": false,
"scheduled": false
},
{
"name": "production",
"path": "/h5bp/html5-boilerplate/-/jobs/544/play",
"playable": false,
"scheduled": false
},
{
"name": "slack",
"path": "/h5bp/html5-boilerplate/-/jobs/545/play",
"playable": true,
"scheduled": false
}
],
"scheduled_actions": []
},
"ref": {
"name": "master",
"path": "/h5bp/html5-boilerplate/commits/master",
"tag": false,
"branch": true,
"merge_request": false
},
"commit": {
"id": "bad98c453eab56d20057f3929989251d45cd1a8b",
"short_id": "bad98c45",
"title": "remove instances of shrink-to-fit=no (#2103)",
"created_at": "2018-12-17T20:52:18.000Z",
"parent_ids": ["49130f6cfe9ff1f749015d735649a2bc6f66cf3a"],
"message": "remove instances of shrink-to-fit=no (#2103)\n\ncloses #2102\r\n\r\nPer my findings, the need for it as a default was rectified with the release of iOS 9.3, where the viewport no longer shrunk to accommodate overflow, as was introduced in iOS 9.",
"author_name": "Scott O'Hara",
"author_email": "scottaohara@users.noreply.github.com",
"authored_date": "2018-12-17T20:52:18.000Z",
"committer_name": "Rob Larsen",
"committer_email": "rob@drunkenfist.com",
"committed_date": "2018-12-17T20:52:18.000Z",
"author": null,
"author_gravatar_url": "https://www.gravatar.com/avatar/6d597df7cf998d16cbe00ccac063b31e?s=80\u0026d=identicon",
"commit_url": "http://localhost:3001/h5bp/html5-boilerplate/commit/bad98c453eab56d20057f3929989251d45cd1a8b",
"commit_path": "/h5bp/html5-boilerplate/commit/bad98c453eab56d20057f3929989251d45cd1a8b"
},
"retry_path": "/h5bp/html5-boilerplate/pipelines/26/retry",
"triggered_by": {
"id": 4,
"user": null,
"active": false,
"coverage": null,
"source": "push",
"path": "/gitlab-org/gitlab-test/pipelines/4",
"details": {
"status": {
"icon": "status_warning",
"text": "passed",
"label": "passed with warnings",
"group": "success_with_warnings",
"tooltip": "passed",
"has_details": true,
"details_path": "/gitlab-org/gitlab-test/pipelines/4",
"illustration": null,
"favicon": "/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png"
}
},
"project": {
"id": 1,
"name": "Gitlab Test",
"full_path": "/gitlab-org/gitlab-test",
"full_name": "Gitlab Org / Gitlab Test"
}
},
"triggered": [],
"project": {
"id": 1794617,
"name": "GitLab Docs",
"full_path": "/gitlab-com/gitlab-docs",
"full_name": "GitLab.com / GitLab Docs"
}
}
]
} }
] ]
} }
import _ from 'underscore';
import CePipelineStore from '~/pipelines/stores/pipeline_store'; import CePipelineStore from '~/pipelines/stores/pipeline_store';
import data from '../mock.json'; import data from '../mock.json';
import Vue from 'vue'; import Vue from 'vue';
...@@ -11,9 +12,9 @@ export default class PipelineStore extends CePipelineStore { ...@@ -11,9 +12,9 @@ export default class PipelineStore extends CePipelineStore {
} }
/** /**
* For the triggered pipelines, parses them to add `isLoading` and `isExpanded` keys * For the triggered pipelines adds the `isExpanded` key
* *
* For the triggered_by pipeline, parsed the object to add `isLoading` and `isExpanded` keys * For the triggered_by pipeline adds the `isExpanded` key
* and saves it as an array * and saves it as an array
* *
* @param {Object} pipeline * @param {Object} pipeline
...@@ -24,13 +25,12 @@ export default class PipelineStore extends CePipelineStore { ...@@ -24,13 +25,12 @@ export default class PipelineStore extends CePipelineStore {
if (pipeline.triggered_by) { if (pipeline.triggered_by) {
this.state.pipeline.triggered_by = [pipeline.triggered_by]; this.state.pipeline.triggered_by = [pipeline.triggered_by];
this.parseTriggeredByPipelines(this.state.pipeline, pipeline.triggered_by);
this.parseTriggeredByPipelines(this.state.pipeline.triggered_by[0]);
} }
if (pipeline.triggered && pipeline.triggered.length) { if (pipeline.triggered && pipeline.triggered.length) {
this.state.triggeredPipelines = pipeline.triggered.map(triggered => this.state.pipeline.triggered.forEach(el => this.parseTriggeredPipelines(el));
this.parseTriggeredPipelines(this.state.pipeline, triggered),
);
} }
} }
...@@ -44,40 +44,51 @@ export default class PipelineStore extends CePipelineStore { ...@@ -44,40 +44,51 @@ export default class PipelineStore extends CePipelineStore {
* @param {Array} parentPipeline * @param {Array} parentPipeline
* @param {Object} pipeline * @param {Object} pipeline
*/ */
parseTriggeredByPipelines(parentPipeline, pipeline) { parseTriggeredByPipelines(pipeline) {
// keep old value in case it's opened because we're polling // keep old value in case it's opened because we're polling
Vue.set(pipeline, 'isExpanded', pipeline.isExpanded || false); Vue.set(pipeline, 'isExpanded', pipeline.isExpanded || false);
if (pipeline.triggered_by) { if (pipeline.triggered_by) {
if (!_.isArray(pipeline.triggered_by)) {
pipeline.triggered_by = [pipeline.triggered_by]; pipeline.triggered_by = [pipeline.triggered_by];
this.parseTriggeredByPipelines(pipeline, pipeline.triggered_by);
} }
this.parseTriggeredByPipelines(pipeline.triggered_by[0]);
}
// if (pipeline.triggered && pipeline.triggered.length) {
// pipeline.triggered.forEach(el => this.parseTriggeredPipelines(el));
// }
} }
parsePipeline(pipeline) {}
/** /**
* Recursively parses the triggered pipelines * Recursively parses the triggered pipelines
* @param {Array} parentPipeline * @param {Array} parentPipeline
* @param {Object} pipeline * @param {Object} pipeline
*/ */
parseTriggeredPipelines(parentPipeline, pipeline) { parseTriggeredPipelines(pipeline) {
// keep old value in case it's opened because we're polling // keep old value in case it's opened because we're polling
Vue.set(pipeline, 'isExpanded', pipeline.isExpanded || false); Vue.set(pipeline, 'isExpanded', pipeline.isExpanded || false);
if (pipeline.triggered && pipeline.triggered.length > 0) { if (pipeline.triggered && pipeline.triggered.length > 0) {
pipeline.triggered.forEach(el => this.parseTriggeredPipelines(el)); pipeline.triggered.forEach(el => this.parseTriggeredPipelines(el));
} }
// if (pipeline.triggered_by) {
// pipeline.triggered_by = [pipeline.triggered_by];
// this.parseTriggeredByPipelines(pipeline.triggered_by[0]);
// }
} }
/** /**
* Recursively resets all triggered by pipelines * Recursively resets all triggered by pipelines
* *
*
* @param {Object} pipeline * @param {Object} pipeline
*/ */
resetTriggeredByPipeline(pipeline) { resetTriggeredByPipeline(parentPipeline, pipeline) {
this.closePipeline(pipeline); parentPipeline.triggered_by.forEach(el => this.closePipeline(el));
if (pipeline.triggered_by && pipeline.triggered_by) { if (pipeline.triggered_by && pipeline.triggered_by) {
this.resetTriggeredByPipeline(pipeline.triggered_by); this.resetTriggeredByPipeline(pipeline, pipeline.triggered_by);
} }
} }
...@@ -85,15 +96,39 @@ export default class PipelineStore extends CePipelineStore { ...@@ -85,15 +96,39 @@ export default class PipelineStore extends CePipelineStore {
* Opens the clicked pipeline and closes all other ones. * Opens the clicked pipeline and closes all other ones.
* @param {Object} pipeline * @param {Object} pipeline
*/ */
openTriggeredByPipeline(pipeline) { openTriggeredByPipeline(parentPipeline, pipeline) {
// first we need to reset all triggeredBy pipelines // first we need to reset all triggeredBy pipelines
this.resetTriggeredByPipeline(pipeline); this.resetTriggeredByPipeline(parentPipeline, pipeline);
this.openPipeline(pipeline); this.openPipeline(pipeline);
} }
/** /**
* Closes the given pipeline * On click, will close the given pipeline and all nested triggered by pipelines
*
* @param {Object} pipeline
*/
closeTriggeredByPipeline(pipeline) {
this.closePipeline(pipeline);
if (pipeline.triggered_by && pipeline.triggered_by.length) {
pipeline.triggered_by.forEach(triggeredBy => this.closeTriggeredByPipeline(triggeredBy));
}
}
/**
* On click, will close the given pipeline and all the nested triggered ones
* @param {Object} pipeline
*/
closeTriggeredPipeline(pipeline) {
this.closePipeline(pipeline);
if (pipeline.triggered && pipeline.triggered.length) {
pipeline.triggered.forEach(triggered => this.closeTriggeredPipeline(triggered));
}
}
/**
* Utility function, Closes the given pipeline
* @param {Object} pipeline * @param {Object} pipeline
*/ */
closePipeline(pipeline) { closePipeline(pipeline) {
...@@ -101,19 +136,20 @@ export default class PipelineStore extends CePipelineStore { ...@@ -101,19 +136,20 @@ export default class PipelineStore extends CePipelineStore {
} }
/** /**
* Closes the given pipeline * Utility function, Opens the given pipeline
* @param {Object} pipeline * @param {Object} pipeline
*/ */
openPipeline(pipeline) { openPipeline(pipeline) {
Vue.set(pipeline, 'isExpanded', true); Vue.set(pipeline, 'isExpanded', true);
} }
/** /**
* Opens the clicked triggered pipeline and closes all other ones. * Opens the clicked triggered pipeline and closes all other ones.
* *
* @param {Object} pipeline * @param {Object} pipeline
*/ */
openTriggeredPipeline(pipeline) { openTriggeredPipeline(parentPipeline, pipeline) {
this.resetTriggeredPipelines(pipeline); this.resetTriggeredPipelines(parentPipeline, pipeline);
this.openPipeline(pipeline); this.openPipeline(pipeline);
} }
...@@ -122,11 +158,11 @@ export default class PipelineStore extends CePipelineStore { ...@@ -122,11 +158,11 @@ export default class PipelineStore extends CePipelineStore {
* *
* @param {Object} pipeline * @param {Object} pipeline
*/ */
resetTriggeredPipelines(pipeline) { resetTriggeredPipelines(parentPipeline, pipeline) {
this.closePipeline(pipeline); parentPipeline.triggered.forEach(el => this.closePipeline(el));
if (pipeline.triggered && pipeline.triggered.length) { if (pipeline.triggered && pipeline.triggered.length) {
pipeline.triggered.forEach(el => this.resetTriggeredPipelines(el)); pipeline.triggered.forEach(el => this.resetTriggeredPipelines(pipeline, el));
} }
} }
} }
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