<?xml version='1.0' ?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
               "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!ENTITY % myvars SYSTEM "../variables.ent">
%myvars;
]>
<sect1 id="submissions">
  <title>Contributions</title>

  <authorblurb>
    <para>by <ulink url="mailto:joel@aufrecht.org">Joel Aufrecht</ulink></para>
  </authorblurb>
  
  <sect2>
    <title>Contributing a Package</title>
    <orderedlist>
      <listitem>
        <para>Get commit access to the repository.  Core developers
        already have this.  We should have a process where anybody can
        register a package name and (possibly after a delay or
        security audit) get commit rights to a subdir of the same name.</para>
      </listitem>
      <listitem>
        <para>Make sure your package is ready to contribute.</para>
        <orderedlist>
          <listitem>
            <para>myfirstpackage.info should have all the basic tags auto-generated by the APM, plus vendor and maturity.  Maturity should be:</para>
            <programlisting>&lt;maturity&gt;
  &lt;platform id="openacs-core" version="5.0"&gt;
    &lt;level descr="New Submission"&gt;0&lt;/level&gt;
  &lt;/platform&gt;
&lt;/maturity&gt;</programlisting>
        <para>with the appropriate core version number.</para>
          </listitem>
          <listitem>
            <para>has automated tests - at a minimum, every API function should be covered by a smoke test.</para>
          </listitem>
          <listitem>
            <para>Has documentation.  An install guide, if there are any special installation requirements (such as additional software); a user guide; an administrator guide.</para>
          </listitem>
        </orderedlist>
      </listitem>
      <listitem>
        <para>Get a clean copy of your package - no ~ files or .# files or CVS files.  Assuming you have been developing in a local cvs repository and your local version 1.0.0 is the one you want to contribute, the easy way to do this is:</para>
        <screen>cd /var/tmp
cvs -d /cvsroot openacs-4/packages/myfirstpackage export -r 1-0-0</screen>
      </listitem>
      <listitem>
        <para>Import it to the openacs.org cvs tree</para>
        <screen>cd openacs-4/packages/myfirstpackage
cvs -d :ext:you@cvs.openacs.org:/cvsroot import -m "initial upload" openacs-4/contrib/packages/myfirstpackage your_vendor_tag myfirstpackage-1-0-0
</screen>
      </listitem>
      <listitem>
        <para>Tag the imported package for compatibility with core:</para>
        <screen>cvs tag openacs-5-0-compat</screen>
      </listitem>
      <listitem>
        <para>Wait for someone to set up nightly rebuild of the Automatic Repository Generator, less than 24 hours after which point your package will be put in the OpenACS.org repository and become available to everybody via "Install from Repository"</para>
      </listitem>
    </orderedlist>

  </sect2>


</sect1>
