mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-22 17:48:56 +01:00
93 lines
2.8 KiB
JavaScript
93 lines
2.8 KiB
JavaScript
var gulp = require('gulp');
|
|
var decompress = require('gulp-decompress');
|
|
var es = require('event-stream');
|
|
var GitHub = require('github-releases');
|
|
var tmp = require('tmp');
|
|
var vfs = require('vinyl-fs');
|
|
var del = require('del');
|
|
var fs = require('fs');
|
|
var path = require('path');
|
|
|
|
tmp.setGracefulCleanup();
|
|
|
|
function downloadOmnisharp(version) {
|
|
var result = es.through();
|
|
|
|
function onError(err) {
|
|
result.emit('error', err);
|
|
}
|
|
|
|
var repo = new GitHub({
|
|
repo: 'OmniSharp/omnisharp-roslyn',
|
|
token: process.env['GITHUB_TOKEN']
|
|
});
|
|
|
|
repo.getReleases({ tag_name: version }, function (err, releases) {
|
|
if (err) { return onError(err); }
|
|
if (!releases.length) { return onError(new Error('Release not found')); }
|
|
if (!releases[0].assets.length) { return onError(new Error('Assets not found')); }
|
|
|
|
repo.downloadAsset(releases[0].assets[0], function (err, istream) {
|
|
if (err) { return onError(err); }
|
|
|
|
tmp.file(function (err, tmpPath, fd, cleanupCallback) {
|
|
if (err) { return onError(err); }
|
|
|
|
var ostream = fs.createWriteStream(null, { fd: fd });
|
|
ostream.once('error', onError);
|
|
istream.once('error', onError);
|
|
ostream.once('finish', function () {
|
|
vfs.src(tmpPath).pipe(result);
|
|
});
|
|
istream.pipe(ostream);
|
|
});
|
|
});
|
|
});
|
|
|
|
return result;
|
|
}
|
|
|
|
gulp.task('omnisharp:clean', function () {
|
|
return del('bin');
|
|
});
|
|
|
|
gulp.task('omnisharp:fetch', ['omnisharp:clean'], function () {
|
|
return downloadOmnisharp('v1.5.6')
|
|
.pipe(decompress({strip: 1}))
|
|
.pipe(gulp.dest('bin'));
|
|
});
|
|
|
|
gulp.task('omnisharp:fixscripts', ['omnisharp:fetch'], function () {
|
|
|
|
var _fixes = Object.create(null);
|
|
_fixes['./bin/omnisharp.cmd'] = '@"%~dp0packages\\dnx-clr-win-x86.1.0.0-beta4\\bin\\dnx.exe" "%~dp0packages\\OmniSharp\\1.0.0\\root" run %*';
|
|
_fixes['./bin/omnisharp'] = '#!/bin/bash\n\
|
|
SOURCE="${BASH_SOURCE[0]}"\n\
|
|
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink\n\
|
|
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"\n\
|
|
SOURCE="$(readlink "$SOURCE")"\n\
|
|
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located\n\
|
|
done\n\
|
|
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"\n\
|
|
export SET DNX_APPBASE="$DIR/packages/OmniSharp/1.0.0/root"\n\
|
|
export PATH=/usr/local/bin:/Library/Frameworks/Mono.framework/Commands:$PATH # this is required for the users of the Homebrew Mono package\n\
|
|
exec "$DIR/packages/dnx-mono.1.0.0-beta4/bin/dnx" "$DNX_APPBASE" run "$@"\n\
|
|
\n';
|
|
|
|
var promises = Object.keys(_fixes).map(function (key) {
|
|
return new Promise(function(resolve, reject) {
|
|
fs.writeFile(path.join(__dirname, key), _fixes[key], function (err) {
|
|
if (err) {
|
|
reject(err);
|
|
} else {
|
|
resolve();
|
|
}
|
|
})
|
|
});
|
|
});
|
|
|
|
return Promise.all(promises)
|
|
});
|
|
|
|
|
|
gulp.task('omnisharp', ['omnisharp:fixscripts']); |