// Copyright 2018 Red Hat, Inc // // Licensed under the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. You may obtain // a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the // License for the specific language governing permissions and limitations // under the License. import React, { useState } from 'react' import PropTypes from 'prop-types' import { connect } from 'react-redux' import { Link } from 'react-router-dom' import { Flex, FlexItem, List, ListItem, Title } from '@patternfly/react-core' import { BookIcon, BuildIcon, CodeBranchIcon, FileCodeIcon, FingerprintIcon, HistoryIcon, OutlinedCalendarAltIcon, OutlinedClockIcon, StreamIcon, ThumbtackIcon, LockIcon, } from '@patternfly/react-icons' import * as moment from 'moment' import * as moment_tz from 'moment-timezone' import _ from 'lodash' import 'moment-duration-format' import { BuildResultBadge, BuildResultWithIcon } from './Misc' import { buildExternalLink, renderRefInfo, ExternalLink, IconProperty } from '../../Misc' import AutoholdModal from '../autohold/autoholdModal' function getRefs(build) { // This method has a purpose beyond backwards compat: return the // zuul ref for this build first, then the remaining refs. if (!('refs' in build.buildset)) { // Backwards compat return [build] } return [build.ref, ...build.buildset.refs.filter((i) => !_.isEqual(i, build.ref))] } function getRef(build) { return 'project' in build ? build : build.ref } function Build({ build, tenant, timezone, user }) { const [showAutoholdModal, setShowAutoholdModal] = useState(false) const buildRef = getRef(build) // the change or ref to use for api actions like autohold const actionRef = buildRef.change ? '' : buildRef.ref const actionChange = buildRef.change ? String(buildRef.change) : '' //const project = build.project const job_name = build.job_name const index_links = build.manifest && build.manifest.index_links const build_log_url = build.log_url ? (index_links ? build.log_url + 'index.html' : build.log_url) : '' function renderAutoholdButton() { const value = ( { event.preventDefault() setShowAutoholdModal(true) }} > Autohold future build failure(s) ) return ( } value={value} /> ) } return ( <> <BuildResultWithIcon result={build.result} colored={build.voting} size="md" > {build.job_name} {!build.voting && ' (non-voting)'} </BuildResultWithIcon> <BuildResultBadge result={build.result} /> {build.held && <ThumbtackIcon title="This build triggered an autohold" style={{ marginLeft: 'var(--pf-global--spacer--sm)', }} />} {/* We handle the spacing for the body and the flex items by ourselves so they go hand in hand. By default, the flex items' spacing only affects left/right margin, but not top or bottom (which looks awkward when the items are stacked at certain breakpoints) */} {getRefs(build).map((ref, idx) => ( } value={ {buildExternalLink(ref)}
Project {ref.project}
{renderRefInfo(ref)}
} /> ))} } value={ <> Pipeline {build.pipeline} } /> } value={ UUID {build.uuid}
Event ID {build.event_id}
} />
} value={ Started at {moment_tz .utc(build.start_time) .tz(timezone) .format('YYYY-MM-DD HH:mm:ss')}
Completed at {moment_tz .utc(build.end_time) .tz(timezone) .format('YYYY-MM-DD HH:mm:ss')}
} /> } value={ <> Took {moment .duration(build.duration, 'seconds') .format('h [hr] m [min] s [sec]')} } />
} value={ View job documentation } /> } value={ View buildset result } /> )} } value={ build_log_url ? ( View log ) : ( No log available ) } /> {(user.isAdmin && user.scope.indexOf(tenant.name) !== -1) && renderAutoholdButton()}
{} ) } Build.propTypes = { build: PropTypes.object, tenant: PropTypes.object, hash: PropTypes.array, timezone: PropTypes.string, user: PropTypes.object, } export default connect((state) => ({ tenant: state.tenant, timezone: state.timezone, user: state.user, }))(Build)