Too much to discuss in one thread, I am starting a new thread to discuss plugin versioning. Cheers, Jesse
@purplecabbage risingj.com On Fri, Aug 16, 2013 at 2:41 PM, Andrew Grieve <agri...@chromium.org> wrote: > After the discussion on the group hangout + some sleeping, I think we're > ready for a proposal... So here it is! > - It does *not* propose any changes to our Deprecation policy. That's for > another thread (which I'll get to on Monday if no one else does) :) > - It does not contain how we store version numbers. That's covered here: > http://wiki.apache.org/cordova/StoringRepoVersionsDesign > > Once we get to a consensus, I'll transfer this to the wiki. Please review & > comment! > > There are two kinds of versions: > 1. "SemVer" (www.semver.org) > - Used by platforms, plugman, cli > 2. "CadVer" (just made that up :P "Cadence Version") > - Used by cli, mobile-spec, cordova-js > > There are two kinds of releases: > 1. Patch releases > - Pretty much any repo can release a patch release to fix bugs at any > time (but should have good reason) > 2. Cadence releases > - These follow the 10 releases per year, as enumerated on: > http://wiki.apache.org/cordova/RoadmapProjects > > cordova-plugins: > - Commit only to the `dev` branch > - Use semver for them. > - If the version on master is "3.0.0", then the version on dev will > start at "3.0.1-dev". > - If any commit goes in that add a feature, then change the version on > dev to "3.1.0-dev" > - If any commit goes in that makes an non-backwards-compatible change, > then change the version on dev to "4.0.0-dev" > - Release plugins at most once a week (Thursdays?) > - This *does* mean that a change that goes in Wednesday could end up > being released the next day. > - Release plugins all at the same time so that we can blog the release > notes. > - Release process: > 1. Create a JIRA issue to track the status of the release. > a. Comments should be added to this bug after each top-level step > below is taken > 2. For each plugin that has unreleased commits on their `dev` branch: > a. Update its CHANGELOG file with a prettified version of "git log" > b. Update its plugin.xml version by removing the "-dev" suffix > c. Merge dev -> master (without pushing) > d. Update its plugin.xml version by incrementing the micro and adding > "-dev" (as described above) > 3. Combine all plugin changelogs into a Release announcement blog post > on cordova-website. > a. Steps for this exist in cordova-website's README.md > 4. Test > a. Create mobilespec using the old versions of plugins > b. Perform a "plugin upgrade" for plugins that have changes (right > now, this means doing a `plugin remove` followed by a `plugin add` > c. Run through mobilespec, ensuring to do manual tests that relate to > changes in the changelog > 5. Push! > a. Push all branches > b. Push the blog post > > cordova-plugman: > - Commit to master always > - Release only when necessary. > - Release process: > 1. For releases that increment the minor or major, email the dev list > to let others know about your intent to release (include changelog) > a) Wait for at least one +1 > 2. Increment the version within package.json > 3. Update RELEASENOTES.md with the changes for this release > 4. Push to npmjs.org > * In order to push, you must be given push access to the npm module. > * To do so, ask one of the existing module maintainers (listed here: > https://npmjs.org/package/plugman) > 5. Post a release announcement on the cordova blog (for feature > releases only) > a. Steps for this exist in cordova-website's README.md > b. Not necessary for patch releases, but feature releases should > mention significant bugs fixed by previous patch releases. > > No JIRA: The process is light-weight enough that a JIRA issue isn't > necessary for tracking. > > > cordova-cli: > - Commit to master, release from release branches (2.9.x, 3.0.x, etc) > - Versioned using "$COROVA_VERSION-$CLI_VERSION" > - E.g. 3.0.0-0.5.1 > - The first version component is the "cadence version", and has its > minor incremented whenever the platform repository that it lazy loads by > default is changed > - E.g. 3.0.0 uses cordova-blackberry@3.0.0, cordova-ios@3.0.0, > cordova-android@3.0.0 > - E.g. 3.1.0 uses cordova-blackberry@3.1.0, cordova-ios@3.0.1, > cordova-android@4.0.0 > - E.g. 3.2.0 uses cordova-blackberry@3.1.1, cordova-ios@3.1.0, > cordova-android@4.0.1 > - E.g. 3.2.1 uses cordova-blackberry@3.1.2, cordova-ios@3.1.0, > cordova-android@4.0.1 > - The version number of cordova-cli will be the version number that we > advertise on our website, blogs & docs > - Platform version numbers will use semver, and not be referenced > - Release process for patch releases: > 1. cherry-pick commits from master -> latest release branch > 2. Increment package.json's micro version > 3. Update RELEASENOTES.md > 4. Push to npmjs.org > * In order to push, you must be given push access to the npm module. > * To do so, ask one of the existing module maintainers (listed here: > https://npmjs.org/package/cordova) > - Release process for minor version > - Same as patch release, and in addition: > 1. Email the dev list to let others know about your intent to release > (include changelog) > a. Wait for at least one +1 > 2. Post a release announcement on the cordova blog (for feature > releases only) > a. Steps for this exist in cordova-website's README.md > b. Not necessary for patch releases, but feature releases should > mention significant bugs fixed by previous patch releases. > - Release process for major version: > - Refer to platform release process. > > cordova platforms, mobile-spec, cordova-js: > - Same as before (as documented on > http://wiki.apache.org/cordova/CuttingReleases) > - Except: > - Platforms versions to use semver. This *does* mean that they will > diverge from each other. > - cordova-js and cordova-mobile-spec to use the "cadence version" > (first part of cordova-cli's version) > - No longer update cordova-app-template > - Blog post will include changelog for all changes since previous > platforms release. > - JIRA issue should have a comment that lists the platform versions > that are referenced by the cadence version. > > JIRA workflow: > - When issues are closed, the "fixed version" should be set to the > cadence version. > > > Andrew > > > On Thu, Aug 8, 2013 at 4:18 PM, Andrew Grieve <agri...@chromium.org> > wrote: > > > > > > > > > On Wed, Aug 7, 2013 at 8:49 PM, Michael Brooks <mich...@michaelbrooks.ca > >wrote: > > > >> > > >> > Plugins and CLI tools I think we should just ship continuously. The > >> > > Why do you think these should be shipped continuously instead of on a > > regular cadence? Note that I think they should be as well, but I'm trying > > to figure out why the tools & plugins are different from the platforms. > > > > > >> > only question that remains in the 'how' of that is versioning. Mike > >> > Brookes has advocated semver schema here wherein we version platforms > >> > separately from the tools using a compound version number. An example > >> > of this might be 3.0.0-0.14.3 wherein 3.0.0 represents our platforms > >> > while 0.14.3 represents the CLI tool itself. > >> > >> > >> I only advocate semver for node modules and you can expect that I'll be > >> pushing this on cordova-cli soon. :) > >> > >> Node modules use semver. Regardless of whether it's effective or not, > it's > >> what the community uses and as developers we should attempt to respect > and > >> adhere to it. > >> However, Cordova uses a different type of versioning scheme. > >> > >> The CLI tool needs to represent both of these versioning schemes. > >> > >> - The Cordova version is most important, because it describe what > version > >> of Cordova the CLI uses. > >> - The node module version is important to modules consuming cordova-cli. > >> You have no idea how frustrating cordova-cli's current versioning is wrt > >> to > >> the phonegap-cli. > >> > >> This is why a version such as 3.0.0-0.10.4 works extremely well. It's > >> distributing version 3.0.0 of Cordova. The node module itself is version > >> 0.10.4. It's also semantically valid in semver, so it's compatible with > >> npm. > >> > >> Michael > >> > >> > >> On Wed, Aug 7, 2013 at 1:27 PM, Andrew Grieve <agri...@chromium.org> > >> wrote: > >> > >> > On Wed, Aug 7, 2013 at 12:49 PM, Brian LeRoux <b...@brian.io> wrote: > >> > > >> > > I think keeping the cadence on the core platforms makes sense. That > is > >> > > where the bulk of logic lives, it is susceptible to 3rd party issues > >> > > like new iDEs and SDKs, and having that regular cadence in lockstep > >> > > makes issue tracking easier to discuss with the community. > >> > > I agree that keeping the number of different version numbers to a minimum > > makes things easier to track. > > I don't really follow your logic about IDEs and SDKs... This would be an > > argument to *not* synchronize releases I think, since iOS/Android/WP/BB > do > > not synchronize their SDK releases :P > > I don't think we can apply the cadence argument to platforms, but not to > > tools & plugins. Why would platforms be different in this respect? > > > > > > > >> > > Plugins and CLI tools I think we should just ship continuously. The > >> > > only question that remains in the 'how' of that is versioning. Mike > >> > > Brookes has advocated semver schema here wherein we version > platforms > >> > > separately from the tools using a compound version number. An > example > >> > > of this might be 3.0.0-0.14.3 wherein 3.0.0 represents our platforms > >> > > while 0.14.3 represents the CLI tool itself. > >> > > > >> > > I am not a fan of semver as that it is almost wholly conceptual and > >> > > thusly non-enforcable. It is a nice framework for reasoning but ppl > >> > > ignore half of the rules devaluing its promise. Also, it was > conceived > >> > > originally as a solution for globally installed packages which isn't > >> > > really an issue in modern situations. That said, having a versioning > >> > > scheme that exists, is well documented, and generally understood are > >> > > all positives for me. It would mean our deprec policy could push the > >> > > version numbers up quickly (which is fine). > >> > > > >> > > It is important to remember the reason for versioning, for our case, > >> > > is issue tracking and resolution but as our ecosystem grows it will > >> > > also play a very important role in dependency management. Especially > >> > > between plugins. More discreet versions: the better. > >> > > With the latest <engine> tag work being done ( > > https://issues.apache.org/jira/browse/CB-4490), platforms as well as > > plugins will be checked using semver. These checks will likely work > better > > if we try and follow semver. AFAICT, we mostly do already follow it, with > > the exception of our deprecation policy. > > > > > >> > > > >> > > (Andrew I think you should start a separate thread about killing off > >> > > cordova-js and moving into platforms for loading now that we have > >> > > mostly removed the plugins. I am very much in favor!) > >> > > > >> > Yeah, I regretted this almost immediately. Since this thread is > >> focusing on > >> > the platforms, I'll do just that! > >> > > >> > > >> > > > >> > > > >> > > On Tue, Aug 6, 2013 at 1:43 PM, Andrew Grieve <agri...@chromium.org > > > >> > > wrote: > >> > > > Want to have this as a discussion starter. > >> > > > > >> > > > We've previously established that: > >> > > > 1. Releases for plugman & CLI will not be tied to platform > releases > >> > > > 2. Releases to plugins will not be tied to platform releases > >> > > > > >> > > > That's not to say we shouldn't sometime co-ordinate them with > >> platform > >> > > > releases, but I think there would need to be a compelling reason > to > >> > > couple > >> > > > them. > >> > > > > >> > > > I'm wondering if it makes sense to not tie platform releases > >> together > >> > > > either? E.g. Allow an update to cordova-ios separately from > >> > > > cordova-blackberry10. > >> > > > > >> > > > Possible Advantages: > >> > > > - Releases will (hopefully) occur more frequently. Don't need to > >> wait > >> > > for > >> > > > synchronization with other platforms to do a release. > >> > > > > >> > > > Possible Disadvantages: > >> > > > - Might make for too many releases & spam our users with release > >> > notes > >> > > > too often > >> > > > - Might make us lazy and release platforms too infrequently > >> > > > - Might make version numbers for platforms not correspond > >> date-wise > >> > > with > >> > > > version numbers of other platforms (e.g. 3.1 ios != 3.1 android) > >> > > > > >> > > > > >> > > > Other considerations: > >> > > > cordova-js is a common piece here. Perhaps that could be pulled > >> out > >> > as > >> > > > well? > >> > > > > >> > > > Option 1: Bundle the exec bridge, platform bootstrap & plugin > loader > >> > with > >> > > > the platform, and have the rest available as a plugin. > >> > > > Option 2: Bundle exec bridge + platform bootstrap with the > platform, > >> > > bundle > >> > > > the plugin loader with plugman, put the rest in a plugin > >> > > > > >> > > > For reference, the only non-exec-bridge / start-up code I can see > >> is: > >> > > > ./cordova.js <--- hooks addEventListener + has exec bridge logic > >> > > > ./common/argscheck.js <--- strictly a helper for plugins > >> > > > ./common/base64.js <--- exec bridge depends on this > >> > > > ./common/builder.js <--- should be folded into modulemapper.js > >> > > > ./common/channel.js <--- start-up code needs this > >> > > > ./common/init.js <--- start-up code > >> > > > ./common/modulemapper.js <--- start-up code > >> > > > ./common/pluginloader.js <--- loads plugins on start-up > >> > > > ./common/urlutil.js <--- recently added helper for plugins > >> > > > ./common/utils.js <--- mostly misc stuff that may be mostly > >> unused? > >> > > > > >> > > > There's also: > >> > > > ./windows8/windows8/commandProxy.js > >> > > > which I assume is exec bridge releated. > >> > > > > >> > > > I think that argscheck & urlutil would be well-suited as > stand-alone > >> > > > plugins that other plugins depend on. > >> > > > >> > > >> > > > > >