Skip to content

Instantly share code, notes, and snippets.

@vpusher
Created April 1, 2015 13:43
Show Gist options
  • Save vpusher/6ef4d00d22d78abd0120 to your computer and use it in GitHub Desktop.
Save vpusher/6ef4d00d22d78abd0120 to your computer and use it in GitHub Desktop.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="viewport" content="width=device-width" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>BEFORE PROMOTE</title>
<style type="text/css">
/* -------------------------------------
GLOBAL
A very basic CSS reset
------------------------------------- */
* {
margin: 0;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
box-sizing: border-box;
font-size: 14px;
}
img {
max-width: 100%;
}
body {
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: none;
width: 100% !important;
height: 100%;
line-height: 1.6;
}
/* Let's make sure all tables have defaults */
table td {
vertical-align: top;
padding-left: 5px;
padding-right: 5px;
}
/* -------------------------------------
BODY & CONTAINER
------------------------------------- */
body {
background-color: #f6f6f6;
}
.body-wrap {
background-color: #f6f6f6;
width: 100%;
}
.container {
display: block !important;
/*max-width: 600px !important;*/
margin: 0 auto !important;
/* makes it centered */
clear: both !important;
}
.content {
/*max-width: 600px;*/
margin: 0 auto;
display: block;
padding: 20px;
}
/* -------------------------------------
HEADER, FOOTER, MAIN
------------------------------------- */
.main {
background-color: #fff;
border: 1px solid #e9e9e9;
border-radius: 3px;
}
.content-wrap {
padding: 20px;
}
.content-block {
padding: 0 0 20px;
}
.header {
width: 100%;
margin-bottom: 20px;
}
.footer {
width: 100%;
clear: both;
color: #999;
padding: 20px;
}
.footer a {
color: #999;
}
.footer p, .footer a, .footer unsubscribe, .footer td {
font-size: 12px;
}
/* -------------------------------------
TYPOGRAPHY
------------------------------------- */
h1, h2, h3 {
font-family: "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
color: #000;
margin: 25px 0 25px;
line-height: 1.2;
font-weight: 400;
}
h4, h5, h6 {
margin: 10px 0 10px;
}
h1 {
font-size: 32px;
font-weight: 500;
}
h2 {
font-size: 24px;
}
h3 {
font-size: 18px;
}
h4 {
font-size: 14px;
font-weight: 600;
}
p, ul, ol {
margin-bottom: 10px;
font-weight: normal;
}
p li, ul li, ol li {
margin-left: 5px;
list-style-position: inside;
}
/* -------------------------------------
LINKS & BUTTONS
------------------------------------- */
a {
color: #348eda;
text-decoration: underline;
}
.btn-primary {
text-decoration: none;
color: #FFF;
background-color: #348eda;
border: solid #348eda;
border-width: 10px 20px;
line-height: 2;
font-weight: bold;
text-align: center;
cursor: pointer;
display: inline-block;
border-radius: 5px;
text-transform: capitalize;
margin: 30px 15px 30px 0;
}
.btn-error {
text-decoration: none;
color: #FFF;
background-color: #D0021B;
border: solid #D0021B;
border-width: 10px 20px;
line-height: 2;
font-weight: bold;
text-align: center;
cursor: pointer;
display: inline-block;
border-radius: 5px;
text-transform: capitalize;
margin: 30px 15px 30px 0;
}
/* -------------------------------------
OTHER STYLES THAT MIGHT BE USEFUL
------------------------------------- */
.last {
margin-bottom: 0;
}
.first {
margin-top: 0;
}
.aligncenter {
text-align: center;
}
.alignright {
text-align: right;
}
.alignleft {
text-align: left;
}
.clear {
clear: both;
}
/* -------------------------------------
ALERTS
Change the class depending on warning email, good email or bad email
------------------------------------- */
.alert {
font-size: 16px;
color: #fff;
font-weight: 500;
padding: 20px;
text-align: center;
border-radius: 3px 3px 0 0;
}
.alert a {
color: #fff;
text-decoration: none;
font-weight: 500;
font-size: 16px;
}
.alert.alert-warning {
background-color: #FF9F00;
}
.alert.alert-bad {
background-color: #D0021B;
}
.alert.alert-good {
background-color: #68B90F;
}
/* -------------------------------------
Changes
------------------------------------- */
.file {
margin-bottom: 2px;
padding-left: 5px;
}
.created {
background-color: #DBFFDB;
}
.deleted {
background-color: #FFDDDD;
}
.moved {
background-color: #EAEAEA;
}
.modified {
background-color: #FCEFBE;
}
/* -------------------------------------
INVOICE
Styles for the billing table
------------------------------------- */
.invoice {
margin: 40px auto;
text-align: left;
width: 80%;
}
.invoice td {
padding: 5px 0;
}
.invoice .invoice-items {
width: 100%;
}
.invoice .invoice-items td {
border-top: #eee 1px solid;
}
.invoice .invoice-items .total td {
border-top: 2px solid #333;
border-bottom: 2px solid #333;
font-weight: 700;
}
/* -------------------------------------
RESPONSIVE AND MOBILE FRIENDLY STYLES
------------------------------------- */
@media only screen and (max-width: 640px) {
h1, h2, h3, h4 {
font-weight: 600 !important;
margin: 20px 0 5px !important;
}
h1 {
font-size: 22px !important;
}
h2 {
font-size: 18px !important;
}
h3 {
font-size: 16px !important;
}
.container {
width: 100% !important;
}
.content, .content-wrap {
padding: 10px !important;
}
.invoice {
width: 100% !important;
}
}
/*# sourceMappingURL=styles.css.map */
</style>
<link href="styles.css" media="all" rel="stylesheet" type="text/css" />
</head>
<body itemscope itemtype="http://schema.org/EmailMessage">
<table class="body-wrap">
<tr>
<td></td>
<td class="container">
<div class="content">
<table class="main" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="alert ooo= build.result.toString() == 'SUCCESS' ? 'alert-good' : build.result.toString() == 'FAILURE' ? 'alert-bad' : 'alert-warning' xxx">
BUILD ${build.result} : ${build.result.toString() == 'SUCCESS' ? 'Ready to promote' : build.result.toString() == 'FAILURE' ? 'Promotion should be canceled' : 'Promotion not recommended'}
</td>
</tr>
<tr>
<td class="content-wrap">
<table width="100%" cellpadding="0" cellspacing="0">
<TR><TD><b>Build URL</b></TD><TD><A href="${rooturl}${build.url}">${rooturl}${build.url}</A></TD></TR>
<TR><TD><b>Project:</b></TD><TD>${project.name}</TD></TR>
<TR><TD><b>Date of build:</b></TD><TD>${it.timestampString}</TD></TR>
<TR><TD><b>Build duration:</b></TD><TD>${build.durationString}</TD></TR>
<TR>
<TD><b>Cause:</b></TD>
<TD>
ooo build.causes.each() { cause -> xxx
${cause.shortDescription}
ooo } xxx
</TD>
</TR>
<tr>
<td class="content-block" colspan="2">
<h2>Changes</h2>
ooo build.getLog(10000).each() { line ->
if (line.contains('has been modified')) { xxx
<div class="file modified">${org.apache.commons.lang.StringEscapeUtils.escapeHtml(line)}</div>
ooo } else if (line.contains('has been created')) { xxx
<div class="file created">${org.apache.commons.lang.StringEscapeUtils.escapeHtml(line)}</div>
ooo } else if (line.contains('has been deleted')) { xxx
<div class="file deleted">${org.apache.commons.lang.StringEscapeUtils.escapeHtml(line)}</div>
ooo } else if (line.contains('has been moved')) { xxx
<div class="file moved">${org.apache.commons.lang.StringEscapeUtils.escapeHtml(line)}</div>
ooo } else if (line.contains('has been')) { xxx
<div class="file">${org.apache.commons.lang.StringEscapeUtils.escapeHtml(line)}</div>
ooo } } xxx
</td>
</tr>
<tr>
<td class="content-block" colspan="2">
<h2>Changesets</h2>
<table>
ooo build.getLog(10000).each() { line ->
if (line.contains('Desc:')) { xxx
<tr class="changeset">
<td>
oooline.eachMatch(~/(#([0-9]+))/) { match, issue, id -> xxx
<a href="http://wpdev/redmine/issues/${id}">${issue}</a>
ooo } xxx
</td>
<td><strong>${line.find(~/(.*)(\sDesc\:\s)/) { match, before, desc -> return org.apache.commons.lang.StringEscapeUtils.escapeHtml("$before")}}</strong></td>
<td><i>${line.find(~/(\sDesc\:\s)(#[0-9]+)(.*)/) { match, desc, id, after -> return org.apache.commons.lang.StringEscapeUtils.escapeHtml("$after")}}</i></td>
</tr>
ooo } } xxx
</table>
</td>
</tr>
<tr>
<td class="content-block" colspan="2">
<h2>Reviews</h2>
<h5>Need to be reviewed and fixed before promoting.</h5>
<table>
ooo build.getLog(10000).each() { line ->
if (line.contains('reviewed by')) { xxx
<tr class="review">
<td>
oooline.eachMatch(~/(#([0-9]+))/) { match, issue, id -> xxx
<a href="http://wpdev/redmine/issues/${id}">${issue}</a>
ooo } xxx
</td>
<td>assigned to <strong>${line.find(~/.*\sassigned\sto\s(.*)\sreviewed\sby/) { match, name -> return org.apache.commons.lang.StringEscapeUtils.escapeHtml("$name")}}</strong></td>
<td>reviewed by <strong>${line.find(~/.*\sreviewed\sby\s([^:]*)\:/) { match, name -> return org.apache.commons.lang.StringEscapeUtils.escapeHtml("$name")}}</strong></td>
<td><i>${line.find(~/.*\sreviewed\sby\s[^:]*\:(.*)/) { match, title -> return org.apache.commons.lang.StringEscapeUtils.escapeHtml("$title")}}</i></td>
</tr>
ooo } } xxx
</table>
</td>
</tr>
<tr>
<td class="content-block" colspan="2" style="text-align:center">
<a href="mailto:?subject=Request%20for%20cancel%20promotion%20of%20${build.getEnvironment(listener).get('UWP_ADL_WS')}&body=Explain%20why%20you%20want%20to%20stop%20or%20delay%20this%20workspace%20promotion..." class="btn-error">Cancel the promotion</a>
<a href="${rooturl}${build.url}console" class="btn-primary">Go to console</a>
</td>
</tr>
<tr>
<td class="content-block">
WP & 3DD teams.
</td>
</tr>
</table>
</td>
</tr>
</table>
<div class="footer">
<table width="100%">
<tr>
<td class="aligncenter content-block">This e-mail has been sent from <a href="">Jenkins</a>. To unsubscribe contact a Jenkins administrator.</td>
</tr>
</table>
</div></div>
</td>
<td></td>
</tr>
</table>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment