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 { mountComponentWithStore } from 'spec/helpers/vue_mount_component_helper';
import { waitForMutation } from 'spec/helpers/vue_test_utils_helper';
import { getJSONFixture } from 'helpers/fixtures';
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 * as types from '~/jobs/store/mutation_types';
import job from '../mock_data';
describe('Job App ', () => {
describe('Job App', () => {
const localVue = createLocalVue();
localVue.use(Vuex);
const delayedJobFixture = getJSONFixture('jobs/delayed.json');
const Component = Vue.extend(jobApp);
let store;
let vm;
let wrapper;
let mock;
const initSettings = {
......@@ -32,16 +34,24 @@ describe('Job App ', () => {
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 = {} } = {}) => {
mock.onGet(initSettings.endpoint).replyOnce(200, { ...job, ...jobData });
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(() => {
......@@ -50,94 +60,81 @@ describe('Job App ', () => {
});
afterEach(() => {
vm.$destroy();
wrapper.destroy();
mock.restore();
});
describe('while loading', () => {
beforeEach(() => {
setupAndMount();
store.state.isLoading = true;
createComponent();
});
it('renders loading icon', () => {
expect(vm.$el.querySelector('.js-job-loading')).not.toBeNull();
expect(vm.$el.querySelector('.js-job-sidebar')).toBeNull();
expect(vm.$el.querySelector('.js-job-content')).toBeNull();
expect(wrapper.find('.js-job-loading').exists()).toBe(true);
expect(wrapper.find('.js-job-sidebar').exists()).toBe(false);
expect(wrapper.find('.js-job-content').exists()).toBe(false);
});
});
describe('with successful request', () => {
describe('Header section', () => {
describe('job callout message', () => {
it('should not render the reason when reason is absent', done => {
setupAndMount()
.then(() => {
expect(vm.shouldRenderCalloutMessage).toBe(false);
})
.then(done)
.catch(done.fail);
});
it('should not render the reason when reason is absent', () =>
setupAndMount().then(() => {
expect(wrapper.vm.shouldRenderCalloutMessage).toBe(false);
}));
it('should render the reason when reason is present', done => {
it('should render the reason when reason is present', () =>
setupAndMount({
jobData: {
callout_message: 'There is an unkown failure, please try again',
},
})
.then(() => {
expect(vm.shouldRenderCalloutMessage).toBe(true);
})
.then(done)
.catch(done.fail);
});
}).then(() => {
expect(wrapper.vm.shouldRenderCalloutMessage).toBe(true);
}));
});
describe('triggered job', () => {
beforeEach(done => {
beforeEach(() => {
const aYearAgo = new Date();
aYearAgo.setFullYear(aYearAgo.getFullYear() - 1);
setupAndMount({ jobData: { started: aYearAgo.toISOString() } })
.then(done)
.catch(done.fail);
return setupAndMount({ jobData: { started: aYearAgo.toISOString() } });
});
it('should render provided job information', () => {
expect(
vm.$el
.querySelector('.header-main-content')
.textContent.replace(/\s+/g, ' ')
wrapper
.find('.header-main-content')
.text()
.replace(/\s+/g, ' ')
.trim(),
).toContain('passed Job #4757 triggered 1 year ago by Root');
});
it('should render new issue link', () => {
expect(vm.$el.querySelector('.js-new-issue').getAttribute('href')).toEqual(
job.new_issue_path,
);
expect(wrapper.find('.js-new-issue').attributes('href')).toEqual(job.new_issue_path);
});
});
describe('created job', () => {
it('should render created key', done => {
setupAndMount()
.then(() => {
it('should render created key', () =>
setupAndMount().then(() => {
expect(
vm.$el
.querySelector('.header-main-content')
.textContent.replace(/\s+/g, ' ')
wrapper
.find('.header-main-content')
.text()
.replace(/\s+/g, ' ')
.trim(),
).toContain('passed Job #4757 created 3 weeks ago by Root');
})
.then(done)
.catch(done.fail);
});
}));
});
});
describe('stuck block', () => {
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({
jobData: {
status: {
......@@ -154,20 +151,14 @@ describe('Job App ', () => {
},
tags: [],
},
})
.then(() => {
expect(vm.$el.querySelector('.js-job-stuck')).not.toBeNull();
expect(
vm.$el.querySelector('.js-job-stuck .js-stuck-no-active-runner'),
).not.toBeNull();
})
.then(done)
.catch(done.fail);
});
}).then(() => {
expect(wrapper.find('.js-job-stuck').exists()).toBe(true);
expect(wrapper.find('.js-job-stuck .js-stuck-no-active-runner').exists()).toBe(true);
}));
});
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({
jobData: {
status: {
......@@ -183,18 +174,14 @@ describe('Job App ', () => {
online: false,
},
},
})
.then(() => {
expect(vm.$el.querySelector('.js-job-stuck').textContent).toContain(job.tags[0]);
expect(vm.$el.querySelector('.js-job-stuck .js-stuck-with-tags')).not.toBeNull();
})
.then(done)
.catch(done.fail);
});
}).then(() => {
expect(wrapper.find('.js-job-stuck').text()).toContain(job.tags[0]);
expect(wrapper.find('.js-job-stuck .js-stuck-with-tags').exists()).toBe(true);
}));
});
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({
jobData: {
status: {
......@@ -210,32 +197,24 @@ describe('Job App ', () => {
online: true,
},
},
})
.then(() => {
expect(vm.$el.querySelector('.js-job-stuck').textContent).toContain(job.tags[0]);
expect(vm.$el.querySelector('.js-job-stuck .js-stuck-with-tags')).not.toBeNull();
})
.then(done)
.catch(done.fail);
});
}).then(() => {
expect(wrapper.find('.js-job-stuck').text()).toContain(job.tags[0]);
expect(wrapper.find('.js-job-stuck .js-stuck-with-tags').exists()).toBe(true);
}));
});
it('does not renders stuck block when there are no runners', done => {
it('does not renders stuck block when there are no runners', () =>
setupAndMount({
jobData: {
runners: { available: true },
},
})
.then(() => {
expect(vm.$el.querySelector('.js-job-stuck')).toBeNull();
})
.then(done)
.catch(done.fail);
});
}).then(() => {
expect(wrapper.find('.js-job-stuck').exists()).toBe(false);
}));
});
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({
jobData: {
status: {
......@@ -258,17 +237,13 @@ describe('Job App ', () => {
},
tags: [],
},
})
.then(() => {
expect(vm.$el.querySelector('.js-job-failed')).not.toBeNull();
})
.then(done)
.catch(done.fail);
});
}).then(() => {
expect(wrapper.find('.js-job-failed').exists()).toBe(true);
}));
});
describe('environments block', () => {
it('renders environment block when job has environment', done => {
it('renders environment block when job has environment', () =>
setupAndMount({
jobData: {
deployment_status: {
......@@ -278,26 +253,18 @@ describe('Job App ', () => {
},
},
},
})
.then(() => {
expect(vm.$el.querySelector('.js-job-environment')).not.toBeNull();
})
.then(done)
.catch(done.fail);
});
}).then(() => {
expect(wrapper.find('.js-job-environment').exists()).toBe(true);
}));
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);
});
it('does not render environment block when job has environment', () =>
setupAndMount().then(() => {
expect(wrapper.find('.js-job-environment').exists()).toBe(false);
}));
});
describe('erased block', () => {
it('renders erased block when `erased` is true', done => {
it('renders erased block when `erased` is true', () =>
setupAndMount({
jobData: {
erased_by: {
......@@ -306,30 +273,22 @@ describe('Job App ', () => {
},
erased_at: '2016-11-07T11:11:16.525Z',
},
})
.then(() => {
expect(vm.$el.querySelector('.js-job-erased-block')).not.toBeNull();
})
.then(done)
.catch(done.fail);
});
}).then(() => {
expect(wrapper.find('.js-job-erased-block').exists()).toBe(true);
}));
it('does not render erased block when `erased` is false', done => {
it('does not render erased block when `erased` is false', () =>
setupAndMount({
jobData: {
erased_at: null,
},
})
.then(() => {
expect(vm.$el.querySelector('.js-job-erased-block')).toBeNull();
})
.then(done)
.catch(done.fail);
});
}).then(() => {
expect(wrapper.find('.js-job-erased-block').exists()).toBe(false);
}));
});
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({
jobData: {
has_trace: false,
......@@ -352,15 +311,11 @@ describe('Job App ', () => {
},
},
},
})
.then(() => {
expect(vm.$el.querySelector('.js-job-empty-state')).not.toBeNull();
})
.then(done)
.catch(done.fail);
});
}).then(() => {
expect(wrapper.find('.js-job-empty-state').exists()).toBe(true);
}));
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({
jobData: {
has_trace: false,
......@@ -372,38 +327,29 @@ describe('Job App ', () => {
details_path: 'path',
},
},
})
.then(() => {
expect(vm.$el.querySelector('.js-job-empty-state')).toBeNull();
})
.then(done)
.catch(done.fail);
});
}).then(() => {
expect(wrapper.find('.js-job-empty-state').exists()).toBe(false);
}));
it('does not render empty state when job has trace but it is not running', done => {
setupAndMount({ jobData: { has_trace: true } })
.then(() => {
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', () =>
setupAndMount({ jobData: { has_trace: true } }).then(() => {
expect(wrapper.find('.js-job-empty-state').exists()).toBe(false);
}));
it('displays remaining time for a delayed job', done => {
it('displays remaining time for a delayed job', () => {
const oneHourInMilliseconds = 3600000;
spyOn(Date, 'now').and.callFake(
jest
.spyOn(Date, 'now')
.mockImplementation(
() => new Date(delayedJobFixture.scheduled_at).getTime() - oneHourInMilliseconds,
);
setupAndMount({ jobData: delayedJobFixture })
.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');
})
.then(done)
.catch(done.fail);
expect(title).toEqual('This is a delayed job to run in 01:00:00');
});
});
});
......@@ -422,8 +368,11 @@ describe('Job App ', () => {
},
})
.then(() => {
vm.$el.querySelectorAll('.blocks-container > *').forEach(block => {
expect(block.textContent.trim()).not.toBe('');
const blocks = wrapper.findAll('.blocks-container > *').wrappers;
expect(blocks.length).toBeGreaterThan(0);
blocks.forEach(block => {
expect(block.text().trim()).not.toBe('');
});
})
.then(done)
......@@ -433,32 +382,24 @@ describe('Job App ', () => {
});
describe('archived job', () => {
beforeEach(done => {
setupAndMount({ jobData: { archived: true } })
.then(done)
.catch(done.fail);
});
beforeEach(() => setupAndMount({ jobData: { archived: true } }));
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', () => {
beforeEach(done => {
setupAndMount()
.then(done)
.catch(done.fail);
});
beforeEach(() => setupAndMount());
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('with append flag', () => {
it('appends the log content to the existing one', done => {
it('appends the log content to the existing one', () =>
setupAndMount({
traceData: {
html: '<span>More<span>',
......@@ -469,20 +410,22 @@ describe('Job App ', () => {
},
})
.then(() => {
vm.$store.state.trace = 'Update';
store.state.trace = 'Update';
return vm.$nextTick();
return wrapper.vm.$nextTick();
})
.then(() => {
expect(vm.$el.querySelector('.js-build-trace').textContent.trim()).toContain('Update');
})
.then(done)
.catch(done.fail);
});
expect(
wrapper
.find('.js-build-trace')
.text()
.trim(),
).toEqual('Update');
}));
});
describe('without append flag', () => {
it('replaces the trace', done => {
it('replaces the trace', () =>
setupAndMount({
traceData: {
html: '<span>Different<span>',
......@@ -490,24 +433,19 @@ describe('Job App ', () => {
append: false,
complete: true,
},
})
.then(() => {
expect(vm.$el.querySelector('.js-build-trace').textContent.trim()).not.toContain(
'Update',
);
expect(vm.$el.querySelector('.js-build-trace').textContent.trim()).toContain(
'Different',
);
})
.then(done)
.catch(done.fail);
});
}).then(() => {
expect(
wrapper
.find('.js-build-trace')
.text()
.trim(),
).toEqual('Different');
}));
});
describe('truncated information', () => {
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, {
html: '<span>Update</span>',
status: 'success',
......@@ -517,7 +455,7 @@ describe('Job App ', () => {
complete: true,
});
setupAndMount({
return setupAndMount({
traceData: {
html: '<span>Update</span>',
status: 'success',
......@@ -526,19 +464,19 @@ describe('Job App ', () => {
total: 100,
complete: true,
},
})
.then(() => {
expect(vm.$el.querySelector('.js-truncated-info').textContent.trim()).toContain(
'50 bytes',
);
})
.then(done)
.catch(done.fail);
}).then(() => {
expect(
wrapper
.find('.js-truncated-info')
.text()
.trim(),
).toContain('Showing last 50 bytes');
});
});
});
describe('when size is equal than total', () => {
it('does not show the truncated information', done => {
it('does not show the truncated information', () =>
setupAndMount({
traceData: {
html: '<span>Update</span>',
......@@ -548,20 +486,19 @@ describe('Job App ', () => {
total: 100,
complete: true,
},
})
.then(() => {
expect(vm.$el.querySelector('.js-truncated-info').textContent.trim()).not.toContain(
'50 bytes',
);
})
.then(done)
.catch(done.fail);
});
}).then(() => {
expect(
wrapper
.find('.js-truncated-info')
.text()
.trim(),
).toEqual('');
}));
});
});
describe('trace controls', () => {
beforeEach(done => {
beforeEach(() =>
setupAndMount({
traceData: {
html: '<span>Update</span>',
......@@ -571,22 +508,20 @@ describe('Job App ', () => {
total: 100,
complete: true,
},
})
.then(done)
.catch(done.fail);
});
}),
);
it('should render scroll buttons', () => {
expect(vm.$el.querySelector('.js-scroll-top')).not.toBeNull();
expect(vm.$el.querySelector('.js-scroll-bottom')).not.toBeNull();
expect(wrapper.find('.js-scroll-top').exists()).toBe(true);
expect(wrapper.find('.js-scroll-bottom').exists()).toBe(true);
});
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', () => {
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';
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',
};
export { default } from '../../frontend/jobs/mock_data';
export * from '../../frontend/jobs/mock_data';
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