buddypress/Gruntfile.js
Boone B Gorges fb7f5a278e Pin wp-cli-buddypress 1.8.
Fixes #8010.

git-svn-id: https://buddypress.svn.wordpress.org/trunk@12298 cdf35c40-ae34-48e0-9cc9-0c9da1808c22
2018-11-27 18:41:40 +00:00

364 lines
8.2 KiB
JavaScript

/* jshint node:true */
/* global module */
module.exports = function( grunt ) {
var SOURCE_DIR = 'src/',
BUILD_DIR = 'build/',
BP_CSS = [
'**/*.css'
],
// CSS exclusions, for excluding files from certain tasks, e.g. rtlcss
BP_EXCLUDED_CSS = [
'!**/*-rtl.css'
],
BP_JS = [
'**/*.js'
],
BP_EXCLUDED_MISC = [
],
// SASS generated "Twenty*"" CSS files
BP_SCSS_CSS_FILES = [
'!bp-templates/bp-legacy/css/twenty*.css',
'!bp-templates/bp-nouveau/css/buddypress.css',
'!bp-core/admin/css/hello.css'
],
autoprefixer = require('autoprefixer'),
stylelintConfigCss = require('stylelint-config-wordpress/index.js'),
stylelintConfigScss = require('stylelint-config-wordpress/scss.js');
require( 'matchdep' ).filterDev( ['grunt-*', '!grunt-legacy-util'] ).forEach( grunt.loadNpmTasks );
grunt.util = require( 'grunt-legacy-util' );
grunt.initConfig( {
pkg: grunt.file.readJSON( 'package.json' ),
checkDependencies: {
options: {
packageManager: 'npm'
},
src: {}
},
jshint: {
options: grunt.file.readJSON( '.jshintrc' ),
grunt: {
src: ['Gruntfile.js']
},
core: {
expand: true,
cwd: SOURCE_DIR,
src: BP_JS,
/**
* Limit JSHint's run to a single specified file:
*
* grunt jshint:core --file=filename.js
*
* Optionally, include the file path:
*
* grunt jshint:core --file=path/to/filename.js
*
* @param {String} filepath
* @returns {Bool}
*/
filter: function( filepath ) {
var index, file = grunt.option( 'file' );
// Don't filter when no target file is specified
if ( ! file ) {
return true;
}
// Normalise filepath for Windows
filepath = filepath.replace( /\\/g, '/' );
index = filepath.lastIndexOf( '/' + file );
// Match only the filename passed from cli
if ( filepath === file || ( -1 !== index && index === filepath.length - ( file.length + 1 ) ) ) {
return true;
}
return false;
}
}
},
sass: {
options: {
outputStyle: 'expanded',
indentType: 'tab',
indentWidth: '1'
},
legacy: {
cwd: SOURCE_DIR,
extDot: 'last',
expand: true,
ext: '.css',
flatten: true,
src: ['bp-templates/bp-legacy/css/*.scss'],
dest: SOURCE_DIR + 'bp-templates/bp-legacy/css/'
},
nouveau: {
cwd: SOURCE_DIR,
extDot: 'last',
expand: true,
ext: '.css',
flatten: true,
src: ['bp-templates/bp-nouveau/sass/buddypress.scss'],
dest: SOURCE_DIR + 'bp-templates/bp-nouveau/css/'
},
admin: {
cwd: SOURCE_DIR,
extDot: 'last',
expand: true,
ext: '.css',
flatten: true,
src: ['bp-core/admin/sass/*.scss'],
dest: SOURCE_DIR + 'bp-core/admin/css/'
}
},
rtlcss: {
options: {
opts: {
processUrls: false,
autoRename: false,
clean: true
},
saveUnmodified: false
},
core: {
expand: true,
cwd: SOURCE_DIR,
dest: SOURCE_DIR,
extDot: 'last',
ext: '-rtl.css',
src: BP_CSS.concat( BP_EXCLUDED_CSS, BP_EXCLUDED_MISC )
}
},
checktextdomain: {
options: {
correct_domain: false,
text_domain: 'buddypress',
keywords: [
'__:1,2d',
'_e:1,2d',
'_x:1,2c,3d',
'_n:1,2,4d',
'_ex:1,2c,3d',
'_nx:1,2,4c,5d',
'esc_attr__:1,2d',
'esc_attr_e:1,2d',
'esc_attr_x:1,2c,3d',
'esc_html__:1,2d',
'esc_html_e:1,2d',
'esc_html_x:1,2c,3d',
'_n_noop:1,2,3d',
'_nx_noop:1,2,3c,4d'
]
},
files: {
cwd: SOURCE_DIR,
src: ['**/*.php'].concat( BP_EXCLUDED_MISC ),
expand: true
}
},
makepot: {
target: {
options: {
cwd: BUILD_DIR,
domainPath: '.',
mainFile: 'bp-loader.php',
potFilename: 'buddypress.pot',
processPot: function( pot ) {
pot.headers['report-msgid-bugs-to'] = 'https://buddypress.trac.wordpress.org';
pot.headers['last-translator'] = 'JOHN JAMES JACOBY <jjj@buddypress.org>';
pot.headers['language-team'] = 'ENGLISH <jjj@buddypress.org>';
return pot;
},
type: 'wp-plugin'
}
}
},
imagemin: {
core: {
expand: true,
cwd: SOURCE_DIR,
src: ['**/*.{gif,jpg,jpeg,png}'].concat( BP_EXCLUDED_MISC ),
dest: SOURCE_DIR
}
},
clean: {
all: [ BUILD_DIR ]
},
copy: {
files: {
files: [
{
cwd: SOURCE_DIR,
dest: BUILD_DIR,
dot: true,
expand: true,
src: ['**', '!**/.{svn,git}/**'].concat( BP_EXCLUDED_MISC )
},
{
dest: BUILD_DIR,
dot: true,
expand: true,
src: ['composer.json']
}
]
}
},
uglify: {
core: {
cwd: BUILD_DIR,
dest: BUILD_DIR,
extDot: 'last',
expand: true,
ext: '.min.js',
src: BP_JS
}
},
stylelint: {
css: {
options: {
config: stylelintConfigCss,
format: 'css'
},
expand: true,
cwd: SOURCE_DIR,
src: BP_CSS.concat( BP_EXCLUDED_CSS, BP_EXCLUDED_MISC, BP_SCSS_CSS_FILES )
},
scss: {
options: {
config: stylelintConfigScss,
format: 'scss'
},
expand: true,
cwd: SOURCE_DIR,
src: [ '**/*.scss' ]
}
},
postcss: {
options: {
map: false,
processors: [
autoprefixer({
browsers: ['extends @wordpress/browserslist-config'],
cascade: false
})
],
failOnError: false
},
css: {
expand: true,
cwd: SOURCE_DIR,
dest: SOURCE_DIR,
src: BP_CSS.concat( BP_EXCLUDED_CSS, BP_EXCLUDED_MISC )
}
},
cssmin: {
minify: {
cwd: BUILD_DIR,
dest: BUILD_DIR,
extDot: 'last',
expand: true,
ext: '.min.css',
src: BP_CSS
}
},
phpunit: {
'default': {
cmd: 'phpunit',
args: ['-c', 'phpunit.xml.dist']
},
'multisite': {
cmd: 'phpunit',
args: ['-c', 'tests/phpunit/multisite.xml']
},
'codecoverage': {
cmd: 'phpunit',
args: ['-c', 'tests/phpunit/codecoverage.xml' ]
}
},
exec: {
bpdefault: {
command: 'svn export --force https://github.com/buddypress/BP-Default.git/trunk bp-themes/bp-default',
cwd: BUILD_DIR,
stdout: false
},
cli: {
command: 'svn export --force https://github.com/buddypress/wp-cli-buddypress.git/tags/1.8 cli',
cwd: BUILD_DIR,
stdout: false
},
phpcompat: {
command: './vendor/bin/phpcs -p --standard=PHPCompatibilityWP --extensions=php --runtime-set testVersion 5.3- src tests',
stdout: true
}
},
jsvalidate:{
options:{
globals: {},
esprimaOptions:{},
verbose: false
},
build: {
files: {
src: [BUILD_DIR + '/**/*.js']
}
},
src: {
files: {
src: [SOURCE_DIR + '/**/*.js'].concat( BP_EXCLUDED_MISC )
}
}
},
patch: {
options: {
tracUrl: 'buddypress.trac.wordpress.org'
}
},
upload_patch: {
options: {
tracUrl: 'buddypress.trac.wordpress.org'
}
}
});
/**
* Register tasks.
*/
grunt.registerTask( 'src', ['checkDependencies', 'jsvalidate:src', 'jshint', 'stylelint', 'sass', 'postcss', 'rtlcss'] );
grunt.registerTask( 'commit', ['src', 'checktextdomain', 'imagemin','exec:phpcompat'] );
grunt.registerTask( 'build', ['commit', 'clean:all', 'copy:files', 'uglify', 'jsvalidate:build', 'cssmin', 'makepot', 'exec:bpdefault', 'exec:cli'] );
grunt.registerTask( 'release', ['build'] );
// Testing tasks.
grunt.registerMultiTask( 'phpunit', 'Runs PHPUnit tests, including the ajax and multisite tests.', function() {
grunt.util.spawn( {
args: this.data.args,
cmd: this.data.cmd,
opts: { stdio: 'inherit' }
}, this.async() );
});
grunt.registerTask( 'test', 'Run all unit test tasks.', ['phpunit:default', 'phpunit:multisite'] );
grunt.registerTask( 'jstest', 'Runs all JavaScript tasks.', [ 'jsvalidate:src', 'jshint' ] );
// Travis CI Tasks.
grunt.registerTask( 'travis:grunt', 'Runs Grunt build task.', [ 'build' ]);
grunt.registerTask( 'travis:phpunit', ['jsvalidate:src', 'jshint', 'checktextdomain', 'test'] );
grunt.registerTask( 'travis:codecoverage', 'Runs PHPUnit tasks with code-coverage generation.', ['phpunit:codecoverage'] );
grunt.registerTask( 'travis:phpcompat', 'Runs PHP compatibility scan.', ['exec:phpcompat'] );
// Patch task.
grunt.renameTask( 'patch_wordpress', 'patch' );
// Default task.
grunt.registerTask( 'default', ['src'] );
};