blob: fe32339aa14d1e67033a7145632d13741835240a [file] [log] [blame]
/* eslint-disable node/no-unpublished-require */
/* eslint-disable prettier/prettier */
/* eslint-disable no-console */
module.exports = function (grunt) {
// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
clean: {
out: ['out/', 'out-wpt/', 'out-node/'],
},
run: {
'generate-version': {
cmd: 'node',
args: ['tools/gen_version'],
},
'generate-listings': {
cmd: 'node',
args: ['tools/gen_listings', 'out/', 'src/webgpu', 'src/stress', 'src/manual', 'src/unittests', 'src/demo'],
},
'generate-wpt-cts-html': {
cmd: 'node',
args: ['tools/gen_wpt_cts_html', 'out-wpt/cts.https.html', 'src/common/templates/cts.https.html'],
},
unittest: {
cmd: 'node',
args: ['tools/run_node', 'unittests:*'],
},
'build-out': {
cmd: 'node',
args: [
'node_modules/@babel/cli/bin/babel',
'--extensions=.ts',
'--source-maps=true',
'--out-dir=out/',
'src/',
],
},
'build-out-wpt': {
cmd: 'node',
args: [
'node_modules/@babel/cli/bin/babel',
'--extensions=.ts',
'--source-maps=false',
'--delete-dir-on-start',
'--out-dir=out-wpt/',
'src/',
'--only=src/common/framework/',
'--only=src/common/runtime/helper/',
'--only=src/common/runtime/wpt.ts',
'--only=src/webgpu/',
// These files will be generated, instead of compiled from TypeScript.
'--ignore=src/common/internal/version.ts',
'--ignore=src/webgpu/listing.ts',
],
},
'build-out-node': {
cmd: 'node',
args: [
'node_modules/typescript/lib/tsc.js',
'--project', 'node.tsconfig.json',
'--outDir', 'out-node/',
],
},
'copy-assets': {
cmd: 'node',
args: [
'node_modules/@babel/cli/bin/babel',
'src/resources/',
'--out-dir=out/resources/',
'--copy-files'
],
},
'copy-assets-wpt': {
cmd: 'node',
args: [
'node_modules/@babel/cli/bin/babel',
'src/resources/',
'--out-dir=out-wpt/resources/',
'--copy-files'
],
},
lint: {
cmd: 'node',
args: ['node_modules/eslint/bin/eslint', 'src/**/*.ts', '--max-warnings=0'],
},
presubmit: {
cmd: 'node',
args: ['tools/presubmit'],
},
fix: {
cmd: 'node',
args: ['node_modules/eslint/bin/eslint', 'src/**/*.ts', '--fix'],
},
'autoformat-out-wpt': {
cmd: 'node',
args: ['node_modules/prettier/bin-prettier', '--loglevel=warn', '--write', 'out-wpt/**/*.js'],
},
tsdoc: {
cmd: 'node',
args: ['node_modules/typedoc/bin/typedoc'],
},
'tsdoc-treatWarningsAsErrors': {
cmd: 'node',
args: ['node_modules/typedoc/bin/typedoc', '--treatWarningsAsErrors'],
},
serve: {
cmd: 'node',
args: ['node_modules/http-server/bin/http-server', '-p8080', '-a127.0.0.1', '-c-1']
}
},
copy: {
'out-wpt-generated': {
files: [
{ expand: true, cwd: 'out', src: 'common/internal/version.js', dest: 'out-wpt/' },
{ expand: true, cwd: 'out', src: 'webgpu/listing.js', dest: 'out-wpt/' },
],
},
'out-wpt-htmlfiles': {
files: [
{ expand: true, cwd: 'src', src: 'webgpu/**/*.html', dest: 'out-wpt/' },
],
},
},
ts: {
check: {
tsconfig: {
tsconfig: 'tsconfig.json',
passThrough: true,
},
},
},
});
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-run');
grunt.loadNpmTasks('grunt-ts');
const helpMessageTasks = [];
function registerTaskAndAddToHelp(name, desc, deps) {
grunt.registerTask(name, deps);
addExistingTaskToHelp(name, desc);
}
function addExistingTaskToHelp(name, desc) {
helpMessageTasks.push({ name, desc });
}
grunt.registerTask('set-quiet-mode', () => {
grunt.log.write('Running tasks');
require('quiet-grunt');
});
grunt.registerTask('build-standalone', 'Build out/ (no checks, no WPT)', [
'run:build-out',
'run:copy-assets',
'run:generate-version',
'run:generate-listings',
]);
grunt.registerTask('build-wpt', 'Build out/ (no checks)', [
'run:build-out-wpt',
'run:copy-assets-wpt',
'run:autoformat-out-wpt',
'run:generate-version',
'run:generate-listings',
'copy:out-wpt-generated',
'copy:out-wpt-htmlfiles',
'run:generate-wpt-cts-html',
]);
grunt.registerTask('build-done-message', () => {
process.stderr.write('\nBuild completed! Running checks/tests');
});
registerTaskAndAddToHelp('pre', 'Run all presubmit checks: standalone+wpt+typecheck+unittest+lint', [
'set-quiet-mode',
'clean',
'build-standalone',
'build-wpt',
'run:build-out-node',
'build-done-message',
'ts:check',
'run:presubmit',
'run:unittest',
'run:lint',
'run:tsdoc-treatWarningsAsErrors',
]);
registerTaskAndAddToHelp('standalone', 'Build standalone and typecheck', [
'set-quiet-mode',
'build-standalone',
'build-done-message',
'ts:check',
]);
registerTaskAndAddToHelp('wpt', 'Build for WPT and typecheck', [
'set-quiet-mode',
'build-wpt',
'build-done-message',
'ts:check',
]);
registerTaskAndAddToHelp('unittest', 'Build standalone, typecheck, and unittest', [
'standalone',
'run:unittest',
]);
registerTaskAndAddToHelp('check', 'Just typecheck', [
'set-quiet-mode',
'ts:check',
]);
registerTaskAndAddToHelp('serve', 'Serve out/ on 127.0.0.1:8080 (does NOT compile source)', ['run:serve']);
registerTaskAndAddToHelp('fix', 'Fix lint and formatting', ['run:fix']);
addExistingTaskToHelp('clean', 'Clean out/ and out-wpt/');
grunt.registerTask('default', '', () => {
console.error('\nAvailable tasks (see grunt --help for info):');
for (const { name, desc } of helpMessageTasks) {
console.error(`$ grunt ${name}`);
console.error(` ${desc}`);
}
});
};