forked from scottgonzalez/grunt-wordpress
-
Notifications
You must be signed in to change notification settings - Fork 0
/
wordpress.js
144 lines (118 loc) · 3.88 KB
/
wordpress.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/*
* grunt-wordpress
* https://github.com/scottgonzalez/grunt-wordpress
*
* Copyright (c) 2012 Scott González
* Licensed under the MIT license.
*/
module.exports = function( grunt ) {
require( grunt.task.getFile( "wordpress/posts.js" ) )( grunt );
require( grunt.task.getFile( "wordpress/taxonomies.js" ) )( grunt );
require( grunt.task.getFile( "wordpress/resources.js" ) )( grunt );
var _client,
path = require( "path" ),
wordpress = require( "wordpress" ),
async = grunt.utils.async,
version = require( "../package" ).version;
// Async directory recursion, always walks all files before recursing
grunt.registerHelper( "wordpress-recurse", function recurse( rootdir, fn, complete ) {
var path = rootdir + "/*";
async.mapSeries( grunt.file.expandFiles( path ), fn, function( error ) {
if ( error ) {
return complete( error );
}
async.map( grunt.file.expandDirs( path ), function( dir, dirComplete ) {
recurse( dir, fn, dirComplete );
}, complete );
});
});
function config() {
var target = grunt.config( "target" ) || grunt.config( "wordpress._default" ),
base = grunt.config( "wordpress" );
if ( target ) {
return base[ target ];
}
return base;
}
grunt.registerHelper( "wordpress-client", function() {
if ( !_client ) {
_client = wordpress.createClient( config() );
}
return _client;
});
grunt.registerHelper( "wordpress-validate-xmlrpc-version", function( fn ) {
var client = grunt.helper( "wordpress-client" );
grunt.verbose.write( "Verifying XML-RPC version..." );
client.authenticatedCall( "gw.getVersion", function( error, xmlrpcVersion ) {
if ( error ) {
grunt.verbose.error();
if ( error.code === -32601 ) {
return fn( new Error(
"XML-RPC extensions for grunt-wordpress are not installed." ) );
}
// XML-RPC is disabled or bad credentials
// WordPress provides good error messages, so we don't do any special handling
return fn( error );
}
if ( xmlrpcVersion !== version ) {
return fn( new Error( "Mismatching versions. " +
"grunt-wordpress: " + version + "; XML-RPC version: " + xmlrpcVersion ) );
}
grunt.verbose.ok();
fn( null );
});
});
grunt.registerTask( "wordpress-sync", "Synchronize WordPress with local content", function() {
this.requires( "wordpress-validate" );
var done = this.async(),
dir = grunt.config( "wordpress.dir" );
async.waterfall([
function syncTerms( fn ) {
grunt.helper( "wordpress-sync-terms", path.join( dir, "taxonomies.json" ), fn );
},
function syncPosts( termMap, fn ) {
grunt.helper( "wordpress-sync-posts", path.join( dir, "posts/" ), termMap, fn );
},
function syncResources( fn ) {
grunt.helper( "wordpress-sync-resources", path.join( dir, "resources/" ), fn );
}
], function( error ) {
if ( !error ) {
return done();
}
if ( error.code === "ECONNREFUSED" ) {
grunt.log.error( "Could not connect to WordPress XML-RPC server." );
} else {
grunt.log.error( error );
}
done( false );
});
});
grunt.registerTask( "wordpress-validate", "Validate HTML files for synchronizing WordPress", function() {
var done = this.async(),
dir = grunt.config( "wordpress.dir" );
async.waterfall([
function( fn ) {
grunt.helper( "wordpress-validate-xmlrpc-version", fn );
},
function( fn ) {
grunt.helper( "wordpress-validate-terms", path.join( dir, "taxonomies.json" ), fn );
},
function( fn ) {
grunt.helper( "wordpress-validate-posts", path.join( dir, "posts/" ), fn );
}
], function( error ) {
if ( error ) {
grunt.log.error( error );
return done( false );
}
done();
});
});
grunt.registerTask( "target", "Runtime configuration to choose deployment target", function( target ) {
grunt.config.set( "target", target );
});
grunt.registerTask( "wordpress-publish", "wordpress-validate wordpress-sync" );
grunt.registerTask( "wordpress-deploy", "build-wordpress wordpress-publish" );
grunt.registerTask( "deploy", "wordpress-deploy" );
};