<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">


    <!-- ====================================================================== -->
    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
    <!-- ====================================================================== -->
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
            <style type="text/css">@import "stylesheets/base.css";</style>
                                          <meta name="author" value="
 Apache UIMA Documentation Team">
  <meta name="email" value="dev@uima.apache.org">
                        
            
                        
                        <title>Apache UIMA - Signing Eclipse Plugins - release process</title>
            
            <!-- Begin Cookie Consent plugin by Silktide - https://silktide.com/cookieconsent -->
            <!-- Commented out because implied consent is not compatible with GDPR -->
            <!--
            <script type="text/javascript">
                window.cookieconsent_options = {"message":"This website uses cookies to ensure you get the best experience on our website","dismiss":"Got it!","learnMore":"More info","link":"https://uima.apache.org/privacy-policy.html","theme":"dark-bottom"};
            </script>
            
            <script type="text/javascript" src="/cookieconsent2/cookieconsent.min.js"></script>
            -->
            <!-- End Cookie Consent plugin -->
            
            <!-- Begin Google Analytics -->
            <!-- Commented out because GA requires consent according to GDPR -->
            <!--
            <script>
              (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
              (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
              m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
              })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
            
              ga('create', 'UA-70846351-1', 'auto');
              ga('set', 'anonymizeIp', true);
              ga('send', 'pageview');
            
            </script>
            -->
            <!-- End Google Analytics -->
        </head>

        <body>
          <div class="topLogos">        
            <table border="0" width="100%" cellspacing="0">
                <!-- TOP IMAGE -->
                <tr>
                    <td align='LEFT'>
                      <a href="index.html">
                                    <img style="border: 1px solid black;" src="./images/UIMA_banner2tlpTm.png" alt="UIMA project logo" border="0"/>
                            </a>
                    </td>
                    <td align='CENTER'>
                          <div class="pageBanner">Signing Eclipse Plugins - release process</div>
                    </td>
                    <td align='RIGHT'>
                                  <a href="https://www.apache.org">
        <img src="./images/asf-logo-on-white-smallTm.png" alt="Apache UIMA" border="0"/>
      </a>
                          </td>
                </tr>
            </table>
            <hr noshade="" size="1"/>
            </div>
            <table border="0" width="100%" cellspacing="4">
              <tr>
                <td align='RIGHT' colspan="2">
                  <form method="get" action="https://www.google.com/search">
                    Search the site
                    <input type="text"   name="q" size="25" maxlength="255" value="" />
                    <input type="hidden" name="sitesearch" value="https://uima.apache.org/" />
                    <input name="Search" value="Search Site" type="submit"/>
                  </form>
                </td>
              </tr>
              <tr> <!-- LEFT SIDE NAVIGATION -->
                <td width="20%" valign="top">






                   <!-- regular menu -->
                      <div class="navBar">
                  <br/>
            <div class="navBarItem">      <div class="navPartHeading">General</div>
                </div>
                <div class="navBar">
                  <div class="navBarItem">      <a href="./index.html">Home</a>
                </div>
                          <div class="navBarItem">      <a href="./downloads.cgi">Downloads</a>
                </div>
                          <div class="navBarItem">      <a href="./documentation.html">Documentation</a>
                </div>
                          <div class="navBarItem">      <a href="./news.html">News</a>
                </div>
                          <div class="navBarItem">      <a href="./publications.html">Publications</a>
                </div>
                    <br style="line-height: .5em"/>
                          <div class="navBarItem">      <a href="https://issues.apache.org/jira/browse/uima" target="_blank" rel="noopener">Issue tracker <img src="images/offsitelink.png"/></a>
                </div>
                          <div class="navBarItem">      <a href="https://cwiki.apache.org/confluence/display/UIMA/" target="_blank" rel="noopener">Wiki <img src="images/offsitelink.png"/></a>
                </div>
                    <br style="line-height: .5em"/>
                          <div class="navBarItem">      <a href="https://cwiki.apache.org/confluence/display/UIMA/Powered+by+Apache+UIMA" target="_blank" rel="noopener">Powered By UIMA <img src="images/offsitelink.png"/></a>
                </div>
            </div>
                      <br/>
            <div class="navBarItem">      <div class="navPartHeading">Community</div>
                </div>
                <div class="navBar">
                  <div class="navBarItem">      <a href="./get-involved.html">Get Involved</a>
                </div>
                          <div class="navBarItem">      <a href="./mail-lists.html">Mailing Lists</a>
                </div>
                          <div class="navBarItem">      <a href="./contribution-policy.html">Contribution Policies</a>
                </div>
                          <div class="navBarItem">      <a href="./faq.html">FAQ</a>
                </div>
                          <div class="navBarItem">      <a href="./project-guidelines.html">Project Guidelines</a>
                </div>
            </div>
                      <br/>
            <div class="navBarItem">      <div class="navPartHeading">Components & Tools</div>
                </div>
                <div class="navBar">
                  <div class="navBarItem">      <a href="./sandbox.html#uima-addons-annotators">Annotators</a>
                </div>
                          <div class="navBarItem">      <a href="./toolsServers.html">Tools & Servers</a>
                </div>
                          <div class="navBarItem">      <a href="./sandbox.html">Addons and Sandbox</a>
                </div>
                          <div class="navBarItem">      <a href="./ruta.html">UIMA Ruta</a>
                </div>
                          <div class="navBarItem">      <a href="https://github.com/apache/uima-uimafit" target="_blank" rel="noopener">uimaFIT <img src="images/offsitelink.png"/></a>
                </div>
                          <div class="navBarItem">      <a href="./external-resources.html">External Resources</a>
                </div>
            </div>
                      <br/>
            <div class="navBarItem">      <div class="navPartHeading">Development</div>
                </div>
                <div class="navBar">
                  <div class="navBarItem">      <a href="./dev-quick.html">Quick Start: building</a>
                </div>
                          <div class="navBarItem">      <a href="./building-uima.html">Building from Source</a>
                </div>
                          <div class="navBarItem">      <a href="./one-time-setup.html">One-time setups</a>
                </div>
                          <div class="navBarItem">      <a href="./svn.html">Source Code</a>
                </div>
                          <div class="navBarItem">      <a href="./release.html">Doing a UIMA release</a>
                </div>
                          <div class="navBarItem">      <a href="https://www.apache.org/security/committers.html" target="_blank" rel="noopener">Doing a CVE (Apache) <img src="images/offsitelink.png"/></a>
                </div>
                          <div class="navBarItem">      <a href="./eclipse-update-site.html">Eclipse Update Sites</a>
                </div>
                          <div class="navBarItem">      <a href="./git.html">GIT</a>
                </div>
                          <div class="navBarItem">      <a href="./codeConventions.html">Code Conventions</a>
                </div>
                          <div class="navBarItem">      <a href="./uima-specification.html">UIMA Specification (OASIS)</a>
                </div>
                          <div class="navBarItem">      <a href="./team-list.html">Project Team</a>
                </div>
                          <div class="navBarItem">      <a href="./maven-design.html">Maven Use</a>
                </div>
                          <div class="navBarItem">      <a href="./updating-website.html">Updating this Website</a>
                </div>
            </div>
                      <br/>
            <div class="navBarItem">      <div class="navPartHeading">Events and Conferences</div>
                </div>
                <div class="navBar">
                  <div class="navBarItem">      <a href="./coling14.html">COLING 2014</a>
                </div>
                          <div class="navBarItem">      <a href="./gscl13.html">GSCL 2013</a>
                </div>
                          <div class="navBarItem">      <a href="./iks09.html">IKS 2009</a>
                </div>
                          <div class="navBarItem">      <a href="./gscl09.html">GSCL 2009</a>
                </div>
                          <div class="navBarItem">      <a href="./lsm09.html">LSM 2009</a>
                </div>
                          <div class="navBarItem">      <a href="./lrec08.html">LREC 2008</a>
                </div>
                          <div class="navBarItem">      <a href="./gldv07.html">GLDV 2007</a>
                </div>
            </div>
                      <br/>
            <div class="navBarItem">      <div class="navPartHeading">ASF</div>
                </div>
                <div class="navBar">
                  <div class="navBarItem">      <a href="https://www.apache.org/licenses/" target="_blank" rel="noopener">License <img src="images/offsitelink.png"/></a>
                </div>
                          <div class="navBarItem">      <a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener">ASF Sponsors <img src="images/offsitelink.png"/></a>
                </div>
                          <div class="navBarItem">      <a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener">ASF Sponsorship <img src="images/offsitelink.png"/></a>
                </div>
                          <div class="navBarItem">      <a href="./security_report">Security</a>
                </div>
            </div>
        </div>
                </td>
                <td width="80%" align="left" valign="top">
                                                          <div class="sectionTable">
      <table class="sectionTable">
        <tr><td>
        <a name="Overview"><h1><img src="images/UIMA_4sq50tightCropSolid.png"/>&nbsp;Overview</h1></a>
      </td></tr>
      <tr><td>
        <blockquote class="sectionBody">
                                    <p>All released Apache artifacts are normally signed.  Eclipse jar signing is in addition 
to the Apache release signing.  This additional signing (with a recognized authority certificate)
allows the Eclipse installer to avoid saying it is installing unsigned artifacts and needs permission to continue.
</p>
                                                <p>
It also enables automatic notification and subsequent update (if the user chooses) of upgrades.  Because of this,
insure your feature id's are different for versions which should not automatically update.  
</p>
                                                <p>Both the feature jars and the plugin jars need to be signed.  But not the pack.gz things or the artifacts / contents jars.</p>
                                                      <table class="subsectionTable">
        <tr><td>
       
       
       
          <a name="Process Flow">
            <h2>Process Flow
                        </h2>
          </a>
      </td></tr>
      <tr><td>
        <blockquote class="subsectionBody">
                                    <p>We use a 2 step process, to reduce costs to Apache for signing release candidates which subsequently fail.
       After the release vote passes, feature and plugin Jar files (but not the pack.gz files) are manually uploaded and signed, 
       and then a subsequent maven task is run to rebuild just the site packaging artifacts using the signed Jars.</p>
                                                <p>The first step is to do a normal build of the update site, using mvn release:prepare.
       This produces the artifacts for voting on, without jar-signing the
       new Jars, and writes the "tag" for this into SVN for record keeping.</p>
                                                <p>After the vote passes 
       the release manager, using their special credentials, logs onto the signing portal.  This process
       requires a one-time code, which the portal will send to you.</p>
                                                <p style="margin-left: 40px">(Note: I had to refresh my web browser in order to
       get the screen showing that option).  
       </p>
                                                <p>Once signed, in, make a signing set
       consisting of all of the Jars in target/eus-work/plugins and feature jars (feature jars must also be signed) 
       (not the *.pack.gz files, nor the  ..content nor ..artifact metadata Jars).  
       </p>
                                                <p>For convenience, and to rename any name-collisions between jars in the features/ and plugins/ directories,
          make a new folder (signingSet), and copy all the files from target/saved into that, renaming any 
          collisions.
       </p>
                                                <p>On the signing web application make a new signing set and upload these files to that set.
       Then sign them (either use Test signing or Production signing).  Test signing is only if you're new to
       the whole process and want to test things work.  Then download the result, and copy them into the 
       target/eus-work/features and /plugins directories, overlaying the unsigned ones.</p>
                                                <p>Then rebuild the update site by running <code>mvn antrun:run@make-subsite-after-signing</code>.  
        This does the remaining steps, 
        including packing (regenerating the .pack.gz files in the /plugins) and adding the various
        signatures and checksums to these.  These are then re-published, merging with any previous contents of the update site.
        </p>
                                                <p>Messages about "Artifact repository out of sync. Overwriting xxxx" are to be expected.</p>
                                                <p>Please try installing the result to confirm nothing went wrong in this re-build process.</p>
                                                <p>If you used a test signing, instead of a production signing, 
     if all is well, repeat the above process starting with selection "production" signing for the jars, downloading 
     those jars, replacing them into the eus-work directory, and re-running the mvn antrun:run@make-subsite-after-signing.</p>
                            </blockquote>
        </td></tr>
    </table>
                                                      <table class="subsectionTable">
        <tr><td>
       
       
       
          <a name="Changes to Normal Build">
            <h2>Changes to Normal Build
                        </h2>
          </a>
      </td></tr>
      <tr><td>
        <blockquote class="subsectionBody">
                                    <p>To support signing, the normal build needs some small changes.
      <ol>
        <li>(actually a bug fix) The existing build after running the JarProcessor, copies the original (unprocessed) Jars
            into the eus-work/plugins - accidentally overwriting the repacked/conditioned Jars.  This step must be deleted;
            in order to have the processed/conditioned Jars available for signing.
        </li>
        <li>When doing the subsite build, any previous versions are combined with the new version.  This is done by 
            downloading the previous versions into a new instance of the subsite.  Because this packaging step needs
            to be redone, the original contents.jar and artifacts.jar files need to be saved so they can be restored
            before the rebuild with signed artifacts.</li>
      </ol>
    </p>
                                                <p>Additionally, to aid in reproducing things, the pre-signed, conditioned JARs are saved; in case of need, they can
      be restored without rebuilding them again.  This step might be removed in the future - it is not essential.</p>
                            </blockquote>
        </td></tr>
    </table>
                            </blockquote>
        </p>
      </td></tr>
    </table>
                                        <div class="sectionTable">
      <table class="sectionTable">
        <tr><td>
        <a name="Release Manager needs to have a valid code signing certificate"><h1><img src="images/UIMA_4sq50tightCropSolid.png"/>&nbsp;Release Manager needs to have a valid code signing certificate</h1></a>
      </td></tr>
      <tr><td>
        <blockquote class="sectionBody">
                                    <p>
    For the UIMA project, contact the PMC chair for aid in obtaining a code signing certificate if you need one.</p>
                            </blockquote>
        </p>
      </td></tr>
    </table>
                                        <div class="sectionTable">
      <table class="sectionTable">
        <tr><td>
        <a name="Release only if 1 or more changed Eclipse plugins"><h1><img src="images/UIMA_4sq50tightCropSolid.png"/>&nbsp;Release only if 1 or more changed Eclipse plugins</h1></a>
      </td></tr>
      <tr><td>
        <blockquote class="sectionBody">
                                    <p>If the release does not have any updates to Eclipse Plugin JARs, save Apache money by reusing previously released versions.
     If the release has 1 or more JARs, these will be signed in 1 signing event. so it doesn't matter how many Jars there are.</p>
                            </blockquote>
        </p>
      </td></tr>
    </table>
                                        <div class="sectionTable">
      <table class="sectionTable">
        <tr><td>
        <a name="Links to Apache resources for codesigning"><h1><img src="images/UIMA_4sq50tightCropSolid.png"/>&nbsp;Links to Apache resources for codesigning</h1></a>
      </td></tr>
      <tr><td>
        <blockquote class="sectionBody">
                                    <p>See <a target="_blank" rel="noopener" href="https://reference.apache.org/pmc/codesigning">
  https://reference.apache.org/pmc/codesigning</a> for general information.
  </p>
                                                <p>See <a target="_blank" rel="noopener" href="https://wiki.eclipse.org/JAR_Signing#What_gets_signed">
  https://wiki.eclipse.org/JAR_Signing#What_gets_signed</a> for background on signing Eclipse Plugins.</p>
                            </blockquote>
        </p>
      </td></tr>
    </table>
                                  </td>
                </tr>
                <!-- FOOTER -->
                <tr><td colspan="2">
                  <hr noshade="" size="1"/>
                </td></tr>
                <tr><td colspan="2"> 
                  <table class="pageFooter">
                    <tr>
                      <td><a href="index.html">Home</a></td>
                      <td><a href="privacy-policy.html">Privacy Policy</a></td>
                      <td style="font-size:75%">
                Copyright &#169; 2006-2024, The Apache Software Foundation.<br/>
                Apache UIMA, UIMA, the Apache UIMA logo and the Apache Feather logo are trademarks of The Apache Software Foundation.<br/>
                All other marks mentioned may be trademarks or registered trademarks of their respective owners.
                      </td>
                      <td><a href="mailto:dev@uima.apache.org">Contact us</a></td>
                    </tr>
                  </table>                    
                </td></tr>
            </table>
        </body>
    </html>

