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 }, 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 '!.wordpress-org/**', //wp-org assets '!dist/**', //build directory '!.git/**', //version control '!.github/**', //GitHub platform files '!tests/**', '!scripts/**', '!phpunit.xml', '!phpunit.xml.dist', //unit testing '!vendor/**', '!composer.lock', '!composer.phar', '!composer.json', //composer '!wordpress/**', '!.*', '!**/*~', //hidden files '!CONTRIBUTING.md', '!README.md', '!HOWTO.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}'], }, } }, 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 '.wordpress-org/.*', //wp-org assets 'dist/.*', //build directory '.git/.*', //version control '.github/.*', //GitHub platform '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 tag: { eq: '<%= pkg.version %>' // Check if highest repo tag is equal to pkg.version } } }, 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', 'phpcs']); grunt.registerTask('build', ['gitinfo', 'test', 'i18n', 'readme']); grunt.registerTask('release', ['checkbranch:HEAD', 'checkrepo', 'gitinfo', 'checktextdomain', 'clean', 'copy']); };