Repository: incubator-apex-site
Updated Branches:
  refs/heads/master ceb677b5a -> 7424ddbc5


Adding task to fetch roadmap jiras and save as jiras.json


Project: http://git-wip-us.apache.org/repos/asf/incubator-apex-site/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-apex-site/commit/f532a454
Tree: http://git-wip-us.apache.org/repos/asf/incubator-apex-site/tree/f532a454
Diff: http://git-wip-us.apache.org/repos/asf/incubator-apex-site/diff/f532a454

Branch: refs/heads/master
Commit: f532a454fcfff40c94884465351e23265f6e1ae8
Parents: 54aafc7
Author: sashadt <[email protected]>
Authored: Thu Dec 31 17:04:31 2015 -0800
Committer: sashadt <[email protected]>
Committed: Thu Dec 31 17:04:31 2015 -0800

----------------------------------------------------------------------
 gulpfile.js  | 172 ++++++++++++-
 jiras.json   | 720 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 package.json |   4 +-
 3 files changed, 894 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-apex-site/blob/f532a454/gulpfile.js
----------------------------------------------------------------------
diff --git a/gulpfile.js b/gulpfile.js
index 5361bf5..9d34727 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -12,6 +12,8 @@ var fs = require('fs');
 var async = require('async');
 var _ = require('lodash');
 var exec = require('child_process').exec;
+var semver = require('semver'); 
+var naturalSort = require('javascript-natural-sort');
 
 // Constants
 var TEMP_PARTIAL_LOCATION = './.tmp/partials/';
@@ -69,7 +71,11 @@ gulp.task('html', ['md2html'], function() {
 
   // Render the files in pages
   gulp.src('./src/pages/*.html')
-    .pipe(handlebars({ nav: require('./navigation.json'), releases: 
require('./releases.json') }, options))
+    .pipe(handlebars({ 
+        nav: require('./navigation.json'),
+        releases: require('./releases.json'),
+        jiras: require('./jiras.json')
+      }, options))
     .pipe(gulp.dest(BUILD_LOCATION))
     .on('error', function(err) {
       console.warn(err);
@@ -106,6 +112,170 @@ gulp.task('copy:images', function() {
 // Default task is to build the site
 gulp.task('default', ['less', 'html', 'copy:js', 'copy:images']);
 
+
+// Fetch all JIRAs assodicated with the current project to create a road map
+gulp.task('fetch-jiras', function(taskCb) {
+
+  var projects = [
+    { name: 'APEXCORE', apiUrl: 'https://issues.apache.org/jira/rest/api/2/', 
browseUrl: 'https://issues.apache.org/jira/browse/' },
+    { name: 'MLHR', apiUrl: 'https://malhar.atlassian.net/rest/api/2/', 
browseUrl: 'https://malhar.atlassian.net/browse/' }
+    // Replace when migration from malhar.atlassian.net to ASF 
(issues.apache.org) JIRA is complete
+    // { key: 'apex-malhar',   url: 
'https://issues.apache.org/jira/rest/api/2/', browseUrl: 
'https://issues.apache.org/jira/browse/', project: 'APEXMALHAR' },
+  ];  
+
+
+  // JQL terms are separated with AND/OR and parameters outside JQL are 
separated with &
+  // 
+  // Query to look up all APEXCORE issues with label of roadmap
+  //    
https://issues.apache.org/jira/rest/api/2/search?jql=project=APEXCORE+AND+labels+in+(roadmap)&startAt=0&maxResults=100
+  //
+  // Query which returns only specified fields
+  //    
https://issues.apache.org/jira/rest/api/2/search?jql=project=APEXCORE+AND+labels+in+(roadmap)&startAt=0&maxResults=100&fields=summary,priority,status
+  //
+  // Query to get list of all APEXCORE versions
+  //    https://issues.apache.org/jira/rest/api/2/project/APEXCORE/versions
+  //
+  // Browse a single JIRA issue is browseUrl + issue.key
+  //    https://issues.apache.org/jira/browse/APEXCORE-292
+  // 
+  // Browse a version in the roadmap is browseUrl + project + fixforversion + 
version.id
+  //    https://issues.apache.org/jira/browse/APEXCORE/fixforversion/12333948
+
+
+  // For each project, get the jiras
+  async.map(projects, function(project, cb) {
+
+    console.log('Loading', project.name, 'JIRAs from', project.apiUrl);
+
+    // Request the page that lists the release versions,
+    // e.g. https://dist.apache.org/repos/dist/release/incubator/apex
+    var requestUrl = project.apiUrl + 'project/' + project.name + '/versions';
+    request({
+        url: requestUrl,
+        json: true
+      }, 
+      function(err, httpResponse, versions) {
+    
+        // Abort on error
+        if (err) {
+          console.log('Error when trying to request URL: ', requestUrl);
+          console.log(err);
+          return cb(err);
+        }
+
+        var unreleasedVersions = versions.filter(function(n) {
+          return !n.released;
+        }).sort(function(a,b) {
+          return semver.compare(a.name, b.name);
+        });
+
+        //DEBUG
+        var unreleasedVersionsList = unreleasedVersions.map(function(n){return 
n.name;}).join(',');
+        console.log(project.name, 'unreleased versions:', 
unreleasedVersionsList);
+
+        var apiRequest = {
+          jql: 'project = ' + project.name + ' AND labels in (roadmap) AND 
status NOT IN ( Closed, Resolved )',
+          startAt: 0,
+          maxResults: 1000,
+          fields: ['summary','priority','status', 'fixVersions']
+        };
+
+        request.post({
+          url: project.apiUrl + 'search',
+          json: apiRequest
+        }, 
+        function(err, httpResponse, jiras) {
+          
+          // Abort on error
+          if (err) {
+            return cb(err);
+          }
+
+          var pageCount = (jiras.total && jiras.maxResults) ? 
Math.ceil(jiras.total / jiras.maxResults) : 1;
+
+          console.log(project.name, 'matching jiras:', jiras.total, 
'jiras/page:', jiras.maxResults, 'pages:', pageCount);
+
+          // Iterate over multiple pages if more than one page is available
+          if (pageCount > 1) {
+            var pageCount = Math.ceil(jiras.total / jiras.maxResults);
+            var pageSize = jiras.maxResults;
+
+            var apiRequests = [];
+            for (var i = 1; i < pageCount; i++) {
+              apiRequests[i-1] = _.extend({}, 
+                apiRequest, 
+                { 
+                  startAt: i * pageSize, 
+                  maxResults: pageSize 
+                }
+              );
+            }
+
+            // Execute async page loads for jiras spanning multiple pages
+            async.concat(apiRequests, function(apiPageRequest, pageCb){
+
+              request.post({
+                url: project.apiUrl + 'search',
+                json: apiPageRequest
+              }, 
+              function(err, httpResponse, pageJiras) {
+                
+                // Abort on error
+                if (err) {
+                  return pageCb(err);
+                }
+                pageCb(null, pageJiras.issues);
+              });
+
+            }, function(err, remainingJiras){
+
+              // Abort if error occurred somewhere
+              if (err) {
+                return cb(err);
+              }
+
+              cb(null, _.extend({}, project, {
+                jiras: jiras.issues.concat(remainingJiras).sort(function(a,b) 
{return naturalSort(a.key, b.key); }) 
+              }));
+
+            });
+
+          } else {
+            // Return with a new project object with jiras.  cb is from 
async.map call above
+            cb(null, _.extend({}, project, { 
+              jiras: jiras.issues.sort(function(a,b) {return 
naturalSort(a.key, b.key); }) 
+            }));
+          }
+
+        });
+
+    });
+
+
+
+  }, function(err, projectResults) { // this is the async.map(projects) 
callback
+
+    if (err) {
+      console.log('Unable to create jiras.json due to errors');
+      return;
+    }
+
+    // This will be written to jiras.json
+    var fileContents = {};
+
+    // Use the project name as key and provide associated array of matching 
jiras
+    projectResults.forEach(function(project) {
+      _.set(fileContents, project.name, project.jiras);
+    });
+
+    // Write the file to jiras.json
+    fs.writeFile('./jiras.json', JSON.stringify(fileContents, 0, 2), taskCb);
+
+  });
+
+
+});
+
 // Creates releases.json file.
 // 
 // 1. Requests page that lists release versions 
(https://dist.apache.org/repos/dist/release/incubator/apex[/malhar])

http://git-wip-us.apache.org/repos/asf/incubator-apex-site/blob/f532a454/jiras.json
----------------------------------------------------------------------
diff --git a/jiras.json b/jiras.json
new file mode 100644
index 0000000..81b6e94
--- /dev/null
+++ b/jiras.json
@@ -0,0 +1,720 @@
+{
+  "APEXCORE": [
+    {
+      "expand": "operations,editmeta,changelog,transitions,renderedFields",
+      "id": "12919181",
+      "self": "https://issues.apache.org/jira/rest/api/2/issue/12919181";,
+      "key": "APEXCORE-3",
+      "fields": {
+        "summary": "Ability for an operator to populate DAG at launch time",
+        "fixVersions": [
+          {
+            "self": 
"https://issues.apache.org/jira/rest/api/2/version/12333950";,
+            "id": "12333950",
+            "name": "3.3.0",
+            "archived": false,
+            "released": false
+          }
+        ],
+        "priority": {
+          "self": "https://issues.apache.org/jira/rest/api/2/priority/2";,
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/priorities/critical.png";,
+          "name": "Critical",
+          "id": "2"
+        },
+        "status": {
+          "self": "https://issues.apache.org/jira/rest/api/2/status/3";,
+          "description": "This issue is being actively worked on at the moment 
by the assignee.",
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/statuses/inprogress.png";,
+          "name": "In Progress",
+          "id": "3",
+          "statusCategory": {
+            "self": 
"https://issues.apache.org/jira/rest/api/2/statuscategory/4";,
+            "id": 4,
+            "key": "indeterminate",
+            "colorName": "yellow",
+            "name": "In Progress"
+          }
+        }
+      }
+    },
+    {
+      "expand": "operations,editmeta,changelog,transitions,renderedFields",
+      "id": "12919188",
+      "self": "https://issues.apache.org/jira/rest/api/2/issue/12919188";,
+      "key": "APEXCORE-10",
+      "fields": {
+        "summary": "Enable non-affinity of operators per node (not 
containers)",
+        "fixVersions": [],
+        "priority": {
+          "self": "https://issues.apache.org/jira/rest/api/2/priority/3";,
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/priorities/major.png";,
+          "name": "Major",
+          "id": "3"
+        },
+        "status": {
+          "self": "https://issues.apache.org/jira/rest/api/2/status/1";,
+          "description": "The issue is open and ready for the assignee to 
start work on it.",
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/statuses/open.png";,
+          "name": "Open",
+          "id": "1",
+          "statusCategory": {
+            "self": 
"https://issues.apache.org/jira/rest/api/2/statuscategory/2";,
+            "id": 2,
+            "key": "new",
+            "colorName": "blue-gray",
+            "name": "New"
+          }
+        }
+      }
+    },
+    {
+      "expand": "operations,editmeta,changelog,transitions,renderedFields",
+      "id": "12919232",
+      "self": "https://issues.apache.org/jira/rest/api/2/issue/12919232";,
+      "key": "APEXCORE-60",
+      "fields": {
+        "summary": "Iterative processing support",
+        "fixVersions": [
+          {
+            "self": 
"https://issues.apache.org/jira/rest/api/2/version/12333950";,
+            "id": "12333950",
+            "name": "3.3.0",
+            "archived": false,
+            "released": false
+          }
+        ],
+        "priority": {
+          "self": "https://issues.apache.org/jira/rest/api/2/priority/3";,
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/priorities/major.png";,
+          "name": "Major",
+          "id": "3"
+        },
+        "status": {
+          "self": "https://issues.apache.org/jira/rest/api/2/status/1";,
+          "description": "The issue is open and ready for the assignee to 
start work on it.",
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/statuses/open.png";,
+          "name": "Open",
+          "id": "1",
+          "statusCategory": {
+            "self": 
"https://issues.apache.org/jira/rest/api/2/statuscategory/2";,
+            "id": 2,
+            "key": "new",
+            "colorName": "blue-gray",
+            "name": "New"
+          }
+        }
+      }
+    },
+    {
+      "expand": "operations,editmeta,changelog,transitions,renderedFields",
+      "id": "12919288",
+      "self": "https://issues.apache.org/jira/rest/api/2/issue/12919288";,
+      "key": "APEXCORE-119",
+      "fields": {
+        "summary": "Add Support For A New Type Of (Distributed) Operator",
+        "fixVersions": [],
+        "priority": {
+          "self": "https://issues.apache.org/jira/rest/api/2/priority/3";,
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/priorities/major.png";,
+          "name": "Major",
+          "id": "3"
+        },
+        "status": {
+          "self": "https://issues.apache.org/jira/rest/api/2/status/1";,
+          "description": "The issue is open and ready for the assignee to 
start work on it.",
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/statuses/open.png";,
+          "name": "Open",
+          "id": "1",
+          "statusCategory": {
+            "self": 
"https://issues.apache.org/jira/rest/api/2/statuscategory/2";,
+            "id": 2,
+            "key": "new",
+            "colorName": "blue-gray",
+            "name": "New"
+          }
+        }
+      }
+    },
+    {
+      "expand": "operations,editmeta,changelog,transitions,renderedFields",
+      "id": "12919332",
+      "self": "https://issues.apache.org/jira/rest/api/2/issue/12919332";,
+      "key": "APEXCORE-163",
+      "fields": {
+        "summary": "Dynamic application property changes",
+        "fixVersions": [],
+        "priority": {
+          "self": "https://issues.apache.org/jira/rest/api/2/priority/3";,
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/priorities/major.png";,
+          "name": "Major",
+          "id": "3"
+        },
+        "status": {
+          "self": "https://issues.apache.org/jira/rest/api/2/status/1";,
+          "description": "The issue is open and ready for the assignee to 
start work on it.",
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/statuses/open.png";,
+          "name": "Open",
+          "id": "1",
+          "statusCategory": {
+            "self": 
"https://issues.apache.org/jira/rest/api/2/statuscategory/2";,
+            "id": 2,
+            "key": "new",
+            "colorName": "blue-gray",
+            "name": "New"
+          }
+        }
+      }
+    },
+    {
+      "expand": "operations,editmeta,changelog,transitions,renderedFields",
+      "id": "12919371",
+      "self": "https://issues.apache.org/jira/rest/api/2/issue/12919371";,
+      "key": "APEXCORE-202",
+      "fields": {
+        "summary": "Integration with Samoa",
+        "fixVersions": [],
+        "priority": {
+          "self": "https://issues.apache.org/jira/rest/api/2/priority/3";,
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/priorities/major.png";,
+          "name": "Major",
+          "id": "3"
+        },
+        "status": {
+          "self": "https://issues.apache.org/jira/rest/api/2/status/1";,
+          "description": "The issue is open and ready for the assignee to 
start work on it.",
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/statuses/open.png";,
+          "name": "Open",
+          "id": "1",
+          "statusCategory": {
+            "self": 
"https://issues.apache.org/jira/rest/api/2/statuscategory/2";,
+            "id": 2,
+            "key": "new",
+            "colorName": "blue-gray",
+            "name": "New"
+          }
+        }
+      }
+    },
+    {
+      "expand": "operations,editmeta,changelog,transitions,renderedFields",
+      "id": "12919400",
+      "self": "https://issues.apache.org/jira/rest/api/2/issue/12919400";,
+      "key": "APEXCORE-231",
+      "fields": {
+        "summary": "Ability to configure attributes dynamically",
+        "fixVersions": [],
+        "priority": {
+          "self": "https://issues.apache.org/jira/rest/api/2/priority/3";,
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/priorities/major.png";,
+          "name": "Major",
+          "id": "3"
+        },
+        "status": {
+          "self": "https://issues.apache.org/jira/rest/api/2/status/1";,
+          "description": "The issue is open and ready for the assignee to 
start work on it.",
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/statuses/open.png";,
+          "name": "Open",
+          "id": "1",
+          "statusCategory": {
+            "self": 
"https://issues.apache.org/jira/rest/api/2/statuscategory/2";,
+            "id": 2,
+            "key": "new",
+            "colorName": "blue-gray",
+            "name": "New"
+          }
+        }
+      }
+    },
+    {
+      "expand": "operations,editmeta,changelog,transitions,renderedFields",
+      "id": "12919401",
+      "self": "https://issues.apache.org/jira/rest/api/2/issue/12919401";,
+      "key": "APEXCORE-232",
+      "fields": {
+        "summary": "Ability to add new processing code to the DAG",
+        "fixVersions": [],
+        "priority": {
+          "self": "https://issues.apache.org/jira/rest/api/2/priority/3";,
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/priorities/major.png";,
+          "name": "Major",
+          "id": "3"
+        },
+        "status": {
+          "self": "https://issues.apache.org/jira/rest/api/2/status/1";,
+          "description": "The issue is open and ready for the assignee to 
start work on it.",
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/statuses/open.png";,
+          "name": "Open",
+          "id": "1",
+          "statusCategory": {
+            "self": 
"https://issues.apache.org/jira/rest/api/2/statuscategory/2";,
+            "id": 2,
+            "key": "new",
+            "colorName": "blue-gray",
+            "name": "New"
+          }
+        }
+      }
+    },
+    {
+      "expand": "operations,editmeta,changelog,transitions,renderedFields",
+      "id": "12919402",
+      "self": "https://issues.apache.org/jira/rest/api/2/issue/12919402";,
+      "key": "APEXCORE-233",
+      "fields": {
+        "summary": "Ability to specify single instance objects in 
configuration",
+        "fixVersions": [],
+        "priority": {
+          "self": "https://issues.apache.org/jira/rest/api/2/priority/3";,
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/priorities/major.png";,
+          "name": "Major",
+          "id": "3"
+        },
+        "status": {
+          "self": "https://issues.apache.org/jira/rest/api/2/status/1";,
+          "description": "The issue is open and ready for the assignee to 
start work on it.",
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/statuses/open.png";,
+          "name": "Open",
+          "id": "1",
+          "statusCategory": {
+            "self": 
"https://issues.apache.org/jira/rest/api/2/statuscategory/2";,
+            "id": 2,
+            "key": "new",
+            "colorName": "blue-gray",
+            "name": "New"
+          }
+        }
+      }
+    },
+    {
+      "expand": "operations,editmeta,changelog,transitions,renderedFields",
+      "id": "12919403",
+      "self": "https://issues.apache.org/jira/rest/api/2/issue/12919403";,
+      "key": "APEXCORE-234",
+      "fields": {
+        "summary": "Investigate other ways to specify properties in property 
files",
+        "fixVersions": [],
+        "priority": {
+          "self": "https://issues.apache.org/jira/rest/api/2/priority/3";,
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/priorities/major.png";,
+          "name": "Major",
+          "id": "3"
+        },
+        "status": {
+          "self": "https://issues.apache.org/jira/rest/api/2/status/1";,
+          "description": "The issue is open and ready for the assignee to 
start work on it.",
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/statuses/open.png";,
+          "name": "Open",
+          "id": "1",
+          "statusCategory": {
+            "self": 
"https://issues.apache.org/jira/rest/api/2/statuscategory/2";,
+            "id": 2,
+            "key": "new",
+            "colorName": "blue-gray",
+            "name": "New"
+          }
+        }
+      }
+    },
+    {
+      "expand": "operations,editmeta,changelog,transitions,renderedFields",
+      "id": "12919404",
+      "self": "https://issues.apache.org/jira/rest/api/2/issue/12919404";,
+      "key": "APEXCORE-235",
+      "fields": {
+        "summary": "Explicit support for batch processing",
+        "fixVersions": [],
+        "priority": {
+          "self": "https://issues.apache.org/jira/rest/api/2/priority/3";,
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/priorities/major.png";,
+          "name": "Major",
+          "id": "3"
+        },
+        "status": {
+          "self": "https://issues.apache.org/jira/rest/api/2/status/1";,
+          "description": "The issue is open and ready for the assignee to 
start work on it.",
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/statuses/open.png";,
+          "name": "Open",
+          "id": "1",
+          "statusCategory": {
+            "self": 
"https://issues.apache.org/jira/rest/api/2/statuscategory/2";,
+            "id": 2,
+            "key": "new",
+            "colorName": "blue-gray",
+            "name": "New"
+          }
+        }
+      }
+    },
+    {
+      "expand": "operations,editmeta,changelog,transitions,renderedFields",
+      "id": "12922256",
+      "self": "https://issues.apache.org/jira/rest/api/2/issue/12922256";,
+      "key": "APEXCORE-289",
+      "fields": {
+        "summary": "Encrypted Streams in Apex DAG",
+        "fixVersions": [],
+        "priority": {
+          "self": "https://issues.apache.org/jira/rest/api/2/priority/3";,
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/priorities/major.png";,
+          "name": "Major",
+          "id": "3"
+        },
+        "status": {
+          "self": "https://issues.apache.org/jira/rest/api/2/status/1";,
+          "description": "The issue is open and ready for the assignee to 
start work on it.",
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/statuses/open.png";,
+          "name": "Open",
+          "id": "1",
+          "statusCategory": {
+            "self": 
"https://issues.apache.org/jira/rest/api/2/statuscategory/2";,
+            "id": 2,
+            "key": "new",
+            "colorName": "blue-gray",
+            "name": "New"
+          }
+        }
+      }
+    },
+    {
+      "expand": "operations,editmeta,changelog,transitions,renderedFields",
+      "id": "12923907",
+      "self": "https://issues.apache.org/jira/rest/api/2/issue/12923907";,
+      "key": "APEXCORE-293",
+      "fields": {
+        "summary": "Add core and malhar documentation to project web site",
+        "fixVersions": [],
+        "priority": {
+          "self": "https://issues.apache.org/jira/rest/api/2/priority/3";,
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/priorities/major.png";,
+          "name": "Major",
+          "id": "3"
+        },
+        "status": {
+          "self": "https://issues.apache.org/jira/rest/api/2/status/1";,
+          "description": "The issue is open and ready for the assignee to 
start work on it.",
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/statuses/open.png";,
+          "name": "Open",
+          "id": "1",
+          "statusCategory": {
+            "self": 
"https://issues.apache.org/jira/rest/api/2/statuscategory/2";,
+            "id": 2,
+            "key": "new",
+            "colorName": "blue-gray",
+            "name": "New"
+          }
+        }
+      }
+    },
+    {
+      "expand": "operations,editmeta,changelog,transitions,renderedFields",
+      "id": "12924154",
+      "self": "https://issues.apache.org/jira/rest/api/2/issue/12924154";,
+      "key": "APEXCORE-295",
+      "fields": {
+        "summary": "Running a Storm topology on Apex.",
+        "fixVersions": [],
+        "priority": {
+          "self": "https://issues.apache.org/jira/rest/api/2/priority/3";,
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/priorities/major.png";,
+          "name": "Major",
+          "id": "3"
+        },
+        "status": {
+          "self": "https://issues.apache.org/jira/rest/api/2/status/1";,
+          "description": "The issue is open and ready for the assignee to 
start work on it.",
+          "iconUrl": 
"https://issues.apache.org/jira/images/icons/statuses/open.png";,
+          "name": "Open",
+          "id": "1",
+          "statusCategory": {
+            "self": 
"https://issues.apache.org/jira/rest/api/2/statuscategory/2";,
+            "id": 2,
+            "key": "new",
+            "colorName": "blue-gray",
+            "name": "New"
+          }
+        }
+      }
+    }
+  ],
+  "MLHR": [
+    {
+      "expand": 
"operations,versionedRepresentations,editmeta,changelog,transitions,renderedFields",
+      "id": "21200",
+      "self": "https://malhar.atlassian.net/rest/api/2/issue/21200";,
+      "key": "MLHR-1720",
+      "fields": {
+        "summary": "Development of Inner Join Operator",
+        "fixVersions": [],
+        "priority": {
+          "self": "https://malhar.atlassian.net/rest/api/2/priority/3";,
+          "iconUrl": 
"https://malhar.atlassian.net/images/icons/priorities/major.svg";,
+          "name": "Major",
+          "id": "3"
+        },
+        "status": {
+          "self": "https://malhar.atlassian.net/rest/api/2/status/3";,
+          "description": "This issue is being actively worked on at the moment 
by the assignee.",
+          "iconUrl": 
"https://malhar.atlassian.net/images/icons/statuses/inprogress.png";,
+          "name": "In Progress",
+          "id": "3",
+          "statusCategory": {
+            "self": "https://malhar.atlassian.net/rest/api/2/statuscategory/4";,
+            "id": 4,
+            "key": "indeterminate",
+            "colorName": "yellow",
+            "name": "In Progress"
+          }
+        }
+      }
+    },
+    {
+      "expand": 
"operations,versionedRepresentations,editmeta,changelog,transitions,renderedFields",
+      "id": "22414",
+      "self": "https://malhar.atlassian.net/rest/api/2/issue/22414";,
+      "key": "MLHR-1811",
+      "fields": {
+        "summary": "Add Non-Equality Join Condition",
+        "fixVersions": [],
+        "priority": {
+          "self": "https://malhar.atlassian.net/rest/api/2/priority/3";,
+          "iconUrl": 
"https://malhar.atlassian.net/images/icons/priorities/major.svg";,
+          "name": "Major",
+          "id": "3"
+        },
+        "status": {
+          "self": "https://malhar.atlassian.net/rest/api/2/status/1";,
+          "description": "The issue is open and ready for the assignee to 
start work on it.",
+          "iconUrl": 
"https://malhar.atlassian.net/images/icons/statuses/open.png";,
+          "name": "Open",
+          "id": "1",
+          "statusCategory": {
+            "self": "https://malhar.atlassian.net/rest/api/2/statuscategory/2";,
+            "id": 2,
+            "key": "new",
+            "colorName": "blue-gray",
+            "name": "To Do"
+          }
+        }
+      }
+    },
+    {
+      "expand": 
"operations,versionedRepresentations,editmeta,changelog,transitions,renderedFields",
+      "id": "22515",
+      "self": "https://malhar.atlassian.net/rest/api/2/issue/22515";,
+      "key": "MLHR-1818",
+      "fields": {
+        "summary": "Create a Calcite operator to enable SQL commands to be 
run",
+        "fixVersions": [],
+        "priority": {
+          "self": "https://malhar.atlassian.net/rest/api/2/priority/3";,
+          "iconUrl": 
"https://malhar.atlassian.net/images/icons/priorities/major.svg";,
+          "name": "Major",
+          "id": "3"
+        },
+        "status": {
+          "self": "https://malhar.atlassian.net/rest/api/2/status/1";,
+          "description": "The issue is open and ready for the assignee to 
start work on it.",
+          "iconUrl": 
"https://malhar.atlassian.net/images/icons/statuses/open.png";,
+          "name": "Open",
+          "id": "1",
+          "statusCategory": {
+            "self": "https://malhar.atlassian.net/rest/api/2/statuscategory/2";,
+            "id": 2,
+            "key": "new",
+            "colorName": "blue-gray",
+            "name": "To Do"
+          }
+        }
+      }
+    },
+    {
+      "expand": 
"operations,versionedRepresentations,editmeta,changelog,transitions,renderedFields",
+      "id": "22805",
+      "self": "https://malhar.atlassian.net/rest/api/2/issue/22805";,
+      "key": "MLHR-1843",
+      "fields": {
+        "summary": "Split Malhar Library and Malhar Contrib package into baby 
packages",
+        "fixVersions": [],
+        "priority": {
+          "self": "https://malhar.atlassian.net/rest/api/2/priority/2";,
+          "iconUrl": 
"https://malhar.atlassian.net/images/icons/priorities/critical.svg";,
+          "name": "Critical",
+          "id": "2"
+        },
+        "status": {
+          "self": "https://malhar.atlassian.net/rest/api/2/status/1";,
+          "description": "The issue is open and ready for the assignee to 
start work on it.",
+          "iconUrl": 
"https://malhar.atlassian.net/images/icons/statuses/open.png";,
+          "name": "Open",
+          "id": "1",
+          "statusCategory": {
+            "self": "https://malhar.atlassian.net/rest/api/2/statuscategory/2";,
+            "id": 2,
+            "key": "new",
+            "colorName": "blue-gray",
+            "name": "To Do"
+          }
+        }
+      }
+    },
+    {
+      "expand": 
"operations,versionedRepresentations,editmeta,changelog,transitions,renderedFields",
+      "id": "23312",
+      "self": "https://malhar.atlassian.net/rest/api/2/issue/23312";,
+      "key": "MLHR-1873",
+      "fields": {
+        "summary": "Create a fault-tolerant/scalable cache component backed by 
a persistent store",
+        "fixVersions": [],
+        "priority": {
+          "self": "https://malhar.atlassian.net/rest/api/2/priority/3";,
+          "iconUrl": 
"https://malhar.atlassian.net/images/icons/priorities/major.svg";,
+          "name": "Major",
+          "id": "3"
+        },
+        "status": {
+          "self": "https://malhar.atlassian.net/rest/api/2/status/3";,
+          "description": "This issue is being actively worked on at the moment 
by the assignee.",
+          "iconUrl": 
"https://malhar.atlassian.net/images/icons/statuses/inprogress.png";,
+          "name": "In Progress",
+          "id": "3",
+          "statusCategory": {
+            "self": "https://malhar.atlassian.net/rest/api/2/statuscategory/4";,
+            "id": 4,
+            "key": "indeterminate",
+            "colorName": "yellow",
+            "name": "In Progress"
+          }
+        }
+      }
+    },
+    {
+      "expand": 
"operations,versionedRepresentations,editmeta,changelog,transitions,renderedFields",
+      "id": "23702",
+      "self": "https://malhar.atlassian.net/rest/api/2/issue/23702";,
+      "key": "MLHR-1904",
+      "fields": {
+        "summary": "Rewrite kafka input operator to use 0.9.0 new consumer",
+        "fixVersions": [
+          {
+            "self": "https://malhar.atlassian.net/rest/api/2/version/12000";,
+            "id": "12000",
+            "name": "3.3.0",
+            "archived": false,
+            "released": false
+          }
+        ],
+        "priority": {
+          "self": "https://malhar.atlassian.net/rest/api/2/priority/3";,
+          "iconUrl": 
"https://malhar.atlassian.net/images/icons/priorities/major.svg";,
+          "name": "Major",
+          "id": "3"
+        },
+        "status": {
+          "self": "https://malhar.atlassian.net/rest/api/2/status/1";,
+          "description": "The issue is open and ready for the assignee to 
start work on it.",
+          "iconUrl": 
"https://malhar.atlassian.net/images/icons/statuses/open.png";,
+          "name": "Open",
+          "id": "1",
+          "statusCategory": {
+            "self": "https://malhar.atlassian.net/rest/api/2/statuscategory/2";,
+            "id": 2,
+            "key": "new",
+            "colorName": "blue-gray",
+            "name": "To Do"
+          }
+        }
+      }
+    },
+    {
+      "expand": 
"operations,versionedRepresentations,editmeta,changelog,transitions,renderedFields",
+      "id": "24104",
+      "self": "https://malhar.atlassian.net/rest/api/2/issue/24104";,
+      "key": "MLHR-1938",
+      "fields": {
+        "summary": "Operator checkpointing in distributed in-memory store",
+        "fixVersions": [],
+        "priority": {
+          "self": "https://malhar.atlassian.net/rest/api/2/priority/4";,
+          "iconUrl": 
"https://malhar.atlassian.net/images/icons/priorities/minor.svg";,
+          "name": "Minor",
+          "id": "4"
+        },
+        "status": {
+          "self": "https://malhar.atlassian.net/rest/api/2/status/1";,
+          "description": "The issue is open and ready for the assignee to 
start work on it.",
+          "iconUrl": 
"https://malhar.atlassian.net/images/icons/statuses/open.png";,
+          "name": "Open",
+          "id": "1",
+          "statusCategory": {
+            "self": "https://malhar.atlassian.net/rest/api/2/statuscategory/2";,
+            "id": 2,
+            "key": "new",
+            "colorName": "blue-gray",
+            "name": "To Do"
+          }
+        }
+      }
+    },
+    {
+      "expand": 
"operations,versionedRepresentations,editmeta,changelog,transitions,renderedFields",
+      "id": "24105",
+      "self": "https://malhar.atlassian.net/rest/api/2/issue/24105";,
+      "key": "MLHR-1939",
+      "fields": {
+        "summary": "Stream API",
+        "fixVersions": [],
+        "priority": {
+          "self": "https://malhar.atlassian.net/rest/api/2/priority/2";,
+          "iconUrl": 
"https://malhar.atlassian.net/images/icons/priorities/critical.svg";,
+          "name": "Critical",
+          "id": "2"
+        },
+        "status": {
+          "self": "https://malhar.atlassian.net/rest/api/2/status/1";,
+          "description": "The issue is open and ready for the assignee to 
start work on it.",
+          "iconUrl": 
"https://malhar.atlassian.net/images/icons/statuses/open.png";,
+          "name": "Open",
+          "id": "1",
+          "statusCategory": {
+            "self": "https://malhar.atlassian.net/rest/api/2/statuscategory/2";,
+            "id": 2,
+            "key": "new",
+            "colorName": "blue-gray",
+            "name": "To Do"
+          }
+        }
+      }
+    },
+    {
+      "expand": 
"operations,versionedRepresentations,editmeta,changelog,transitions,renderedFields",
+      "id": "24200",
+      "self": "https://malhar.atlassian.net/rest/api/2/issue/24200";,
+      "key": "MLHR-1942",
+      "fields": {
+        "summary": "Apex Operator for Apache Geode.",
+        "fixVersions": [],
+        "priority": {
+          "self": "https://malhar.atlassian.net/rest/api/2/priority/4";,
+          "iconUrl": 
"https://malhar.atlassian.net/images/icons/priorities/minor.svg";,
+          "name": "Minor",
+          "id": "4"
+        },
+        "status": {
+          "self": "https://malhar.atlassian.net/rest/api/2/status/1";,
+          "description": "The issue is open and ready for the assignee to 
start work on it.",
+          "iconUrl": 
"https://malhar.atlassian.net/images/icons/statuses/open.png";,
+          "name": "Open",
+          "id": "1",
+          "statusCategory": {
+            "self": "https://malhar.atlassian.net/rest/api/2/statuscategory/2";,
+            "id": 2,
+            "key": "new",
+            "colorName": "blue-gray",
+            "name": "To Do"
+          }
+        }
+      }
+    }
+  ]
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-apex-site/blob/f532a454/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 7eafda1..f584345 100644
--- a/package.json
+++ b/package.json
@@ -29,8 +29,10 @@
     "gulp-marked": "^1.0.0",
     "handlebars": "^4.0.2",
     "highlight.js": "^8.9.1",
+    "javascript-natural-sort": "^0.7.1",
     "jsdom": "3.1.2",
     "lodash": "^3.10.1",
-    "request": "^2.65.0"
+    "request": "^2.65.0",
+    "semver": "^5.1.0"
   }
 }

Reply via email to