capistrano-wpcli-multisite 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 02c274ad6a3b2a7cb6016390acf4e51a08e48e46
4
+ data.tar.gz: 9f2b1f8a716a610d34d9ce30ee166706d8b6abdc
5
+ SHA512:
6
+ metadata.gz: ab4b84e5a0ffced6dac49c96c31e64a22e1d8414941e35e51756c864dbe6a9ea86801868b3c587abf3de05087e21358fbae79c4432c94d5e87b8bba7779ffcc8
7
+ data.tar.gz: a5e49f7f5c6b5ec467501df1ca8bc1cd97ba7fd6ce2b832ab60fd30caef02764bcd79d259b12cd13f60cb73afe4546194844ee12173dc811b103b73840300ccd
data/.gemrelease ADDED
@@ -0,0 +1,3 @@
1
+ bump:
2
+ release: true
3
+ tag: true
data/.gitignore ADDED
@@ -0,0 +1,35 @@
1
+ *.gem
2
+ *.rbc
3
+ /.config
4
+ /coverage/
5
+ /InstalledFiles
6
+ /pkg/
7
+ /spec/reports/
8
+ /test/tmp/
9
+ /test/version_tmp/
10
+ /tmp/
11
+
12
+ ## Specific to RubyMotion:
13
+ .dat*
14
+ .repl_history
15
+ build/
16
+
17
+ ## Documentation cache and generated files:
18
+ /.yardoc/
19
+ /_yardoc/
20
+ /doc/
21
+ /rdoc/
22
+
23
+ ## Environment normalisation:
24
+ /.bundle/
25
+ /lib/bundler/man/
26
+
27
+ # for a library or gem, you might want to ignore these files since the code is
28
+ # intended to run in multiple environments; otherwise, check them in:
29
+ # Gemfile.lock
30
+ # .ruby-version
31
+ # .ruby-gemset
32
+
33
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
34
+ .rvmrc
35
+ .DS_Store
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in capistrano-wpcli.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,38 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ capistrano-wpcli (0.1.5)
5
+ capistrano (~> 3.6)
6
+ sshkit (~> 1.11)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ airbrussh (1.1.1)
12
+ sshkit (>= 1.6.1, != 1.7.0)
13
+ capistrano (3.7.1)
14
+ airbrussh (>= 1.0.0)
15
+ capistrano-harrow
16
+ i18n
17
+ rake (>= 10.0.0)
18
+ sshkit (>= 1.9.0)
19
+ capistrano-harrow (0.5.3)
20
+ i18n (0.7.0)
21
+ net-scp (1.2.1)
22
+ net-ssh (>= 2.6.5)
23
+ net-ssh (3.2.0)
24
+ rake (13.0.1)
25
+ sshkit (1.11.5)
26
+ net-scp (>= 1.1.2)
27
+ net-ssh (>= 2.8.0)
28
+
29
+ PLATFORMS
30
+ ruby
31
+
32
+ DEPENDENCIES
33
+ bundler (~> 1.12)
34
+ capistrano-wpcli!
35
+ rake (~> 13.0)
36
+
37
+ BUNDLED WITH
38
+ 1.13.6
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 lavmeiker
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,209 @@
1
+ # Capistrano::WPCLI
2
+
3
+ **Note: this plugin works only with Capistrano 3.**
4
+
5
+ Provides command line tools to facilitate Wordpress deploy.
6
+
7
+ ## Multisite database support changes for The Number!
8
+ We have added some changes to allow wordpress search-replace to modify all domains and subdomains for wp multisites.
9
+
10
+ ### Configuration
11
+ #### For Multisite
12
+ `:wp_cli_local_url` and `:wp_cli_remote_url` have been replaced with `:wp_cli_local_urls` and `:wp_cli_remote_urls` which take an array of domain names including subdomains, but **excluding** the protocol (`http://` or `https://`).
13
+ ##### Important!
14
+ Your domains in `:wp_cli_local_urls` and `:wp_cli_remote_urls` arrays must be the same length. Since it subs out the each domain with the matching index on the other array.
15
+ ##### Example:
16
+ In deploy.rb
17
+ ```ruby
18
+ set :wp_cli_local_urls, ['sub.domain.test:8888', 'sub2.domain.test:8888', 'sub3.domain2.test:8888']
19
+ ```
20
+ In production.rb
21
+ ```ruby
22
+ set :wp_cli_remote_urls, ['sub.domain.com', 'sub2.domain.com', 'sub3.domain2.com']
23
+ ```
24
+
25
+ ### How it works
26
+ wpcli:db:pull
27
+ 1. Replaces your local db with a copy of the remote db (same as always)
28
+ 2. Loops through `:wp_cli_remote_urls` array
29
+ 3. Runs `wp search-replace` on the entire db changing all instances of `remote_url` value with `wp_cli_local_urls` value on the same index.
30
+ 4. Runs `wp search-replace` to change the protocol from `https://` to `http://`. This has to be done seperately because there are a few places where the url is stored without the protocol and we want to catch those in our first search-replace.
31
+ - - -
32
+ wpcli:db:push
33
+ 1. Replaces your remote db with a copy of the local db (same as always)
34
+ 2. Loops through `:wp_cli_local_urls` array
35
+ 3. Runs `wp search-replace` on the entire db changing all instances of `local_url` value with `wp_cli_remote_url` value on the same index.
36
+ 4. Runs `wp search-replace` to change the protocol from `http://` to `https://`. This has to be done seperately because there are a few places where the url is stored without the protocol and we want to catch those in our first search-replace.
37
+
38
+ #### For Single Site
39
+ Gem works the same as the default. (See below)
40
+
41
+ ## Installation
42
+
43
+ Add this line to your application's Gemfile:
44
+ ```ruby
45
+ gem 'capistrano-wpcli', :git => 'https://github.com/thenumber/capistrano-wpcli'
46
+ ```
47
+ And then execute:
48
+
49
+ $ bundle
50
+
51
+ ## Usage
52
+
53
+ All you need to do is put the following in `Capfile` file:
54
+
55
+ require 'capistrano/wpcli'
56
+
57
+ ### How it works (Tasks)
58
+
59
+ wpcli:run
60
+
61
+ Executes the WP-CLI command passed as parameter.
62
+
63
+ cap production wpcli:run["core language install fr_FR"]
64
+
65
+ - - -
66
+
67
+ wpcli:db:push
68
+
69
+ Pushes the local WP database to the remote server and replaces the urls.
70
+
71
+ Optionally backs up the remote database before pushing (if `wpcli_backup_db` is set to true, see Configuration).
72
+
73
+ cap production wpcli:db:push
74
+
75
+ - - -
76
+
77
+ wpcli:db:pull
78
+
79
+ Pulls the remote server WP database to local and replaces the urls.
80
+
81
+ cap production wpcli:db:pull
82
+
83
+ - - -
84
+
85
+ wpcli:db:backup:remote
86
+
87
+ Pulls the remote server WP database to localhost, uses `wpcli_local_db_backup_dir` to define the location of the export.
88
+
89
+ - - -
90
+
91
+ wpcli:db:backup:local
92
+
93
+ Backs up the local WP database to localhost, uses `wpcli_local_db_backup_dir` to define the location of the export.
94
+
95
+ - - -
96
+
97
+ wpcli:rewrite:flush
98
+
99
+ Flush rewrite rules.
100
+
101
+ - - -
102
+
103
+ wpcli:rewrite:hard_flush
104
+
105
+ Perform a hard flush - updates `.htaccess` rules as well as rewrite rules in database.
106
+
107
+ - - -
108
+
109
+ wpcli:uploads:rsync:push
110
+
111
+ Push local uploads delta to remote machine using rsync.
112
+
113
+ - - -
114
+
115
+ wpcli:uploads:rsync:pull
116
+
117
+ Pull remote uploads delta to local machine using rsync.
118
+
119
+ ### Configuration
120
+
121
+ This plugin needs some configuration to work properly. You can put all your configs in Capistrano stage files i.e. `config/deploy/production.rb`.
122
+
123
+ Here's the list of options and the defaults for each option:
124
+
125
+ - - -
126
+
127
+ set :wpcli_remote_url
128
+
129
+ Url of the WP root installation on the remote server (used by search-replace command).
130
+
131
+ - - -
132
+
133
+ set :wpcli_local_url
134
+
135
+ Url of the WP root installation on the local server (used by search-replace command).
136
+
137
+ - - -
138
+
139
+ set :local_tmp_dir
140
+
141
+ Absolute path to local directory temporary directory which is read and writeable.
142
+
143
+ Defaults to `/tmp`
144
+
145
+ - - -
146
+
147
+ set :wpcli_backup_db
148
+
149
+ Set to true if you would like to create backups of databases on each push. Defaults to false.
150
+
151
+ - - -
152
+
153
+ set :wpcli_local_db_backup_dir
154
+
155
+ Absolute or relative path to local directory for storing database backups which is read and writeable.
156
+
157
+ Defaults to `config/backup`
158
+
159
+ **IMPORTANT: Make sure to add the folder to .gitignore to prevent db backups from being in version control.**
160
+
161
+ - - -
162
+
163
+ set :wpcli_args
164
+
165
+ You can pass arguments directly to WPCLI using this var.
166
+
167
+ Defaults to `ENV['WPCLI_ARGS']`
168
+
169
+ - - -
170
+
171
+ set :wpcli_local_uploads_dir
172
+
173
+ Absolute or relative path to local WP uploads directory.
174
+
175
+ Defaults to `web/app/uploads/`.
176
+
177
+ **IMPORTANT: Add trailing slash!**
178
+
179
+ - - -
180
+
181
+ set :wpcli_remote_uploads_dir
182
+
183
+ Absolute path to remote wordpress uploads directory.
184
+
185
+ Defaults to `#{shared_path.to_s}/web/app/uploads/`
186
+
187
+ **IMPORTANT: Add trailing slash!**
188
+
189
+ ### FAQ
190
+
191
+ - What if i want to use a custom port for rsync?
192
+ You can by setting your port somewhere inside the :ssh_options precedence.
193
+ See here: http://capistranorb.com/documentation/advanced-features/properties/#precedence
194
+
195
+ ### Vagrant
196
+
197
+ If you are using another machine as a development server (Vagrant for example), you should define a `dev` role and indicate the path where the project lives on that server. This normally goes on `deploy.rb` file. Here's an example:
198
+
199
+ server "example.dev", user: 'vagrant', password: 'vagrant', roles: %w{dev}
200
+
201
+ set :dev_path, '/srv/www/example.dev/current'
202
+
203
+ ## Contributing
204
+
205
+ 1. Fork it ( https://github.com/lavmeiker/capistrano-wpcli/fork )
206
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
207
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
208
+ 4. Push to the branch (`git push origin my-new-feature`)
209
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'capistrano/wpcli/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "capistrano-wpcli-multisite"
8
+ spec.version = Capistrano::Wpcli::VERSION
9
+ spec.authors = ["Juancito Arias", "Jeremy Zahner", "Jacob Galati"]
10
+ spec.email = ["tech@thenumber.ca"]
11
+ spec.summary = %q{Simple Capistrano wrapper around WP-CLI}
12
+ spec.description = %q{Capistrano tasks for managing Wordpress a fork of https://github.com/lavmeiker/capistrano-wpcli}
13
+ spec.homepage = "https://github.com/thenumber/capistrano-wpcli"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency 'capistrano', '~> 3.6'
22
+ spec.add_dependency 'sshkit', '~> 1.11'
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.12"
25
+ spec.add_development_dependency "rake", "~> 13.0"
26
+
27
+ end
@@ -0,0 +1,21 @@
1
+ namespace :load do
2
+ task :defaults do
3
+ set :wp_roles, :all
4
+
5
+ # You can pass parameters to WPCLI setting
6
+ # env var WPCLI_ARGS on each run
7
+ set :wpcli_args, ENV['WPCLI_ARGS']
8
+ end
9
+ end
10
+
11
+ namespace :wpcli do
12
+ desc "Runs a WP-CLI command"
13
+ task :run, :command do |t, args|
14
+ args.with_defaults(:command => :help)
15
+ on release_roles(fetch(:wp_roles)) do
16
+ within release_path do
17
+ execute :wp, args[:command], fetch(:wpcli_args)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,188 @@
1
+ namespace :load do
2
+
3
+ task :defaults do
4
+
5
+ # The url under which the wordpress installation is
6
+ # available on the remote server
7
+ set :wpcli_remote_url, "http://example.com"
8
+ # array of domains for use on multisites
9
+ set :wpcli_remote_urls, []
10
+
11
+ # The url under which the wordpress installation is
12
+ # available on the local server
13
+ set :wpcli_local_url, "http://example.dev"
14
+ # array of local domains for use on multisite
15
+ set :wpcli_local_urls, []
16
+
17
+
18
+ # A local temp dir which is read and writeable
19
+ set :local_tmp_dir, "/tmp"
20
+
21
+ # Use current time for annotating the backup file
22
+ set :current_time, -> { Time.now.strftime("%Y%m%d%H%M") }
23
+
24
+ # Boolean to determine wether the database should be backed up or not
25
+ set :wpcli_backup_db, false
26
+
27
+ # Set the location of the db backup files. This is relative to the local project root path.
28
+ set :wpcli_local_db_backup_dir, "config/backup"
29
+
30
+ # Temporary db dumps path
31
+ set :wpcli_remote_db_file, -> {"#{fetch(:tmp_dir)}/wpcli_database.sql.gz"}
32
+ set :wpcli_local_db_file, -> {"#{fetch(:local_tmp_dir)}/wpcli_database.sql.gz"}
33
+
34
+ # Backup file filename
35
+ set :wpcli_local_db_backup_filename, -> {"db_#{fetch(:stage)}_#{fetch(:current_time)}.sql.gz"}
36
+
37
+ end
38
+
39
+ end
40
+
41
+ namespace :wpcli do
42
+
43
+ namespace :db do
44
+
45
+ desc "Pull the remote data"
46
+ task :pull do
47
+ on roles(:web) do
48
+ within release_path do
49
+ execute :wp, :db, :export, "- |", :gzip, ">", fetch(:wpcli_remote_db_file)
50
+ download! fetch(:wpcli_remote_db_file), fetch(:wpcli_local_db_file)
51
+ execute :rm, fetch(:wpcli_remote_db_file)
52
+ end
53
+ end
54
+
55
+ unless roles(:dev).empty?
56
+ on roles(:dev) do
57
+ within fetch(:dev_path) do
58
+ local_tmp_file = fetch(:wpcli_local_db_file).gsub(/\.gz$/, "")
59
+ upload! fetch(:wpcli_local_db_file), fetch(:wpcli_local_db_file)
60
+ execute :gunzip, "-c", fetch(:wpcli_local_db_file), ">", local_tmp_file
61
+ execute :wp, :db, :import, local_tmp_file
62
+ execute :rm, fetch(:wpcli_local_db_file), local_tmp_file
63
+ if fetch(:wpcli_remote_urls).length > 0 || fetch(:wpcli_local_urls).length > 0
64
+ if fetch(:wpcli_remote_urls).length == fetch(:wpcli_local_urls).length
65
+ fetch(:wpcli_remote_urls).each_with_index do |url, i|
66
+ execute :wp, "search-replace", url, fetch(:wpcli_local_urls)[i], fetch(:wpcli_args) || "--skip-columns=guid", "--all-tables-with-prefix=wp"
67
+ execute :wp, "search-replace", "https://#{url}", "http://#{url}", fetch(:wpcli_args) || "--skip-columns=guid", "--all-tables-with-prefix=wp"
68
+ end
69
+ else
70
+ error = CommandError.new("remote_urls array and local_urls array not the same length")
71
+ raise error
72
+ end
73
+ else
74
+ execute :wp, "search-replace", fetch(:wpcli_remote_url), fetch(:wpcli_local_url), fetch(:wpcli_args) || "--skip-columns=guid", "--url=" + fetch(:wpcli_remote_url)
75
+ end
76
+ end
77
+ end
78
+ run_locally do
79
+ execute :rm, fetch(:wpcli_local_db_file)
80
+ end
81
+ else
82
+ run_locally do
83
+ local_tmp_file = fetch(:wpcli_local_db_file).gsub(/\.gz$/, "")
84
+ execute :gunzip, "-c", fetch(:wpcli_local_db_file), ">", local_tmp_file
85
+ execute :wp, :db, :import, local_tmp_file
86
+ execute :rm, fetch(:wpcli_local_db_file), local_tmp_file
87
+ if fetch(:wpcli_remote_urls).length > 0 || fetch(:wpcli_local_urls).length > 0
88
+ if fetch(:wpcli_remote_urls).length == fetch(:wpcli_local_urls).length
89
+ fetch(:wpcli_remote_urls).each_with_index do |url, i|
90
+ execute :wp, "search-replace", url, fetch(:wpcli_local_urls)[i], fetch(:wpcli_args) || "--skip-columns=guid", "--all-tables-with-prefix=wp"
91
+ execute :wp, "search-replace", "https://#{url}", "http://#{url}", fetch(:wpcli_args) || "--skip-columns=guid", "--all-tables-with-prefix=wp"
92
+ end
93
+ else
94
+ error = CommandError.new("remote_urls array and local_urls array not the same length")
95
+ raise error
96
+ end
97
+ else
98
+ execute :wp, "search-replace", fetch(:wpcli_remote_url), fetch(:wpcli_local_url), fetch(:wpcli_args) || "--skip-columns=guid", "--url=" + fetch(:wpcli_remote_url)
99
+ end
100
+ end
101
+ end
102
+ end
103
+
104
+ desc "Push the local database"
105
+ task :push do
106
+ unless roles(:dev).empty?
107
+ on roles(:dev) do
108
+ within fetch(:dev_path) do
109
+ execute :wp, :db, :export, "- |", :gzip, ">", fetch(:wpcli_local_db_file)
110
+ download! fetch(:wpcli_local_db_file), fetch(:wpcli_local_db_file)
111
+ end
112
+ end
113
+ else
114
+ run_locally do
115
+ execute :wp, :db, :export, "- |", :gzip, ">", fetch(:wpcli_local_db_file)
116
+ end
117
+ end
118
+ on roles(:web) do
119
+ upload! fetch(:wpcli_local_db_file), fetch(:wpcli_remote_db_file)
120
+ within release_path do
121
+ remote_tmp_file = fetch(:wpcli_remote_db_file).gsub(/\.gz$/, "")
122
+ execute :gunzip, "-c", fetch(:wpcli_remote_db_file), ">", remote_tmp_file
123
+ execute :wp, :db, :import, remote_tmp_file
124
+ execute :rm, fetch(:wpcli_remote_db_file), remote_tmp_file
125
+ if fetch(:wpcli_remote_urls).length > 0 || fetch(:wpcli_local_urls).length > 0
126
+ if fetch(:wpcli_remote_urls).length == fetch(:wpcli_local_urls).length
127
+ fetch(:wpcli_local_urls).each_with_index do |url, i|
128
+ execute :wp, "search-replace", url, fetch(:wpcli_remote_urls)[i], fetch(:wpcli_args) || "--skip-columns=guid", "--all-tables-with-prefix=wp"
129
+ execute :wp, "search-replace", "http://#{url}", "https://#{url}", fetch(:wpcli_args) || "--skip-columns=guid", "--all-tables-with-prefix=wp"
130
+ end
131
+ else
132
+ error = CommandError.new("remote_urls array and local_urls array not the same length")
133
+ raise error
134
+ end
135
+ else
136
+ execute :wp, "search-replace", fetch(:wpcli_local_url), fetch(:wpcli_remote_url), fetch(:wpcli_args) || "--skip-columns=guid", "--url=" + fetch(:wpcli_local_url)
137
+ end
138
+ end
139
+ end
140
+ unless roles(:dev).empty?
141
+ on roles(:dev) do
142
+ within fetch(:dev_path) do
143
+ execute :rm, fetch(:wpcli_local_db_file)
144
+ end
145
+ end
146
+ end
147
+ run_locally do
148
+ execute :rm, fetch(:wpcli_local_db_file)
149
+ end
150
+ end
151
+
152
+ namespace :backup do
153
+
154
+ desc "Checking / Creating backup directory"
155
+ task :create_backup_dir do
156
+ run_locally do
157
+ unless test("[ -d #{fetch(:wpcli_local_db_backup_dir)} ]")
158
+ execute :mkdir, Pathname.new(fetch(:wpcli_local_db_backup_dir))
159
+ end
160
+ end
161
+ end
162
+
163
+ desc "Backup the remote database"
164
+ task :remote do
165
+ on roles(:web) do
166
+ within release_path do
167
+ execute :wp, :db, :export, "- |", :gzip, ">", fetch(:wpcli_remote_db_file)
168
+ download! fetch(:wpcli_remote_db_file), File.join(fetch(:wpcli_local_db_backup_dir), fetch(:wpcli_local_db_backup_filename))
169
+ execute :rm, fetch(:wpcli_remote_db_file)
170
+ end
171
+ end
172
+ end
173
+
174
+ desc "Backup the local database"
175
+ task :local do
176
+ run_locally do
177
+ set :stage, :local
178
+ execute :wp, :db, :export, "- |", :gzip, ">", File.join(fetch(:wpcli_local_db_backup_dir), fetch(:wpcli_local_db_backup_filename))
179
+ end
180
+ end
181
+
182
+ before :push, 'backup:remote' if :wpcli_backup_db
183
+ before :local, :create_backup_dir
184
+ before :remote, :create_backup_dir
185
+
186
+ end
187
+ end
188
+ end
@@ -0,0 +1,21 @@
1
+ namespace :wpcli do
2
+ namespace :rewrite do
3
+ desc "Flush rewrite rules."
4
+ task :flush do
5
+ on roles(:web) do
6
+ within release_path do
7
+ execute :wp, :rewrite, :flush, fetch(:wpcli_args)
8
+ end
9
+ end
10
+ end
11
+
12
+ desc "Perform a hard flush - update `.htaccess` rules as well as rewrite rules in database."
13
+ task :hard_flush do
14
+ on roles(:web) do
15
+ within release_path do
16
+ execute :wp, :rewrite, :flush, "--hard", fetch(:wpcli_args)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,49 @@
1
+ namespace :load do
2
+ task :defaults do
3
+
4
+ # These options are passed directly to rsync
5
+ # Append your options, overwriting the defaults may result in malfunction
6
+ # Ex: --recursive --delete --exclude .git*
7
+ set :wpcli_rsync_options, "-avz --rsh=ssh --progress"
8
+
9
+ # Local dir where WP stores the uploads
10
+ # IMPORTANT: Add trailing slash!
11
+ set :wpcli_local_uploads_dir, "web/app/uploads/"
12
+
13
+ # Remote dir where WP stores the uploads
14
+ # IMPORTANT: Add trailing slash!
15
+ set :wpcli_remote_uploads_dir, -> {"#{shared_path.to_s}/web/app/uploads/"}
16
+
17
+ end
18
+ end
19
+
20
+ namespace :wpcli do
21
+ namespace :uploads do
22
+ namespace :rsync do
23
+
24
+ desc "Push local uploads delta to remote machine"
25
+ task :push do
26
+ roles(:web).each do |role|
27
+ puts role.netssh_options[:port]
28
+ port = role.netssh_options[:port] || 22
29
+ set :wpcli_rsync_options, fetch(:wpcli_rsync_options) + (" -e 'ssh -p #{port}'")
30
+ run_locally do
31
+ execute :rsync, fetch(:wpcli_rsync_options), fetch(:wpcli_local_uploads_dir), "#{role.user}@#{role.hostname}:#{fetch(:wpcli_remote_uploads_dir)}"
32
+ end
33
+ end
34
+ end
35
+
36
+ desc "Pull remote uploads delta to local machine"
37
+ task :pull do
38
+ roles(:web).each do |role|
39
+ run_locally do
40
+ puts role.netssh_options[:port]
41
+ port = role.netssh_options[:port] || 22
42
+ set :wpcli_rsync_options, fetch(:wpcli_rsync_options) + (" -e 'ssh -p #{port}'")
43
+ execute :rsync, fetch(:wpcli_rsync_options), "#{role.user}@#{role.hostname}:#{fetch(:wpcli_remote_uploads_dir)}", fetch(:wpcli_local_uploads_dir)
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,5 @@
1
+ module Capistrano
2
+ module Wpcli
3
+ VERSION = "0.1.7"
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ # Load all tasks
2
+ files = Dir[File.join(File.dirname(__FILE__), 'tasks', '*.rake')]
3
+ files.each do |file|
4
+ load file
5
+ end
File without changes
metadata ADDED
@@ -0,0 +1,117 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: capistrano-wpcli-multisite
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.7
5
+ platform: ruby
6
+ authors:
7
+ - Juancito Arias
8
+ - Jeremy Zahner
9
+ - Jacob Galati
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2021-10-01 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: capistrano
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: '3.6'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '3.6'
29
+ - !ruby/object:Gem::Dependency
30
+ name: sshkit
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: '1.11'
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '1.11'
43
+ - !ruby/object:Gem::Dependency
44
+ name: bundler
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.12'
50
+ type: :development
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '1.12'
57
+ - !ruby/object:Gem::Dependency
58
+ name: rake
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '13.0'
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: '13.0'
71
+ description: Capistrano tasks for managing Wordpress a fork of https://github.com/lavmeiker/capistrano-wpcli
72
+ email:
73
+ - tech@thenumber.ca
74
+ executables: []
75
+ extensions: []
76
+ extra_rdoc_files: []
77
+ files:
78
+ - ".gemrelease"
79
+ - ".gitignore"
80
+ - Gemfile
81
+ - Gemfile.lock
82
+ - LICENSE
83
+ - README.md
84
+ - Rakefile
85
+ - capistrano-wpcli.gemspec
86
+ - lib/capistrano-wpcli.rb
87
+ - lib/capistrano/tasks/wpcli.rake
88
+ - lib/capistrano/tasks/wpdb.rake
89
+ - lib/capistrano/tasks/wprewrite.rake
90
+ - lib/capistrano/tasks/wpuploads.rake
91
+ - lib/capistrano/wpcli.rb
92
+ - lib/capistrano/wpcli/version.rb
93
+ homepage: https://github.com/thenumber/capistrano-wpcli
94
+ licenses:
95
+ - MIT
96
+ metadata: {}
97
+ post_install_message:
98
+ rdoc_options: []
99
+ require_paths:
100
+ - lib
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ requirements: []
112
+ rubyforge_project:
113
+ rubygems_version: 2.5.2
114
+ signing_key:
115
+ specification_version: 4
116
+ summary: Simple Capistrano wrapper around WP-CLI
117
+ test_files: []