Commit fa558da6 authored by Paul Slaughter's avatar Paul Slaughter

Move job_app_spec to Jest

parent 5f58e402
import Vue from 'vue'; import Vuex from 'vuex';
import { mount, createLocalVue } from '@vue/test-utils';
import MockAdapter from 'axios-mock-adapter'; import MockAdapter from 'axios-mock-adapter';
import { mountComponentWithStore } from 'spec/helpers/vue_mount_component_helper'; import { getJSONFixture } from 'helpers/fixtures';
import { waitForMutation } from 'spec/helpers/vue_test_utils_helper';
import axios from '~/lib/utils/axios_utils'; import axios from '~/lib/utils/axios_utils';
import jobApp from '~/jobs/components/job_app.vue'; import JobApp from '~/jobs/components/job_app.vue';
import createStore from '~/jobs/store'; import createStore from '~/jobs/store';
import * as types from '~/jobs/store/mutation_types';
import job from '../mock_data'; import job from '../mock_data';
describe('Job App ', () => { describe('Job App', () => {
const localVue = createLocalVue();
localVue.use(Vuex);
const delayedJobFixture = getJSONFixture('jobs/delayed.json'); const delayedJobFixture = getJSONFixture('jobs/delayed.json');
const Component = Vue.extend(jobApp);
let store; let store;
let vm; let wrapper;
let mock; let mock;
const initSettings = { const initSettings = {
...@@ -32,16 +34,24 @@ describe('Job App ', () => { ...@@ -32,16 +34,24 @@ describe('Job App ', () => {
subscriptionsMoreMinutesUrl: 'https://customers.gitlab.com/buy_pipeline_minutes', subscriptionsMoreMinutesUrl: 'https://customers.gitlab.com/buy_pipeline_minutes',
}; };
const waitForJobReceived = () => waitForMutation(store, types.RECEIVE_JOB_SUCCESS); const createComponent = () => {
wrapper = mount(JobApp, { propsData: { ...props }, store });
};
const setupAndMount = ({ jobData = {}, traceData = {} } = {}) => { const setupAndMount = ({ jobData = {}, traceData = {} } = {}) => {
mock.onGet(initSettings.endpoint).replyOnce(200, { ...job, ...jobData }); mock.onGet(initSettings.endpoint).replyOnce(200, { ...job, ...jobData });
mock.onGet(`${initSettings.pagePath}/trace.json`).reply(200, traceData); mock.onGet(`${initSettings.pagePath}/trace.json`).reply(200, traceData);
store.dispatch('init', initSettings); const asyncInit = store.dispatch('init', initSettings);
vm = mountComponentWithStore(Component, { props, store }); createComponent();
return waitForJobReceived(); return asyncInit
.then(() => {
jest.runOnlyPendingTimers();
})
.then(() => axios.waitForAll())
.then(() => wrapper.vm.$nextTick());
}; };
beforeEach(() => { beforeEach(() => {
...@@ -50,94 +60,81 @@ describe('Job App ', () => { ...@@ -50,94 +60,81 @@ describe('Job App ', () => {
}); });
afterEach(() => { afterEach(() => {
vm.$destroy(); wrapper.destroy();
mock.restore(); mock.restore();
}); });
describe('while loading', () => { describe('while loading', () => {
beforeEach(() => { beforeEach(() => {
setupAndMount(); store.state.isLoading = true;
createComponent();
}); });
it('renders loading icon', () => { it('renders loading icon', () => {
expect(vm.$el.querySelector('.js-job-loading')).not.toBeNull(); expect(wrapper.find('.js-job-loading').exists()).toBe(true);
expect(vm.$el.querySelector('.js-job-sidebar')).toBeNull(); expect(wrapper.find('.js-job-sidebar').exists()).toBe(false);
expect(vm.$el.querySelector('.js-job-content')).toBeNull(); expect(wrapper.find('.js-job-content').exists()).toBe(false);
}); });
}); });
describe('with successful request', () => { describe('with successful request', () => {
describe('Header section', () => { describe('Header section', () => {
describe('job callout message', () => { describe('job callout message', () => {
it('should not render the reason when reason is absent', done => { it('should not render the reason when reason is absent', () =>
setupAndMount() setupAndMount().then(() => {
.then(() => { expect(wrapper.vm.shouldRenderCalloutMessage).toBe(false);
expect(vm.shouldRenderCalloutMessage).toBe(false); }));
})
.then(done)
.catch(done.fail);
});
it('should render the reason when reason is present', done => { it('should render the reason when reason is present', () =>
setupAndMount({ setupAndMount({
jobData: { jobData: {
callout_message: 'There is an unkown failure, please try again', callout_message: 'There is an unkown failure, please try again',
}, },
}) }).then(() => {
.then(() => { expect(wrapper.vm.shouldRenderCalloutMessage).toBe(true);
expect(vm.shouldRenderCalloutMessage).toBe(true); }));
})
.then(done)
.catch(done.fail);
});
}); });
describe('triggered job', () => { describe('triggered job', () => {
beforeEach(done => { beforeEach(() => {
const aYearAgo = new Date(); const aYearAgo = new Date();
aYearAgo.setFullYear(aYearAgo.getFullYear() - 1); aYearAgo.setFullYear(aYearAgo.getFullYear() - 1);
setupAndMount({ jobData: { started: aYearAgo.toISOString() } }) return setupAndMount({ jobData: { started: aYearAgo.toISOString() } });
.then(done)
.catch(done.fail);
}); });
it('should render provided job information', () => { it('should render provided job information', () => {
expect( expect(
vm.$el wrapper
.querySelector('.header-main-content') .find('.header-main-content')
.textContent.replace(/\s+/g, ' ') .text()
.replace(/\s+/g, ' ')
.trim(), .trim(),
).toContain('passed Job #4757 triggered 1 year ago by Root'); ).toContain('passed Job #4757 triggered 1 year ago by Root');
}); });
it('should render new issue link', () => { it('should render new issue link', () => {
expect(vm.$el.querySelector('.js-new-issue').getAttribute('href')).toEqual( expect(wrapper.find('.js-new-issue').attributes('href')).toEqual(job.new_issue_path);
job.new_issue_path,
);
}); });
}); });
describe('created job', () => { describe('created job', () => {
it('should render created key', done => { it('should render created key', () =>
setupAndMount() setupAndMount().then(() => {
.then(() => { expect(
expect( wrapper
vm.$el .find('.header-main-content')
.querySelector('.header-main-content') .text()
.textContent.replace(/\s+/g, ' ') .replace(/\s+/g, ' ')
.trim(), .trim(),
).toContain('passed Job #4757 created 3 weeks ago by Root'); ).toContain('passed Job #4757 created 3 weeks ago by Root');
}) }));
.then(done)
.catch(done.fail);
});
}); });
}); });
describe('stuck block', () => { describe('stuck block', () => {
describe('without active runners availabl', () => { describe('without active runners availabl', () => {
it('renders stuck block when there are no runners', done => { it('renders stuck block when there are no runners', () =>
setupAndMount({ setupAndMount({
jobData: { jobData: {
status: { status: {
...@@ -154,20 +151,14 @@ describe('Job App ', () => { ...@@ -154,20 +151,14 @@ describe('Job App ', () => {
}, },
tags: [], tags: [],
}, },
}) }).then(() => {
.then(() => { expect(wrapper.find('.js-job-stuck').exists()).toBe(true);
expect(vm.$el.querySelector('.js-job-stuck')).not.toBeNull(); expect(wrapper.find('.js-job-stuck .js-stuck-no-active-runner').exists()).toBe(true);
expect( }));
vm.$el.querySelector('.js-job-stuck .js-stuck-no-active-runner'),
).not.toBeNull();
})
.then(done)
.catch(done.fail);
});
}); });
describe('when available runners can not run specified tag', () => { describe('when available runners can not run specified tag', () => {
it('renders tags in stuck block when there are no runners', done => { it('renders tags in stuck block when there are no runners', () =>
setupAndMount({ setupAndMount({
jobData: { jobData: {
status: { status: {
...@@ -183,18 +174,14 @@ describe('Job App ', () => { ...@@ -183,18 +174,14 @@ describe('Job App ', () => {
online: false, online: false,
}, },
}, },
}) }).then(() => {
.then(() => { expect(wrapper.find('.js-job-stuck').text()).toContain(job.tags[0]);
expect(vm.$el.querySelector('.js-job-stuck').textContent).toContain(job.tags[0]); expect(wrapper.find('.js-job-stuck .js-stuck-with-tags').exists()).toBe(true);
expect(vm.$el.querySelector('.js-job-stuck .js-stuck-with-tags')).not.toBeNull(); }));
})
.then(done)
.catch(done.fail);
});
}); });
describe('when runners are offline and build has tags', () => { describe('when runners are offline and build has tags', () => {
it('renders message about job being stuck because of no runners with the specified tags', done => { it('renders message about job being stuck because of no runners with the specified tags', () =>
setupAndMount({ setupAndMount({
jobData: { jobData: {
status: { status: {
...@@ -210,32 +197,24 @@ describe('Job App ', () => { ...@@ -210,32 +197,24 @@ describe('Job App ', () => {
online: true, online: true,
}, },
}, },
}) }).then(() => {
.then(() => { expect(wrapper.find('.js-job-stuck').text()).toContain(job.tags[0]);
expect(vm.$el.querySelector('.js-job-stuck').textContent).toContain(job.tags[0]); expect(wrapper.find('.js-job-stuck .js-stuck-with-tags').exists()).toBe(true);
expect(vm.$el.querySelector('.js-job-stuck .js-stuck-with-tags')).not.toBeNull(); }));
})
.then(done)
.catch(done.fail);
});
}); });
it('does not renders stuck block when there are no runners', done => { it('does not renders stuck block when there are no runners', () =>
setupAndMount({ setupAndMount({
jobData: { jobData: {
runners: { available: true }, runners: { available: true },
}, },
}) }).then(() => {
.then(() => { expect(wrapper.find('.js-job-stuck').exists()).toBe(false);
expect(vm.$el.querySelector('.js-job-stuck')).toBeNull(); }));
})
.then(done)
.catch(done.fail);
});
}); });
describe('unmet prerequisites block', () => { describe('unmet prerequisites block', () => {
it('renders unmet prerequisites block when there is an unmet prerequisites failure', done => { it('renders unmet prerequisites block when there is an unmet prerequisites failure', () =>
setupAndMount({ setupAndMount({
jobData: { jobData: {
status: { status: {
...@@ -258,17 +237,13 @@ describe('Job App ', () => { ...@@ -258,17 +237,13 @@ describe('Job App ', () => {
}, },
tags: [], tags: [],
}, },
}) }).then(() => {
.then(() => { expect(wrapper.find('.js-job-failed').exists()).toBe(true);
expect(vm.$el.querySelector('.js-job-failed')).not.toBeNull(); }));
})
.then(done)
.catch(done.fail);
});
}); });
describe('environments block', () => { describe('environments block', () => {
it('renders environment block when job has environment', done => { it('renders environment block when job has environment', () =>
setupAndMount({ setupAndMount({
jobData: { jobData: {
deployment_status: { deployment_status: {
...@@ -278,26 +253,18 @@ describe('Job App ', () => { ...@@ -278,26 +253,18 @@ describe('Job App ', () => {
}, },
}, },
}, },
}) }).then(() => {
.then(() => { expect(wrapper.find('.js-job-environment').exists()).toBe(true);
expect(vm.$el.querySelector('.js-job-environment')).not.toBeNull(); }));
})
.then(done) it('does not render environment block when job has environment', () =>
.catch(done.fail); setupAndMount().then(() => {
}); expect(wrapper.find('.js-job-environment').exists()).toBe(false);
}));
it('does not render environment block when job has environment', done => {
setupAndMount()
.then(() => {
expect(vm.$el.querySelector('.js-job-environment')).toBeNull();
})
.then(done)
.catch(done.fail);
});
}); });
describe('erased block', () => { describe('erased block', () => {
it('renders erased block when `erased` is true', done => { it('renders erased block when `erased` is true', () =>
setupAndMount({ setupAndMount({
jobData: { jobData: {
erased_by: { erased_by: {
...@@ -306,30 +273,22 @@ describe('Job App ', () => { ...@@ -306,30 +273,22 @@ describe('Job App ', () => {
}, },
erased_at: '2016-11-07T11:11:16.525Z', erased_at: '2016-11-07T11:11:16.525Z',
}, },
}) }).then(() => {
.then(() => { expect(wrapper.find('.js-job-erased-block').exists()).toBe(true);
expect(vm.$el.querySelector('.js-job-erased-block')).not.toBeNull(); }));
})
.then(done)
.catch(done.fail);
});
it('does not render erased block when `erased` is false', done => { it('does not render erased block when `erased` is false', () =>
setupAndMount({ setupAndMount({
jobData: { jobData: {
erased_at: null, erased_at: null,
}, },
}) }).then(() => {
.then(() => { expect(wrapper.find('.js-job-erased-block').exists()).toBe(false);
expect(vm.$el.querySelector('.js-job-erased-block')).toBeNull(); }));
})
.then(done)
.catch(done.fail);
});
}); });
describe('empty states block', () => { describe('empty states block', () => {
it('renders empty state when job does not have trace and is not running', done => { it('renders empty state when job does not have trace and is not running', () =>
setupAndMount({ setupAndMount({
jobData: { jobData: {
has_trace: false, has_trace: false,
...@@ -352,15 +311,11 @@ describe('Job App ', () => { ...@@ -352,15 +311,11 @@ describe('Job App ', () => {
}, },
}, },
}, },
}) }).then(() => {
.then(() => { expect(wrapper.find('.js-job-empty-state').exists()).toBe(true);
expect(vm.$el.querySelector('.js-job-empty-state')).not.toBeNull(); }));
})
.then(done)
.catch(done.fail);
});
it('does not render empty state when job does not have trace but it is running', done => { it('does not render empty state when job does not have trace but it is running', () =>
setupAndMount({ setupAndMount({
jobData: { jobData: {
has_trace: false, has_trace: false,
...@@ -372,38 +327,29 @@ describe('Job App ', () => { ...@@ -372,38 +327,29 @@ describe('Job App ', () => {
details_path: 'path', details_path: 'path',
}, },
}, },
}) }).then(() => {
.then(() => { expect(wrapper.find('.js-job-empty-state').exists()).toBe(false);
expect(vm.$el.querySelector('.js-job-empty-state')).toBeNull(); }));
})
.then(done)
.catch(done.fail);
});
it('does not render empty state when job has trace but it is not running', done => { it('does not render empty state when job has trace but it is not running', () =>
setupAndMount({ jobData: { has_trace: true } }) setupAndMount({ jobData: { has_trace: true } }).then(() => {
.then(() => { expect(wrapper.find('.js-job-empty-state').exists()).toBe(false);
expect(vm.$el.querySelector('.js-job-empty-state')).toBeNull(); }));
})
.then(done)
.catch(done.fail);
});
it('displays remaining time for a delayed job', done => { it('displays remaining time for a delayed job', () => {
const oneHourInMilliseconds = 3600000; const oneHourInMilliseconds = 3600000;
spyOn(Date, 'now').and.callFake( jest
() => new Date(delayedJobFixture.scheduled_at).getTime() - oneHourInMilliseconds, .spyOn(Date, 'now')
); .mockImplementation(
setupAndMount({ jobData: delayedJobFixture }) () => new Date(delayedJobFixture.scheduled_at).getTime() - oneHourInMilliseconds,
.then(() => { );
expect(vm.$el.querySelector('.js-job-empty-state')).not.toBeNull(); return setupAndMount({ jobData: delayedJobFixture }).then(() => {
expect(wrapper.find('.js-job-empty-state').exists()).toBe(true);
const title = vm.$el.querySelector('.js-job-empty-state-title'); const title = wrapper.find('.js-job-empty-state-title').text();
expect(title).toContainText('01:00:00'); expect(title).toEqual('This is a delayed job to run in 01:00:00');
}) });
.then(done)
.catch(done.fail);
}); });
}); });
...@@ -422,8 +368,11 @@ describe('Job App ', () => { ...@@ -422,8 +368,11 @@ describe('Job App ', () => {
}, },
}) })
.then(() => { .then(() => {
vm.$el.querySelectorAll('.blocks-container > *').forEach(block => { const blocks = wrapper.findAll('.blocks-container > *').wrappers;
expect(block.textContent.trim()).not.toBe(''); expect(blocks.length).toBeGreaterThan(0);
blocks.forEach(block => {
expect(block.text().trim()).not.toBe('');
}); });
}) })
.then(done) .then(done)
...@@ -433,32 +382,24 @@ describe('Job App ', () => { ...@@ -433,32 +382,24 @@ describe('Job App ', () => {
}); });
describe('archived job', () => { describe('archived job', () => {
beforeEach(done => { beforeEach(() => setupAndMount({ jobData: { archived: true } }));
setupAndMount({ jobData: { archived: true } })
.then(done)
.catch(done.fail);
});
it('renders warning about job being archived', () => { it('renders warning about job being archived', () => {
expect(vm.$el.querySelector('.js-archived-job ')).not.toBeNull(); expect(wrapper.find('.js-archived-job ').exists()).toBe(true);
}); });
}); });
describe('non-archived job', () => { describe('non-archived job', () => {
beforeEach(done => { beforeEach(() => setupAndMount());
setupAndMount()
.then(done)
.catch(done.fail);
});
it('does not warning about job being archived', () => { it('does not warning about job being archived', () => {
expect(vm.$el.querySelector('.js-archived-job ')).toBeNull(); expect(wrapper.find('.js-archived-job ').exists()).toBe(false);
}); });
}); });
describe('trace output', () => { describe('trace output', () => {
describe('with append flag', () => { describe('with append flag', () => {
it('appends the log content to the existing one', done => { it('appends the log content to the existing one', () =>
setupAndMount({ setupAndMount({
traceData: { traceData: {
html: '<span>More<span>', html: '<span>More<span>',
...@@ -469,20 +410,22 @@ describe('Job App ', () => { ...@@ -469,20 +410,22 @@ describe('Job App ', () => {
}, },
}) })
.then(() => { .then(() => {
vm.$store.state.trace = 'Update'; store.state.trace = 'Update';
return vm.$nextTick(); return wrapper.vm.$nextTick();
}) })
.then(() => { .then(() => {
expect(vm.$el.querySelector('.js-build-trace').textContent.trim()).toContain('Update'); expect(
}) wrapper
.then(done) .find('.js-build-trace')
.catch(done.fail); .text()
}); .trim(),
).toEqual('Update');
}));
}); });
describe('without append flag', () => { describe('without append flag', () => {
it('replaces the trace', done => { it('replaces the trace', () =>
setupAndMount({ setupAndMount({
traceData: { traceData: {
html: '<span>Different<span>', html: '<span>Different<span>',
...@@ -490,24 +433,19 @@ describe('Job App ', () => { ...@@ -490,24 +433,19 @@ describe('Job App ', () => {
append: false, append: false,
complete: true, complete: true,
}, },
}) }).then(() => {
.then(() => { expect(
expect(vm.$el.querySelector('.js-build-trace').textContent.trim()).not.toContain( wrapper
'Update', .find('.js-build-trace')
); .text()
.trim(),
expect(vm.$el.querySelector('.js-build-trace').textContent.trim()).toContain( ).toEqual('Different');
'Different', }));
);
})
.then(done)
.catch(done.fail);
});
}); });
describe('truncated information', () => { describe('truncated information', () => {
describe('when size is less than total', () => { describe('when size is less than total', () => {
it('shows information about truncated log', done => { it('shows information about truncated log', () => {
mock.onGet(`${props.pagePath}/trace.json`).reply(200, { mock.onGet(`${props.pagePath}/trace.json`).reply(200, {
html: '<span>Update</span>', html: '<span>Update</span>',
status: 'success', status: 'success',
...@@ -517,7 +455,7 @@ describe('Job App ', () => { ...@@ -517,7 +455,7 @@ describe('Job App ', () => {
complete: true, complete: true,
}); });
setupAndMount({ return setupAndMount({
traceData: { traceData: {
html: '<span>Update</span>', html: '<span>Update</span>',
status: 'success', status: 'success',
...@@ -526,19 +464,19 @@ describe('Job App ', () => { ...@@ -526,19 +464,19 @@ describe('Job App ', () => {
total: 100, total: 100,
complete: true, complete: true,
}, },
}) }).then(() => {
.then(() => { expect(
expect(vm.$el.querySelector('.js-truncated-info').textContent.trim()).toContain( wrapper
'50 bytes', .find('.js-truncated-info')
); .text()
}) .trim(),
.then(done) ).toContain('Showing last 50 bytes');
.catch(done.fail); });
}); });
}); });
describe('when size is equal than total', () => { describe('when size is equal than total', () => {
it('does not show the truncated information', done => { it('does not show the truncated information', () =>
setupAndMount({ setupAndMount({
traceData: { traceData: {
html: '<span>Update</span>', html: '<span>Update</span>',
...@@ -548,20 +486,19 @@ describe('Job App ', () => { ...@@ -548,20 +486,19 @@ describe('Job App ', () => {
total: 100, total: 100,
complete: true, complete: true,
}, },
}) }).then(() => {
.then(() => { expect(
expect(vm.$el.querySelector('.js-truncated-info').textContent.trim()).not.toContain( wrapper
'50 bytes', .find('.js-truncated-info')
); .text()
}) .trim(),
.then(done) ).toEqual('');
.catch(done.fail); }));
});
}); });
}); });
describe('trace controls', () => { describe('trace controls', () => {
beforeEach(done => { beforeEach(() =>
setupAndMount({ setupAndMount({
traceData: { traceData: {
html: '<span>Update</span>', html: '<span>Update</span>',
...@@ -571,22 +508,20 @@ describe('Job App ', () => { ...@@ -571,22 +508,20 @@ describe('Job App ', () => {
total: 100, total: 100,
complete: true, complete: true,
}, },
}) }),
.then(done) );
.catch(done.fail);
});
it('should render scroll buttons', () => { it('should render scroll buttons', () => {
expect(vm.$el.querySelector('.js-scroll-top')).not.toBeNull(); expect(wrapper.find('.js-scroll-top').exists()).toBe(true);
expect(vm.$el.querySelector('.js-scroll-bottom')).not.toBeNull(); expect(wrapper.find('.js-scroll-bottom').exists()).toBe(true);
}); });
it('should render link to raw ouput', () => { it('should render link to raw ouput', () => {
expect(vm.$el.querySelector('.js-raw-link-controller')).not.toBeNull(); expect(wrapper.find('.js-raw-link-controller').exists()).toBe(true);
}); });
it('should render link to erase job', () => { it('should render link to erase job', () => {
expect(vm.$el.querySelector('.js-erase-link')).not.toBeNull(); expect(wrapper.find('.js-erase-link').exists()).toBe(true);
}); });
}); });
}); });
......
import { TEST_HOST } from 'spec/test_constants';
const threeWeeksAgo = new Date();
threeWeeksAgo.setDate(threeWeeksAgo.getDate() - 21);
export const stages = [
{
name: 'build',
title: 'build: running',
groups: [
{
name: 'build:linux',
size: 1,
status: {
icon: 'status_pending',
text: 'pending',
label: 'pending',
group: 'pending',
tooltip: 'pending',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/1180',
illustration: {
image: 'illustrations/pending_job_empty.svg',
size: 'svg-430',
title: 'This job has not started yet',
content: 'This job is in pending state and is waiting to be picked by a runner',
},
favicon:
'/assets/ci_favicons/favicon_status_pending-5bdf338420e5221ca24353b6bff1c9367189588750632e9a871b7af09ff6a2ae.png',
action: {
icon: 'cancel',
title: 'Cancel',
path: '/gitlab-org/gitlab-shell/-/jobs/1180/cancel',
method: 'post',
},
},
jobs: [
{
id: 1180,
name: 'build:linux',
started: false,
build_path: '/gitlab-org/gitlab-shell/-/jobs/1180',
cancel_path: '/gitlab-org/gitlab-shell/-/jobs/1180/cancel',
playable: false,
created_at: '2018-09-28T11:09:57.229Z',
updated_at: '2018-09-28T11:09:57.503Z',
status: {
icon: 'status_pending',
text: 'pending',
label: 'pending',
group: 'pending',
tooltip: 'pending',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/1180',
illustration: {
image: 'illustrations/pending_job_empty.svg',
size: 'svg-430',
title: 'This job has not started yet',
content: 'This job is in pending state and is waiting to be picked by a runner',
},
favicon:
'/assets/ci_favicons/favicon_status_pending-5bdf338420e5221ca24353b6bff1c9367189588750632e9a871b7af09ff6a2ae.png',
action: {
icon: 'cancel',
title: 'Cancel',
path: '/gitlab-org/gitlab-shell/-/jobs/1180/cancel',
method: 'post',
},
},
},
],
},
{
name: 'build:osx',
size: 1,
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/444',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/444/retry',
method: 'post',
},
},
jobs: [
{
id: 444,
name: 'build:osx',
started: '2018-05-18T05:32:20.655Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/444',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/444/retry',
playable: false,
created_at: '2018-05-18T15:32:54.364Z',
updated_at: '2018-05-18T15:32:54.364Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/444',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/444/retry',
method: 'post',
},
},
},
],
},
],
status: {
icon: 'status_running',
text: 'running',
label: 'running',
group: 'running',
tooltip: 'running',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/pipelines/27#build',
illustration: null,
favicon:
'/assets/ci_favicons/favicon_status_running-9c635b2419a8e1ec991c993061b89cc5aefc0743bb238ecd0c381e7741a70e8c.png',
},
path: '/gitlab-org/gitlab-shell/pipelines/27#build',
dropdown_path: '/gitlab-org/gitlab-shell/pipelines/27/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: 459,
name: 'jenkins',
started: '2018-05-18T09:32:20.658Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/459',
playable: false,
created_at: '2018-05-18T15:32:55.330Z',
updated_at: '2018-05-18T15:32:55.330Z',
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: 445,
name: 'rspec:linux 0 3',
started: '2018-05-18T07:32:20.655Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/445',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/445/retry',
playable: false,
created_at: '2018-05-18T15:32:54.425Z',
updated_at: '2018-05-18T15:32:54.425Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/445',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/445/retry',
method: 'post',
},
},
},
{
id: 446,
name: 'rspec:linux 1 3',
started: '2018-05-18T07:32:20.655Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/446',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/446/retry',
playable: false,
created_at: '2018-05-18T15:32:54.506Z',
updated_at: '2018-05-18T15:32:54.506Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/446',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/446/retry',
method: 'post',
},
},
},
{
id: 447,
name: 'rspec:linux 2 3',
started: '2018-05-18T07:32:20.656Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/447',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/447/retry',
playable: false,
created_at: '2018-05-18T15:32:54.572Z',
updated_at: '2018-05-18T15:32:54.572Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/447',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/447/retry',
method: 'post',
},
},
},
],
},
{
name: 'rspec:osx',
size: 1,
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/452',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/452/retry',
method: 'post',
},
},
jobs: [
{
id: 452,
name: 'rspec:osx',
started: '2018-05-18T07:32:20.657Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/452',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/452/retry',
playable: false,
created_at: '2018-05-18T15:32:54.920Z',
updated_at: '2018-05-18T15:32:54.920Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/452',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/452/retry',
method: 'post',
},
},
},
],
},
{
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: 448,
name: 'rspec:windows 0 3',
started: '2018-05-18T07:32:20.656Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/448',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/448/retry',
playable: false,
created_at: '2018-05-18T15:32:54.639Z',
updated_at: '2018-05-18T15:32:54.639Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/448',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/448/retry',
method: 'post',
},
},
},
{
id: 449,
name: 'rspec:windows 1 3',
started: '2018-05-18T07:32:20.656Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/449',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/449/retry',
playable: false,
created_at: '2018-05-18T15:32:54.703Z',
updated_at: '2018-05-18T15:32:54.703Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/449',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/449/retry',
method: 'post',
},
},
},
{
id: 451,
name: 'rspec:windows 2 3',
started: '2018-05-18T07:32:20.657Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/451',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/451/retry',
playable: false,
created_at: '2018-05-18T15:32:54.853Z',
updated_at: '2018-05-18T15:32:54.853Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/451',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/451/retry',
method: 'post',
},
},
},
],
},
{
name: 'spinach:linux',
size: 1,
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/453',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/453/retry',
method: 'post',
},
},
jobs: [
{
id: 453,
name: 'spinach:linux',
started: '2018-05-18T07:32:20.657Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/453',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/453/retry',
playable: false,
created_at: '2018-05-18T15:32:54.993Z',
updated_at: '2018-05-18T15:32:54.993Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/453',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/453/retry',
method: 'post',
},
},
},
],
},
{
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: '/gitlab-org/gitlab-shell/-/jobs/454',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/454/retry',
method: 'post',
},
},
jobs: [
{
id: 454,
name: 'spinach:osx',
started: '2018-05-18T07:32:20.657Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/454',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/454/retry',
playable: false,
created_at: '2018-05-18T15:32:55.053Z',
updated_at: '2018-05-18T15:32:55.053Z',
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: '/gitlab-org/gitlab-shell/-/jobs/454',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/454/retry',
method: 'post',
},
},
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: '/gitlab-org/gitlab-shell/pipelines/27#test',
illustration: null,
favicon:
'/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png',
},
path: '/gitlab-org/gitlab-shell/pipelines/27#test',
dropdown_path: '/gitlab-org/gitlab-shell/pipelines/27/stage.json?stage=test',
},
{
name: 'deploy',
title: 'deploy: running',
groups: [
{
name: 'production',
size: 1,
status: {
icon: 'status_created',
text: 'created',
label: 'created',
group: 'created',
tooltip: 'created',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/457',
illustration: {
image: 'illustrations/job_not_triggered.svg',
size: 'svg-306',
title: 'This job has not been triggered yet',
content:
'This job depends on upstream jobs that need to succeed in order for this job to be triggered',
},
favicon:
'/assets/ci_favicons/favicon_status_created-4b975aa976d24e5a3ea7cd9a5713e6ce2cd9afd08b910415e96675de35f64955.png',
action: {
icon: 'cancel',
title: 'Cancel',
path: '/gitlab-org/gitlab-shell/-/jobs/457/cancel',
method: 'post',
},
},
jobs: [
{
id: 457,
name: 'production',
started: false,
build_path: '/gitlab-org/gitlab-shell/-/jobs/457',
cancel_path: '/gitlab-org/gitlab-shell/-/jobs/457/cancel',
playable: false,
created_at: '2018-05-18T15:32:55.259Z',
updated_at: '2018-09-28T11:09:57.454Z',
status: {
icon: 'status_created',
text: 'created',
label: 'created',
group: 'created',
tooltip: 'created',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/457',
illustration: {
image: 'illustrations/job_not_triggered.svg',
size: 'svg-306',
title: 'This job has not been triggered yet',
content:
'This job depends on upstream jobs that need to succeed in order for this job to be triggered',
},
favicon:
'/assets/ci_favicons/favicon_status_created-4b975aa976d24e5a3ea7cd9a5713e6ce2cd9afd08b910415e96675de35f64955.png',
action: {
icon: 'cancel',
title: 'Cancel',
path: '/gitlab-org/gitlab-shell/-/jobs/457/cancel',
method: 'post',
},
},
},
],
},
{
name: 'staging',
size: 1,
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/455',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/455/retry',
method: 'post',
},
},
jobs: [
{
id: 455,
name: 'staging',
started: '2018-05-18T09:32:20.658Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/455',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/455/retry',
playable: false,
created_at: '2018-05-18T15:32:55.119Z',
updated_at: '2018-05-18T15:32:55.119Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/455',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/455/retry',
method: 'post',
},
},
},
],
},
{
name: 'stop staging',
size: 1,
status: {
icon: 'status_created',
text: 'created',
label: 'created',
group: 'created',
tooltip: 'created',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/456',
illustration: {
image: 'illustrations/job_not_triggered.svg',
size: 'svg-306',
title: 'This job has not been triggered yet',
content:
'This job depends on upstream jobs that need to succeed in order for this job to be triggered',
},
favicon:
'/assets/ci_favicons/favicon_status_created-4b975aa976d24e5a3ea7cd9a5713e6ce2cd9afd08b910415e96675de35f64955.png',
action: {
icon: 'cancel',
title: 'Cancel',
path: '/gitlab-org/gitlab-shell/-/jobs/456/cancel',
method: 'post',
},
},
jobs: [
{
id: 456,
name: 'stop staging',
started: false,
build_path: '/gitlab-org/gitlab-shell/-/jobs/456',
cancel_path: '/gitlab-org/gitlab-shell/-/jobs/456/cancel',
playable: false,
created_at: '2018-05-18T15:32:55.205Z',
updated_at: '2018-09-28T11:09:57.396Z',
status: {
icon: 'status_created',
text: 'created',
label: 'created',
group: 'created',
tooltip: 'created',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/456',
illustration: {
image: 'illustrations/job_not_triggered.svg',
size: 'svg-306',
title: 'This job has not been triggered yet',
content:
'This job depends on upstream jobs that need to succeed in order for this job to be triggered',
},
favicon:
'/assets/ci_favicons/favicon_status_created-4b975aa976d24e5a3ea7cd9a5713e6ce2cd9afd08b910415e96675de35f64955.png',
action: {
icon: 'cancel',
title: 'Cancel',
path: '/gitlab-org/gitlab-shell/-/jobs/456/cancel',
method: 'post',
},
},
},
],
},
],
status: {
icon: 'status_running',
text: 'running',
label: 'running',
group: 'running',
tooltip: 'running',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/pipelines/27#deploy',
illustration: null,
favicon:
'/assets/ci_favicons/favicon_status_running-9c635b2419a8e1ec991c993061b89cc5aefc0743bb238ecd0c381e7741a70e8c.png',
},
path: '/gitlab-org/gitlab-shell/pipelines/27#deploy',
dropdown_path: '/gitlab-org/gitlab-shell/pipelines/27/stage.json?stage=deploy',
},
{
name: 'notify',
title: 'notify: manual action',
groups: [
{
name: 'slack',
size: 1,
status: {
icon: 'status_manual',
text: 'manual',
label: 'manual play action',
group: 'manual',
tooltip: 'manual action',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/458',
illustration: {
image: 'illustrations/manual_action.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_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png',
action: {
icon: 'play',
title: 'Play',
path: '/gitlab-org/gitlab-shell/-/jobs/458/play',
method: 'post',
},
},
jobs: [
{
id: 458,
name: 'slack',
started: null,
build_path: '/gitlab-org/gitlab-shell/-/jobs/458',
play_path: '/gitlab-org/gitlab-shell/-/jobs/458/play',
playable: true,
created_at: '2018-05-18T15:32:55.303Z',
updated_at: '2018-05-18T15:34:08.535Z',
status: {
icon: 'status_manual',
text: 'manual',
label: 'manual play action',
group: 'manual',
tooltip: 'manual action',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/458',
illustration: {
image: 'illustrations/manual_action.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_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png',
action: {
icon: 'play',
title: 'Play',
path: '/gitlab-org/gitlab-shell/-/jobs/458/play',
method: 'post',
},
},
},
],
},
],
status: {
icon: 'status_manual',
text: 'manual',
label: 'manual action',
group: 'manual',
tooltip: 'manual action',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/pipelines/27#notify',
illustration: null,
favicon:
'/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png',
},
path: '/gitlab-org/gitlab-shell/pipelines/27#notify',
dropdown_path: '/gitlab-org/gitlab-shell/pipelines/27/stage.json?stage=notify',
},
];
export default {
id: 4757,
name: 'test',
build_path: '/root/ci-mock/-/jobs/4757',
retry_path: '/root/ci-mock/-/jobs/4757/retry',
cancel_path: '/root/ci-mock/-/jobs/4757/cancel',
new_issue_path: '/root/ci-mock/issues/new',
playable: false,
created_at: threeWeeksAgo.toISOString(),
updated_at: threeWeeksAgo.toISOString(),
finished_at: threeWeeksAgo.toISOString(),
queued: 9.54,
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
has_details: true,
details_path: `${TEST_HOST}/root/ci-mock/-/jobs/4757`,
favicon:
'/assets/ci_favicons/favicon_status_success-308b4fc054cdd1b68d0865e6cfb7b02e92e3472f201507418f8eddb74ac11a59.png',
action: {
icon: 'retry',
title: 'Retry',
path: '/root/ci-mock/-/jobs/4757/retry',
method: 'post',
},
},
coverage: 20,
erased_at: threeWeeksAgo.toISOString(),
erased: false,
duration: 6.785563,
tags: ['tag'],
user: {
name: 'Root',
username: 'root',
id: 1,
state: 'active',
avatar_url:
'https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon',
web_url: 'http://localhost:3000/root',
},
erase_path: '/root/ci-mock/-/jobs/4757/erase',
artifacts: [null],
runner: {
id: 1,
description: 'local ci runner',
edit_path: '/root/ci-mock/runners/1/edit',
},
pipeline: {
id: 140,
user: {
name: 'Root',
username: 'root',
id: 1,
state: 'active',
avatar_url:
'https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon',
web_url: 'http://localhost:3000/root',
},
active: false,
coverage: null,
source: 'unknown',
created_at: '2017-05-24T09:59:58.634Z',
updated_at: '2017-06-01T17:32:00.062Z',
path: '/root/ci-mock/pipelines/140',
flags: {
latest: true,
stuck: false,
yaml_errors: false,
retryable: false,
cancelable: false,
},
details: {
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
has_details: true,
details_path: '/root/ci-mock/pipelines/140',
favicon:
'/assets/ci_favicons/favicon_status_success-308b4fc054cdd1b68d0865e6cfb7b02e92e3472f201507418f8eddb74ac11a59.png',
},
duration: 6,
finished_at: '2017-06-01T17:32:00.042Z',
stages: [
{
dropdown_path: '/jashkenas/underscore/pipelines/16/stage.json?stage=build',
name: 'build',
path: '/jashkenas/underscore/pipelines/16#build',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
},
title: 'build: passed',
},
{
dropdown_path: '/jashkenas/underscore/pipelines/16/stage.json?stage=test',
name: 'test',
path: '/jashkenas/underscore/pipelines/16#test',
status: {
icon: 'status_warning',
text: 'passed',
label: 'passed with warnings',
group: 'success-with-warnings',
},
title: 'test: passed with warnings',
},
],
},
ref: {
name: 'abc',
path: '/root/ci-mock/commits/abc',
tag: false,
branch: true,
},
commit: {
id: 'c58647773a6b5faf066d4ad6ff2c9fbba5f180f6',
short_id: 'c5864777',
title: 'Add new file',
created_at: '2017-05-24T10:59:52.000+01:00',
parent_ids: ['798e5f902592192afaba73f4668ae30e56eae492'],
message: 'Add new file',
author_name: 'Root',
author_email: 'admin@example.com',
authored_date: '2017-05-24T10:59:52.000+01:00',
committer_name: 'Root',
committer_email: 'admin@example.com',
committed_date: '2017-05-24T10:59:52.000+01:00',
author: {
name: 'Root',
username: 'root',
id: 1,
state: 'active',
avatar_url:
'https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon',
web_url: 'http://localhost:3000/root',
},
author_gravatar_url:
'https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon',
commit_url:
'http://localhost:3000/root/ci-mock/commit/c58647773a6b5faf066d4ad6ff2c9fbba5f180f6',
commit_path: '/root/ci-mock/commit/c58647773a6b5faf066d4ad6ff2c9fbba5f180f6',
},
},
metadata: {
timeout_human_readable: '1m 40s',
timeout_source: 'runner',
},
merge_request: {
iid: 2,
path: '/root/ci-mock/merge_requests/2',
},
raw_path: '/root/ci-mock/builds/4757/raw',
has_trace: true,
};
export const jobsInStage = {
name: 'build',
title: 'build: running',
latest_statuses: [
{
id: 1180,
name: 'build:linux',
started: false,
build_path: '/gitlab-org/gitlab-shell/-/jobs/1180',
cancel_path: '/gitlab-org/gitlab-shell/-/jobs/1180/cancel',
playable: false,
created_at: '2018-09-28T11:09:57.229Z',
updated_at: '2018-09-28T11:09:57.503Z',
status: {
icon: 'status_pending',
text: 'pending',
label: 'pending',
group: 'pending',
tooltip: 'pending',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/1180',
illustration: {
image: 'illustrations/pending_job_empty.svg',
size: 'svg-430',
title: 'This job has not started yet',
content: 'This job is in pending state and is waiting to be picked by a runner',
},
favicon:
'/assets/ci_favicons/favicon_status_pending-5bdf338420e5221ca24353b6bff1c9367189588750632e9a871b7af09ff6a2ae.png',
action: {
icon: 'cancel',
title: 'Cancel',
path: '/gitlab-org/gitlab-shell/-/jobs/1180/cancel',
method: 'post',
},
},
},
{
id: 444,
name: 'build:osx',
started: '2018-05-18T05:32:20.655Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/444',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/444/retry',
playable: false,
created_at: '2018-05-18T15:32:54.364Z',
updated_at: '2018-05-18T15:32:54.364Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/444',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/444/retry',
method: 'post',
},
},
},
],
retried: [
{
id: 443,
name: 'build:linux',
started: '2018-05-18T06:32:20.655Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/443',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/443/retry',
playable: false,
created_at: '2018-05-18T15:32:54.296Z',
updated_at: '2018-05-18T15:32:54.296Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed (retried)',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/443',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/443/retry',
method: 'post',
},
},
},
],
status: {
icon: 'status_running',
text: 'running',
label: 'running',
group: 'running',
tooltip: 'running',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/pipelines/27#build',
illustration: null,
favicon:
'/assets/ci_favicons/favicon_status_running-9c635b2419a8e1ec991c993061b89cc5aefc0743bb238ecd0c381e7741a70e8c.png',
},
path: '/gitlab-org/gitlab-shell/pipelines/27#build',
dropdown_path: '/gitlab-org/gitlab-shell/pipelines/27/stage.json?stage=build',
};
import { TEST_HOST } from 'spec/test_constants'; export { default } from '../../frontend/jobs/mock_data';
export * from '../../frontend/jobs/mock_data';
const threeWeeksAgo = new Date();
threeWeeksAgo.setDate(threeWeeksAgo.getDate() - 21);
export const stages = [
{
name: 'build',
title: 'build: running',
groups: [
{
name: 'build:linux',
size: 1,
status: {
icon: 'status_pending',
text: 'pending',
label: 'pending',
group: 'pending',
tooltip: 'pending',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/1180',
illustration: {
image: 'illustrations/pending_job_empty.svg',
size: 'svg-430',
title: 'This job has not started yet',
content: 'This job is in pending state and is waiting to be picked by a runner',
},
favicon:
'/assets/ci_favicons/favicon_status_pending-5bdf338420e5221ca24353b6bff1c9367189588750632e9a871b7af09ff6a2ae.png',
action: {
icon: 'cancel',
title: 'Cancel',
path: '/gitlab-org/gitlab-shell/-/jobs/1180/cancel',
method: 'post',
},
},
jobs: [
{
id: 1180,
name: 'build:linux',
started: false,
build_path: '/gitlab-org/gitlab-shell/-/jobs/1180',
cancel_path: '/gitlab-org/gitlab-shell/-/jobs/1180/cancel',
playable: false,
created_at: '2018-09-28T11:09:57.229Z',
updated_at: '2018-09-28T11:09:57.503Z',
status: {
icon: 'status_pending',
text: 'pending',
label: 'pending',
group: 'pending',
tooltip: 'pending',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/1180',
illustration: {
image: 'illustrations/pending_job_empty.svg',
size: 'svg-430',
title: 'This job has not started yet',
content: 'This job is in pending state and is waiting to be picked by a runner',
},
favicon:
'/assets/ci_favicons/favicon_status_pending-5bdf338420e5221ca24353b6bff1c9367189588750632e9a871b7af09ff6a2ae.png',
action: {
icon: 'cancel',
title: 'Cancel',
path: '/gitlab-org/gitlab-shell/-/jobs/1180/cancel',
method: 'post',
},
},
},
],
},
{
name: 'build:osx',
size: 1,
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/444',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/444/retry',
method: 'post',
},
},
jobs: [
{
id: 444,
name: 'build:osx',
started: '2018-05-18T05:32:20.655Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/444',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/444/retry',
playable: false,
created_at: '2018-05-18T15:32:54.364Z',
updated_at: '2018-05-18T15:32:54.364Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/444',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/444/retry',
method: 'post',
},
},
},
],
},
],
status: {
icon: 'status_running',
text: 'running',
label: 'running',
group: 'running',
tooltip: 'running',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/pipelines/27#build',
illustration: null,
favicon:
'/assets/ci_favicons/favicon_status_running-9c635b2419a8e1ec991c993061b89cc5aefc0743bb238ecd0c381e7741a70e8c.png',
},
path: '/gitlab-org/gitlab-shell/pipelines/27#build',
dropdown_path: '/gitlab-org/gitlab-shell/pipelines/27/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: 459,
name: 'jenkins',
started: '2018-05-18T09:32:20.658Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/459',
playable: false,
created_at: '2018-05-18T15:32:55.330Z',
updated_at: '2018-05-18T15:32:55.330Z',
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: 445,
name: 'rspec:linux 0 3',
started: '2018-05-18T07:32:20.655Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/445',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/445/retry',
playable: false,
created_at: '2018-05-18T15:32:54.425Z',
updated_at: '2018-05-18T15:32:54.425Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/445',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/445/retry',
method: 'post',
},
},
},
{
id: 446,
name: 'rspec:linux 1 3',
started: '2018-05-18T07:32:20.655Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/446',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/446/retry',
playable: false,
created_at: '2018-05-18T15:32:54.506Z',
updated_at: '2018-05-18T15:32:54.506Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/446',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/446/retry',
method: 'post',
},
},
},
{
id: 447,
name: 'rspec:linux 2 3',
started: '2018-05-18T07:32:20.656Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/447',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/447/retry',
playable: false,
created_at: '2018-05-18T15:32:54.572Z',
updated_at: '2018-05-18T15:32:54.572Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/447',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/447/retry',
method: 'post',
},
},
},
],
},
{
name: 'rspec:osx',
size: 1,
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/452',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/452/retry',
method: 'post',
},
},
jobs: [
{
id: 452,
name: 'rspec:osx',
started: '2018-05-18T07:32:20.657Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/452',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/452/retry',
playable: false,
created_at: '2018-05-18T15:32:54.920Z',
updated_at: '2018-05-18T15:32:54.920Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/452',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/452/retry',
method: 'post',
},
},
},
],
},
{
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: 448,
name: 'rspec:windows 0 3',
started: '2018-05-18T07:32:20.656Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/448',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/448/retry',
playable: false,
created_at: '2018-05-18T15:32:54.639Z',
updated_at: '2018-05-18T15:32:54.639Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/448',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/448/retry',
method: 'post',
},
},
},
{
id: 449,
name: 'rspec:windows 1 3',
started: '2018-05-18T07:32:20.656Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/449',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/449/retry',
playable: false,
created_at: '2018-05-18T15:32:54.703Z',
updated_at: '2018-05-18T15:32:54.703Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/449',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/449/retry',
method: 'post',
},
},
},
{
id: 451,
name: 'rspec:windows 2 3',
started: '2018-05-18T07:32:20.657Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/451',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/451/retry',
playable: false,
created_at: '2018-05-18T15:32:54.853Z',
updated_at: '2018-05-18T15:32:54.853Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/451',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/451/retry',
method: 'post',
},
},
},
],
},
{
name: 'spinach:linux',
size: 1,
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/453',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/453/retry',
method: 'post',
},
},
jobs: [
{
id: 453,
name: 'spinach:linux',
started: '2018-05-18T07:32:20.657Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/453',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/453/retry',
playable: false,
created_at: '2018-05-18T15:32:54.993Z',
updated_at: '2018-05-18T15:32:54.993Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/453',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/453/retry',
method: 'post',
},
},
},
],
},
{
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: '/gitlab-org/gitlab-shell/-/jobs/454',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/454/retry',
method: 'post',
},
},
jobs: [
{
id: 454,
name: 'spinach:osx',
started: '2018-05-18T07:32:20.657Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/454',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/454/retry',
playable: false,
created_at: '2018-05-18T15:32:55.053Z',
updated_at: '2018-05-18T15:32:55.053Z',
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: '/gitlab-org/gitlab-shell/-/jobs/454',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/454/retry',
method: 'post',
},
},
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: '/gitlab-org/gitlab-shell/pipelines/27#test',
illustration: null,
favicon:
'/assets/ci_favicons/favicon_status_success-8451333011eee8ce9f2ab25dc487fe24a8758c694827a582f17f42b0a90446a2.png',
},
path: '/gitlab-org/gitlab-shell/pipelines/27#test',
dropdown_path: '/gitlab-org/gitlab-shell/pipelines/27/stage.json?stage=test',
},
{
name: 'deploy',
title: 'deploy: running',
groups: [
{
name: 'production',
size: 1,
status: {
icon: 'status_created',
text: 'created',
label: 'created',
group: 'created',
tooltip: 'created',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/457',
illustration: {
image: 'illustrations/job_not_triggered.svg',
size: 'svg-306',
title: 'This job has not been triggered yet',
content:
'This job depends on upstream jobs that need to succeed in order for this job to be triggered',
},
favicon:
'/assets/ci_favicons/favicon_status_created-4b975aa976d24e5a3ea7cd9a5713e6ce2cd9afd08b910415e96675de35f64955.png',
action: {
icon: 'cancel',
title: 'Cancel',
path: '/gitlab-org/gitlab-shell/-/jobs/457/cancel',
method: 'post',
},
},
jobs: [
{
id: 457,
name: 'production',
started: false,
build_path: '/gitlab-org/gitlab-shell/-/jobs/457',
cancel_path: '/gitlab-org/gitlab-shell/-/jobs/457/cancel',
playable: false,
created_at: '2018-05-18T15:32:55.259Z',
updated_at: '2018-09-28T11:09:57.454Z',
status: {
icon: 'status_created',
text: 'created',
label: 'created',
group: 'created',
tooltip: 'created',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/457',
illustration: {
image: 'illustrations/job_not_triggered.svg',
size: 'svg-306',
title: 'This job has not been triggered yet',
content:
'This job depends on upstream jobs that need to succeed in order for this job to be triggered',
},
favicon:
'/assets/ci_favicons/favicon_status_created-4b975aa976d24e5a3ea7cd9a5713e6ce2cd9afd08b910415e96675de35f64955.png',
action: {
icon: 'cancel',
title: 'Cancel',
path: '/gitlab-org/gitlab-shell/-/jobs/457/cancel',
method: 'post',
},
},
},
],
},
{
name: 'staging',
size: 1,
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/455',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/455/retry',
method: 'post',
},
},
jobs: [
{
id: 455,
name: 'staging',
started: '2018-05-18T09:32:20.658Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/455',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/455/retry',
playable: false,
created_at: '2018-05-18T15:32:55.119Z',
updated_at: '2018-05-18T15:32:55.119Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/455',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/455/retry',
method: 'post',
},
},
},
],
},
{
name: 'stop staging',
size: 1,
status: {
icon: 'status_created',
text: 'created',
label: 'created',
group: 'created',
tooltip: 'created',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/456',
illustration: {
image: 'illustrations/job_not_triggered.svg',
size: 'svg-306',
title: 'This job has not been triggered yet',
content:
'This job depends on upstream jobs that need to succeed in order for this job to be triggered',
},
favicon:
'/assets/ci_favicons/favicon_status_created-4b975aa976d24e5a3ea7cd9a5713e6ce2cd9afd08b910415e96675de35f64955.png',
action: {
icon: 'cancel',
title: 'Cancel',
path: '/gitlab-org/gitlab-shell/-/jobs/456/cancel',
method: 'post',
},
},
jobs: [
{
id: 456,
name: 'stop staging',
started: false,
build_path: '/gitlab-org/gitlab-shell/-/jobs/456',
cancel_path: '/gitlab-org/gitlab-shell/-/jobs/456/cancel',
playable: false,
created_at: '2018-05-18T15:32:55.205Z',
updated_at: '2018-09-28T11:09:57.396Z',
status: {
icon: 'status_created',
text: 'created',
label: 'created',
group: 'created',
tooltip: 'created',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/456',
illustration: {
image: 'illustrations/job_not_triggered.svg',
size: 'svg-306',
title: 'This job has not been triggered yet',
content:
'This job depends on upstream jobs that need to succeed in order for this job to be triggered',
},
favicon:
'/assets/ci_favicons/favicon_status_created-4b975aa976d24e5a3ea7cd9a5713e6ce2cd9afd08b910415e96675de35f64955.png',
action: {
icon: 'cancel',
title: 'Cancel',
path: '/gitlab-org/gitlab-shell/-/jobs/456/cancel',
method: 'post',
},
},
},
],
},
],
status: {
icon: 'status_running',
text: 'running',
label: 'running',
group: 'running',
tooltip: 'running',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/pipelines/27#deploy',
illustration: null,
favicon:
'/assets/ci_favicons/favicon_status_running-9c635b2419a8e1ec991c993061b89cc5aefc0743bb238ecd0c381e7741a70e8c.png',
},
path: '/gitlab-org/gitlab-shell/pipelines/27#deploy',
dropdown_path: '/gitlab-org/gitlab-shell/pipelines/27/stage.json?stage=deploy',
},
{
name: 'notify',
title: 'notify: manual action',
groups: [
{
name: 'slack',
size: 1,
status: {
icon: 'status_manual',
text: 'manual',
label: 'manual play action',
group: 'manual',
tooltip: 'manual action',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/458',
illustration: {
image: 'illustrations/manual_action.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_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png',
action: {
icon: 'play',
title: 'Play',
path: '/gitlab-org/gitlab-shell/-/jobs/458/play',
method: 'post',
},
},
jobs: [
{
id: 458,
name: 'slack',
started: null,
build_path: '/gitlab-org/gitlab-shell/-/jobs/458',
play_path: '/gitlab-org/gitlab-shell/-/jobs/458/play',
playable: true,
created_at: '2018-05-18T15:32:55.303Z',
updated_at: '2018-05-18T15:34:08.535Z',
status: {
icon: 'status_manual',
text: 'manual',
label: 'manual play action',
group: 'manual',
tooltip: 'manual action',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/458',
illustration: {
image: 'illustrations/manual_action.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_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png',
action: {
icon: 'play',
title: 'Play',
path: '/gitlab-org/gitlab-shell/-/jobs/458/play',
method: 'post',
},
},
},
],
},
],
status: {
icon: 'status_manual',
text: 'manual',
label: 'manual action',
group: 'manual',
tooltip: 'manual action',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/pipelines/27#notify',
illustration: null,
favicon:
'/assets/ci_favicons/favicon_status_manual-829a0804612cef47d9efc1618dba38325483657c847dba0546c3b9f0295bb36c.png',
},
path: '/gitlab-org/gitlab-shell/pipelines/27#notify',
dropdown_path: '/gitlab-org/gitlab-shell/pipelines/27/stage.json?stage=notify',
},
];
export default {
id: 4757,
name: 'test',
build_path: '/root/ci-mock/-/jobs/4757',
retry_path: '/root/ci-mock/-/jobs/4757/retry',
cancel_path: '/root/ci-mock/-/jobs/4757/cancel',
new_issue_path: '/root/ci-mock/issues/new',
playable: false,
created_at: threeWeeksAgo.toISOString(),
updated_at: threeWeeksAgo.toISOString(),
finished_at: threeWeeksAgo.toISOString(),
queued: 9.54,
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
has_details: true,
details_path: `${TEST_HOST}/root/ci-mock/-/jobs/4757`,
favicon:
'/assets/ci_favicons/favicon_status_success-308b4fc054cdd1b68d0865e6cfb7b02e92e3472f201507418f8eddb74ac11a59.png',
action: {
icon: 'retry',
title: 'Retry',
path: '/root/ci-mock/-/jobs/4757/retry',
method: 'post',
},
},
coverage: 20,
erased_at: threeWeeksAgo.toISOString(),
erased: false,
duration: 6.785563,
tags: ['tag'],
user: {
name: 'Root',
username: 'root',
id: 1,
state: 'active',
avatar_url:
'https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon',
web_url: 'http://localhost:3000/root',
},
erase_path: '/root/ci-mock/-/jobs/4757/erase',
artifacts: [null],
runner: {
id: 1,
description: 'local ci runner',
edit_path: '/root/ci-mock/runners/1/edit',
},
pipeline: {
id: 140,
user: {
name: 'Root',
username: 'root',
id: 1,
state: 'active',
avatar_url:
'https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon',
web_url: 'http://localhost:3000/root',
},
active: false,
coverage: null,
source: 'unknown',
created_at: '2017-05-24T09:59:58.634Z',
updated_at: '2017-06-01T17:32:00.062Z',
path: '/root/ci-mock/pipelines/140',
flags: {
latest: true,
stuck: false,
yaml_errors: false,
retryable: false,
cancelable: false,
},
details: {
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
has_details: true,
details_path: '/root/ci-mock/pipelines/140',
favicon:
'/assets/ci_favicons/favicon_status_success-308b4fc054cdd1b68d0865e6cfb7b02e92e3472f201507418f8eddb74ac11a59.png',
},
duration: 6,
finished_at: '2017-06-01T17:32:00.042Z',
stages: [
{
dropdown_path: '/jashkenas/underscore/pipelines/16/stage.json?stage=build',
name: 'build',
path: '/jashkenas/underscore/pipelines/16#build',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
},
title: 'build: passed',
},
{
dropdown_path: '/jashkenas/underscore/pipelines/16/stage.json?stage=test',
name: 'test',
path: '/jashkenas/underscore/pipelines/16#test',
status: {
icon: 'status_warning',
text: 'passed',
label: 'passed with warnings',
group: 'success-with-warnings',
},
title: 'test: passed with warnings',
},
],
},
ref: {
name: 'abc',
path: '/root/ci-mock/commits/abc',
tag: false,
branch: true,
},
commit: {
id: 'c58647773a6b5faf066d4ad6ff2c9fbba5f180f6',
short_id: 'c5864777',
title: 'Add new file',
created_at: '2017-05-24T10:59:52.000+01:00',
parent_ids: ['798e5f902592192afaba73f4668ae30e56eae492'],
message: 'Add new file',
author_name: 'Root',
author_email: 'admin@example.com',
authored_date: '2017-05-24T10:59:52.000+01:00',
committer_name: 'Root',
committer_email: 'admin@example.com',
committed_date: '2017-05-24T10:59:52.000+01:00',
author: {
name: 'Root',
username: 'root',
id: 1,
state: 'active',
avatar_url:
'https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon',
web_url: 'http://localhost:3000/root',
},
author_gravatar_url:
'https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon',
commit_url:
'http://localhost:3000/root/ci-mock/commit/c58647773a6b5faf066d4ad6ff2c9fbba5f180f6',
commit_path: '/root/ci-mock/commit/c58647773a6b5faf066d4ad6ff2c9fbba5f180f6',
},
},
metadata: {
timeout_human_readable: '1m 40s',
timeout_source: 'runner',
},
merge_request: {
iid: 2,
path: '/root/ci-mock/merge_requests/2',
},
raw_path: '/root/ci-mock/builds/4757/raw',
has_trace: true,
};
export const jobsInStage = {
name: 'build',
title: 'build: running',
latest_statuses: [
{
id: 1180,
name: 'build:linux',
started: false,
build_path: '/gitlab-org/gitlab-shell/-/jobs/1180',
cancel_path: '/gitlab-org/gitlab-shell/-/jobs/1180/cancel',
playable: false,
created_at: '2018-09-28T11:09:57.229Z',
updated_at: '2018-09-28T11:09:57.503Z',
status: {
icon: 'status_pending',
text: 'pending',
label: 'pending',
group: 'pending',
tooltip: 'pending',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/1180',
illustration: {
image: 'illustrations/pending_job_empty.svg',
size: 'svg-430',
title: 'This job has not started yet',
content: 'This job is in pending state and is waiting to be picked by a runner',
},
favicon:
'/assets/ci_favicons/favicon_status_pending-5bdf338420e5221ca24353b6bff1c9367189588750632e9a871b7af09ff6a2ae.png',
action: {
icon: 'cancel',
title: 'Cancel',
path: '/gitlab-org/gitlab-shell/-/jobs/1180/cancel',
method: 'post',
},
},
},
{
id: 444,
name: 'build:osx',
started: '2018-05-18T05:32:20.655Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/444',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/444/retry',
playable: false,
created_at: '2018-05-18T15:32:54.364Z',
updated_at: '2018-05-18T15:32:54.364Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/444',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/444/retry',
method: 'post',
},
},
},
],
retried: [
{
id: 443,
name: 'build:linux',
started: '2018-05-18T06:32:20.655Z',
build_path: '/gitlab-org/gitlab-shell/-/jobs/443',
retry_path: '/gitlab-org/gitlab-shell/-/jobs/443/retry',
playable: false,
created_at: '2018-05-18T15:32:54.296Z',
updated_at: '2018-05-18T15:32:54.296Z',
status: {
icon: 'status_success',
text: 'passed',
label: 'passed',
group: 'success',
tooltip: 'passed (retried)',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/-/jobs/443',
illustration: {
image: 'illustrations/skipped-job_empty.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: '/gitlab-org/gitlab-shell/-/jobs/443/retry',
method: 'post',
},
},
},
],
status: {
icon: 'status_running',
text: 'running',
label: 'running',
group: 'running',
tooltip: 'running',
has_details: true,
details_path: '/gitlab-org/gitlab-shell/pipelines/27#build',
illustration: null,
favicon:
'/assets/ci_favicons/favicon_status_running-9c635b2419a8e1ec991c993061b89cc5aefc0743bb238ecd0c381e7741a70e8c.png',
},
path: '/gitlab-org/gitlab-shell/pipelines/27#build',
dropdown_path: '/gitlab-org/gitlab-shell/pipelines/27/stage.json?stage=build',
};
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment