in gulpfile.js [387:496]
function(response, err) {
jsdom.env(
response,
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));
});
});
}
);
}