module.exports = function (grunt) { require('load-grunt-tasks')(grunt); // Project configuration. grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), composerBin: 'vendor/bin', shell: { phpcs: { options: { stdout: true }, command: '<%= composerBin %>/phpcs' }, phpcbf: { options: { stdout: true }, command: '<%= composerBin %>/phpcbf' }, phpstan: { options: { stdout: true }, command: '<%= composerBin %>/phpstan analyze .' }, phpunit: { options: { stdout: true }, command: '<%= composerBin %>/phpunit' }, }, gitinfo: { commands: { 'local.tag.current.name': ['name-rev', '--tags', '--name-only', 'HEAD'], 'local.tag.current.nameLong': ['describe', '--tags', '--long'] } }, clean: { main: ['dist'], //Clean up build folder i18n: ['languages/*.mo', 'languages/*.pot'] }, copy: { // Copy the plugin to a versioned release directory main: { src: [ '**', '!*.xml', '!*.log', //any config/log files '!node_modules/**', '!Gruntfile.js', '!package.json', '!package-lock.json', //npm/Grunt '!assets/**', //wp-org assets '!dist/**', //build directory '!.git/**', //version control '!tests/**', '!scripts/**', '!phpunit.xml', '!phpunit.xml.dist', //unit testing '!vendor/**', '!composer.lock', '!composer.phar', '!composer.json', //composer '!wordpress/**', '!.*', '!**/*~', //hidden files '!CONTRIBUTING.md', '!README.md', '!phpcs.xml', '!phpcs.xml.dist', '!phpstan.neon.dist', '!grumphp.yml.dist', // CodeSniffer Configuration. '!docker-compose.override.yml', // Local Docker Development configuration. '!codecov.yml', // Code coverage configuration. '!tools/**', // Local Development/Build tools configuration. ], dest: 'dist/', options: { processContentExclude: ['**/*.{png,gif,jpg,ico,mo}'], processContent: function (content, srcpath) { if (srcpath == 'readme.txt' || srcpath == 'openid-connect-generic.php') { if (grunt.config.get('gitinfo').local.tag.current.name !== 'undefined') { content = content.replace('{{version}}', grunt.config.get('gitinfo').local.tag.current.name); } else { content = content.replace('{{version}}', grunt.config.get('gitinfo').local.tag.current.nameLong); } } return content; }, }, } }, addtextdomain: { options: { textdomain: 'daggerhart-openid-connect-generic', // Project text domain. }, update_all_domains: { options: { updateDomains: true }, src: ['*.php', '**/*.php', '!node_modules/**', '!tests/**', '!scripts/**', '!vendor/**', '!wordpress/**'] }, }, wp_readme_to_markdown: { dest: { files: { 'README.md': 'readme.txt' } }, }, makepot: { target: { options: { domainPath: '/languages', // Where to save the POT file. exclude: [ 'node_modules/.*', //npm 'assets/.*', //wp-org assets 'dist/.*', //build directory '.git/.*', //version control 'tests/.*', 'scripts/.*', //unit testing 'vendor/.*', //composer 'wordpress/.*', ], // List of files or directories to ignore. mainFile: 'openid-connect-generic.php', // Main project file. potFilename: 'openid-connect-generic.pot', // Name of the POT file. potHeaders: { poedit: true, // Includes common Poedit headers. 'report-msgid-bugs-to': 'https://github.com/daggerhart/openid-connect-generic/issues', 'x-poedit-keywordslist': true // Include a list of all possible gettext functions. }, // Headers to add to the generated POT file. type: 'wp-plugin', // Type of project (wp-plugin or wp-theme). updateTimestamp: true, // Whether the POT-Creation-Date should be updated without other changes. updatePoFiles: true // Whether to update PO files in the same directory as the POT file. } } }, po2mo: { plugin: { src: 'languages/*.po', expand: true } }, checkrepo: { deploy: { tagged: true, // Check that the last commit (HEAD) is tagged clean: true // Check that working directory is clean } }, checktextdomain: { options: { text_domain: 'daggerhart-openid-connect-generic', keywords: [ '__:1,2d', '_e:1,2d', '_x:1,2c,3d', 'esc_html__:1,2d', 'esc_html_e:1,2d', 'esc_html_x:1,2c,3d', 'esc_attr__:1,2d', 'esc_attr_e:1,2d', 'esc_attr_x:1,2c,3d', '_ex:1,2c,3d', '_x:1,2c,3d', '_n:1,2,4d', '_nx:1,2,4c,5d', '_n_noop:1,2,3d', '_nx_noop:1,2,3c,4d' ], }, files: { src: [ '**/*.php', '!node_modules/**', '!dist/**', '!tests/**', '!vendor/**', '!wordpress/**', '!*~', ], expand: true, }, }, // Bump version numbers version: { class: { options: { prefix: "const VERSION = '" }, src: ['<%= pkg.name %>.php'] }, header: { options: { prefix: '\\* Version:\\s+' }, src: ['<%= pkg.name %>.php'] }, readme: { options: { prefix: 'Stable tag:\\s+' }, src: ['readme.txt'] } } }); grunt.registerTask('phpcs', ['shell:phpcs']); grunt.registerTask('phpcbf', ['shell:phpcbf']); grunt.registerTask('phpstan', ['shell:phpstan']); grunt.registerTask('phpunit', ['shell:phpunit']); grunt.registerTask('i18n', ['addtextdomain', 'makepot', 'po2mo']); grunt.registerTask('readme', ['wp_readme_to_markdown']); grunt.registerTask('test', ['checktextdomain']); grunt.registerTask('build', ['gitinfo', 'test', 'clean', 'i18n', 'readme', 'copy']); //grunt.registerTask( 'deploy', [ 'checkbranch:master', 'checkrepo', 'build' ] ); grunt.registerTask('deploy', ['checkrepo', 'build']); };