diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-04-20 18:38:24 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-04-20 18:38:24 +0000 |
commit | 983a0bba5d2a042c4a3bbb22432ec192c7501d82 (patch) | |
tree | b153cd387c14ba23bd5a07514c7c01fddf6a78a0 /spec/frontend/pipelines | |
parent | a2bddee2cdb38673df0e004d5b32d9f77797de64 (diff) | |
download | gitlab-ce-983a0bba5d2a042c4a3bbb22432ec192c7501d82.tar.gz |
Add latest changes from gitlab-org/gitlab@12-10-stable-ee
Diffstat (limited to 'spec/frontend/pipelines')
10 files changed, 4609 insertions, 376 deletions
diff --git a/spec/frontend/pipelines/graph/action_component_spec.js b/spec/frontend/pipelines/graph/action_component_spec.js index 43da6388efa..3c5938cfa1f 100644 --- a/spec/frontend/pipelines/graph/action_component_spec.js +++ b/spec/frontend/pipelines/graph/action_component_spec.js @@ -7,6 +7,7 @@ import ActionComponent from '~/pipelines/components/graph/action_component.vue'; describe('pipeline graph action component', () => { let wrapper; let mock; + const findButton = () => wrapper.find('button'); beforeEach(() => { mock = new MockAdapter(axios); @@ -44,15 +45,15 @@ describe('pipeline graph action component', () => { }); it('should render an svg', () => { - expect(wrapper.find('.ci-action-icon-wrapper')).toBeDefined(); - expect(wrapper.find('svg')).toBeDefined(); + expect(wrapper.find('.ci-action-icon-wrapper').exists()).toBe(true); + expect(wrapper.find('svg').exists()).toBe(true); }); describe('on click', () => { it('emits `pipelineActionRequestComplete` after a successful request', done => { jest.spyOn(wrapper.vm, '$emit'); - wrapper.find('button').trigger('click'); + findButton().trigger('click'); waitForPromises() .then(() => { @@ -63,7 +64,7 @@ describe('pipeline graph action component', () => { }); it('renders a loading icon while waiting for request', done => { - wrapper.find('button').trigger('click'); + findButton().trigger('click'); wrapper.vm.$nextTick(() => { expect(wrapper.find('.js-action-icon-loading').exists()).toBe(true); diff --git a/spec/frontend/pipelines/graph/graph_component_spec.js b/spec/frontend/pipelines/graph/graph_component_spec.js new file mode 100644 index 00000000000..a9b06eab3fa --- /dev/null +++ b/spec/frontend/pipelines/graph/graph_component_spec.js @@ -0,0 +1,305 @@ +import Vue from 'vue'; +import { mount } from '@vue/test-utils'; +import PipelineStore from '~/pipelines/stores/pipeline_store'; +import graphComponent from '~/pipelines/components/graph/graph_component.vue'; +import stageColumnComponent from '~/pipelines/components/graph/stage_column_component.vue'; +import linkedPipelinesColumn from '~/pipelines/components/graph/linked_pipelines_column.vue'; +import graphJSON from './mock_data'; +import linkedPipelineJSON from './linked_pipelines_mock_data'; +import PipelinesMediator from '~/pipelines/pipeline_details_mediator'; + +describe('graph component', () => { + const store = new PipelineStore(); + store.storePipeline(linkedPipelineJSON); + const mediator = new PipelinesMediator({ endpoint: '' }); + + let wrapper; + + afterEach(() => { + wrapper.destroy(); + wrapper = null; + }); + + describe('while is loading', () => { + it('should render a loading icon', () => { + wrapper = mount(graphComponent, { + propsData: { + isLoading: true, + pipeline: {}, + mediator, + }, + }); + + expect(wrapper.find('.gl-spinner').exists()).toBe(true); + }); + }); + + describe('with data', () => { + it('should render the graph', () => { + wrapper = mount(graphComponent, { + propsData: { + isLoading: false, + pipeline: graphJSON, + mediator, + }, + }); + + expect(wrapper.find('.js-pipeline-graph').exists()).toBe(true); + + expect(wrapper.find(stageColumnComponent).classes()).toContain('no-margin'); + + expect( + wrapper + .findAll(stageColumnComponent) + .at(1) + .classes(), + ).toContain('left-margin'); + + expect(wrapper.find('.stage-column:nth-child(2) .build:nth-child(1)').classes()).toContain( + 'left-connector', + ); + + expect(wrapper.find('.loading-icon').exists()).toBe(false); + + expect(wrapper.find('.stage-column-list').exists()).toBe(true); + }); + }); + + describe('when linked pipelines are present', () => { + beforeEach(() => { + wrapper = mount(graphComponent, { + propsData: { + isLoading: false, + pipeline: store.state.pipeline, + mediator, + }, + }); + }); + + describe('rendered output', () => { + it('should include the pipelines graph', () => { + expect(wrapper.find('.js-pipeline-graph').exists()).toBe(true); + }); + + it('should not include the loading icon', () => { + expect(wrapper.find('.fa-spinner').exists()).toBe(false); + }); + + it('should include the stage column list', () => { + expect(wrapper.find(stageColumnComponent).exists()).toBe(true); + }); + + it('should include the no-margin class on the first child if there is only one job', () => { + const firstStageColumnElement = wrapper.find(stageColumnComponent); + + expect(firstStageColumnElement.classes()).toContain('no-margin'); + }); + + it('should include the has-only-one-job class on the first child', () => { + const firstStageColumnElement = wrapper.find('.stage-column-list .stage-column'); + + expect(firstStageColumnElement.classes()).toContain('has-only-one-job'); + }); + + it('should include the left-margin class on the second child', () => { + const firstStageColumnElement = wrapper.find('.stage-column-list .stage-column:last-child'); + + expect(firstStageColumnElement.classes()).toContain('left-margin'); + }); + + it('should include the js-has-linked-pipelines flag', () => { + expect(wrapper.find('.js-has-linked-pipelines').exists()).toBe(true); + }); + }); + + describe('computeds and methods', () => { + describe('capitalizeStageName', () => { + it('it capitalizes the stage name', () => { + expect( + wrapper + .findAll('.stage-column .stage-name') + .at(1) + .text(), + ).toBe('Prebuild'); + }); + }); + + describe('stageConnectorClass', () => { + it('it returns left-margin when there is a triggerer', () => { + expect( + wrapper + .findAll(stageColumnComponent) + .at(1) + .classes(), + ).toContain('left-margin'); + }); + }); + }); + + describe('linked pipelines components', () => { + beforeEach(() => { + wrapper = mount(graphComponent, { + propsData: { + isLoading: false, + pipeline: store.state.pipeline, + mediator, + }, + }); + }); + + it('should render an upstream pipelines column at first position', () => { + expect(wrapper.find(linkedPipelinesColumn).exists()).toBe(true); + expect(wrapper.find('.stage-column .stage-name').text()).toBe('Upstream'); + }); + + it('should render a downstream pipelines column at last position', () => { + const stageColumnNames = wrapper.findAll('.stage-column .stage-name'); + + expect(wrapper.find(linkedPipelinesColumn).exists()).toBe(true); + expect(stageColumnNames.at(stageColumnNames.length - 1).text()).toBe('Downstream'); + }); + + describe('triggered by', () => { + describe('on click', () => { + it('should emit `onClickTriggeredBy` when triggered by linked pipeline is clicked', () => { + const btnWrapper = wrapper.find('.linked-pipeline-content'); + + btnWrapper.trigger('click'); + + btnWrapper.vm.$nextTick(() => { + expect(wrapper.emitted().onClickTriggeredBy).toEqual([ + store.state.pipeline.triggered_by, + ]); + }); + }); + }); + + describe('with expanded pipeline', () => { + it('should render expanded pipeline', done => { + // expand the pipeline + store.state.pipeline.triggered_by[0].isExpanded = true; + + wrapper = mount(graphComponent, { + propsData: { + isLoading: false, + pipeline: store.state.pipeline, + mediator, + }, + }); + + Vue.nextTick() + .then(() => { + expect(wrapper.find('.js-upstream-pipeline-12').exists()).toBe(true); + }) + .then(done) + .catch(done.fail); + }); + }); + }); + + describe('triggered', () => { + describe('on click', () => { + it('should emit `onClickTriggered`', () => { + // We have to mock this method since we do both style change and + // emit and event, not mocking returns an error. + wrapper.setMethods({ + handleClickedDownstream: jest.fn(() => + wrapper.vm.$emit('onClickTriggered', ...store.state.pipeline.triggered), + ), + }); + + const btnWrappers = wrapper.findAll('.linked-pipeline-content'); + const downstreamBtnWrapper = btnWrappers.at(btnWrappers.length - 1); + + downstreamBtnWrapper.trigger('click'); + + downstreamBtnWrapper.vm.$nextTick(() => { + expect(wrapper.emitted().onClickTriggered).toEqual([store.state.pipeline.triggered]); + }); + }); + }); + + describe('with expanded pipeline', () => { + it('should render expanded pipeline', done => { + // expand the pipeline + store.state.pipeline.triggered[0].isExpanded = true; + + wrapper = mount(graphComponent, { + propsData: { + isLoading: false, + pipeline: store.state.pipeline, + mediator, + }, + }); + + Vue.nextTick() + .then(() => { + expect(wrapper.find('.js-downstream-pipeline-34993051')).not.toBeNull(); + }) + .then(done) + .catch(done.fail); + }); + }); + }); + }); + }); + + describe('when linked pipelines are not present', () => { + beforeEach(() => { + const pipeline = Object.assign(linkedPipelineJSON, { triggered: null, triggered_by: null }); + wrapper = mount(graphComponent, { + propsData: { + isLoading: false, + pipeline, + mediator, + }, + }); + }); + + describe('rendered output', () => { + it('should include the first column with a no margin', () => { + const firstColumn = wrapper.find('.stage-column'); + + expect(firstColumn.classes()).toContain('no-margin'); + }); + + it('should not render a linked pipelines column', () => { + expect(wrapper.find('.linked-pipelines-column').exists()).toBe(false); + }); + }); + + describe('stageConnectorClass', () => { + it('it returns no-margin when no triggerer and there is one job', () => { + expect(wrapper.find(stageColumnComponent).classes()).toContain('no-margin'); + }); + + it('it returns left-margin when no triggerer and not the first stage', () => { + expect( + wrapper + .findAll(stageColumnComponent) + .at(1) + .classes(), + ).toContain('left-margin'); + }); + }); + }); + + describe('capitalizeStageName', () => { + it('capitalizes and escapes stage name', () => { + wrapper = mount(graphComponent, { + propsData: { + isLoading: false, + pipeline: graphJSON, + mediator, + }, + }); + + expect( + wrapper + .find('.stage-column:nth-child(2) .stage-name') + .text() + .trim(), + ).toEqual('Deploy <img src=x onerror=alert(document.domain)>'); + }); + }); +}); diff --git a/spec/frontend/pipelines/graph/job_group_dropdown_spec.js b/spec/frontend/pipelines/graph/job_group_dropdown_spec.js new file mode 100644 index 00000000000..b323e1d8a06 --- /dev/null +++ b/spec/frontend/pipelines/graph/job_group_dropdown_spec.js @@ -0,0 +1,84 @@ +import { shallowMount } from '@vue/test-utils'; +import JobGroupDropdown from '~/pipelines/components/graph/job_group_dropdown.vue'; + +describe('job group dropdown component', () => { + const group = { + jobs: [ + { + id: 4256, + name: '<img src=x onerror=alert(document.domain)>', + status: { + icon: 'status_success', + text: 'passed', + label: 'passed', + tooltip: 'passed', + group: 'success', + details_path: '/root/ci-mock/builds/4256', + has_details: true, + action: { + icon: 'retry', + title: 'Retry', + path: '/root/ci-mock/builds/4256/retry', + method: 'post', + }, + }, + }, + { + id: 4299, + name: 'test', + status: { + icon: 'status_success', + text: 'passed', + label: 'passed', + tooltip: 'passed', + group: 'success', + details_path: '/root/ci-mock/builds/4299', + has_details: true, + action: { + icon: 'retry', + title: 'Retry', + path: '/root/ci-mock/builds/4299/retry', + method: 'post', + }, + }, + }, + ], + name: 'rspec:linux', + size: 2, + status: { + icon: 'status_success', + text: 'passed', + label: 'passed', + tooltip: 'passed', + group: 'success', + details_path: '/root/ci-mock/builds/4256', + has_details: true, + action: { + icon: 'retry', + title: 'Retry', + path: '/root/ci-mock/builds/4256/retry', + method: 'post', + }, + }, + }; + + let wrapper; + const findButton = () => wrapper.find('button'); + + afterEach(() => { + wrapper.destroy(); + }); + + beforeEach(() => { + wrapper = shallowMount(JobGroupDropdown, { propsData: { group } }); + }); + + it('renders button with group name and size', () => { + expect(findButton().text()).toContain(group.name); + expect(findButton().text()).toContain(group.size); + }); + + it('renders dropdown with jobs', () => { + expect(wrapper.findAll('.scrollable-menu>ul>li').length).toBe(group.jobs.length); + }); +}); diff --git a/spec/frontend/pipelines/graph/job_item_spec.js b/spec/frontend/pipelines/graph/job_item_spec.js index 0c64d5c9fa8..da777466e3e 100644 --- a/spec/frontend/pipelines/graph/job_item_spec.js +++ b/spec/frontend/pipelines/graph/job_item_spec.js @@ -47,7 +47,7 @@ describe('pipeline graph job item', () => { expect(link.attributes('title')).toEqual(`${mockJob.name} - ${mockJob.status.label}`); - expect(wrapper.find('.js-status-icon-success')).toBeDefined(); + expect(wrapper.find('.ci-status-icon-success').exists()).toBe(true); expect(trimText(wrapper.find('.ci-status-text').text())).toBe(mockJob.name); @@ -73,7 +73,7 @@ describe('pipeline graph job item', () => { }, }); - expect(wrapper.find('.js-status-icon-success')).toBeDefined(); + expect(wrapper.find('.ci-status-icon-success').exists()).toBe(true); expect(wrapper.find('a').exists()).toBe(false); expect(trimText(wrapper.find('.ci-status-text').text())).toEqual(mockJob.name); @@ -84,8 +84,8 @@ describe('pipeline graph job item', () => { it('it should render the action icon', () => { createWrapper({ job: mockJob }); - expect(wrapper.find('a.ci-action-icon-container')).toBeDefined(); - expect(wrapper.find('i.ci-action-icon-wrapper')).toBeDefined(); + expect(wrapper.find('.ci-action-icon-container').exists()).toBe(true); + expect(wrapper.find('.ci-action-icon-wrapper').exists()).toBe(true); }); }); diff --git a/spec/frontend/pipelines/graph/job_name_component_spec.js b/spec/frontend/pipelines/graph/job_name_component_spec.js new file mode 100644 index 00000000000..3574b66403e --- /dev/null +++ b/spec/frontend/pipelines/graph/job_name_component_spec.js @@ -0,0 +1,36 @@ +import { mount } from '@vue/test-utils'; +import ciIcon from '~/vue_shared/components/ci_icon.vue'; + +import jobNameComponent from '~/pipelines/components/graph/job_name_component.vue'; + +describe('job name component', () => { + let wrapper; + + const propsData = { + name: 'foo', + status: { + icon: 'status_success', + group: 'success', + }, + }; + + beforeEach(() => { + wrapper = mount(jobNameComponent, { + propsData, + }); + }); + + it('should render the provided name', () => { + expect( + wrapper + .find('.ci-status-text') + .text() + .trim(), + ).toBe(propsData.name); + }); + + it('should render an icon with the provided status', () => { + expect(wrapper.find(ciIcon).exists()).toBe(true); + expect(wrapper.find('.ci-status-icon-success').exists()).toBe(true); + }); +}); diff --git a/spec/frontend/pipelines/graph/linked_pipeline_spec.js b/spec/frontend/pipelines/graph/linked_pipeline_spec.js index 7f49b21100d..cf78aa3ef71 100644 --- a/spec/frontend/pipelines/graph/linked_pipeline_spec.js +++ b/spec/frontend/pipelines/graph/linked_pipeline_spec.js @@ -1,12 +1,17 @@ import { mount } from '@vue/test-utils'; import LinkedPipelineComponent from '~/pipelines/components/graph/linked_pipeline.vue'; +import CiStatus from '~/vue_shared/components/ci_icon.vue'; import mockData from './linked_pipelines_mock_data'; const mockPipeline = mockData.triggered[0]; +const validTriggeredPipelineId = mockPipeline.project.id; +const invalidTriggeredPipelineId = mockPipeline.project.id + 5; + describe('Linked pipeline', () => { let wrapper; + const findButton = () => wrapper.find('button'); const createWrapper = propsData => { wrapper = mount(LinkedPipelineComponent, { @@ -21,7 +26,7 @@ describe('Linked pipeline', () => { describe('rendered output', () => { const props = { pipeline: mockPipeline, - projectId: 20, + projectId: invalidTriggeredPipelineId, columnTitle: 'Downstream', }; @@ -44,14 +49,13 @@ describe('Linked pipeline', () => { }); it('should render an svg within the status container', () => { - const pipelineStatusElement = wrapper.find('.js-linked-pipeline-status'); + const pipelineStatusElement = wrapper.find(CiStatus); expect(pipelineStatusElement.find('svg').exists()).toBe(true); }); it('should render the pipeline status icon svg', () => { - expect(wrapper.find('.js-ci-status-icon-running').exists()).toBe(true); - expect(wrapper.find('.js-ci-status-icon-running').html()).toContain('<svg'); + expect(wrapper.find('.ci-status-icon-failed svg').exists()).toBe(true); }); it('should have a ci-status child component', () => { @@ -88,7 +92,7 @@ describe('Linked pipeline', () => { describe('parent/child', () => { const downstreamProps = { pipeline: mockPipeline, - projectId: 19, + projectId: validTriggeredPipelineId, columnTitle: 'Downstream', }; @@ -116,7 +120,7 @@ describe('Linked pipeline', () => { describe('when isLoading is true', () => { const props = { pipeline: { ...mockPipeline, isLoading: true }, - projectId: 19, + projectId: invalidTriggeredPipelineId, columnTitle: 'Downstream', }; @@ -132,7 +136,7 @@ describe('Linked pipeline', () => { describe('on click', () => { const props = { pipeline: mockPipeline, - projectId: 19, + projectId: validTriggeredPipelineId, columnTitle: 'Downstream', }; @@ -142,18 +146,18 @@ describe('Linked pipeline', () => { it('emits `pipelineClicked` event', () => { jest.spyOn(wrapper.vm, '$emit'); - wrapper.find('button').trigger('click'); + findButton().trigger('click'); expect(wrapper.emitted().pipelineClicked).toBeTruthy(); }); it('should emit `bv::hide::tooltip` to close the tooltip', () => { jest.spyOn(wrapper.vm.$root, '$emit'); - wrapper.find('button').trigger('click'); + findButton().trigger('click'); expect(wrapper.vm.$root.$emit.mock.calls[0]).toEqual([ 'bv::hide::tooltip', - 'js-linked-pipeline-132', + 'js-linked-pipeline-34993051', ]); }); }); diff --git a/spec/frontend/pipelines/graph/linked_pipelines_column_spec.js b/spec/frontend/pipelines/graph/linked_pipelines_column_spec.js new file mode 100644 index 00000000000..82eaa553d0c --- /dev/null +++ b/spec/frontend/pipelines/graph/linked_pipelines_column_spec.js @@ -0,0 +1,38 @@ +import { shallowMount } from '@vue/test-utils'; +import LinkedPipelinesColumn from '~/pipelines/components/graph/linked_pipelines_column.vue'; +import LinkedPipeline from '~/pipelines/components/graph/linked_pipeline.vue'; +import mockData from './linked_pipelines_mock_data'; + +describe('Linked Pipelines Column', () => { + const propsData = { + columnTitle: 'Upstream', + linkedPipelines: mockData.triggered, + graphPosition: 'right', + projectId: 19, + }; + let wrapper; + + beforeEach(() => { + wrapper = shallowMount(LinkedPipelinesColumn, { propsData }); + }); + + afterEach(() => { + wrapper.destroy(); + }); + + it('renders the pipeline orientation', () => { + const titleElement = wrapper.find('.linked-pipelines-column-title'); + + expect(titleElement.text()).toBe(propsData.columnTitle); + }); + + it('renders the correct number of linked pipelines', () => { + const linkedPipelineElements = wrapper.findAll(LinkedPipeline); + + expect(linkedPipelineElements.length).toBe(propsData.linkedPipelines.length); + }); + + it('renders cross project triangle when column is upstream', () => { + expect(wrapper.find('.cross-project-triangle').exists()).toBe(true); + }); +}); diff --git a/spec/frontend/pipelines/graph/linked_pipelines_mock_data.js b/spec/frontend/pipelines/graph/linked_pipelines_mock_data.js index c9a94b3101f..3e9c0814403 100644 --- a/spec/frontend/pipelines/graph/linked_pipelines_mock_data.js +++ b/spec/frontend/pipelines/graph/linked_pipelines_mock_data.js @@ -1,411 +1,3779 @@ export default { - project: { - id: 19, + 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', }, - triggered_by: { - id: 129, - active: true, - path: '/gitlab-org/gitlab-foss/pipelines/129', - project: { - name: 'GitLabCE', - }, - details: { - status: { - icon: 'status_running', - text: 'running', - label: 'running', - group: 'running', - has_details: true, - details_path: '/gitlab-org/gitlab-foss/pipelines/129', - favicon: - '/assets/ci_favicons/dev/favicon_status_running-c3ad2fc53ea6079c174e5b6c1351ff349e99ec3af5a5622fb77b0fe53ea279c1.ico', - }, - }, - flags: { - latest: false, - triggered: false, - stuck: false, - yaml_errors: false, - retryable: true, - cancelable: true, - }, - ref: { - name: '7-5-stable', - path: '/gitlab-org/gitlab-foss/commits/7-5-stable', - tag: false, - branch: true, - }, - commit: { - id: '23433d4d8b20d7e45c103d0b6048faad38a130ab', - short_id: '23433d4d', - title: 'Version 7.5.0.rc1', - created_at: '2014-11-17T15:44:14.000+01:00', - parent_ids: ['30ac909f30f58d319b42ed1537664483894b18cd'], - message: 'Version 7.5.0.rc1\n', - author_name: 'Jacob Vosmaer', - author_email: 'contact@jacobvosmaer.nl', - authored_date: '2014-11-17T15:44:14.000+01:00', - committer_name: 'Jacob Vosmaer', - committer_email: 'contact@jacobvosmaer.nl', - committed_date: '2014-11-17T15:44:14.000+01:00', - author_gravatar_url: - 'http://www.gravatar.com/avatar/e66d11c0eedf8c07b3b18fca46599807?s=80&d=identicon', - commit_url: - 'http://localhost:3000/gitlab-org/gitlab-foss/commit/23433d4d8b20d7e45c103d0b6048faad38a130ab', - commit_path: '/gitlab-org/gitlab-foss/commit/23433d4d8b20d7e45c103d0b6048faad38a130ab', - }, - retry_path: '/gitlab-org/gitlab-foss/pipelines/129/retry', - cancel_path: '/gitlab-org/gitlab-foss/pipelines/129/cancel', - created_at: '2017-05-24T14:46:20.090Z', - updated_at: '2017-05-24T14:46:29.906Z', + 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, }, - triggered: [ - { - id: 132, - active: true, - path: '/gitlab-org/gitlab-foss/pipelines/132', - project: { - name: 'GitLabCE', - id: 19, - }, - details: { + 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_running', - text: 'running', - label: 'running', - group: 'running', + icon: 'status_success', + text: 'passed', + label: 'passed', + group: 'success', + tooltip: 'passed', has_details: true, - details_path: '/gitlab-org/gitlab-foss/pipelines/132', + details_path: '/gitlab-org/gitlab-runner/pipelines/23211253#prebuild', + illustration: null, favicon: - '/assets/ci_favicons/dev/favicon_status_running-c3ad2fc53ea6079c174e5b6c1351ff349e99ec3af5a5622fb77b0fe53ea279c1.ico', + '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', }, - flags: { - latest: false, - triggered: false, - stuck: false, - yaml_errors: false, - retryable: true, - cancelable: true, - }, - ref: { - name: 'crowd', - path: '/gitlab-org/gitlab-foss/commits/crowd', - tag: false, - branch: true, - }, - commit: { - id: 'b9d58c4cecd06be74c3cc32ccfb522b31544ab2e', - short_id: 'b9d58c4c', - title: 'getting user keys publically through http without any authentication, the github…', - created_at: '2013-10-03T12:50:33.000+05:30', - parent_ids: ['e219cf7246c6a0495e4507deaffeba11e79f13b8'], - message: - 'getting user keys publically through http without any authentication, the github way. E.g: http://github.com/devaroop.keys\n\nchangelog updated to include ssh key retrieval feature update\n', - author_name: 'devaroop', - author_email: 'devaroop123@yahoo.co.in', - authored_date: '2013-10-02T20:39:29.000+05:30', - committer_name: 'devaroop', - committer_email: 'devaroop123@yahoo.co.in', - committed_date: '2013-10-03T12:50:33.000+05:30', - author_gravatar_url: - 'http://www.gravatar.com/avatar/35df4b155ec66a3127d53459941cf8a2?s=80&d=identicon', - commit_url: - 'http://localhost:3000/gitlab-org/gitlab-foss/commit/b9d58c4cecd06be74c3cc32ccfb522b31544ab2e', - commit_path: '/gitlab-org/gitlab-foss/commit/b9d58c4cecd06be74c3cc32ccfb522b31544ab2e', - }, - retry_path: '/gitlab-org/gitlab-foss/pipelines/132/retry', - cancel_path: '/gitlab-org/gitlab-foss/pipelines/132/cancel', - created_at: '2017-05-24T14:46:24.644Z', - updated_at: '2017-05-24T14:48:55.226Z', - }, - { - id: 133, - active: true, - path: '/gitlab-org/gitlab-foss/pipelines/133', - project: { - name: 'GitLabCE', - }, - details: { + { + 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_running', - text: 'running', - label: 'running', - group: 'running', + icon: 'status_success', + text: 'passed', + label: 'passed', + group: 'success', + tooltip: 'passed', has_details: true, - details_path: '/gitlab-org/gitlab-foss/pipelines/133', + details_path: '/gitlab-org/gitlab-runner/pipelines/23211253#test', + illustration: null, favicon: - '/assets/ci_favicons/dev/favicon_status_running-c3ad2fc53ea6079c174e5b6c1351ff349e99ec3af5a5622fb77b0fe53ea279c1.ico', + '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', }, - flags: { - latest: false, - triggered: false, - stuck: false, - yaml_errors: false, - retryable: true, - cancelable: true, - }, - ref: { - name: 'crowd', - path: '/gitlab-org/gitlab-foss/commits/crowd', - tag: false, - branch: true, - }, - commit: { - id: 'b6bd4856a33df3d144be66c4ed1f1396009bb08b', - short_id: 'b6bd4856', - title: 'getting user keys publically through http without any authentication, the github…', - created_at: '2013-10-02T20:39:29.000+05:30', - parent_ids: ['e219cf7246c6a0495e4507deaffeba11e79f13b8'], - message: - 'getting user keys publically through http without any authentication, the github way. E.g: http://github.com/devaroop.keys\n', - author_name: 'devaroop', - author_email: 'devaroop123@yahoo.co.in', - authored_date: '2013-10-02T20:39:29.000+05:30', - committer_name: 'devaroop', - committer_email: 'devaroop123@yahoo.co.in', - committed_date: '2013-10-02T20:39:29.000+05:30', - author_gravatar_url: - 'http://www.gravatar.com/avatar/35df4b155ec66a3127d53459941cf8a2?s=80&d=identicon', - commit_url: - 'http://localhost:3000/gitlab-org/gitlab-foss/commit/b6bd4856a33df3d144be66c4ed1f1396009bb08b', - commit_path: '/gitlab-org/gitlab-foss/commit/b6bd4856a33df3d144be66c4ed1f1396009bb08b', - }, - retry_path: '/gitlab-org/gitlab-foss/pipelines/133/retry', - cancel_path: '/gitlab-org/gitlab-foss/pipelines/133/cancel', - created_at: '2017-05-24T14:46:24.648Z', - updated_at: '2017-05-24T14:48:59.673Z', - }, - { - id: 130, - active: true, - path: '/gitlab-org/gitlab-foss/pipelines/130', - project: { - name: 'GitLabCE', - }, - details: { + { + 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_running', - text: 'running', - label: 'running', - group: 'running', + icon: 'status_skipped', + text: 'skipped', + label: 'skipped', + group: 'skipped', + tooltip: 'skipped', has_details: true, - details_path: '/gitlab-org/gitlab-foss/pipelines/130', + details_path: '/gitlab-org/gitlab-runner/pipelines/23211253#cleanup', + illustration: null, favicon: - '/assets/ci_favicons/dev/favicon_status_running-c3ad2fc53ea6079c174e5b6c1351ff349e99ec3af5a5622fb77b0fe53ea279c1.ico', + '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', }, - flags: { - latest: false, - triggered: false, - stuck: false, - yaml_errors: false, - retryable: true, - cancelable: true, + ], + artifacts: [], + manual_actions: [ + { + name: 'review-docs-cleanup', + path: '/gitlab-org/gitlab-runner/-/jobs/72469034/play', + playable: true, + scheduled: false, }, - ref: { - name: 'crowd', - path: '/gitlab-org/gitlab-foss/commits/crowd', - tag: false, - branch: true, + { + name: 'review-docs-deploy', + path: '/gitlab-org/gitlab-runner/-/jobs/72469032/play', + playable: true, + scheduled: false, }, - commit: { - id: '6d7ced4a2311eeff037c5575cca1868a6d3f586f', - short_id: '6d7ced4a', - title: 'Whitespace fixes to patch', - created_at: '2013-10-08T13:53:22.000-05:00', - parent_ids: ['1875141a963a4238bda29011d8f7105839485253'], - message: 'Whitespace fixes to patch\n', - author_name: 'Dale Hamel', - author_email: 'dale.hamel@srvthe.net', - authored_date: '2013-10-08T13:53:22.000-05:00', - committer_name: 'Dale Hamel', - committer_email: 'dale.hamel@invenia.ca', - committed_date: '2013-10-08T13:53:22.000-05:00', - author_gravatar_url: - 'http://www.gravatar.com/avatar/cd08930e69fa5ad1a669206e7bafe476?s=80&d=identicon', - commit_url: - 'http://localhost:3000/gitlab-org/gitlab-foss/commit/6d7ced4a2311eeff037c5575cca1868a6d3f586f', - commit_path: '/gitlab-org/gitlab-foss/commit/6d7ced4a2311eeff037c5575cca1868a6d3f586f', + ], + 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', + }, + project: { id: 20 }, + triggered_by: { + id: 12, + 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', }, - retry_path: '/gitlab-org/gitlab-foss/pipelines/130/retry', - cancel_path: '/gitlab-org/gitlab-foss/pipelines/130/cancel', - created_at: '2017-05-24T14:46:24.630Z', - updated_at: '2017-05-24T14:49:45.091Z', + 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: '/h5bp/html5-boilerplate/-/jobs/528/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: '/h5bp/html5-boilerplate/-/jobs/528/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: [], }, - { - id: 131, - active: true, - path: '/gitlab-org/gitlab-foss/pipelines/132', - project: { - name: 'GitLabCE', + project: { + id: 20, + name: 'Test', + full_path: '/gitlab-com/gitlab-docs', + full_name: 'GitLab.com / GitLab Docs', + }, + triggered_by: { + id: 349932310342451, + 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_running', - text: 'running', - label: 'running', - group: 'running', + icon: 'status_failed', + text: 'failed', + label: 'failed', + group: 'failed', + tooltip: 'failed', has_details: true, - details_path: '/gitlab-org/gitlab-foss/pipelines/132', + details_path: '/gitlab-com/gitlab-docs/pipelines/34993051', + illustration: null, favicon: - '/assets/ci_favicons/dev/favicon_status_running-c3ad2fc53ea6079c174e5b6c1351ff349e99ec3af5a5622fb77b0fe53ea279c1.ico', + '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: [], }, - flags: { - latest: false, - triggered: false, - stuck: false, - yaml_errors: false, - retryable: true, - cancelable: true, - }, - ref: { - name: 'crowd', - path: '/gitlab-org/gitlab-foss/commits/crowd', - tag: false, - branch: true, - }, - commit: { - id: 'b9d58c4cecd06be74c3cc32ccfb522b31544ab2e', - short_id: 'b9d58c4c', - title: 'getting user keys publically through http without any authentication, the github…', - created_at: '2013-10-03T12:50:33.000+05:30', - parent_ids: ['e219cf7246c6a0495e4507deaffeba11e79f13b8'], - message: - 'getting user keys publically through http without any authentication, the github way. E.g: http://github.com/devaroop.keys\n\nchangelog updated to include ssh key retrieval feature update\n', - author_name: 'devaroop', - author_email: 'devaroop123@yahoo.co.in', - authored_date: '2013-10-02T20:39:29.000+05:30', - committer_name: 'devaroop', - committer_email: 'devaroop123@yahoo.co.in', - committed_date: '2013-10-03T12:50:33.000+05:30', - author_gravatar_url: - 'http://www.gravatar.com/avatar/35df4b155ec66a3127d53459941cf8a2?s=80&d=identicon', - commit_url: - 'http://localhost:3000/gitlab-org/gitlab-foss/commit/b9d58c4cecd06be74c3cc32ccfb522b31544ab2e', - commit_path: '/gitlab-org/gitlab-foss/commit/b9d58c4cecd06be74c3cc32ccfb522b31544ab2e', + project: { + id: 20, + name: 'GitLab Docs', + full_path: '/gitlab-com/gitlab-docs', + full_name: 'GitLab.com / GitLab Docs', }, - retry_path: '/gitlab-org/gitlab-foss/pipelines/132/retry', - cancel_path: '/gitlab-org/gitlab-foss/pipelines/132/cancel', - created_at: '2017-05-24T14:46:24.644Z', - updated_at: '2017-05-24T14:48:55.226Z', }, + triggered: [], + }, + triggered: [ { - id: 134, - active: true, - path: '/gitlab-org/gitlab-foss/pipelines/133', - project: { - name: 'GitLabCE', + 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_running', - text: 'running', - label: 'running', - group: 'running', + icon: 'status_failed', + text: 'failed', + label: 'failed', + group: 'failed', + tooltip: 'failed', has_details: true, - details_path: '/gitlab-org/gitlab-foss/pipelines/133', + details_path: '/gitlab-com/gitlab-docs/pipelines/34993051', + illustration: null, favicon: - '/assets/ci_favicons/dev/favicon_status_running-c3ad2fc53ea6079c174e5b6c1351ff349e99ec3af5a5622fb77b0fe53ea279c1.ico', + '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: '/h5bp/html5-boilerplate/-/jobs/528/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: '/h5bp/html5-boilerplate/-/jobs/528/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: [], }, - flags: { - latest: false, - triggered: false, - stuck: false, - yaml_errors: false, - retryable: true, - cancelable: true, - }, - ref: { - name: 'crowd', - path: '/gitlab-org/gitlab-foss/commits/crowd', - tag: false, - branch: true, - }, - commit: { - id: 'b6bd4856a33df3d144be66c4ed1f1396009bb08b', - short_id: 'b6bd4856', - title: 'getting user keys publically through http without any authentication, the github…', - created_at: '2013-10-02T20:39:29.000+05:30', - parent_ids: ['e219cf7246c6a0495e4507deaffeba11e79f13b8'], - message: - 'getting user keys publically through http without any authentication, the github way. E.g: http://github.com/devaroop.keys\n', - author_name: 'devaroop', - author_email: 'devaroop123@yahoo.co.in', - authored_date: '2013-10-02T20:39:29.000+05:30', - committer_name: 'devaroop', - committer_email: 'devaroop123@yahoo.co.in', - committed_date: '2013-10-02T20:39:29.000+05:30', - author_gravatar_url: - 'http://www.gravatar.com/avatar/35df4b155ec66a3127d53459941cf8a2?s=80&d=identicon', - commit_url: - 'http://localhost:3000/gitlab-org/gitlab-foss/commit/b6bd4856a33df3d144be66c4ed1f1396009bb08b', - commit_path: '/gitlab-org/gitlab-foss/commit/b6bd4856a33df3d144be66c4ed1f1396009bb08b', + project: { + id: 20, + name: 'GitLab Docs', + full_path: '/gitlab-com/gitlab-docs', + full_name: 'GitLab.com / GitLab Docs', }, - retry_path: '/gitlab-org/gitlab-foss/pipelines/133/retry', - cancel_path: '/gitlab-org/gitlab-foss/pipelines/133/cancel', - created_at: '2017-05-24T14:46:24.648Z', - updated_at: '2017-05-24T14:48:59.673Z', }, { - id: 135, - active: true, - path: '/gitlab-org/gitlab-foss/pipelines/130', - project: { - name: 'GitLabCE', + 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_running', - text: 'running', - label: 'running', - group: 'running', + icon: 'status_failed', + text: 'failed', + label: 'failed', + group: 'failed', + tooltip: 'failed', has_details: true, - details_path: '/gitlab-org/gitlab-foss/pipelines/130', + details_path: '/gitlab-com/gitlab-docs/pipelines/34993051', + illustration: null, favicon: - '/assets/ci_favicons/dev/favicon_status_running-c3ad2fc53ea6079c174e5b6c1351ff349e99ec3af5a5622fb77b0fe53ea279c1.ico', + '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: [], }, - flags: { - latest: false, - triggered: false, - stuck: false, - yaml_errors: false, - retryable: true, - cancelable: true, - }, - ref: { - name: 'crowd', - path: '/gitlab-org/gitlab-foss/commits/crowd', - tag: false, - branch: true, - }, - commit: { - id: '6d7ced4a2311eeff037c5575cca1868a6d3f586f', - short_id: '6d7ced4a', - title: 'Whitespace fixes to patch', - created_at: '2013-10-08T13:53:22.000-05:00', - parent_ids: ['1875141a963a4238bda29011d8f7105839485253'], - message: 'Whitespace fixes to patch\n', - author_name: 'Dale Hamel', - author_email: 'dale.hamel@srvthe.net', - authored_date: '2013-10-08T13:53:22.000-05:00', - committer_name: 'Dale Hamel', - committer_email: 'dale.hamel@invenia.ca', - committed_date: '2013-10-08T13:53:22.000-05:00', - author_gravatar_url: - 'http://www.gravatar.com/avatar/cd08930e69fa5ad1a669206e7bafe476?s=80&d=identicon', - commit_url: - 'http://localhost:3000/gitlab-org/gitlab-foss/commit/6d7ced4a2311eeff037c5575cca1868a6d3f586f', - commit_path: '/gitlab-org/gitlab-foss/commit/6d7ced4a2311eeff037c5575cca1868a6d3f586f', + project: { + id: 20, + name: 'GitLab Docs', + full_path: '/gitlab-com/gitlab-docs', + full_name: 'GitLab.com / GitLab Docs', }, - retry_path: '/gitlab-org/gitlab-foss/pipelines/130/retry', - cancel_path: '/gitlab-org/gitlab-foss/pipelines/130/cancel', - created_at: '2017-05-24T14:46:24.630Z', - updated_at: '2017-05-24T14:49:45.091Z', + 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: 20, + name: 'GitLab Docs', + full_path: '/gitlab-com/gitlab-docs', + full_name: 'GitLab.com / GitLab Docs', + }, + }, + ], }, ], }; diff --git a/spec/frontend/pipelines/graph/mock_data.js b/spec/frontend/pipelines/graph/mock_data.js new file mode 100644 index 00000000000..a4a5d78f906 --- /dev/null +++ b/spec/frontend/pipelines/graph/mock_data.js @@ -0,0 +1,261 @@ +export default { + id: 123, + user: { + name: 'Root', + username: 'root', + id: 1, + state: 'active', + avatar_url: null, + web_url: 'http://localhost:3000/root', + }, + active: false, + coverage: null, + path: '/root/ci-mock/pipelines/123', + details: { + status: { + icon: 'status_success', + text: 'passed', + label: 'passed', + group: 'success', + has_details: true, + details_path: '/root/ci-mock/pipelines/123', + favicon: + '/assets/ci_favicons/favicon_status_success-308b4fc054cdd1b68d0865e6cfb7b02e92e3472f201507418f8eddb74ac11a59.png', + }, + duration: 9, + finished_at: '2017-04-19T14:30:27.542Z', + stages: [ + { + name: 'test', + title: 'test: passed', + groups: [ + { + name: 'test', + size: 1, + status: { + icon: 'status_success', + text: 'passed', + label: 'passed', + group: 'success', + has_details: true, + details_path: '/root/ci-mock/builds/4153', + favicon: + '/assets/ci_favicons/favicon_status_success-308b4fc054cdd1b68d0865e6cfb7b02e92e3472f201507418f8eddb74ac11a59.png', + action: { + icon: 'retry', + title: 'Retry', + path: '/root/ci-mock/builds/4153/retry', + method: 'post', + }, + }, + jobs: [ + { + id: 4153, + name: 'test', + build_path: '/root/ci-mock/builds/4153', + retry_path: '/root/ci-mock/builds/4153/retry', + playable: false, + created_at: '2017-04-13T09:25:18.959Z', + updated_at: '2017-04-13T09:25:23.118Z', + status: { + icon: 'status_success', + text: 'passed', + label: 'passed', + group: 'success', + has_details: true, + details_path: '/root/ci-mock/builds/4153', + favicon: + '/assets/ci_favicons/favicon_status_success-308b4fc054cdd1b68d0865e6cfb7b02e92e3472f201507418f8eddb74ac11a59.png', + action: { + icon: 'retry', + title: 'Retry', + path: '/root/ci-mock/builds/4153/retry', + method: 'post', + }, + }, + }, + ], + }, + ], + status: { + icon: 'status_success', + text: 'passed', + label: 'passed', + group: 'success', + has_details: true, + details_path: '/root/ci-mock/pipelines/123#test', + favicon: + '/assets/ci_favicons/favicon_status_success-308b4fc054cdd1b68d0865e6cfb7b02e92e3472f201507418f8eddb74ac11a59.png', + }, + path: '/root/ci-mock/pipelines/123#test', + dropdown_path: '/root/ci-mock/pipelines/123/stage.json?stage=test', + }, + { + name: 'deploy <img src=x onerror=alert(document.domain)>', + title: 'deploy: passed', + groups: [ + { + name: 'deploy to production', + size: 1, + status: { + icon: 'status_success', + text: 'passed', + label: 'passed', + group: 'success', + has_details: true, + details_path: '/root/ci-mock/builds/4166', + favicon: + '/assets/ci_favicons/favicon_status_success-308b4fc054cdd1b68d0865e6cfb7b02e92e3472f201507418f8eddb74ac11a59.png', + action: { + icon: 'retry', + title: 'Retry', + path: '/root/ci-mock/builds/4166/retry', + method: 'post', + }, + }, + jobs: [ + { + id: 4166, + name: 'deploy to production', + build_path: '/root/ci-mock/builds/4166', + retry_path: '/root/ci-mock/builds/4166/retry', + playable: false, + created_at: '2017-04-19T14:29:46.463Z', + updated_at: '2017-04-19T14:30:27.498Z', + status: { + icon: 'status_success', + text: 'passed', + label: 'passed', + group: 'success', + has_details: true, + details_path: '/root/ci-mock/builds/4166', + favicon: + '/assets/ci_favicons/favicon_status_success-308b4fc054cdd1b68d0865e6cfb7b02e92e3472f201507418f8eddb74ac11a59.png', + action: { + icon: 'retry', + title: 'Retry', + path: '/root/ci-mock/builds/4166/retry', + method: 'post', + }, + }, + }, + ], + }, + { + name: 'deploy to staging', + size: 1, + status: { + icon: 'status_success', + text: 'passed', + label: 'passed', + group: 'success', + has_details: true, + details_path: '/root/ci-mock/builds/4159', + favicon: + '/assets/ci_favicons/favicon_status_success-308b4fc054cdd1b68d0865e6cfb7b02e92e3472f201507418f8eddb74ac11a59.png', + action: { + icon: 'retry', + title: 'Retry', + path: '/root/ci-mock/builds/4159/retry', + method: 'post', + }, + }, + jobs: [ + { + id: 4159, + name: 'deploy to staging', + build_path: '/root/ci-mock/builds/4159', + retry_path: '/root/ci-mock/builds/4159/retry', + playable: false, + created_at: '2017-04-18T16:32:08.420Z', + updated_at: '2017-04-18T16:32:12.631Z', + status: { + icon: 'status_success', + text: 'passed', + label: 'passed', + group: 'success', + has_details: true, + details_path: '/root/ci-mock/builds/4159', + favicon: + '/assets/ci_favicons/favicon_status_success-308b4fc054cdd1b68d0865e6cfb7b02e92e3472f201507418f8eddb74ac11a59.png', + action: { + icon: 'retry', + title: 'Retry', + path: '/root/ci-mock/builds/4159/retry', + method: 'post', + }, + }, + }, + ], + }, + ], + status: { + icon: 'status_success', + text: 'passed', + label: 'passed', + group: 'success', + has_details: true, + details_path: '/root/ci-mock/pipelines/123#deploy', + favicon: + '/assets/ci_favicons/favicon_status_success-308b4fc054cdd1b68d0865e6cfb7b02e92e3472f201507418f8eddb74ac11a59.png', + }, + path: '/root/ci-mock/pipelines/123#deploy', + dropdown_path: '/root/ci-mock/pipelines/123/stage.json?stage=deploy', + }, + ], + artifacts: [], + manual_actions: [ + { + name: 'deploy to production', + path: '/root/ci-mock/builds/4166/play', + playable: false, + }, + ], + }, + flags: { + latest: true, + triggered: false, + stuck: false, + yaml_errors: false, + retryable: false, + cancelable: false, + }, + ref: { + name: 'master', + path: '/root/ci-mock/tree/master', + tag: false, + branch: true, + }, + commit: { + id: '798e5f902592192afaba73f4668ae30e56eae492', + short_id: '798e5f90', + title: "Merge branch 'new-branch' into 'master'\r", + created_at: '2017-04-13T10:25:17.000+01:00', + parent_ids: [ + '54d483b1ed156fbbf618886ddf7ab023e24f8738', + 'c8e2d38a6c538822e81c57022a6e3a0cfedebbcc', + ], + message: + "Merge branch 'new-branch' into 'master'\r\n\r\nAdd new file\r\n\r\nSee merge request !1", + author_name: 'Root', + author_email: 'admin@example.com', + authored_date: '2017-04-13T10:25:17.000+01:00', + committer_name: 'Root', + committer_email: 'admin@example.com', + committed_date: '2017-04-13T10:25:17.000+01:00', + author: { + name: 'Root', + username: 'root', + id: 1, + state: 'active', + avatar_url: null, + web_url: 'http://localhost:3000/root', + }, + author_gravatar_url: null, + commit_url: + 'http://localhost:3000/root/ci-mock/commit/798e5f902592192afaba73f4668ae30e56eae492', + commit_path: '/root/ci-mock/commit/798e5f902592192afaba73f4668ae30e56eae492', + }, + created_at: '2017-04-13T09:25:18.881Z', + updated_at: '2017-04-19T14:30:27.561Z', +}; diff --git a/spec/frontend/pipelines/graph/stage_column_component_spec.js b/spec/frontend/pipelines/graph/stage_column_component_spec.js new file mode 100644 index 00000000000..88e56eee1d6 --- /dev/null +++ b/spec/frontend/pipelines/graph/stage_column_component_spec.js @@ -0,0 +1,136 @@ +import { shallowMount } from '@vue/test-utils'; + +import stageColumnComponent from '~/pipelines/components/graph/stage_column_component.vue'; + +describe('stage column component', () => { + const mockJob = { + id: 4250, + name: 'test', + status: { + icon: 'status_success', + text: 'passed', + label: 'passed', + group: 'success', + details_path: '/root/ci-mock/builds/4250', + action: { + icon: 'retry', + title: 'Retry', + path: '/root/ci-mock/builds/4250/retry', + method: 'post', + }, + }, + }; + + let wrapper; + + beforeEach(() => { + const mockGroups = []; + for (let i = 0; i < 3; i += 1) { + const mockedJob = Object.assign({}, mockJob); + mockedJob.id += i; + mockGroups.push(mockedJob); + } + + wrapper = shallowMount(stageColumnComponent, { + propsData: { + title: 'foo', + groups: mockGroups, + hasTriggeredBy: false, + }, + }); + }); + + it('should render provided title', () => { + expect( + wrapper + .find('.stage-name') + .text() + .trim(), + ).toBe('foo'); + }); + + it('should render the provided groups', () => { + expect(wrapper.findAll('.builds-container > ul > li').length).toBe( + wrapper.props('groups').length, + ); + }); + + describe('jobId', () => { + it('escapes job name', () => { + wrapper = shallowMount(stageColumnComponent, { + propsData: { + groups: [ + { + id: 4259, + name: '<img src=x onerror=alert(document.domain)>', + status: { + icon: 'status_success', + label: 'success', + tooltip: '<img src=x onerror=alert(document.domain)>', + }, + }, + ], + title: 'test', + hasTriggeredBy: false, + }, + }); + + expect(wrapper.find('.builds-container li').attributes('id')).toBe( + 'ci-badge-<img src=x onerror=alert(document.domain)>', + ); + }); + }); + + describe('with action', () => { + it('renders action button', () => { + wrapper = shallowMount(stageColumnComponent, { + propsData: { + groups: [ + { + id: 4259, + name: '<img src=x onerror=alert(document.domain)>', + status: { + icon: 'status_success', + label: 'success', + tooltip: '<img src=x onerror=alert(document.domain)>', + }, + }, + ], + title: 'test', + hasTriggeredBy: false, + action: { + icon: 'play', + title: 'Play all', + path: 'action', + }, + }, + }); + + expect(wrapper.find('.js-stage-action').exists()).toBe(true); + }); + }); + + describe('without action', () => { + it('does not render action button', () => { + wrapper = shallowMount(stageColumnComponent, { + propsData: { + groups: [ + { + id: 4259, + name: '<img src=x onerror=alert(document.domain)>', + status: { + icon: 'status_success', + label: 'success', + tooltip: '<img src=x onerror=alert(document.domain)>', + }, + }, + ], + title: 'test', + hasTriggeredBy: false, + }, + }); + + expect(wrapper.find('.js-stage-action').exists()).toBe(false); + }); + }); +}); |