vso-extension-samples
Version:
Visual Studio Online Extension Samples
142 lines (124 loc) • 3.83 kB
JavaScript
var url = require('url');
module.exports = function (grunt) {
// Caller-provided options
var baseUri = grunt.option('baseUri') || 'https://vsoteamcalendar.blob.core.windows.net/vso-extension-samples';
var release = grunt.option('release');
var publisher = grunt.option('publisher') || 'fabrikam';
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-typescript');
grunt.loadNpmTasks('grunt-azure-blob');
// Initialize the list of samples to build
var samplesToBuild;
if(grunt.option('sample')) {
samplesToBuild = [ grunt.option('sample') ];
} else {
samplesToBuild = [
"build-inspector",
"contributions-guide",
"branch-delete",
"public-events",
"ui",
"build-results-enhancer"
];
}
// Project configuration
grunt.initConfig({
dirs: {
output: {
packages: "dist/packages/",
web: "dist/static/"
}
},
clean: {
dist: ['dist']
}
});
var typeScriptConfig = {};
var copyConfig = {};
var prepManifestConfig = {};
samplesToBuild.forEach(function (name) {
// Typescript task options
typeScriptConfig[name] = {
src: [name + '/scripts/**/*.ts'],
dest: '<%= dirs.output.web %>' + name,
options: {
module: 'amd',
target: 'es5',
rootDir: name,
sourceMap: false,
declaration: false
}
};
// Static content and extension manifest task options
copyConfig[name] = {
files: [
{
expand: true,
cwd: name,
src: '**/*.{html,css,png,jpg,js}',
dest: '<%= dirs.output.web %>' + name
},
{
expand: true,
cwd: name,
src: 'vss-extension.json',
dest: '<%= dirs.output.packages %>' + name
},
{
expand: true,
cwd: name,
src: 'images/**',
dest: '<%= dirs.output.packages %>' + name
},
{
src: 'lib/VSS.SDK.js',
dest: '<%= dirs.output.web %>' + name + '/sdk/scripts/VSS.SDK.js'
}
]
};
// Prep manifest for packaging options
prepManifestConfig[name] = {
manifest: '<%= dirs.output.packages %>' + name + '/vss-extension.json',
newBaseUri: baseUri + '/' + (release ? release + '/' : "") + name
};
});
grunt.config('typescript', typeScriptConfig);
grunt.config('copy', copyConfig);
grunt.config('prepManifest', prepManifestConfig);
// Task to copy static content to Azure Blob Storage
grunt.config('azure-blob', {
options: {
containerName: 'vso-extension-samples',
containerDelete: false,
gzip: false,
copySimulation: false
},
dist: {
files: [
{
expand: true,
cwd: '<%= dirs.output.web %>',
src: ['**/*'],
dest: release
}
]
}
});
// Register build task
grunt.registerTask('build', [ 'clean', 'typescript', 'copy' ]);
// Register custom "prep manifest" task
grunt.task.registerMultiTask('prepManifest', 'Prep the manifest by updating base URI and publisher', function() {
// Update extension manifest with updated base URI
var manifest = grunt.file.readJSON(this.data.manifest);
// Update base URI
manifest.baseUri = this.data.newBaseUri;
// Update publisher
manifest.publisher = publisher;
grunt.file.write(this.data.manifest, JSON.stringify(manifest, null, 4));
});
// Register prep package and deploy tasks
grunt.registerTask('prepPackage', [ 'build', 'prepManifest']);
grunt.registerTask('deploy', [ 'prepPackage', 'azure-blob' ]);
grunt.registerTask('default', [ 'build' ]);
};