ant-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From conflue...@apache.org
Subject [CONF] Apache Ivy (Apache Ant subproject) : A Release Process Based On Ivy (page created)
Date Fri, 15 May 2009 11:23:00 GMT
<html>
<head>
    <base href="http://cwiki.apache.org/confluence" />
    <style type="text/css">
    <!--
    body, p, td, table, tr, .bodytext, .stepfield {
	font-family: Verdana, arial, sans-serif;
	font-size: 11px;
	line-height: 16px;
	color: #000000;
	font-weight: normal;
}
#PageContent {
	text-align: left;
	background-color: #fff;
	padding: 0px;
	margin: 0px;
    padding-bottom:20px;
}
/*
** when this stylesheet is used for the Tiny MCE Wysiwyg editor's edit area, we can't
** use an id=PageContent or class=wiki-content, so we must
** set the body style to that used for PageContent, and p to that used for wiki-content.
*/

body {
	margin: 0px;
	padding: 0px;
	text-align: center;
    background-color: #f0f0f0;
}

@media print {

body {
    background-color: #fff;
}

}

.monospaceInput {
    font:12px monospace
}

.wiki-content p, .commentblock p {
    margin: 16px 0px 16px 0px;
    padding: 0px;
}

.wiki-content-preview {
    padding: 5px;
    border-left: 1px solid #3c78b5;
    border-right: 1px solid #3c78b5;
}

ul, ol {
    margin-top: 2px;
    margin-bottom: 2px;
    padding-top: 0px;
    padding-bottom: 0px;
}

pre {
    padding: 0px;
    margin-top: 5px;
    margin-left: 15px;
    margin-bottom: 5px;
    margin-right: 5px;
    text-align: left;
}

.helpheading {
    font-weight: bold;
    background-color: #D0D9BD;
        border-bottom: 1px solid #3c78b5;
        padding: 4px 4px 4px 4px;
        margin: 0px;
        margin-top: 10px;
}
.helpcontent {
        padding: 4px 4px 20px 4px;
    background-color: #f5f7f1;
}

.code {
 	border: 1px dashed #3c78b5;
    font-size: 11px;
	font-family: Courier;
    margin: 10px;
	line-height: 13px;
}

.focusedComment {
    background: #ffffce;
}

.commentBox, .focusedComment {
    padding: 10px;
    margin: 5px 0 5px 0;
    border: 1px #bbb solid;
}

.codeHeader {
    background-color: #f0f0f0;
 	border-bottom: 1px dashed #3c78b5;
    padding: 3px;
	text-align: center;
}

.codeContent {
    text-align: left;
    background-color: #f0f0f0;
    padding: 3px;
}

.preformatted {
 	border: 1px dashed #3c78b5;
    font-size: 11px;
	font-family: Courier;
    margin: 10px;
	line-height: 13px;
}

.preformattedHeader {
    background-color: #f0f0f0;
 	border-bottom: 1px dashed #3c78b5;
    padding: 3px;
	text-align: center;
}

.preformattedContent {
    background-color: #f0f0f0;
    padding: 3px;
}

.panel {
 	border: 1px dashed #3c78b5;
    margin: 10px;
    margin-top: 0px;
}

.panelHeader {
    background-color: #f0f0f0;
 	border-bottom: 1px dashed #3c78b5;
    padding: 3px;
	text-align: center;
}

.panelContent {
    background-color: #f0f0f0;
    padding: 5px;
}

.anonymousAlert {
    background-color: #f0f0f0;
 	border: 1px dashed red;
    font-size: 11px;
    padding: 10px 5px 10px 5px;
    margin: 4px;
	line-height: 13px;
}

.lockAlert {
    background-color: #f0f0f0;
    width: 50%;
 	border: 1px dashed red;
    font-size: 11px;
    padding: 10px 5px 10px 5px;
    margin: 4px;
	line-height: 13px;
}


.code-keyword {
  color: #000091;
  background-color: inherit;
}

.code-object {
  color: #910091;
  background-color: inherit;
}

.code-quote {
  color: #009100;
  background-color: inherit;
}

.code-comment {
  color: #808080;
  background-color: inherit;
}


.code-xml .code-keyword {
  color: inherit;
  font-weight: bold;
}

.code-tag {
  color: #000091;
  background-color: inherit;
}

.breadcrumbs {
    background-color: #f0f0f0;
 	border-color: #3c78b5;
	border-width: 1px 0px 1px 0px;
	border-style: solid;
    font-size: 11px;
    padding: 3px 0px 3px 0px;
}

.navmenu {
    border: 1px solid #ccc;
}

.menuheading {
    font-weight: bold;
    background-color: #f0f0f0;
 	border-bottom: 1px solid #3c78b5;
	padding: 4px 4px 2px 4px;
}

.menuitems {
	padding: 4px 4px 20px 4px;
}

.rightpanel {
    border-left: 1px solid #ccc;
    border-bottom: 1px solid #ccc;
}

#helpheading {
    text-align: left;
    font-weight: bold;
    background-color: #D0D9BD;
 	border-bottom: 1px solid #3c78b5;
	padding: 4px 4px 4px 4px;
	margin: 0px;
}
#helpcontent {
	padding: 4px 4px 4px 4px;
    background-color: #f5f7f1;
}
.helptab-unselected {
    font-weight: bold;
	padding: 5px;
    background-color: #f5f7f1;
}
.helptab-selected {
    font-weight: bold;
    background-color: #D0D9BD;
	padding: 5px;
}
.helptabs {
    margin: 0px;
    background-color: #f5f7f1;
	padding: 5px;
}
.infopanel-heading {
    font-weight: bold;
	padding: 4px 0px 2px 0px;
}

.pagebody {
}

.pageheader {
	padding: 5px 5px 5px 0px;
 	border-bottom: 1px solid #3c78b5;
}

.pagetitle {
	font-size: 22px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: #003366;
}

.newpagetitle {
    color: #ccc !important;
}

.steptitle {
	font-size: 18px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: #003366;
	margin-bottom: 7px;
}

.substeptitle {
    font-size: 12px;
    font-weight: bold;
    font-family: Arial, sans-serif;
    color: #003366;
    margin: 2px 4px 4px 4px;
    padding: 2px 4px 1px 4px;
}

.stepdesc {
    font-family: Verdana, arial, sans-serif;
	font-size: 11px;
	line-height: 16px;
	font-weight: normal;
    color: #666666;
    margin-top: 7px;
    margin-bottom: 7px;
}

.steplabel {
    font-weight: bold;
    margin-right: 4px;
    color: black;
    float: left;
    width: 15%;
    text-align: right;
}

.stepfield {
    background: #f0f0f0;
    padding: 5px;
}

.submitButtons{
    margin-top:5px;
    text-align:right;
}

.formtitle {
	font-size: 12px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: #003366;
}

.sectionbottom {
    border-bottom: 1px solid #3c78b5;
}

.topRow {
    border-top: 2px solid #3c78b5;
}

.tabletitle {
	font-size: 14px;
	font-weight: bold;
	font-family: Arial, sans-serif;
    padding: 3px 0px 2px 0px;
    margin: 8px 4px 2px 0px;
	color: #003366;
	border-bottom: 2px solid #3c78b5;
}
.pagesubheading {
    color: #666666;
    font-size: 10px;
    padding: 0px 0px 5px 0px;
}

HR {
	color: 3c78b5;
	height: 1;
}

A:link, A:visited, A:active, A:hover {
	color: #003366;
}

h1 A:link, h1 A:visited, h1 A:active {
	text-decoration: none;
}

h1 A:hover {
    border-bottom: 1px dotted #003366;
}

.wiki-content > :first-child, .commentblock > :first-child {
    margin-top: 3px;
}

.logocell {
    padding: 10px;
}

input {
	font-family: verdana, geneva, arial, sans-serif;
	font-size: 11px;
	color: #000000;
}

textarea, textarea.editor {
	font-family: verdana, geneva, arial, sans-serif;
	font-size: 11px;
	color: #333333;
}

/* use logoSpaceLink instead.
.spacenametitle {
	font: 21px/31px Impact, Arial, Helvetica;
    font-weight: 100;
    color: #999999;
	margin: 0px;
}
.spacenametitle img {
  margin: 0 0 -4px 0;
}
.spacenametitle a {
    text-decoration: none;
    color: #999999;
}
.spacenametitle a:visited {
    text-decoration: none;
    color: #999999;
}*/

.spacenametitle-printable {
	font: 20px/25px Impact, Arial, Helvetica;
    font-weight: 100;
    color: #999999;
	margin: 0px;
}
.spacenametitle-printable a {
    text-decoration: none;
    color: #999999;
}
.spacenametitle-printable a:visited {
    text-decoration: none;
    color: #999999;
}

.blogDate {
	font-weight: bold;
	text-decoration: none;
	color: black;
}

.blogSurtitle {
    background: #f0f0f0;
 	border: 1px solid #ddd;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.blogHeading {
    font-size: 20px;
    line-height: normal;
    font-weight: bold;
    padding: 0px;
    margin: 0px;
}

.blogHeading a {
   text-decoration: none;
   color: black;
}

.endsection {
	align: right;
	color: #666666;
	margin-top: 10px;
}
.endsectionleftnav {
	align: right;
	color: #666666;
	margin-top: 10px;
}

h1 {
	font-size: 24px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	color: #003366;
 	border-bottom: 1px solid #3c78b5;
	padding: 2px;
	margin: 36px 0px 4px 0px;
}

h2 {
	font-size: 18px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
 	border-bottom: 1px solid #3c78b5;
	padding: 2px;
	margin: 27px 0px 4px 0px;
}

h3 {
	font-size: 14px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 21px 0px 4px 0px;
}

h4 {
	font-size: 12px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 18px 0px 4px 0px;
}

h4.search {
	font-size: 12px;
	line-height: normal;
	font-weight: normal;
	background-color: #f0f0f0;
	padding: 4px;
	margin: 18px 0px 4px 0px;
}

h5 {
	font-size: 10px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 14px 0px 4px 0px;
}

h6 {
	font-size: 8px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 14px 0px 4px 0px;
}

.smallfont {
    font-size: 10px;
}
.descfont {
    font-size: 10px;
    color: #666666;
}
.smallerfont {
    font-size: 9px;
}
.smalltext {
    color: #666666;
    font-size: 10px;
}
.smalltext a {
    color: #666666;
}
.smalltext-blue {
    color: #3c78b5;
    font-size: 10px;
}
.surtitle {
    margin-left: 1px;
    margin-bottom: 5px;
    font-size: 14px;
    color: #666666;
}

/* css hack found here:  http://www.fo3nix.pwp.blueyonder.co.uk/tutorials/css/hacks/ */
.navItemOver { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #003366; cursor: hand; voice-family: '\'}\''; voice-family:inherit; cursor: pointer;}
.navItemOver a { color: #ffffff; background-color:#003366; text-decoration: none; }
.navItemOver a:visited { color: #ffffff; background-color:#003366; text-decoration: none; }
.navItemOver a:hover { color: #ffffff; background-color:#003366; text-decoration: none; }
.navItem { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #3c78b5; }
.navItem a { color: #ffffff; text-decoration: none; }
.navItem a:hover { color: #ffffff; text-decoration: none; }
.navItem a:visited { color: #ffffff; text-decoration: none; }

div.padded { padding: 4px; }
div.thickPadded { padding: 10px; }
h3.macrolibrariestitle {
    margin: 0px 0px 0px 0px;
}

div.centered { text-align: center; margin: 10px; }
div.centered table {margin: 0px auto; text-align: left; }

.tableview table {
    margin: 0;
}

.tableview th {
    text-align: left;
    color: #003366;
    font-size: 12px;
    padding: 5px 0px 0px 5px;
    border-bottom: 2px solid #3c78b5;
}
.tableview td {
    text-align: left;
    border-color: #ccc;
    border-width: 0px 0px 1px 0px;
    border-style: solid;
    margin: 0;
    padding: 4px 10px 4px 5px;
}

.grid {
    margin: 2px 0px 5px 0px;
    border-collapse: collapse;
}
.grid th  {
    border: 1px solid #ccc;
    padding: 2px 4px 2px 4px;
    background: #f0f0f0;
    text-align: center;
}
.grid td  {
    border: 1px solid #ccc;
    padding: 3px 4px 3px 4px;
}
.gridHover {
	background-color: #f9f9f9;
}

td.infocell {
    background-color: #f0f0f0;
}
.label {
	font-weight: bold;
	color: #003366;
}

label {
	font-weight: bold;
	color: #003366;
}

.error {
	background-color: #fcc;
}

.errorBox {
	background-color: #fcc;
    border: 1px solid #c00;
    padding: 5px;
    margin: 5px;
}

.errorMessage {
	color: #c00;
}

.success {
	background-color: #dfd;
}

.successBox {
	background-color: #dfd;
    border: 1px solid #090;
    padding: 5px;
    margin-top:5px;
    margin-bottom:5px;
}

blockquote {
	padding-left: 10px;
	padding-right: 10px;
	margin-left: 5px;
	margin-right: 0px;
	border-left: 1px solid #3c78b5;
}

table.confluenceTable
{
    margin: 5px;
    border-collapse: collapse;
}

/* Added as a temporary fix for CONF-4223. The table elements appear to be inheriting the border: none attribute from the sectionMacro class */
table.confluenceTable td.confluenceTd
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
}

/* Added as a temporary fix for CONF-4223. The table elements appear to be inheriting the border: none attribute from the sectionMacro class */
table.confluenceTable th.confluenceTh
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
    background-color: #f0f0f0;
    text-align: center;
}

td.confluenceTd
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
}

th.confluenceTh
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
    background-color: #f0f0f0;
    text-align: center;
}

DIV.small {
	font-size: 9px;
}

H1.pagename {
	margin-top: 0px;
}

IMG.inline  {}

.loginform {
    margin: 5px;
    border: 1px solid #ccc;
}

/* The text how the "This is a preview" comment should be shown. */
.previewnote { text-align: center;
                font-size: 11px;
                    color: red; }

/* How the preview content should be shown */
.previewcontent { background: #E0E0E0; }

/* How the system messages should be shown (DisplayMessage.jsp) */
.messagecontent { background: #E0E0E0; }

/* How the "This page has been modified..." -comment should be shown. */
.conflictnote { }

.createlink {
    color: maroon;
}
a.createlink {
    color: maroon;
}
.templateparameter {
    font-size: 9px;
    color: darkblue;
}

.diffadded {
    background: #ddffdd;
    padding: 1px 1px 1px 4px;
	border-left: 4px solid darkgreen;
}
.diffdeleted {
    color: #999;
    background: #ffdddd;
    padding: 1px 1px 1px 4px;
	border-left: 4px solid darkred;
}
.diffnochange {
    padding: 1px 1px 1px 4px;
	border-left: 4px solid lightgrey;
}
.differror {
    background: brown;
}
.diff {
    font-family: lucida console, courier new, fixed-width;
	font-size: 12px;
	line-height: 14px;
}
.diffaddedchars {
    background-color:#99ff99;
    font-weight:bolder;
}
.diffremovedchars {
    background-color:#ff9999;
    text-decoration: line-through;
    font-weight:bolder;
}

.greybackground {
    background: #f0f0f0
}

.greybox {
 	border: 1px solid #ddd;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.borderedGreyBox {
    border: 1px solid #cccccc;
    background-color: #f0f0f0;
    padding: 10px;
}

.greyboxfilled {
 	border: 1px solid #ddd;
    background: #f0f0f0;
    padding: 3px;
	margin: 1px 1px 10px 1px;
}

.navBackgroundBox {
    padding: 5px 5px 5px 5px;
    font-size: 22px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: white;
    background: #3c78b5;
    text-decoration: none;
}

.previewBoxTop {
	background-color: #f0f0f0;
    border-width: 1px 1px 0px 1px;
    border-style: solid;
    border-color: #3c78b5;
    padding: 5px;
    margin: 5px 0px 0px 0px;
    text-align: center;
}
.previewContent {
    background-color: #fff;
 	border-color: #3c78b5;
	border-width: 0px 1px 0px 1px;
	border-style: solid;
	padding: 10px;
	margin: 0px;
}
.previewBoxBottom {
	background-color: #f0f0f0;
    border-width: 0px 1px 1px 1px;
    border-style: solid;
    border-color: #3c78b5;
    padding: 5px;
    margin: 0px 0px 5px 0px;
    text-align: center;
}

.functionbox {
    background-color: #f0f0f0;
 	border: 1px solid #3c78b5;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.functionbox-greyborder {
    background-color: #f0f0f0;
 	border: 1px solid #ddd;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.search-highlight {
    background-color: #ffffcc;
}

/* normal (white) background */
.rowNormal {
    background-color: #ffffff;
 }

/* alternate (pale yellow) background */
.rowAlternate {
    background-color: #f7f7f7;
}

/* used in the list attachments table */
.rowAlternateNoBottomColor {
    background-color: #f7f7f7;
}

.rowAlternateNoBottomNoColor {
}

.rowAlternateNoBottomColor td {
    border-bottom: 0px;
}

.rowAlternateNoBottomNoColor td {
    border-bottom: 0px;
}

/* row highlight (grey) background */
.rowHighlight {
    background-color: #f0f0f0;

}

TD.greenbar {FONT-SIZE: 2px; BACKGROUND: #00df00; BORDER: 1px solid #9c9c9c; PADDING: 0px; }
TD.redbar {FONT-SIZE: 2px; BACKGROUND: #df0000; BORDER: 1px solid #9c9c9c; PADDING: 0px; }
TD.darkredbar {FONT-SIZE: 2px; BACKGROUND: #af0000; BORDER: 1px solid #9c9c9c; PADDING: 0px; }

TR.testpassed {FONT-SIZE: 2px; BACKGROUND: #ddffdd; PADDING: 0px; }
TR.testfailed {FONT-SIZE: 2px; BACKGROUND: #ffdddd; PADDING: 0px; }

.toolbar  {
    margin: 0px;
    border-collapse: collapse;
}

.toolbar td  {
    border: 1px solid #ccc;
    padding: 2px 2px 2px 2px;
    color: #ccc;
}

td.noformatting {
    border-width: 0px;
    border-style: none;
    text-align: center;
	padding: 0px;
}

.commentblock {
    margin: 12px 0 12px 0;
}

/*
 * Divs displaying the license information, if necessary.
 */
.license-eval, .license-none, .license-nonprofit {
    border-top: 1px solid #bbbbbb;
    text-align: center;
    font-size: 10px;
    font-family: Verdana, Arial, Helvetica, sans-serif;
}

.license-eval, .license-none {
    background-color: #ffcccc;
}

.license-eval b, .license-none b {
    color: #990000
}

.license-nonprofit {
    background-color: #ffffff;
}

/*
 * The shadow at the bottom of the page between the main content and the
 * "powered by" section.
 */
.bottomshadow {
    height: 12px;
    background-image: url("$req.contextPath/images/border/border_bottom.gif");
    background-repeat: repeat-x;
}

/*
 * Styling of the operations box
 */
.navmenu .operations li, .navmenu .operations ul {
    list-style: none;
    margin-left: 0;
    padding-left: 0;
}

.navmenu .operations ul {
    margin-bottom: 9px;
}

.navmenu .label {
    font-weight: inherit;
}

/*
 * Styling of ops as a toolbar
 */
.toolbar div {
    display: none;
}

.toolbar .label {
    display: none;
}

.toolbar .operations {
    display: block;
}

.toolbar .operations ul {
    display: inline;
    list-style: none;
    margin-left: 10px;
    padding-left: 0;
}

.toolbar .operations li {
    list-style: none;
    display: inline;
}

/* list page navigational tabs */
#foldertab {
padding: 3px 0px 3px 8px;
margin-left: 0;
border-bottom: 1px solid #3c78b5;
font: bold 11px Verdana, sans-serif;
}

#foldertab li {
list-style: none;
margin: 0;
display: inline;
}

#foldertab li a {
padding: 3px 0.5em;
margin-left: 3px;
border: 1px solid #3c78b5;
border-bottom: none;
background: #3c78b5;
text-decoration: none;
}

#foldertab li a:link { color: #ffffff; }
#foldertab li a:visited { color: #ffffff; }

#foldertab li a:hover {
color: #ffffff;
background: #003366;
border-color: #003366;
}

#foldertab li a.current {
background: white;
border-bottom: 1px solid white;
color: black;
}

#foldertab li a.current:link { color: black; }
#foldertab li a.current:visited { color: black; }
#foldertab li a.current:hover {
background: white;
border-bottom: 1px solid white;
color: black;
}

/* alphabet list */
ul#squaretab {
margin-left: 0;
padding-left: 0;
white-space: nowrap;
font: bold 8px Verdana, sans-serif;
}

#squaretab li {
display: inline;
list-style-type: none;
}

#squaretab a {
padding: 2px 6px;
border: 1px solid #3c78b5;
}

#squaretab a:link, #squaretab a:visited {
color: #fff;
background-color: #3c78b5;
text-decoration: none;
}

#squaretab a:hover {
color: #ffffff;
background-color: #003366;
border-color: #003366;
text-decoration: none;
}

#squaretab li a#current {
background: white;
color: black;
}

.blogcalendar * {
    font-family:verdana, arial, sans-serif;
    font-size:x-small;
    font-weight:normal;
    line-height:140%;
    padding:2px;
}


table.blogcalendar {
    border: 1px solid #3c78b5;
}

.blogcalendar th.calendarhead, a.calendarhead {
    font-size:x-small;
    font-weight:bold;
    padding:2px;
    text-transform:uppercase;
    background-color: #3c78b5;
    color: #ffffff;
    letter-spacing: .3em;
    text-transform: uppercase;
}

.calendarhead:visited {color: white;}
.calendarhead:active {color: white;}
.calendarhead:hover {color: white;}

.blogcalendar th {
    font-size:x-small;
    font-weight:bold;
    padding:2px;
    background-color:#f0f0f0;
}

.blogcalendar td {
    font-size:x-small;
    font-weight:normal;
}

.searchGroup { padding: 0 0 10px 0; background: #f0f0f0; }
.searchGroupHeading { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #3c78b5; padding: 2px 4px 1px 4px; }
.searchItem { padding: 1px 4px 1px 4px; }
.searchItemSelected { padding: 1px 4px 1px 4px; font-weight: bold; background: #ddd; }

/* permissions page styles */
.permissionHeading {
    border-bottom: #bbb; border-width: 0 0 1px 0; border-style: solid; font-size: 16px; text-align: left;
}
.permissionTab {
    border-width: 0 0 0 1px; border-style: solid; background: #3c78b5; color: #ffffff; font-size: 10px;
}
.permissionSuperTab {
    border-width: 0 0 0 1px; border-style: solid; background: #003366; color: #ffffff;
}
.permissionCell {
    border-left: #bbb; border-width: 0 0 0 1px; border-style: solid;
}

/* warning panel */
.warningPanel { background: #FFFFCE; border:#F0C000 1px solid; padding: 8px; margin: 10px; }
/* alert panel */
.alertPanel { background: #FFCCCC; border:#C00 1px solid; padding: 8px; margin: 10px; }
/* info panel */
.infoPanel { background: #D8E4F1; border:#3c78b5 1px solid; padding: 8px; margin: 10px; }

/* side menu highlighting (e.g. space content screen) */
.optionPadded { padding: 2px; }
.optionSelected { background-color: #ffffcc; padding: 2px; border: 1px solid #ddd; margin: -1px; }
.optionSelected a { font-weight: bold; text-decoration: none; color: black; }

/* information macros */
.noteMacro { border-style: solid; border-width: 1px; border-color: #F0C000; background-color: #FFFFCE; text-align:left; margin-top: 5px; margin-bottom: 5px}
.warningMacro { border-style: solid; border-width: 1px; border-color: #c00; background-color: #fcc; text-align:left; margin-top: 5px; margin-bottom: 5px}
.infoMacro { border-style: solid; border-width: 1px; border-color: #3c78b5; background-color: #D8E4F1; text-align:left; margin-top: 5px; margin-bottom: 5px}
.tipMacro { border-style: solid; border-width: 1px; border-color: #090; background-color: #dfd; text-align:left; margin-top: 5px; margin-bottom: 5px}
.informationMacroPadding { padding: 5px 0 0 5px; }

table.infoMacro td, table.warningMacro td, table.tipMacro td, table.noteMacro td, table.sectionMacro td {
    border: none;
}

table.sectionMacroWithBorder td.columnMacro { border-style: dashed; border-width: 1px; border-color: #cccccc;}

.pagecontent
{
    padding: 10px;
    text-align: left;
}

/* styles for links in the top bar */
.topBarDiv a:link {color: #ffffff;}
.topBarDiv a:visited {color: #ffffff;}
.topBarDiv a:active {color: #ffffff;}
.topBarDiv a:hover {color: #ffffff;}
.topBarDiv {color: #ffffff;}

.topBar {
    background-color: #003366;
}


/* styles for extended operations */
.greyLinks a:link {color: #666666; text-decoration:underline;}
.greyLinks a:visited {color: #666666; text-decoration:underline;}
.greyLinks a:active {color: #666666; text-decoration:underline;}
.greyLinks a:hover {color: #666666; text-decoration:underline;}
.greyLinks {color: #666666; display:block; padding: 10px}

.logoSpaceLink {color: #999999; text-decoration: none}
.logoSpaceLink a:link {color: #999999; text-decoration: none}
.logoSpaceLink a:visited {color: #999999; text-decoration: none}
.logoSpaceLink a:active {color: #999999; text-decoration: none}
.logoSpaceLink a:hover {color: #003366; text-decoration: none}

/* basic panel (basicpanel.vmd) style */
.basicPanelContainer {border: 1px solid #3c78b5; margin-top: 2px; margin-bottom: 8px; width: 100%}
.basicPanelTitle {padding: 5px; margin: 0px; background-color: #f0f0f0; color: black; font-weight: bold;}
.basicPanelBody {padding: 5px; margin: 0px}

.separatorLinks a:link {color: white}
.separatorLinks a:visited {color: white}
.separatorLinks a:active {color: white}

.greynavbar {background-color: #f0f0f0; border-top: 1px solid #3c78b5; margin-top: 2px}

div.headerField {
    float: left;
    width: auto;
    height: 100%;
}

.headerFloat {
    margin-left: auto;
    width: 50%;
}

.headerFloatLeft {
    float: left;
    margin-right: 20px;
    margin-bottom: 10px;
}

#headerRow {
    padding: 10px;
}

div.license-personal {
   background-color: #003366;
   color: #ffffff;
}

div.license-personal a {
   color: #ffffff;
}

.greyFormBox {
    border: 1px solid #cccccc;
    padding: 5px;
}

/* IE automatically adds a margin before and after form tags. Use this style to remove that */
.marginlessForm {
    margin: 0px;
}

.openPageHighlight {
    background-color: #ffffcc;
    padding: 2px;
    border: 1px solid #ddd;
}

.editPageInsertLinks, .editPageInsertLinks a
{
    color: #666666;
    font-weight: bold;
    font-size: 10px;
}

/* Style for label heatmap. */
.top10 a {
    font-weight: bold;
    font-size: 2em;
    color: #003366;
}
.top25 a {
    font-weight: bold;
    font-size: 1.6em;
    color: #003366;
}
.top50 a {
    font-size: 1.4em;
    color: #003366;
}
.top100 a {
    font-size: 1.2em;
    color: #003366;
}

.heatmap {
    list-style:none;
    width: 95%;
    margin: 0px auto;
}

.heatmap a {
    text-decoration:none;
}

.heatmap a:hover {
    text-decoration:underline;
}

.heatmap li {
    display: inline;
}

.minitab {
padding: 3px 0px 3px 8px;
margin-left: 0;
margin-top: 1px;
margin-bottom: 0px;
border-bottom: 1px solid #3c78b5;
font: bold 9px Verdana, sans-serif;
text-decoration: none;
float:none;
}
.selectedminitab {
padding: 3px 0.5em;
margin-left: 3px;
margin-top: 1px;
border: 1px solid #3c78b5;
background: white;
border-bottom: 1px solid white;
color: #000000;
text-decoration: none;
}
.unselectedminitab {
padding: 3px 0.5em;
margin-left: 3px;
margin-top: 1px;
border: 1px solid #3c78b5;
border-bottom: none;
background: #3c78b5;
color: #ffffff;
text-decoration: none;
}

a.unselectedminitab:hover {
color: #ffffff;
background: #003366;
border-color: #003366;
}

a.unselectedminitab:link { color: white; }
a.unselectedminitab:visited { color: white; }

a.selectedminitab:link { color: black; }
a.selectedminitab:visited { color: black; }

.linkerror { background-color: #fcc;}

a.labelOperationLink:link {text-decoration: underline}
a.labelOperationLink:active {text-decoration: underline}
a.labelOperationLink:visited {text-decoration: underline}
a.labelOperationLink:hover {text-decoration: underline}

a.newLabel:link {background-color: #ddffdd}
a.newLabel:active {background-color: #ddffdd}
a.newLabel:visited {background-color: #ddffdd}
a.newLabel:hover {background-color: #ddffdd}

ul.square {list-style-type: square}

.inline-control-link {
    background: #ffc;
    font-size: 9px;
    color: #666;
    padding: 2px;
    text-transform: uppercase;
    text-decoration: none;
}


.inline-control-link a:link {text-decoration: none}
.inline-control-link a:active {text-decoration: none}
.inline-control-link a:visited {text-decoration: none}
.inline-control-link a:hover {text-decoration: none}

.inline-control-link {
    background: #ffc;
    font-size: 9px;
    color: #666;
    padding: 2px;
    text-transform: uppercase;
    text-decoration: none;
    cursor: pointer;
}

div.auto_complete {
    width: 350px;
    background: #fff;
}
div.auto_complete ul {
    border: 1px solid #888;
    margin: 0;
    padding: 0;
    width: 100%;
    list-style-type: none;
}
div.auto_complete ul li {
    margin: 0;
    padding: 3px;
}
div.auto_complete ul li.selected {
    background-color: #ffb;
}
div.auto_complete ul strong.highlight {
    color: #800;
    margin: 0;
    padding: 0;
}

/******* Edit Page Styles *******/
.toogleFormDiv{
    border:1px solid #A7A6AA;
    background-color:white;
    padding:5px;
    margin-top: 5px;
}

.toogleInfoDiv{
    border:1px solid #A7A6AA;
    background-color:white;
    display:none;
    padding:5px;
    margin-top: 10px;
}

.inputSection{
    margin-bottom:20px;
}

#editBox{
   border:1px solid lightgray;
   background-color:#F0F0F0;
}

/******* Left Navigation Theme Styles ********/
.leftnav li a {
    text-decoration:none;
    color:white;
    margin:0px;
    display:block;
    padding:2px;
    padding-left:5px;
    background-color: #3c78b5;
    border-top:1px solid #3c78b5;
}

.leftnav li a:active {color:white;}
.leftnav li a:visited {color:white;}
.leftnav li a:hover {background-color: #003366; color:white;}

/* Added by Shaun during i18n */
.replaced
{
    background-color: #33CC66;
}

.topPadding
{
    margin-top: 20px;
}

/* new form style */
.form-block {
    padding: 6px;
}
.form-error-block {
    padding: 6px;
    background: #fcc;
    border-top: #f0f0f0 1px solid;
    border-bottom: #f0f0f0 1px solid;
    margin-bottom: 6px;
    padding: 0 12px 0 12px;
}
.form-element-large {
    font-size: 16px;
    font-weight: bold;
    font-family: Arial, sans-serif;
    color: #003366;
}

.form-element-small {
    font-size: 12px;
    font-weight: bold;
    font-family: Arial, sans-serif;
    color: #003366;
}

.form-header {
    background: lightyellow;
    border-top: #f0f0f0 1px solid;
    border-bottom: #f0f0f0 1px solid;
    margin-bottom: 6px;
    padding: 0 12px 0 12px;
}
.form-header p, .form-block p, .form-error-block p {
    line-height: normal;
    margin: 12px 0 12px 0;
}
.form-example {
    color: #888;
    font-size: 11px;
}
.form-divider {
    border-bottom: #ccc 1px solid;
    margin-bottom: 6px;
}
.form-buttons {
    margin-top: 6px;
    border-top: #ccc 1px solid;
    border-bottom: #ccc 1px solid;
    background: #f0f0f0;
    padding: 10px;
    text-align: center;
}
.form-buttons input {
    width: 100px;
}
.form-block .error {
    padding: 6px;
    margin-bottom: 6px;
}
    -->
    </style>
</head>
<body>

<div id="PageContent">
<table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%"><tr>
<td valign="top" class="pagebody">

    <div class="pageheader">
        <span class="pagetitle">
            Page Created :
            <a href="http://cwiki.apache.org/confluence/display/IVY">IVY</a> :
            <a href="http://cwiki.apache.org/confluence/display/IVY/A+Release+Process+Based+On+Ivy">A Release Process Based On Ivy</a>
        </span>
    </div>

     <p>
        <a href="http://cwiki.apache.org/confluence/display/IVY/A+Release+Process+Based+On+Ivy">A Release Process Based On Ivy</a>
        has been created by             <a href="http://cwiki.apache.org/confluence/display/~dtayl">david taylor</a>
            <span class="smallfont">(May 15, 2009)</span>.
     </p>

    <span class="label">Content:</span><br />
    <div class="greybox wiki-content"><table cellpadding='5' width='85%' cellspacing='8px' class='warningMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/forbidden.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b class="strong">EARLY MASHUP DRAFT: NOT READY FOR USE!</b><br /></td></tr></table>

<h3><a name="AReleaseProcessBasedOnIvy-PurposeandTargetAudience"></a>Purpose and Target Audience</h3>

<p>This attempts to provide a conceptual description of the release process, for anyone who wants or needs to know how the pieces all fit.</p>

<h3><a name="AReleaseProcessBasedOnIvy-Overview"></a>Overview</h3>

<p>The release process compiles source code, archives the binaries into jars, collects the jars and associated resources, and assigns a unique identifier to the collection. It also runs tests and reports coverage. The diagram below provides a high-level view.<span class="error">Unable to render embedded object: File (releaseProcess.jpg) not found.</span></p>

<h3><a name="AReleaseProcessBasedOnIvy-Goals"></a>Goals</h3>

<ul>
	<li>Ensure correct and repeatable results</li>
	<li>Deploy quickly and easily</li>
	<li>Identify changes and their source</li>
	<li>Facilitate communication between stakeholders</li>
	<li>Minimize overhead, in resources and knowledge</li>
</ul>


<h3><a name="AReleaseProcessBasedOnIvy-BasicConcepts"></a>Basic Concepts</h3>

<p><b>CVS Repository</b><br/>
Collection of versioned files: primarily source, tests, scripts, resources, and docs</p>

<p><b>Ivy Repository</b><br/>
Set of <em>modules</em></p>

<p><b>Module</b><br/>
Collection of files that work together to provide a service: primarily jars and resources<br/>
Identified by module name<br/>
Has a set of artifacts, and a collection of instances, called <em>releases</em></p>

<p><b>Release</b><br/>
Instance of a module<br/>
Identified by release name and number (for humans), release version (for scripts), release date/time, release tag (for CVS)<br/>
Has a builder (account name), a report, and a set of <em>install-instances</em></p>

<p><b>Install-instance</b><br/>
Instance of a release<br/>
Identified by install environment (test, uat, prod), install host-machine, and install date/time<br/>
Has an installer (account name)</p>

<h3><a name="AReleaseProcessBasedOnIvy-Flow"></a>Flow</h3>

<p>This is an overview of the steps to release. Details are at <span class="nobr"><a href="/confluence/pages/createpage.action?spaceKey=IVY&amp;title=Steps+to+Release+to+Testing&amp;linkCreation=true&amp;fromPageId=117729" title="Create Page: Steps to Release to Testing" class="createlink">Steps to Release to Testing<sup><img class="rendericon" src="/confluence/images/icons/plus.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>.</p>

<h5><a name="AReleaseProcessBasedOnIvy-1.Determinethenameofthemoduletobereleased%2Cthenameoftherelease%2Candthenameofthebranch%28ifnotreleasingfromthemaincodeline%29."></a>1. Determine the name of the module to be released, the name of the release, and the name of the branch (if not releasing from the main codeline).</h5>

<p>For example:</p>
<ul>
	<li>the <em>Plum</em> release of the module <em>workgroup_regis</em></li>
</ul>


<p>or:</p>
<ul>
	<li>the <em>Shadow</em> release of the module <em>regadmin</em> from the <em>Branch-Silver-b39</em> branch</li>
</ul>


<h5><a name="AReleaseProcessBasedOnIvy-2.Logintobuildmachineandexecutescripttocreatearelease%28theReleaseBuilderbubbleinthediagramabove%29."></a>2. Login to build machine and execute script to create a release (the <em>Release Builder</em> bubble in the diagram above).</h5>

<p>This will:</p>
<ul>
	<li>send mail announcing that the release is coming to TEST</li>
	<li>tag source</li>
	<li>checkout source from tag</li>
	<li>build from checked out source and store results and a report in Ivy repository</li>
</ul>


<h5><a name="AReleaseProcessBasedOnIvy-3.Onceareleasehasbeencreated%2Caninstanceofitcanbecreatedinanyenvironment%3Atest%2CUAT%2Corprod."></a>3. Once a release has been created, an instance of it can be created in any environment: test, UAT, or prod.</h5>

<p>To install an instance of a release (called  an <em>Install</em> <em>Instance</em> in the diagram above), login to the target machine and execute the install script for that module. This will checkout scripts, retrieve the release artifacts from the Ivy repository, and record data about the install instance in the Ivy repository.</p>

<h3><a name="AReleaseProcessBasedOnIvy-Updatereleases"></a>Update releases</h3>

<p>In the standard release process we rebuild the module to be released, along with each dependent module that has changed since that module was last released. All rebuilds use the latest code checked in on the specified codeline.</p>

<p>In some cases, it's useful to only update the module to be released, while keeping the dependent modules unchanged. For example if a problem is found late in testing, and the fix and its effect are limited to the module to be released, then to minimize retesting we would like to be sure that the fix is the only change we introduce. An <em>update</em> <em>release</em> is created in the same way as the standard release, with the same of flow of events, but dependencies are statically bound rather than dynamically set to the latest version available. Details are in the section <b>Creating an Update Release</b> at <span class="nobr"><a href="/confluence/pages/createpage.action?spaceKey=IVY&amp;title=Steps+to+Release+to+Testing&amp;linkCreation=true&amp;fromPageId=117729" title="Create Page: Steps to Release to Testing" class="createlink">Steps to Release to Testing<sup><img class="rendericon" src="/confluence/images/icons/plus.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>.</p>

<h3><a name="AReleaseProcessBasedOnIvy-Preparation%3ATheintegrationprocess"></a>Preparation: The integration process</h3>

<p>To smooth the transition from the development environment to the testing and production environments, developers use an integration process that is very similar to the release process:<span class="error">Unable to render embedded object: File (devProcess.jpg) not found.</span><br/>
In this process an instance of a module is called an <em>integration</em>. In the development process, integrations play the same role that releases play in the release process but integrations are lightweight. They are designed for quick deployment, not traceability. Integrations lack name, number, report, and tag. Also, they do not retain information on builder, date/time built (although that is encoded in version), or installed instances.<br/>
CruiseControl software creates integrations continuously, as files are checked in.</p>

<h3><a name="AReleaseProcessBasedOnIvy-ForMoreInformation"></a>For More Information</h3>

<p>If you must actually create a release, then you will need to follow the instructions given in <span class="nobr"><a href="/confluence/pages/createpage.action?spaceKey=IVY&amp;title=Steps+to+Release+to+Testing&amp;linkCreation=true&amp;fromPageId=117729" title="Create Page: Steps to Release to Testing" class="createlink">Steps to Release to Testing<sup><img class="rendericon" src="/confluence/images/icons/plus.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>.<br/>
If you need greater detail than that guide provides, then you must read the scripts.</p>

<h3><a name="AReleaseProcessBasedOnIvy-PurposeandScope"></a>Purpose and Scope</h3>

<p>The release process compiles source code, archives the binaries into jars, collects the jars and associated resources, and assigns a unique identifier to the collection. It also runs tests and reports coverage. The release process aims to help:</p>

<ul>
	<li>Ensure correct and repeatable results</li>
	<li>Deploy quickly and easily</li>
	<li>Identify changes and their source</li>
	<li>Facilitate communication between stakeholders</li>
	<li>Minimize overhead, in resources and knowledge</li>
</ul>


<p>This page provides an overview of the steps performed by the build system when a person performs the <span class="nobr"><a href="/confluence/pages/createpage.action?spaceKey=IVY&amp;title=Steps+to+Release+to+Testing&amp;linkCreation=true&amp;fromPageId=117729" title="Create Page: Steps to Release to Testing" class="createlink">Steps to Release to Testing<sup><img class="rendericon" src="/confluence/images/icons/plus.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>. If you need to modify those steps, then this is the place to start to find your way around. This also can serve as an intermediate level tutorial, providing a look "under the hood" for persons performing the <span class="nobr"><a href="/confluence/pages/createpage.action?spaceKey=IVY&amp;title=Steps+to+Release+to+Testing&amp;linkCreation=true&amp;fromPageId=117729" title="Create Page: Steps to Release to Testing" class="createlink">Steps to Release to Testing<sup><img class="rendericon" src="/confluence/images/icons/plus.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>, or adding details for interested readers of <span class="nobr"><a href="/confluence/pages/createpage.action?spaceKey=IVY&amp;title=Introduction+to+the+Release+Process&amp;linkCreation=true&amp;fromPageId=117729" title="Create Page: Introduction to the Release Process" class="createlink">Introduction to the Release Process<sup><img class="rendericon" src="/confluence/images/icons/plus.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>. For more detail, read the scripts.</p>

<h3><a name="AReleaseProcessBasedOnIvy-StagesoftheReleaseProcess"></a>Stages of the Release Process</h3>


<h5><a name="AReleaseProcessBasedOnIvy-1.Setup%3APrepareenvironmentandbuildsystem"></a>1. Setup: Prepare environment and build system</h5>


<h5><a name="AReleaseProcessBasedOnIvy-2.RecursiveRelease%3AReleasemainmoduleandallthemodulesitdependson"></a>2. Recursive Release: Release main module and all the modules it depends on</h5>


<h5><a name="AReleaseProcessBasedOnIvy-3.Install"></a>3. Install</h5>


<h3><a name="AReleaseProcessBasedOnIvy-1.Setup%3APrepareenvironmentandbuildsystem"></a>1. Setup: Prepare environment and build system</h3>

<p>This step ensures that:</p>

<h5><a name="AReleaseProcessBasedOnIvy-Buildpreconditionsaresatisfied"></a>Build pre-conditions are satisfied</h5>

<p>1. Build initiated under designated JDK, on designated build server (currently JDK 1.5.0 on dev-tools2)<br/>
2. Build has required inputs: name of release, and name of existing module to be released<br/>
3. Build workspace is empty</p>

<h5><a name="AReleaseProcessBasedOnIvy-Script%3D%7B%7Bbleu%2Fbuildsystem%2Futil%2Freleasebuild.sh%7D%7Dhttps%3A%2F%2Fregistryfisheye.stanford.edu%2Fbrowse%2FRegistry%2Fbleu%2Fbuildsystem%2Futil%2Freleasebuild.sh%3Fr%3DHEAD"></a><b>Script =</b> <span class="nobr"><a href="https://registry-fisheye.stanford.edu/browse/Registry/bleu/build-system/util/release_build.sh?r=HEAD" title="Visit page outside Confluence" rel="nofollow"><tt>bleu/build-system/util/release_build.sh</tt><sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></h5>

<h5><a name="AReleaseProcessBasedOnIvy-Scriptsusedbybuildsystemareuptodate%28forcorrectness%29andlabeled%28forrepeatability%29%3A"></a>Scripts used by build system are up-to-date (for correctness) and labeled (for repeatability):</h5>

<p>1. Release is assigned a version, independent of the release name: a timestamp, suffixed by <em>-release</em> (e.g. <em>20070604134307-release</em>)<br/>
2. Build system is tagged with the same timestamp, prefixed by <em>Release-</em> (e.g. <em>Release-20070604134307</em>), then checked out of CVS repository using the tag</p>

<h5><a name="AReleaseProcessBasedOnIvy-Script%3D%7B%7Bbleu%2Finit.xml%7D%7Dhttps%3A%2F%2Fregistryfisheye.stanford.edu%2Fbrowse%2FRegistry%2Fbleu%2Finit.xml%3Fr%3DHEAD"></a><b>Script =</b> <span class="nobr"><a href="https://registry-fisheye.stanford.edu/browse/Registry/bleu/init.xml?r=HEAD" title="Visit page outside Confluence" rel="nofollow"><tt>bleu/init.xml</tt><sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></h5>

<h5><a name="AReleaseProcessBasedOnIvy-Toolsandpropertiesusedbybuildsystemaresetup"></a>Tools and properties used by build system are set up</h5>

<p>1. Ivy settings are declared<br/>
2. Module properties are set: category, name, cvs location<br/>
3. Build number calculated</p>

<h5><a name="AReleaseProcessBasedOnIvy-Buildstarted"></a>Build started</h5>

<p>4. Module source is tagged, then checked out of CVS repository using the tag<br/>
5. Invoke publish-release target of <tt>bleu/modules/<em>category-name</em>/<em>module-name</em>/build.xml</tt></p>

<h5><a name="AReleaseProcessBasedOnIvy-Script%3D%7B%7Bbleu%2Fbuildsystem%2Fworkspace%2Fcommon.xml%7D%7Dhttps%3A%2F%2Fregistryfisheye.stanford.edu%2Fbrowse%2FRegistry%2Fbleu%2Fbuildsystem%2Fworkspace%2Fcommon.xml%3Fr%3DHEAD"></a><b>Script =</b> <span class="nobr"><a href="https://registry-fisheye.stanford.edu/browse/Registry/bleu/build-system/workspace/common.xml?r=HEAD" title="Visit page outside Confluence" rel="nofollow"><tt>bleu/build-system/workspace/common.xml</tt><sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></h5>

<h3><a name="AReleaseProcessBasedOnIvy-2.RecursiveRelease%3AReleasemainmoduleandallthemodulesitdependson"></a>2. Recursive Release: Release main module and all the modules it depends on</h3>

<h5><a name="AReleaseProcessBasedOnIvy-Resolvemainmoduledependencies"></a>Resolve main module dependencies</h5>

<p>Download from ivy repository all jars and other artifacts declared (in Ivy file) as dependencies needed to compile, test, or deploy main module. Put them in the ivy cache.</p>

<h5><a name="AReleaseProcessBasedOnIvy-Deliveraresolvedivyfileofthecurrentmodule%2Candpossiblydorecursivedeliveryofdependencies"></a>Deliver a resolved ivy file of the current module, and possibly do recursive delivery of dependencies</h5>

<p>1. Generate a resolved ivy file, with dynamic revisions replaced by the static ones that have been found during the resolve step, so the ivy file can be used later to obtain the same versions of artifacts it depends on.</p>

<p>2. Trigger the recursive release process, using the resolved ivy file, because the module may have dependencies which need to be released.</p>

<h5><a name="AReleaseProcessBasedOnIvy-Scripts"></a><b>Scripts</b> </h5>
<p><tt>bleu/modules/&lt;category&gt;/&lt;module&gt;/build.xml</tt><br/>
<tt>bleu/modules/&lt;category&gt;/category.xml</tt><br/>
<span class="nobr"><a href="https://registry-fisheye.stanford.edu/browse/Registry/bleu/build-system/module/common.xml?r=HEAD" title="Visit page outside Confluence" rel="nofollow"><tt>bleu/build-system/module/common.xml</tt><sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span><br/>
<span class="nobr"><a href="https://registry-fisheye.stanford.edu/browse/Registry/bleu/build-system/module/common-ivy.xml?r=HEAD" title="Visit page outside Confluence" rel="nofollow"><tt>bleu/build-system/module/common-ivy.xml</tt><sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></p>

<h3><a name="AReleaseProcessBasedOnIvy-Install"></a>Install</h3>

<h5><a name="AReleaseProcessBasedOnIvy-Checkoutbootstrapscriptforinstallandinvokeit%2Cpassingitthemodulename%2Cversion%2Cbranch%2Candinstance%28ifinstance%3Dtest%29.Uponcompletionofinstall%2CcopyreleasemetadatatoIvyrepository."></a>Checkout bootstrap script for install and invoke it, passing it the module name, version, branch, and instance (if instance=test). Upon completion of install, copy release metadata to Ivy repository.</h5>
<p><tt>/apps/registry/build-system/staging/&lt;module&gt;-test-install.sh</tt> (on build host) installs a TEST instance of &lt;module&gt;<br/>
<tt>/apps/registry/build-system/staging/&lt;module&gt;-install.sh</tt> (on build host) installs a UAT or PROD instance of &lt;module&gt;<br/>
These files are generated by <span class="nobr"><a href="https://registry-fisheye.stanford.edu/browse/Registry/bleu/build-system/module/common-ivy.xml?r=HEAD" title="Visit page outside Confluence" rel="nofollow"><tt>bleu/build-system/module/common-ivy.xml</tt><sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></p>

<h5><a name="AReleaseProcessBasedOnIvy-Bootstrap%3ACheckinstallhost%2CsetCVSoptions%2Cloadreleasemetadata%2Cstartinstallofmodule"></a>Bootstrap: Check install host, set CVS options, load release metadata, start install of module</h5>
<p><span class="nobr"><a href="https://registry-fisheye.stanford.edu/browse/Registry/bleu/init.xml?r=HEAD" title="Visit page outside Confluence" rel="nofollow"><tt>bleu/init.xml</tt> <sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></p>


<h5><a name="AReleaseProcessBasedOnIvy-Installmodule%3A"></a>Install module: </h5>

<p>1. Checkout module </p>
<h5><a name="AReleaseProcessBasedOnIvy-Script%3D%7B%7Bbleu%2Fbuildsystem%2Fworkspace%2Fcommoncvs.xml%7D%7Dhttps%3A%2F%2Fregistryfisheye.stanford.edu%2Fbrowse%2FRegistry%2Fbleu%2Fbuildsystem%2Fworkspace%2Fcommoncvs.xml%3Fr%3DHEAD"></a><b>Script =</b> <span class="nobr"><a href="https://registry-fisheye.stanford.edu/browse/Registry/bleu/build-system/workspace/common-cvs.xml?r=HEAD" title="Visit page outside Confluence" rel="nofollow"><tt>bleu/build-system/workspace/common-cvs.xml</tt><sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></h5>

<p>2. Note: 2a, 2b, and 2c are interleaved (not sequential)</p>

<p>2a. Perform steps common to all installs</p>
<ul class="alternate" type="square">
	<li>Start logging install activity</li>
	<li>Get instance (uat or prod)</li>
	<li>Use Ivy to download zip containing resources necessary for the installation: install properties, configurations files, jsps, htmls, ... depending on the application type</li>
	<li>Extract the zip in the module directory</li>
	<li>Load install properties: since properties are immutable, loading in order of increasing scope allows specific cases to override general defaults.<br/>
Some properties are set dynamically during the install, using Ant's token filtering mechanism. For details, see <span class="nobr"><a href="/confluence/pages/createpage.action?spaceKey=IVY&amp;title=Install+Tokens&amp;linkCreation=true&amp;fromPageId=117729" title="Create Page: Install Tokens" class="createlink">Install Tokens<sup><img class="rendericon" src="/confluence/images/icons/plus.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>.</li>
	<li>Use Ivy to download jars required by module (including the jar published by the module itself) directly in destination jar dir</li>
	<li>Stop logging</li>
</ul>


<h5><a name="AReleaseProcessBasedOnIvy-Script%3D%7B%7Bbleu%2Fbuildsystem%2Finstall%2Fcommon.xml%7D%7Dhttps%3A%2F%2Fregistryfisheye.stanford.edu%2Fbrowse%2FRegistry%2Fbleu%2Fbuildsystem%2Finstall%2Fcommon.xml%3Fr%3DHEAD"></a><b>Script =</b> <span class="nobr"><a href="https://registry-fisheye.stanford.edu/browse/Registry/bleu/build-system/install/common.xml?r=HEAD" title="Visit page outside Confluence" rel="nofollow"><tt>bleu/build-system/install/common.xml</tt><sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></h5>

<p>2b. Perform install steps specific to this category<br/>
Files shared by modules in the category are collected in a shared module. That shared module, declared as an Ivy install dependency, is installed in this step. </p>

<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'>Category</th>
<th class='confluenceTh'>Shared module</th>
</tr>
<tr>
<td class='confluenceTd'> regis </td>
<td class='confluenceTd'> regis_admin </td>
</tr>
<tr>
<td class='confluenceTd'> slog </td>
<td class='confluenceTd'> slog_admin </td>
</tr>
<tr>
<td class='confluenceTd'> web </td>
<td class='confluenceTd'> web_configuration_tomcat6 </td>
</tr>
<tr>
<td class='confluenceTd'> xmldoc </td>
<td class='confluenceTd'> web_configuration_tomcat6 </td>
</tr>
</tbody></table>

<h5><a name="AReleaseProcessBasedOnIvy-Script%3D%7B%7Bbleu%2Fmodule%2F%3Ccategory%3E%2Fcategoryinstall.xml%7D%7D"></a><b>Script =</b> <tt>bleu/module/&lt;category&gt;/category-install.xml</tt></h5>

<p>2c. Perform install steps specific to this module</p>
<h5><a name="AReleaseProcessBasedOnIvy-Script%3D%7B%7Bbleu%2Fmodule%2F%3Ccategory%3E%2F%3Cmodule%3E%2Finstall.xml%7D%7D"></a><b>Script =</b> <tt>bleu/module/&lt;category&gt;/&lt;module&gt;/install.xml</tt></h5></div>


</td></tr></table></div>
<p>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
    <tr>
        <td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="http://cwiki.apache.org/confluence/images/border/spacer.gif" width="1" height="1" border="0"/></td>
    </tr>
</table>

<div class="smalltext">
    Powered by
    <a href="http://www.atlassian.com/software/confluence/default.jsp?clicked=footer" class="smalltext">Atlassian Confluence</a>
    (Version: 2.2.9 Build:#527 Sep 07, 2006)
    -
    <a href="http://jira.atlassian.com/secure/BrowseProject.jspa?id=10470" class="smalltext">Bug/feature request</a><br/>
    <br>
    <a href="http://cwiki.apache.org/confluence/users/viewnotifications.action">Unsubscribe or edit your notifications preferences</a>

</div>

</body>
</html>


Mime
View raw message