<!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" />
        <title>Facilities for Incubator management - 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='preamble'><img src="./images/redarrow.gif" />Facilities for Incubator management</h2>
<div class="section-content">
<h3 id='TOC'>Contents</h3>
<div class="section-content">
<ul>
<li><a href='#preamble'>
Facilities for Incubator management
 </a>
 <ul>
<li><a href='#TOC'>
Contents
 </a>
</li>
<li><a href='#overview'>
Overview
 </a>
</li>
</ul>
</li>
<li><a href='#metadata'>
Metadata
 </a>
</li>
<li><a href='#publish'>
Remember to publish the generated results
 </a>
</li>
<li><a href='#current-podlings'>
Overview list of current podlings
 </a>
</li>
<li><a href='#report-schedule'>
Monthly Reporting Schedule
 </a>
</li>
<li><a href='#report-next-month'>
Reporting next month
 </a>
</li>
<li><a href='#report-prep'>
Monthly Report preparation
 </a>
</li>
<li><a href='#shepherds'>
Shepherds
 </a>
</li>
<li><a href='#clutch'>
Status of the Clutch
 </a>
</li>
<li><a href='#reminders'>
Reporting reminder emails
 </a>
</li>
<li><a href='#age'>
Incubator podlings by age
 </a>
</li>
<li><a href='#history'>
Incubator history
 </a>
</li>
<li><a href='#others'>
Others yet to be documented
 </a>
</li>
</ul>
</div>
<h3 id='overview'>Overview</h3>
<div class="section-content">
<p>
          Describes the various facilities that assist with Incubator management,
          explains how are they generated, and emphasises the need to keep the project
          summary metadata up-to-date.
        </p>
<p>
          This assists with management of the Incubator project as a whole,
          and is also useful for each project to manage their own progress
          through incubation.
        </p>
</div>
</div>
        <h2 id='metadata'><img src="./images/redarrow.gif" />Metadata</h2>
<div class="section-content">
<p>
        First the metadata. Each project needs to maintain their entry in the
        content/podlings.xml file in SVN
        (see <a href="guides/mentor.html#Overview">notes</a>).
        The following facilities rely on that being up-to-date.
        Please be a self-sufficient project from the very beginning.
        Do not wait for your Mentors - it is up to you.
      </p>
<p>
        Add the entry for your project as soon as possible after the Acceptance
        phase is complete. Keep it up-to-date throughout your incubation
        (e.g. mentor changes) and during the
        <a href="/guides/graduation.html#unincubate">graduation</a> phases.
      </p>
</div>
        <h2 id='publish'><img src="./images/redarrow.gif" />Remember to publish the generated results</h2>
<div class="section-content">
<p>
        When changes are committed to the podlings.xml summary file,
        then the CMS is triggered and generates the following facilities.
        Please follow through to publish the changes.
        See <a href="/guides/website.html">notes</a>.
      </p>
</div>
        <h2 id='current-podlings'><img src="./images/redarrow.gif" />Overview list of current podlings</h2>
<div class="section-content">
<p>
        The "<a href="/projects/#current">Currently in incubation</a>" table.
        Shows Description, Champion, Mentors, and Start date.
      </p>
<p>
        Note that each project can be directly referenced, e.g.
        <a href="/projects/#allura">http://incubator.apache.org/projects/#allura</a>
      </p>
<p>
        Generated by CMS from podlings.xml using content/stylesheets/project-index.xsl file.
        See notes in that stylesheet and at build.xml file.
      </p>
<p>
        Also the concise table on the Incubator home page.
      </p>
</div>
        <h2 id='report-schedule'><img src="./images/redarrow.gif" />Monthly Reporting Schedule</h2>
<div class="section-content">
<p>
        <a href="/report-groups.txt">http://incubator.apache.org/report-groups.txt</a>
      </p>
<p>
        Generated by CMS from podlings.xml using report-groups.xsl file.
        See notes in that stylesheet and at build.xml file.
      </p>
</div>
        <h2 id='report-next-month'><img src="./images/redarrow.gif" />Reporting next month</h2>
<div class="section-content">
<p>
        <a href="/report-next-month.html">http://incubator.apache.org/report-next-month.html</a>
      </p>
<p>
        Generated by CMS from podlings.xml using report-next-month.xsl file.
        See notes in that stylesheet and at build.xml file.
      </p>
</div>
        <h2 id='report-prep'><img src="./images/redarrow.gif" />Monthly Report preparation</h2>
<div class="section-content">
<p>
        The input to the IPMC report to the Board.
        See <a href="http://wiki.apache.org/incubator/#Board_Reports">Overview</a>
        and table of reports.
      </p>
<p>
        The Wiki report templates are generated manually around the changeover to each new month.
      </p>
<p>
        Generated manually from clutch.pkl (hence dependent on podlings.xml) using clutch2report.py file.
        See <a href="http://wiki.apache.org/incubator/ReportTools">notes</a>.
      </p>
</div>
        <h2 id='shepherds'><img src="./images/redarrow.gif" />Shepherds</h2>
<div class="section-content">
<p>
        Each month a set of shepherds are assigned to cast fresh eyes over
        the state of each podling.
      </p>
<p>
        Anyone can be a shepherd. Please add and maintain your entry in the
        content/shepherds.json file in SVN.
      </p>
<p>
        The script assign_shepherds.py uses that data around the beginning of
        each month to generate the relevant sections of the monthly report
        wiki page.
      </p>
</div>
        <h2 id='clutch'><img src="./images/redarrow.gif" />Status of the Clutch</h2>
<div class="section-content">
<p>
        The <a href="/clutch.html">Clutch</a> table shows the status of
        various aspects of incubation for each current project.
        It also <a href="/clutch.html#steps">explains</a> each step
        and links to some relevant documentation.
      </p>
<p>
        Note that each project row can be directly referenced, e.g.
        <a href="/clutch.html#allura">http://incubator.apache.org/clutch.html/#allura</a>
      </p>
<p>
        Clutch uses podlings.xml and each project status page and other resources.
        Run this manually from the top of SVN.
        See operational <a href="/clutch.html#notes">notes</a> and other notes in clutch.py
      </p>
<p>
        These are some of the resources that are consulted:
      </p>
<ul>
        <li>
          The podling summary <a href="#metadata">metadata</a>.
        </li>
        <li>
          Each podling status page.
        </li>
        <li>
          The listing of all ASF
          <a href="http://people.apache.org/committers-by-project.html">committers-by-project</a>.
          (FIXME: Note that some recent projects are completely missing from that page,
          e.g. Allura, Helix, etc.)
        </li>
        <li>
          The listing of all project
          <a href="http://mail-archives.apache.org/mod_mbox/">mail lists</a> archives.
          If your podling is missing, then it might be because the first posts
          are not yet moderated through.
        </li>
        <li>
          The listing of all
          <a href="http://svn.apache.org/repos/asf/incubator">Incubator SVN</a>.
        </li>
        <li>
          The listing of all Incubator release distribution areas at a.o/dist/incubator/
        </li>
      </ul>
</div>
        <h2 id='reminders'><img src="./images/redarrow.gif" />Reporting reminder emails</h2>
<div class="section-content">
<p>
        At the beginning of each month, reminder emails are automatically sent
        to the dev mail list for each project that is due to report.
        Note that these are just reminders, as each project already knows when
        they are reporting.
      </p>
<p>
        Ensure that your podling summary <a href="#metadata">metadata</a>
        is up-to-date. If you have finished the initial "every month for three months"
        phase then edit the "reporting" element to go on quarterly rotation,
        otherwise you will keep getting reminders.
      </p>
<p>
        There are three groups:<br />
        group-1=Jan,Apr,Jul,Oct group-2=Feb,May,Aug,Nov group-3=Mar,Jun,Sep,Dec
      </p>
<p>
        The reminder robot uses the lists of report_due_*.txt files, being the
        dev mail list addresses of the set of projects that are due to report.
        Gathered, validated, and output by Clutch.
        See <a href="/clutch.html#data">data files</a> and
        <a href="/clutch.html#notes">notes</a>.
      </p>
<p>
        See the
        "<a href="https://svn.apache.org/repos/infra/infrastructure/trunk/tools/board_reminders/">board_reminders</a>"
        code in infrastructure SVN.
      </p>
<p>
        Note: Eventually it would be good to extract the handling of these
        lists away from Clutch.
      </p>
</div>
        <h2 id='age'><img src="./images/redarrow.gif" />Incubator podlings by age</h2>
<div class="section-content">
<p>
        <a href="https://whimsy.apache.org/incubator/podlings/by-age">Incubator podlings by age</a>
      </p>
<p>
        Uses podlings.xml file.
        See <a href="https://svn.apache.org/repos/infra/infrastructure/trunk/projects/whimsy/">whimsy</a>
        code in infrastructure SVN.
      </p>
</div>
        <h2 id='history'><img src="./images/redarrow.gif" />Incubator history</h2>
<div class="section-content">
<p>
        <a href="/history/">http://incubator.apache.org/history/</a>
      </p>
<p>
        Generated by CMS from podlings.xml using current.xsl file and entry.xsl file.
        See notes in that stylesheet and at build.xml file.
        This generates two files in the "history" directory
        (current.txt and entry.txt) which are then utilised by the timeplot.
      </p>
</div>
        <h2 id='others'><img src="./images/redarrow.gif" />Others yet to be documented</h2>
<div class="section-content">
<pre>
* List of Mentors:
The Overview list shows the Mentors for each podling. See #current-podlings above.
Also there is a list of the Mentors and their podlings:
http://incubator.apache.org/clutch.html#mentors
gathered from podlings.xml

* Ant target "ppmc-aliases".

* The "tools" directory in SVN.
</pre>
</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>
