function()

in gulpfile.js [390:494]


        function(err, window) {

          // Query the DOM for all links in the list
          var releaseLinks = window.document.querySelectorAll('ul li a');

          // Convert this NodeList to an array
          releaseLinks = Array.prototype.slice.call(releaseLinks)

          // Filter out non-version-looking links
          .filter(function(el) {
            var text = el.innerHTML.trim();
            return ['..', 'KEYS', 'malhar', 'malhar/'].indexOf(text) === -1;
          });

          // Create array of releases from this filtered NodeList
          var releases = releaseLinks.map(function(el) {
            var releaseStr = el.innerHTML.trim();
            var repoName;

            // Set correct repo name
            targets.forEach(function(tar) {
              if (releaseStr.indexOf(tar.repo) !== -1) {
                repoName = tar.repo;
              }
            });

            // Extract release version and docs version
            var releaseVersionText = el.innerHTML.trim();

            // full release version
            if (/([0-9]+\.[0-9]+\.[0-9]+((.*)([^\/]))*)/.test(releaseVersionText) === true) {
              var releaseVersion = /([0-9]+\.[0-9]+\.[0-9]+((.*)([^\/]))*)/.exec(releaseVersionText)[1];
            }

            // strictly numbers for semantic version checking
            if (/([0-9]+\.[0-9]+\.[0-9]+)/.test(releaseVersionText) === true) {
              var releaseSemVer = /([0-9]+\.[0-9]+\.[0-9]+)/.exec(releaseVersionText)[1];
            }
            var docsVersion = semver.major(releaseSemVer) + '.' + semver.minor(releaseSemVer);

            return {
              version: releaseVersion,
              docs: docsVersion,
              repo: repoName
            };
          });

          // Get tags and hashes for all target repos
          getAllTargetReposTagsHashes().then(function(resp, err) {

            if (err) {
              console.log('ERROR', err);
            }

            // Go through all releases
            Q.all(releases.map(function(release) {
              var def = Q.defer();

              // go through target releases
              // first, find the correct target
              for (var i=0; i<targets.length; i++) {
                if(targets[i].repo === release.repo) {
                  for(var j=0; j<targets[i].releases.length; j++) {

                    // if target version matches release
                    if (targets[i].releases[j][1] === release.version) {

                      // get tag date from remote repo
                      // arguments: repoName, tagHash
                      getTagDate(release.repo, targets[i].releases[j][0]).then(function(response) {
                        release.date=response;
                        def.resolve();
                      });
                      break;
                    }
                  }
                  break;
                }
              }
              return def.promise;
            }))

            // After all tag dates are loaded
            .then(function() {
              // sort releases by date
              releases.sort(function(a, b) {
                return b.date - a.date;
              });

              var fileContents = {};

              // Use the "key" to set core.src and malhar.src, etc.
              targets.forEach(function(trg) {
                // filter releases by repo
                _.set(fileContents, trg.key, releases.filter(function(el) {
                  return el.repo === trg.repo;
                }));
              });

              // Write the file to releases.json
              fs.writeFile('./releases.json', JSON.stringify(fileContents, 0, 2));

            });
          });
        }