<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you 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. 
-->
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <link rel="stylesheet" href="../style/bootstrap-1-3-0-min.css" type="text/css" />
  <link rel="stylesheet" href="../style/style.css" type="text/css" />
    <link rel="alternate" title="general@incubator.apache.org Archives" type="application/atom+xml" href="http://mail-archives.apache.org/mod_mbox/incubator-general/?format=atom" />
    <title>Updating the top-level Incubator website - Apache Incubator</title>
  
 </head>
 <body>
 <div class="container">
  <div class="row">
<div class="span12">
  <a href="http://www.apache.org/"><img src="http://incubator.apache.org/images/asf_logo_wide_small.png" alt="The Apache Software Foundation" border="0" style="margin-top: 2px" width="62%"/></a>
</div>
<div class="span4">
<a href="http://incubator.apache.org/"><img src="../images/egg-logo2.png" alt="Apache Incubator" border="0"/></a>
</div>
</div>
  <div class="row"><div class="span16"><hr noshade="noshade" size="1"/></div></div>
  
  <div class="row">
   <div class="span4">
    <form action="http://www.google.com/search" method="get">
     <input value="incubator.apache.org" name="sitesearch" type="hidden"/>
     <input size="20" name="q" id="query" type="text" value="search..."
      onclick="if(this.value == 'search...') {this.value = ''}"/>
     <input name="Search" value="Go" type="submit"/>
    </form>
          <div class="menuheader">General</div>
    <menu compact="compact">
          <li><a href="../index.html">Welcome</a></li> 
          <li><a href="../incubation/Process_Description.html">Incubation Overview</a></li> 
          <li><a href="../incubation/Incubation_Policy.html">Incubation Policy</a></li> 
          <li><a href="../guides/index.html">Incubation Guides</a></li> 
          <li><a href="../incubation/Roles_and_Responsibilities.html">Roles and Responsibilities</a></li> 
          <li><a href="../faq.html">General FAQ</a></li> 
          <li><a href="http://wiki.apache.org/incubator">Incubator Wiki</a></li> 
          <li><a href="../whoweare.html">Who We Are</a></li> 
          <li><a href="../sitemap.html">Site Map</a></li> 
            </menu>
      <div class="menuheader">Status</div>
    <menu compact="compact">
          <li><a href="../projects/index.html">Project List</a></li> 
          <li><a href="../clutch.html">Clutch Report</a></li> 
          <li><a href="../ip-clearance/index.html">IP Clearance</a></li> 
          <li><a href="../history/index.html">Incubator History</a></li> 
            </menu>
      <div class="menuheader">Entry Guides</div>
    <menu compact="compact">
          <li><a href="../guides/proposal.html">Proposal Guide</a></li> 
            </menu>
      <div class="menuheader">Podling Guides</div>
    <menu compact="compact">
          <li><a href="../guides/committer.html">Podling Committers</a></li> 
          <li><a href="../guides/ppmc.html">Podling PMC (PPMC)</a></li> 
          <li><a href="../guides/mentor.html">Podling Mentor</a></li> 
          <li><a href="../guides/releasemanagement.html">Podling Releases</a></li> 
          <li><a href="../guides/branding.html">Podling Branding/Publicity</a></li> 
          <li><a href="../guides/sites.html">Podling Websites</a></li> 
          <li><a href="../guides/graduation.html">Graduation</a></li> 
          <li><a href="../guides/retirement.html">Retirement</a></li> 
            </menu>
      <div class="menuheader">Other Guides</div>
    <menu compact="compact">
          <li><a href="../guides/participation.html">Participation</a></li> 
          <li><a href="../faq.html">General FAQ</a></li> 
          <li><a href="../guides/pmc.html">Incubator PMC (IPMC)</a></li> 
          <li><a href="../guides/chair.html">IPMC Chair</a></li> 
          <li><a href="../guides/lists.html">Mailing Lists</a></li> 
          <li><a href="../guides/website.html">Incubator Website</a></li> 
            </menu>
      <div class="menuheader">ASF</div>
    <menu compact="compact">
          <li><a href="http://www.apache.org/foundation/how-it-works.html">How Apache Works</a></li> 
          <li><a href="http://www.apache.org/dev/">Developer Documentation</a></li> 
          <li><a href="http://www.apache.org/foundation/">Foundation</a></li> 
          <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsor Apache</a></li> 
          <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li> 
            </menu>
    <!-- start Ads Server -->
    <iframe src="http://www.apache.org/ads/buttonbar.html"
     style="border-width:0; float: left" frameborder="0" scrolling="no"
     width="135" height="265"></iframe>
    <!-- end Ads Server -->
   </div>
   
   <div class="span12">
            <h2 id='Overview+of+the+Incubator+site'><img src="../images/redarrow.gif" />Overview of the Incubator site</h2>
<div class="section-content">
<p>The Incubator website is generated by the Apache CMS, but it
         is still using the Anakia-based page generation mechanism that was
         used before, 
         triggered by a <a href="http://svn.apache.org/repos/asf/incubator/public/trunk/build_cms.sh">CMS external build script</a>.
      </p>
<p>
         This means that you can edit the content either directly in svn
         (and use ant to generate and check the results), or edit via the
         CMS interface, but final publishing has to be done via the CMS
         (see below for how).
      </p>
<p>The source to the Incubator website lives at:</p>
<div class="note">
<note><a href="http://svn.apache.org/repos/asf/incubator/public/trunk">
          http://svn.apache.org/repos/asf/incubator/public/trunk</a></note>
</div>
<p>The production documents are kept in the "infra" SVN repository
        at https://svn.apache.org/repos/infra/websites/production/incubator.
        That directory is then managed by svnpubsub on the server
         to re-create the live website.</p>
</div>
        <h2 id='Edit+the+content'><img src="../images/redarrow.gif" />Edit the content</h2>
<div class="section-content">
<h3 id='Help+Wanted'>Help Wanted!</h3>
<div class="section-content">
<p>
         People with commit access to the "incubator" SVN can edit the source
         documents in the "content" directory. That is any ASF Member and
         any committer on a current podling in incubation. So you can all help to
         keep your project's Status page up-to-date, and if you find problems with
         the "guidelines" docs then can immediately fix them.
         If unsure, then discuss changes on the general mailing list.
         Note that the "policy" documents need special treatment.
        </p>
<p>
         Anyone else can send patches to those documents to the INCUBATOR issue tracker.
        </p>
</div>
<h3 id='Checkout+the+Incubator+SVN'>Checkout the Incubator SVN site</h3>
<div class="section-content">
<code>
svn co http://svn.apache.org/repos/asf/incubator/public/trunk incubator<br />
cd incubator
</code>
<div class="note">
<note>If you are a committer and intending to commit your changes,
              please ensure you use https instead of http.</note>
</div>
</div>
<h3 id='Edit+the+source+documents'>Edit the source documents</h3>
<div class="section-content">
<p>The source content is in Anakia xdoc format at the "content" directory.</p>
</div>
<h3 id='Add+a+new+document'>Add a new document</h3>
<div class="section-content">
<p>Add new documents in the content directories, then do 'svn add'.</p>
</div>
<h3 id='Edit+your+project+status+page'>Edit your project status page</h3>
<div class="section-content">
<p>The sources for the status pages are in
           <code>content/projects/*.xml</code></p>
<h4 id='create-status-page'>Create Status Page</h4>
<div class="section-content">
<ol>
           <li>
           Copy from the template
           <code>content/projects/incubation-status-template.xml</code> to
           <code>content/projects/${project}.xml</code> then <code>'svn add'</code>
           </li>
           <li>
           The copied template contains customization instructions. Follow them.
           </li>
           <li>
           Go through the template actions. Delete any which are not 
           relevant and mark as completed any actions which are already 
           done.
           </li>
           <li>
           Add an entry with status "current" to the podlings summary file at
           <code>content/podlings.xml</code> and ensure that the
           list of mentors is up-to-date.
           </li>
           <li>
           Do <code>'svn update'</code> to be sure you are up-to-date.
           </li>
           <li>
           Regenerate the documentation by running <code>'ant'</code> or <code>'build'</code> from the top-level.
           See more detail about this process in the following section. Note that
           there will be many output changes because a new entry has been added to
           the right-hand menu which is replicated on every page.  The results wil
           be built to the <pre>target/site</pre> directory by default- please look them over,
           but do not add this directory nor its contents to svn!
            </li>
           <li>
           <code>svn commit</code> all of the source changes with a good message.
           </li>
           <li>
           Review your changes via the
           "<a href="lists.html#cvs+at+incubator.apache.org">commits</a>"
           mail list.
           </li>
           <li>
           Wait a minute or two for the CMS to build your changes, then publish them
           by visiting the <a href="https://cms.apache.org/incubator/publish">Publish site</a>
           page.  
           See other <a href="http://www.apache.org/dev/project-site.html">notes</a>
           about this step.
           </li>
   </ol>
<div class="note">
<note>This status page is to be kept up to date regularly. This is NOT the same as the 'status report' which is a
           board report entry in the incubator wiki. You still need to follow your monthly/quarterly status reports
   </note>
</div>
</div>
</div>
</div>
        <h2 id='Generating+the+top-level+website'><img src="../images/redarrow.gif" />Generating the top-level website</h2>
<div class="section-content">
<div class="note">
<note>Please generate the website yourself and check in the changes.
             If you have any problems, ask for help on the Incubator's
             <a href="lists.html#general+at+incubator.apache.org">general</a> list.</note>
</div>
<p>In the top-level "incubator" SVN directory, do 'ant'
           to render the HTML files into the <pre>target/site</pre> directory.
           (If you don't have ant installed, you can run build.sh or build.bat
           instead.)  If the site built without errors, then do the usual
           SVN stuff: 'svn status' 'svn add' 'svn diff' 'svn commit'.</p>
<p>
           Review your changes via the
           "<a href="lists.html#cvs+at+incubator.apache.org">commits</a>"
           mail list.
        </p>
<p>To update the website, visit <a href="https://cms.apache.org/incubator/publish">Publish site</a>
        and fill out the form.  Don't forget to give the CMS build system time to build your changes!
        The CMS provides a page for following the build process.
        </p>
</div>
        <h2 id='other'><img src="../images/redarrow.gif" />Other notes</h2>
<div class="section-content">
<p>Make sure that your subversion client is properly
        <a href="http://www.apache.org/dev/version-control.html#https-svn">configured</a>.</p>
<p>See other notes for maintenance of
        <a href="http://www.apache.org/dev/project-site.html">apache.org project websites</a>.</p>
<p>
        If you are still having trouble committing, then perhaps the Subversion
        authorization is not yet properly
        <a href="mentor.html#Set+Up+Repository">configured</a>
        to enable your group's access.
      </p>
</div>
       </div>
   </div>
  
   <div class="row"><div class="span16"><hr noshade="noshade" size="1"/></div></div>
  <div class="row">
   <div class="span16 footer">
     Copyright &#169; 2009-2016 The Apache Software Foundation<br />
     Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.<br/>
     Apache Incubator, Apache, the Apache feather logo, and the Apache Incubator project logo are trademarks of The Apache Software Foundation.
     
     
    </div>
  </div>
 </div> 
 </body>
</html>
