|
var fs = require('fs') |
|
var _ = require('lodash') |
|
var async = require('async') |
|
var GitHubApi = require('github') |
|
|
|
// Token from your settings page on github |
|
var token = 'YOURGITHUBTOKEN' |
|
|
|
// Repository to migrate |
|
var owner = 'upfrontIO' |
|
var repo = 'livingdocs-server' |
|
|
|
var github = new GitHubApi({version: '3.0.0'}) |
|
github.authenticate({type: 'oauth', token}) |
|
|
|
var readme = fs.readFileSync('./CHANGELOG.md', 'utf8') |
|
var releases = readme.split(/([a-zA-Z0-9\.\-]*\s\/\s[0-9]{4}-[0-9]{1,2}-[0-9]{1,2})\s=*/g) |
|
releases = _.map(releases, function (r) { return r.trim() }) |
|
releases = _.filter(releases, function (r) { return !!r.trim() }) |
|
|
|
var previousVersion = undefined |
|
releases = _.reduce(releases, function (all, release) { |
|
var isVersion = release.match(/^([a-zA-Z0-9\.\-]*)\s\/\s([0-9]{4}-[0-9]{1,2}-[0-9]{1,2})/) |
|
if (isVersion) { |
|
var version = isVersion[1] |
|
var date = isVersion[2] |
|
previousVersion = version |
|
} else { |
|
all.push({version: previousVersion, body: release}) |
|
} |
|
|
|
return all |
|
}, []) |
|
|
|
github.releases.listReleases({ |
|
owner: owner, |
|
repo: repo |
|
}, function (err, ghreleases) { |
|
if (err) { |
|
console.error(err) |
|
return |
|
} |
|
|
|
// If you don't limit the requests to github, they think you're abusing their api |
|
async.eachSeries(releases, function (release, cb) { |
|
var tag = 'v'+release.version |
|
var ghrelease = _.find(ghreleases, {tag_name: tag}) |
|
var done = function (err) { if (err) {console.log(err)}; cb();} |
|
if (ghrelease) updateRelease(release, ghrelease, done) |
|
else createRelease(release, done) |
|
}, function (err) { |
|
console.log(err || 'Successfully updated all releases') |
|
}) |
|
}) |
|
|
|
|
|
function updateRelease (release, ghrelease, done) { |
|
github.releases.editRelease({ |
|
id: release.id, |
|
owner: owner, |
|
repo: repo, |
|
tag_name: 'v'+ghrelease.tag_name, |
|
name: "Version "+release.version, |
|
body: release.body |
|
}, done) |
|
} |
|
|
|
function createRelease (release, done) { |
|
github.releases.createRelease({ |
|
owner: owner, |
|
repo: repo, |
|
tag_name: 'v'+release.version, |
|
name: "Version "+release.version, |
|
body: release.body |
|
}, done) |
|
} |