You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.1 KiB
45 lines
1.1 KiB
var path = require('path') |
|
var github = require('github-from-package') |
|
var ghreleases = require('ghreleases') |
|
var error = require('./error') |
|
|
|
function upload (opts, cb) { |
|
var pkg = opts.pkg |
|
var files = opts.files |
|
var gh = opts.gh || ghreleases |
|
|
|
var url = github(pkg) |
|
if (!url) { |
|
return process.nextTick(function () { |
|
cb(error.noRepository()) |
|
}) |
|
} |
|
|
|
var user = url.split('/')[3] |
|
var repo = url.split('/')[4] |
|
var auth = {user: 'x-oauth', token: opts.upload} |
|
var tag = 'v' + pkg.version |
|
|
|
gh.create(auth, user, repo, {tag_name: tag}, function () { |
|
gh.getByTag(auth, user, repo, tag, function (err, release) { |
|
if (err) return cb(err) |
|
|
|
var assets = release.assets.map(function (asset) { |
|
return asset.name |
|
}) |
|
|
|
var filtered = files.filter(function (file) { |
|
return !assets.some(function (asset) { |
|
return asset === path.basename(file) |
|
}) |
|
}) |
|
|
|
gh.uploadAssets(auth, user, repo, 'tags/' + tag, filtered, function (err) { |
|
if (err) return cb(err) |
|
cb(null, {new: filtered, old: assets}) |
|
}) |
|
}) |
|
}) |
|
} |
|
|
|
module.exports = upload
|
|
|