wordmove-ng 6.0.0

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.
Files changed (74) hide show
  1. checksums.yaml +7 -0
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +40 -0
  3. data/.github/ISSUE_TEMPLATE/config.yml +11 -0
  4. data/.github/stale.yml +18 -0
  5. data/.github/workflows/release.yml +100 -0
  6. data/.github/workflows/ruby.yml +41 -0
  7. data/.gitignore +21 -0
  8. data/.release-please-manifest.json +3 -0
  9. data/.rspec +2 -0
  10. data/.rubocop.yml +50 -0
  11. data/.rubocop_todo.yml +89 -0
  12. data/.ruby-gemset +1 -0
  13. data/.ruby-version +1 -0
  14. data/.vscode/launch.json +73 -0
  15. data/CHANGELOG.md +78 -0
  16. data/CLAUDE.md +114 -0
  17. data/CONTRIBUTING.md +114 -0
  18. data/Gemfile +14 -0
  19. data/LICENSE +22 -0
  20. data/README.md +340 -0
  21. data/Rakefile +7 -0
  22. data/assets/images/wordmove-ng.png +0 -0
  23. data/bin/bundle +105 -0
  24. data/bin/bundler +17 -0
  25. data/bin/byebug +29 -0
  26. data/bin/coderay +29 -0
  27. data/bin/console +16 -0
  28. data/bin/htmldiff +29 -0
  29. data/bin/kwalify +29 -0
  30. data/bin/ldiff +29 -0
  31. data/bin/pry +29 -0
  32. data/bin/rake +29 -0
  33. data/bin/rspec +29 -0
  34. data/bin/rubocop +29 -0
  35. data/bin/ruby-parse +29 -0
  36. data/bin/ruby-rewrite +29 -0
  37. data/bin/rumoji +29 -0
  38. data/bin/setup +7 -0
  39. data/bin/thor +29 -0
  40. data/bin/wordmove-ng +10 -0
  41. data/deploy/deploy.sh +3 -0
  42. data/exe/wordmove-ng +6 -0
  43. data/lib/wordmove/assets/wordmove_schema_global.yml +16 -0
  44. data/lib/wordmove/assets/wordmove_schema_local.yml +31 -0
  45. data/lib/wordmove/assets/wordmove_schema_remote.yml +167 -0
  46. data/lib/wordmove/cli.rb +134 -0
  47. data/lib/wordmove/deployer/base.rb +356 -0
  48. data/lib/wordmove/deployer/ssh.rb +339 -0
  49. data/lib/wordmove/doctor/movefile.rb +112 -0
  50. data/lib/wordmove/doctor/mysql.rb +136 -0
  51. data/lib/wordmove/doctor/rsync.rb +27 -0
  52. data/lib/wordmove/doctor/ssh.rb +90 -0
  53. data/lib/wordmove/doctor/wpcli.rb +43 -0
  54. data/lib/wordmove/doctor.rb +67 -0
  55. data/lib/wordmove/environments_list.rb +68 -0
  56. data/lib/wordmove/exceptions.rb +10 -0
  57. data/lib/wordmove/generators/movefile.rb +50 -0
  58. data/lib/wordmove/generators/movefile.yml +104 -0
  59. data/lib/wordmove/generators/movefile_adapter.rb +188 -0
  60. data/lib/wordmove/guardian.rb +37 -0
  61. data/lib/wordmove/hook.rb +128 -0
  62. data/lib/wordmove/logger.rb +165 -0
  63. data/lib/wordmove/movefile.rb +129 -0
  64. data/lib/wordmove/prerequisites.rb +57 -0
  65. data/lib/wordmove/sql_adapter/wpcli.rb +72 -0
  66. data/lib/wordmove/ssh_runner.rb +110 -0
  67. data/lib/wordmove/version.rb +3 -0
  68. data/lib/wordmove/wordpress_directory/path.rb +11 -0
  69. data/lib/wordmove/wordpress_directory.rb +41 -0
  70. data/lib/wordmove-ng.rb +4 -0
  71. data/lib/wordmove.rb +51 -0
  72. data/release-please-config.json +25 -0
  73. data/wordmove-ng.gemspec +62 -0
  74. metadata +318 -0
@@ -0,0 +1,41 @@
1
+ require 'wordmove/wordpress_directory/path'
2
+
3
+ class WordpressDirectory
4
+ attr_accessor :type, :options
5
+
6
+ def initialize(type, options)
7
+ @type = type
8
+ @options = options
9
+ end
10
+
11
+ DEFAULT_PATHS = {
12
+ Path::WP_CONTENT => 'wp-content',
13
+ Path::WP_CONFIG => 'wp-config.php',
14
+ Path::PLUGINS => 'wp-content/plugins',
15
+ Path::MU_PLUGINS => 'wp-content/mu-plugins',
16
+ Path::THEMES => 'wp-content/themes',
17
+ Path::UPLOADS => 'wp-content/uploads',
18
+ Path::LANGUAGES => 'wp-content/languages'
19
+ }.freeze
20
+
21
+ def self.default_path_for(sym)
22
+ DEFAULT_PATHS[sym]
23
+ end
24
+
25
+ def path(*args)
26
+ File.join(options[:wordpress_path], relative_path(*args))
27
+ end
28
+
29
+ def url(*args)
30
+ File.join(options[:vhost], relative_path(*args))
31
+ end
32
+
33
+ def relative_path(*args)
34
+ path = if options[:paths] && options[:paths][type]
35
+ options[:paths][type]
36
+ else
37
+ DEFAULT_PATHS[type]
38
+ end
39
+ File.join(path, *args)
40
+ end
41
+ end
@@ -0,0 +1,4 @@
1
+ # rubocop:disable Naming/FileName -- the gem is named wordmove-ng, so `require "wordmove-ng"` must work
2
+ # The gem is published as wordmove-ng; the code keeps the Wordmove namespace.
3
+ require 'wordmove'
4
+ # rubocop:enable Naming/FileName
data/lib/wordmove.rb ADDED
@@ -0,0 +1,51 @@
1
+ require 'English'
2
+ require 'base64'
3
+ require 'logger'
4
+ require 'strscan'
5
+
6
+ unless StringScanner.method_defined?(:peep)
7
+ class StringScanner
8
+ alias peep peek
9
+ end
10
+ end
11
+
12
+ require 'active_support'
13
+ require 'active_support/core_ext'
14
+ require 'colorize'
15
+ require 'dotenv'
16
+ require 'erb'
17
+ require 'kwalify'
18
+ require 'ostruct'
19
+ require 'thor'
20
+ require 'thor/group'
21
+ require 'yaml'
22
+
23
+ require 'wordmove/ssh_runner'
24
+ require 'wordmove/prerequisites'
25
+ require 'photocopier'
26
+
27
+ require 'wordmove/cli'
28
+ require 'wordmove/doctor'
29
+ require 'wordmove/doctor/movefile'
30
+ require 'wordmove/doctor/mysql'
31
+ require 'wordmove/doctor/rsync'
32
+ require 'wordmove/doctor/ssh'
33
+ require 'wordmove/doctor/wpcli'
34
+ require 'wordmove/exceptions'
35
+ require 'wordmove/guardian'
36
+ require 'wordmove/hook'
37
+ require 'wordmove/logger'
38
+ require 'wordmove/movefile'
39
+ require 'wordmove/sql_adapter/wpcli'
40
+ require 'wordmove/wordpress_directory'
41
+ require "wordmove/version"
42
+ require "wordmove/environments_list"
43
+
44
+ require 'wordmove/generators/movefile_adapter'
45
+ require 'wordmove/generators/movefile'
46
+
47
+ require 'wordmove/deployer/base'
48
+ require 'wordmove/deployer/ssh'
49
+
50
+ module Wordmove
51
+ end
@@ -0,0 +1,25 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json",
3
+ "release-type": "ruby",
4
+ "include-component-in-tag": false,
5
+ "include-v-in-tag": true,
6
+ "packages": {
7
+ ".": {
8
+ "package-name": "wordmove-ng",
9
+ "version-file": "lib/wordmove/version.rb",
10
+ "changelog-path": "CHANGELOG.md",
11
+ "changelog-sections": [
12
+ { "type": "feat", "section": "Features" },
13
+ { "type": "fix", "section": "Bug Fixes" },
14
+ { "type": "perf", "section": "Performance" },
15
+ { "type": "revert", "section": "Reverts" },
16
+ { "type": "docs", "section": "Documentation" },
17
+ { "type": "deps", "section": "Dependencies" },
18
+ { "type": "refactor", "section": "Refactoring", "hidden": true },
19
+ { "type": "test", "section": "Tests", "hidden": true },
20
+ { "type": "chore", "section": "Chores", "hidden": true },
21
+ { "type": "ci", "section": "CI", "hidden": true }
22
+ ]
23
+ }
24
+ }
25
+ }
@@ -0,0 +1,62 @@
1
+ lib = File.expand_path('lib', __dir__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'wordmove/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "wordmove-ng"
7
+ spec.version = Wordmove::VERSION
8
+ spec.authors = [
9
+ "Kumar",
10
+ # Original Wordmove authors (weLaika)
11
+ "Stefano Verna", "Ju Liu", "Fabrizio Monti", "Alessandro Fazzi", "Filippo Gangi Dino"
12
+ ]
13
+ spec.email = ["kumar@tekgnosis.net"]
14
+
15
+ spec.summary = "Sync WordPress files and database between environments over SSH"
16
+ spec.description = <<~DESC
17
+ Maintained successor of Wordmove. Pushes and pulls WordPress core, uploads, themes,
18
+ plugins, languages and the database between a local install and remote hosts over
19
+ SSH and rsync, adapting URLs and paths with wp-cli on the target.
20
+ DESC
21
+ spec.homepage = "https://github.com/tekgnosis-net/wordmove-ng"
22
+ spec.license = "MIT"
23
+
24
+ spec.metadata = {
25
+ "homepage_uri" => spec.homepage,
26
+ "source_code_uri" => spec.homepage,
27
+ "changelog_uri" => "#{spec.homepage}/blob/master/CHANGELOG.md",
28
+ "bug_tracker_uri" => "#{spec.homepage}/issues",
29
+ "documentation_uri" => "#{spec.homepage}/wiki",
30
+ "rubygems_mfa_required" => "true"
31
+ }
32
+
33
+ spec.files = `git ls-files -z`
34
+ .split("\x0")
35
+ .reject { |f| f.match(%r{^(test|spec|features|supertool)/}) }
36
+
37
+ spec.bindir = "exe"
38
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
39
+ spec.require_paths = ["lib"]
40
+
41
+ spec.add_dependency "activesupport", '~> 6.1'
42
+ spec.add_dependency "base64", "~> 0.1"
43
+ spec.add_dependency "benchmark", ">= 0.4", "< 1"
44
+ spec.add_dependency "bigdecimal", "~> 4.0"
45
+ spec.add_dependency "colorize", "~> 0.8.1"
46
+ spec.add_dependency "dotenv", "~> 2.7.5"
47
+ spec.add_dependency "kwalify", "~> 0"
48
+ spec.add_dependency "logger", ">= 1.6", "< 2"
49
+ spec.add_dependency "mutex_m", "~> 0.1"
50
+ spec.add_dependency "ostruct", "~> 0.6"
51
+ spec.add_dependency "photocopier", "~> 1.4", ">= 1.4.0"
52
+ spec.add_dependency "thor", "~> 1.4"
53
+
54
+ spec.required_ruby_version = ">= 3.0.0"
55
+
56
+ spec.post_install_message = <<-MSG
57
+ wordmove-ng 6.0 is a breaking release compared to wordmove 5.x:
58
+ the executable is `wordmove-ng`, FTP is gone, Ruby >= 3.0 is required
59
+ and `wp` must be installed on the target of a database sync.
60
+ Upgrade guide: https://github.com/tekgnosis-net/wordmove-ng#upgrading-from-wordmove-5x
61
+ MSG
62
+ end
metadata ADDED
@@ -0,0 +1,318 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wordmove-ng
3
+ version: !ruby/object:Gem::Version
4
+ version: 6.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Kumar
8
+ - Stefano Verna
9
+ - Ju Liu
10
+ - Fabrizio Monti
11
+ - Alessandro Fazzi
12
+ - Filippo Gangi Dino
13
+ bindir: exe
14
+ cert_chain: []
15
+ date: 1980-01-02 00:00:00.000000000 Z
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: activesupport
19
+ requirement: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - "~>"
22
+ - !ruby/object:Gem::Version
23
+ version: '6.1'
24
+ type: :runtime
25
+ prerelease: false
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ requirements:
28
+ - - "~>"
29
+ - !ruby/object:Gem::Version
30
+ version: '6.1'
31
+ - !ruby/object:Gem::Dependency
32
+ name: base64
33
+ requirement: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - "~>"
36
+ - !ruby/object:Gem::Version
37
+ version: '0.1'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - "~>"
43
+ - !ruby/object:Gem::Version
44
+ version: '0.1'
45
+ - !ruby/object:Gem::Dependency
46
+ name: benchmark
47
+ requirement: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '0.4'
52
+ - - "<"
53
+ - !ruby/object:Gem::Version
54
+ version: '1'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0.4'
62
+ - - "<"
63
+ - !ruby/object:Gem::Version
64
+ version: '1'
65
+ - !ruby/object:Gem::Dependency
66
+ name: bigdecimal
67
+ requirement: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '4.0'
72
+ type: :runtime
73
+ prerelease: false
74
+ version_requirements: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - "~>"
77
+ - !ruby/object:Gem::Version
78
+ version: '4.0'
79
+ - !ruby/object:Gem::Dependency
80
+ name: colorize
81
+ requirement: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - "~>"
84
+ - !ruby/object:Gem::Version
85
+ version: 0.8.1
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - "~>"
91
+ - !ruby/object:Gem::Version
92
+ version: 0.8.1
93
+ - !ruby/object:Gem::Dependency
94
+ name: dotenv
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: 2.7.5
100
+ type: :runtime
101
+ prerelease: false
102
+ version_requirements: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - "~>"
105
+ - !ruby/object:Gem::Version
106
+ version: 2.7.5
107
+ - !ruby/object:Gem::Dependency
108
+ name: kwalify
109
+ requirement: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - "~>"
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ type: :runtime
115
+ prerelease: false
116
+ version_requirements: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - "~>"
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ - !ruby/object:Gem::Dependency
122
+ name: logger
123
+ requirement: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '1.6'
128
+ - - "<"
129
+ - !ruby/object:Gem::Version
130
+ version: '2'
131
+ type: :runtime
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '1.6'
138
+ - - "<"
139
+ - !ruby/object:Gem::Version
140
+ version: '2'
141
+ - !ruby/object:Gem::Dependency
142
+ name: mutex_m
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - "~>"
146
+ - !ruby/object:Gem::Version
147
+ version: '0.1'
148
+ type: :runtime
149
+ prerelease: false
150
+ version_requirements: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - "~>"
153
+ - !ruby/object:Gem::Version
154
+ version: '0.1'
155
+ - !ruby/object:Gem::Dependency
156
+ name: ostruct
157
+ requirement: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - "~>"
160
+ - !ruby/object:Gem::Version
161
+ version: '0.6'
162
+ type: :runtime
163
+ prerelease: false
164
+ version_requirements: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - "~>"
167
+ - !ruby/object:Gem::Version
168
+ version: '0.6'
169
+ - !ruby/object:Gem::Dependency
170
+ name: photocopier
171
+ requirement: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - "~>"
174
+ - !ruby/object:Gem::Version
175
+ version: '1.4'
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: 1.4.0
179
+ type: :runtime
180
+ prerelease: false
181
+ version_requirements: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - "~>"
184
+ - !ruby/object:Gem::Version
185
+ version: '1.4'
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ version: 1.4.0
189
+ - !ruby/object:Gem::Dependency
190
+ name: thor
191
+ requirement: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - "~>"
194
+ - !ruby/object:Gem::Version
195
+ version: '1.4'
196
+ type: :runtime
197
+ prerelease: false
198
+ version_requirements: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - "~>"
201
+ - !ruby/object:Gem::Version
202
+ version: '1.4'
203
+ description: |
204
+ Maintained successor of Wordmove. Pushes and pulls WordPress core, uploads, themes,
205
+ plugins, languages and the database between a local install and remote hosts over
206
+ SSH and rsync, adapting URLs and paths with wp-cli on the target.
207
+ email:
208
+ - kumar@tekgnosis.net
209
+ executables:
210
+ - wordmove-ng
211
+ extensions: []
212
+ extra_rdoc_files: []
213
+ files:
214
+ - ".github/ISSUE_TEMPLATE/bug_report.md"
215
+ - ".github/ISSUE_TEMPLATE/config.yml"
216
+ - ".github/stale.yml"
217
+ - ".github/workflows/release.yml"
218
+ - ".github/workflows/ruby.yml"
219
+ - ".gitignore"
220
+ - ".release-please-manifest.json"
221
+ - ".rspec"
222
+ - ".rubocop.yml"
223
+ - ".rubocop_todo.yml"
224
+ - ".ruby-gemset"
225
+ - ".ruby-version"
226
+ - ".vscode/launch.json"
227
+ - CHANGELOG.md
228
+ - CLAUDE.md
229
+ - CONTRIBUTING.md
230
+ - Gemfile
231
+ - LICENSE
232
+ - README.md
233
+ - Rakefile
234
+ - assets/images/wordmove-ng.png
235
+ - bin/bundle
236
+ - bin/bundler
237
+ - bin/byebug
238
+ - bin/coderay
239
+ - bin/console
240
+ - bin/htmldiff
241
+ - bin/kwalify
242
+ - bin/ldiff
243
+ - bin/pry
244
+ - bin/rake
245
+ - bin/rspec
246
+ - bin/rubocop
247
+ - bin/ruby-parse
248
+ - bin/ruby-rewrite
249
+ - bin/rumoji
250
+ - bin/setup
251
+ - bin/thor
252
+ - bin/wordmove-ng
253
+ - deploy/deploy.sh
254
+ - exe/wordmove-ng
255
+ - lib/wordmove-ng.rb
256
+ - lib/wordmove.rb
257
+ - lib/wordmove/assets/wordmove_schema_global.yml
258
+ - lib/wordmove/assets/wordmove_schema_local.yml
259
+ - lib/wordmove/assets/wordmove_schema_remote.yml
260
+ - lib/wordmove/cli.rb
261
+ - lib/wordmove/deployer/base.rb
262
+ - lib/wordmove/deployer/ssh.rb
263
+ - lib/wordmove/doctor.rb
264
+ - lib/wordmove/doctor/movefile.rb
265
+ - lib/wordmove/doctor/mysql.rb
266
+ - lib/wordmove/doctor/rsync.rb
267
+ - lib/wordmove/doctor/ssh.rb
268
+ - lib/wordmove/doctor/wpcli.rb
269
+ - lib/wordmove/environments_list.rb
270
+ - lib/wordmove/exceptions.rb
271
+ - lib/wordmove/generators/movefile.rb
272
+ - lib/wordmove/generators/movefile.yml
273
+ - lib/wordmove/generators/movefile_adapter.rb
274
+ - lib/wordmove/guardian.rb
275
+ - lib/wordmove/hook.rb
276
+ - lib/wordmove/logger.rb
277
+ - lib/wordmove/movefile.rb
278
+ - lib/wordmove/prerequisites.rb
279
+ - lib/wordmove/sql_adapter/wpcli.rb
280
+ - lib/wordmove/ssh_runner.rb
281
+ - lib/wordmove/version.rb
282
+ - lib/wordmove/wordpress_directory.rb
283
+ - lib/wordmove/wordpress_directory/path.rb
284
+ - release-please-config.json
285
+ - wordmove-ng.gemspec
286
+ homepage: https://github.com/tekgnosis-net/wordmove-ng
287
+ licenses:
288
+ - MIT
289
+ metadata:
290
+ homepage_uri: https://github.com/tekgnosis-net/wordmove-ng
291
+ source_code_uri: https://github.com/tekgnosis-net/wordmove-ng
292
+ changelog_uri: https://github.com/tekgnosis-net/wordmove-ng/blob/master/CHANGELOG.md
293
+ bug_tracker_uri: https://github.com/tekgnosis-net/wordmove-ng/issues
294
+ documentation_uri: https://github.com/tekgnosis-net/wordmove-ng/wiki
295
+ rubygems_mfa_required: 'true'
296
+ post_install_message: |2
297
+ wordmove-ng 6.0 is a breaking release compared to wordmove 5.x:
298
+ the executable is `wordmove-ng`, FTP is gone, Ruby >= 3.0 is required
299
+ and `wp` must be installed on the target of a database sync.
300
+ Upgrade guide: https://github.com/tekgnosis-net/wordmove-ng#upgrading-from-wordmove-5x
301
+ rdoc_options: []
302
+ require_paths:
303
+ - lib
304
+ required_ruby_version: !ruby/object:Gem::Requirement
305
+ requirements:
306
+ - - ">="
307
+ - !ruby/object:Gem::Version
308
+ version: 3.0.0
309
+ required_rubygems_version: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - ">="
312
+ - !ruby/object:Gem::Version
313
+ version: '0'
314
+ requirements: []
315
+ rubygems_version: 3.6.9
316
+ specification_version: 4
317
+ summary: Sync WordPress files and database between environments over SSH
318
+ test_files: []