I'm starting to think about redoing our Eclipse Plugin release flow. I'm hoping to start a thread where people can post answers to issues (there are many...).
Motivation: start using the Symantec signing process for Jars (in addition to the PGP Apache signing process), so that Eclipse, when installing new plugins doesn't warn about unsigned artifacts. There are many things to figure out. One is how to manage the cost of the signing. Signing costs real money, which Apache covers (see https://reference.apache.org/pmc/codesigning). 1) To find out: is the cost per Jar, or per "signing event" which can include multiple Jars? This can affect some design choices. 2) Another thing is when (in our release flow) to sign. The signing process alters the JARs. Our current flow is 1) generate candidate with PGP signature, 2) Vote 3) repeat if failed rc, otherwise promote. An Apache principle is to have the Vote be on the signed artifacts, which are then promoted without modification. This implies the step 1) would need to include signing. This means that every failed release candidate costs money. I found out that some projects "accept" this, but have low failed percentages, like 1 in 10. In our process, we seem to frequently have multiple release candidates per release. Perhaps a way forward is to have a process for the Eclipse plugin release which is different, and isn't invoked until a "preliminary" candidate review has been done; once this has happened, and there's confidence that the signed version would likely pass the vote, an official Eclipse plugin release candidate could be posted with signed JARs. 3) Another thing to figure out, assuming that signing costs "per jar", is to insure only new Jars are signed, not the older versions. This could affect efforts to limit the number of JARs (or not). 4) Another thing to figure out is what needs to be signed. I think that only Eclipse plugin jars need signing, and not the other jars associated with the update site, like artifacts.jar, content.jar, and for each feature, feat-name.jar (e.g. org.apache.uima.runtime_3.0.0.alpha02.jar). But maybe that's wrong. The site https://wiki.eclipse.org/JAR_Signing#What_gets_signed.3F says multiple things: 1) "by default, every Jar pushed to an update site is signed", 2) "in standalone zip distributions, all JARed plugins will be signed". So, my guess is that you don't need to sign the other kinds of JARs. Some websites imply that JARs other than the plugin ones are signed ( https://wiki.eclipse.org/Platform-releng-signedbuild ), but it's unclear if they need signing in order to get the Eclipse install program not to complain. That website says the master zip having all the plugins and features is sent to the signing process. 5) Some of our Jars (typically, the runtime Jars) have other Jars inside them. This site https://wiki.eclipse.org/JAR_Signing#What_gets_signed.3F says "JARs nested at arbitrary depth within other JARs" are signed, too. Is that needed to make the Eclipse install program not complain about installing unsigned artifacts? 6) One site ( https://wiki.eclipse.org/JAR_Signing#What_gets_signed.3F ) says there may be legal reasons you are not permitted to sign an embedded JAR. I've never seen anything about that, and don't know how to determine if such a prohibition exists. This page says, under what gets signed, "Some JARs may be excluded if there are technical or legal reasons why they cannot be signed". 7) Signing and pack200 interact. This page https://wiki.eclipse.org/Tycho/Pack200#Pack200_and_Signing describes a flow: 1. pack200 operated to "normalize" - this is specified by the "repack" option 2. sign 3. pack200 operated to generate the compressed version 4. p2 metadata generation / updating Our current eclipse plugin build flow runs pack200 with both the "-repack" and "-pack" options. I think this would need to be split into two steps (assuming we keep pack200 - see following), with the results from -repack being sent for signing, and then the result subsequently packed. 8) I question if we need to do pack200 packing. It has these effects: 1. for every Jar, it generates 2 Jars: the original and the packed. So there are 2 jars that need "signing", thus it costs twice as much. 2. A typical Jar (caseditor.ide) is 69K bytes, packed 28K. A big jar uima-runtime is 4M, packed: 1.3M So the result is increased space on the distribution medium, but decreased bandwidth for downloading. But the download frequency is very low - only when someone installs the UIMA Eclipse plugins into a new Eclipse instance. I think pack200 was envisioned to help websites where the fetch was more frequent, and web-page load times were important. Should we abandon doing pack200 packaging? Well, those 8 topics should get us started. Perhaps it will be best to start a new thread for each one. I'm looking forward to the discussion. Cheers. -Marshall