wslave 0.1.0 → 0.3.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.
- checksums.yaml +4 -4
- data/base/.gitignore +1 -0
- data/base/Rakefile +5 -0
- data/base/config/deploy-tools/nginx.vhost.erb +40 -24
- data/base/config/deploy.rb +1 -1
- data/base/config/deploy/.production.rb.swp +0 -0
- data/base/config/deploy/.staging.rb.swp +0 -0
- data/base/config/deploy/production.rb +64 -1
- data/base/config/deploy/staging.rb +65 -2
- data/base/docker-compose.yml +2 -2
- data/base/docker/apache/Dockerfile +1 -1
- data/base/docker/nginx/Dockerfile +5 -4
- data/base/docker/nginx/nginx.vhost +38 -22
- data/base/docker/nginx/supervisord.conf +1 -1
- data/base/public/.htaccess +11 -0
- data/bin/wslave +76 -36
- data/lib/wslave_docker.rb +55 -3
- data/lib/wslave_new.rb +26 -7
- data/lib/wslave_sage.rb +70 -3
- data/lib/wslave_tools.rb +2 -0
- data/lib/wslave_update.rb +1 -1
- data/templates/config/definitions.yml +3 -0
- data/wslave.gemspec +6 -6
- metadata +39 -37
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d7c39b73b05b1be955f9f28b0925120e1b11aa37bce3ef2ffcc5b272aef0ecf5
|
4
|
+
data.tar.gz: 75ab79a0688af02c2ae453e170a387e6677ebf4ca275a5ae1a45a4e2166f56e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8fa738f7f91f460a8e9a84a5fcc0d38b5251b6d95c6a2443ce7bde8454fcd47169dd720001a9a2caf0f9f322c616b508579770227b4c7a0a1f788a47ead14f7b
|
7
|
+
data.tar.gz: e8a2df80d986c1f24993a576d9e116f5f91c379fa037d028d427f870983d89d7e0a809d750e3f35cfae0fa5adbaba3cffc0023b8ee43392b9256620ee046432e
|
data/base/.gitignore
CHANGED
data/base/Rakefile
CHANGED
@@ -3,6 +3,11 @@ require 'yaml'
|
|
3
3
|
|
4
4
|
@opts = YAML.load_file('config/definitions.yml')
|
5
5
|
|
6
|
+
desc "Print simple instructions."
|
7
|
+
task :default do
|
8
|
+
puts 'Please call rake with a taks name, such as "db:dev", or list tasks with "rake -T".'
|
9
|
+
end
|
10
|
+
|
6
11
|
def rm_dbfile(profile)
|
7
12
|
puts "Deleting db/#{profile}/wordpress.sql"
|
8
13
|
FileUtils.rm("db/#{profile}/wordpress.sql") if File.exist?("db/#{profile}/wordpress.sql")
|
@@ -1,35 +1,51 @@
|
|
1
1
|
server {
|
2
|
-
|
3
|
-
|
2
|
+
listen 80;
|
3
|
+
listen [::]:80;
|
4
4
|
|
5
|
-
|
5
|
+
server_name <%= server[:name] %>;
|
6
6
|
|
7
|
-
|
7
|
+
root <%= server[:root] %>;
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
access_log <%= server[:root] %>/access.log;
|
10
|
+
error_log <%= server[:root] %>/error.log;
|
11
11
|
|
12
|
-
|
12
|
+
index index.php;
|
13
13
|
|
14
|
-
|
15
|
-
|
14
|
+
location / {
|
15
|
+
rewrite ^/(wp-(admin|includes).*) /wordpress/$1 last;
|
16
16
|
|
17
|
-
|
17
|
+
rewrite ^/$ /wordpress/index.php last;
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
}
|
19
|
+
location ~ \.php {
|
20
|
+
if ($request_uri !~* "/wp-config.php") {
|
21
|
+
rewrite ^/wp-(.*)\.php$ /wordpress/wp-$1.php last;
|
22
|
+
}
|
23
|
+
rewrite ^/index\.php$ /wordpress/index.php last;
|
24
|
+
rewrite ^/wp-login\.php$ /hello.php last;
|
25
|
+
include snippets/fastcgi-php.conf;
|
26
|
+
fastcgi_pass unix:<%= server[:php_sock_path] %>;
|
28
27
|
}
|
28
|
+
}
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
30
|
+
location ~ /\. {
|
31
|
+
deny all;
|
32
|
+
access_log off;
|
33
|
+
log_not_found off;
|
34
|
+
}
|
35
|
+
|
36
|
+
location ~* \.(blade\.php)$ {
|
37
|
+
deny all;
|
38
|
+
}
|
39
|
+
|
40
|
+
location ~* composer\.(json|lock)$ {
|
41
|
+
deny all;
|
42
|
+
}
|
43
|
+
|
44
|
+
location ~* package(-lock)?\.json$ {
|
45
|
+
deny all;
|
46
|
+
}
|
47
|
+
|
48
|
+
location ~* yarn\.lock$ {
|
49
|
+
deny all;
|
50
|
+
}
|
35
51
|
}
|
data/base/config/deploy.rb
CHANGED
Binary file
|
Binary file
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
require 'date'
|
3
|
+
require 'wslave_sage'
|
3
4
|
|
4
5
|
opts = YAML.load_file('config/definitions.yml')
|
5
6
|
db_info = YAML.load_file('config/database.yml')
|
@@ -13,12 +14,16 @@ site_fqdn = opts['deployer']['fqdn']['production']
|
|
13
14
|
disable_rsync = (opts.include?('options') && opts['options'].include?('rsync_enabled') &&
|
14
15
|
opts['options']['rsync_enabled'] == false)
|
15
16
|
|
17
|
+
if (opts['deployer'].include?('branch') && opts['deployer']['branch'].include?('production'))
|
18
|
+
set :branch, opts['deployer']['branch']['production']
|
19
|
+
end
|
20
|
+
|
16
21
|
role :web, "#{deploy_user}@#{host_addr}"
|
17
22
|
|
18
23
|
set :tmp_dir, "#{multisite_root}/tmp"
|
19
24
|
deploy_path = "#{multisite_root}/#{site_fqdn}"
|
20
25
|
|
21
|
-
set :linked_dirs, %w{public/wp-content/uploads public/wordpress public/wp-content/upgrade public/wp-content/plugins tmp}
|
26
|
+
set :linked_dirs, %w{public/wp-content/uploads public/wordpress public/wp-content/upgrade public/wp-content/plugins public/data tmp}
|
22
27
|
set :linked_files, %w{public/wp-config.php}
|
23
28
|
|
24
29
|
set :deploy_to, deploy_path
|
@@ -77,6 +82,61 @@ namespace :deploy do
|
|
77
82
|
end
|
78
83
|
end
|
79
84
|
|
85
|
+
desc 'Syncs the static data directory with rsync'
|
86
|
+
task :sync_static_data do
|
87
|
+
on roles(:web) do
|
88
|
+
`rsync -avzPhu --delete ./public/data/ #{deploy_user}@#{host_addr}:#{deploy_path}/shared/public/data/`
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
desc 'Uploads the static data directory'
|
93
|
+
task :upload_static_data do
|
94
|
+
on roles(:web) do
|
95
|
+
upload! './public/data', "#{deploy_path}/shared/public/data/", recursive: true
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
desc 'Builds and Syncs the project Sage theme'
|
100
|
+
task :sync_sage_theme do
|
101
|
+
on roles(:web) do
|
102
|
+
wss = WSlaveSage.new()
|
103
|
+
sage_theme_name = wss.theme_name?
|
104
|
+
if (sage_theme_name == '')
|
105
|
+
puts "Couldn't find a Sage theme for this project."
|
106
|
+
else
|
107
|
+
wss.production()
|
108
|
+
`rsync -avzPhu --delete ./public/wp-content/themes/#{sage_theme_name}/vendor/ #{deploy_user}@#{host_addr}:#{deploy_path}/current/public/wp-content/themes/#{sage_theme_name}/vendor/`
|
109
|
+
`rsync -avzPhu --delete ./public/wp-content/themes/#{sage_theme_name}/dist/ #{deploy_user}@#{host_addr}:#{deploy_path}/current/public/wp-content/themes/#{sage_theme_name}/dist/`
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
desc 'Builds and Uploads the project Sage theme'
|
115
|
+
task :upload_sage_theme do
|
116
|
+
on roles(:web) do
|
117
|
+
wss = WSlaveSage.new()
|
118
|
+
sage_theme_name = wss.theme_name?
|
119
|
+
if (sage_theme_name == '')
|
120
|
+
puts "Couldn't find a Sage theme for this project."
|
121
|
+
else
|
122
|
+
wss.production()
|
123
|
+
upload! "./public/wp-content/themes/#{sage_theme_name}/vendor/", "#{deploy_path}/current/public/wp-content/themes/#{sage_theme_name}/", recursive: true
|
124
|
+
upload! "./public/wp-content/themes/#{sage_theme_name}/dist/", "#{deploy_path}/current/public/wp-content/themes/#{sage_theme_name}/", recursive: true
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
desc 'Builds and Deploys the project Sage theme'
|
130
|
+
task :sage do
|
131
|
+
on roles(:web) do
|
132
|
+
if disable_rsync
|
133
|
+
invoke('deploy:upload_sage_theme')
|
134
|
+
else
|
135
|
+
invoke('deploy:sync_sage_theme')
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
80
140
|
desc 'Finds and replaces localhost:8000 and your Staging address with the Production address'
|
81
141
|
task :chikan do
|
82
142
|
on roles(:web) do
|
@@ -148,14 +208,17 @@ namespace :deploy do
|
|
148
208
|
invoke('deploy:upload_wp')
|
149
209
|
invoke('deploy:upload_plugins')
|
150
210
|
invoke('deploy:upload_uploads')
|
211
|
+
invoke('deploy:upload_static_data')
|
151
212
|
else
|
152
213
|
invoke('deploy:sync_wp')
|
153
214
|
invoke('deploy:sync_plugins')
|
154
215
|
invoke('deploy:sync_uploads')
|
216
|
+
invoke('deploy:sync_static_data')
|
155
217
|
end
|
156
218
|
invoke('deploy')
|
157
219
|
invoke('db:seed')
|
158
220
|
invoke('deploy:chikan')
|
221
|
+
invoke('deploy:sage')
|
159
222
|
invoke('deploy:set_permissions')
|
160
223
|
end
|
161
224
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
require 'date'
|
3
|
+
require 'wslave_sage'
|
3
4
|
|
4
5
|
opts = YAML.load_file('config/definitions.yml')
|
5
6
|
db_info = YAML.load_file('config/database.yml')
|
@@ -13,21 +14,25 @@ site_fqdn = opts['deployer']['fqdn']['staging']
|
|
13
14
|
disable_rsync = (opts.include?('options') && opts['options'].include?('rsync_enabled') &&
|
14
15
|
opts['options']['rsync_enabled'] == false)
|
15
16
|
|
17
|
+
if (opts['deployer'].include?('branch') && opts['deployer']['branch'].include?('staging'))
|
18
|
+
set :branch, opts['deployer']['branch']['staging']
|
19
|
+
end
|
20
|
+
|
16
21
|
role :web, "#{deploy_user}@#{host_addr}"
|
17
22
|
|
18
23
|
set :tmp_dir, "#{multisite_root}/tmp"
|
19
24
|
deploy_path = "#{multisite_root}/#{site_fqdn}"
|
20
25
|
|
21
|
-
set :linked_dirs, %w{public/wp-content/uploads public/wordpress public/wp-content/upgrade public/wp-content/plugins tmp}
|
26
|
+
set :linked_dirs, %w{public/wp-content/uploads public/wordpress public/wp-content/upgrade public/wp-content/plugins public/data tmp}
|
22
27
|
set :linked_files, %w{public/wp-config.php}
|
23
28
|
|
24
29
|
set :deploy_to, deploy_path
|
25
30
|
|
26
|
-
|
27
31
|
namespace :deploy do
|
28
32
|
desc "Generate wp-config.php for profile"
|
29
33
|
task :wp_config do
|
30
34
|
on roles(:web) do
|
35
|
+
invoke 'deploy:check:make_linked_dirs'
|
31
36
|
require_relative '../deploy-tools/gen-wp-config'
|
32
37
|
FileUtils.mkdir('./tmp') unless Dir.exist?('./tmp')
|
33
38
|
GenerateWPConfig('staging', './tmp')
|
@@ -77,6 +82,61 @@ namespace :deploy do
|
|
77
82
|
end
|
78
83
|
end
|
79
84
|
|
85
|
+
desc 'Syncs the static data directory with rsync'
|
86
|
+
task :sync_static_data do
|
87
|
+
on roles(:web) do
|
88
|
+
`rsync -avzPhu --delete ./public/data/ #{deploy_user}@#{host_addr}:#{deploy_path}/shared/public/data/`
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
desc 'Uploads the static data directory'
|
93
|
+
task :upload_static_data do
|
94
|
+
on roles(:web) do
|
95
|
+
upload! './public/data', "#{deploy_path}/shared/public/data/", recursive: true
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
desc 'Builds and Syncs the project Sage theme'
|
100
|
+
task :sync_sage_theme do
|
101
|
+
on roles(:web) do
|
102
|
+
wss = WSlaveSage.new()
|
103
|
+
sage_theme_name = wss.theme_name?
|
104
|
+
if (sage_theme_name == '')
|
105
|
+
puts "Couldn't find a Sage theme for this project."
|
106
|
+
else
|
107
|
+
wss.production()
|
108
|
+
`rsync -avzPhu --delete ./public/wp-content/themes/#{sage_theme_name}/vendor/ #{deploy_user}@#{host_addr}:#{deploy_path}/current/public/wp-content/themes/#{sage_theme_name}/vendor/`
|
109
|
+
`rsync -avzPhu --delete ./public/wp-content/themes/#{sage_theme_name}/dist/ #{deploy_user}@#{host_addr}:#{deploy_path}/current/public/wp-content/themes/#{sage_theme_name}/dist/`
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
desc 'Builds and Uploads the project Sage theme'
|
115
|
+
task :upload_sage_theme do
|
116
|
+
on roles(:web) do
|
117
|
+
wss = WSlaveSage.new()
|
118
|
+
sage_theme_name = wss.theme_name?
|
119
|
+
if (sage_theme_name == '')
|
120
|
+
puts "Couldn't find a Sage theme for this project."
|
121
|
+
else
|
122
|
+
wss.production()
|
123
|
+
upload! "./public/wp-content/themes/#{sage_theme_name}/vendor/", "#{deploy_path}/current/public/wp-content/themes/#{sage_theme_name}/", recursive: true
|
124
|
+
upload! "./public/wp-content/themes/#{sage_theme_name}/dist/", "#{deploy_path}/current/public/wp-content/themes/#{sage_theme_name}/", recursive: true
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
desc 'Builds and Deploys the project Sage theme'
|
130
|
+
task :sage do
|
131
|
+
on roles(:web) do
|
132
|
+
if disable_rsync
|
133
|
+
invoke('deploy:upload_sage_theme')
|
134
|
+
else
|
135
|
+
invoke('deploy:sync_sage_theme')
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
80
140
|
desc 'Finds and replaces localhost:8000 and your Production address with the Staging address'
|
81
141
|
task :chikan do
|
82
142
|
on roles(:web) do
|
@@ -148,14 +208,17 @@ namespace :deploy do
|
|
148
208
|
invoke('deploy:upload_wp')
|
149
209
|
invoke('deploy:upload_plugins')
|
150
210
|
invoke('deploy:upload_uploads')
|
211
|
+
invoke('deploy:upload_static_data')
|
151
212
|
else
|
152
213
|
invoke('deploy:sync_wp')
|
153
214
|
invoke('deploy:sync_plugins')
|
154
215
|
invoke('deploy:sync_uploads')
|
216
|
+
invoke('deploy:sync_static_data')
|
155
217
|
end
|
156
218
|
invoke('deploy')
|
157
219
|
invoke('db:seed')
|
158
220
|
invoke('deploy:chikan')
|
221
|
+
invoke('deploy:sage')
|
159
222
|
invoke('deploy:set_permissions')
|
160
223
|
end
|
161
224
|
end
|
data/base/docker-compose.yml
CHANGED
@@ -1,11 +1,14 @@
|
|
1
|
-
FROM ubuntu:
|
1
|
+
FROM ubuntu:20.04
|
2
2
|
|
3
3
|
COPY nginx.vhost /etc/nginx/sites-enabled/default
|
4
4
|
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
5
5
|
|
6
6
|
RUN apt-get update
|
7
7
|
RUN DEBIAN_FRONTEND="noninteractive" apt-get -y install tzdata
|
8
|
-
|
8
|
+
# NOTE: When the PHP FPM version changes, you MUST update the
|
9
|
+
# version named in base/docker/nginx/supervisord.conf and
|
10
|
+
# in base/docker/nginx/nginx.vhost, then rebuild the nweb image!
|
11
|
+
RUN apt-get install -y nginx php7.4-fpm php-mysql \
|
9
12
|
libpng-dev libjpeg-dev \
|
10
13
|
mariadb-client mariadb-common \
|
11
14
|
supervisor curl
|
@@ -14,8 +17,6 @@ RUN adduser www-data root
|
|
14
17
|
RUN mkdir /db \
|
15
18
|
&& chmod 777 /db
|
16
19
|
|
17
|
-
RUN mkdir /run/php
|
18
|
-
|
19
20
|
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
|
20
21
|
&& ln -sf /dev/stderr /var/log/nginx/error.log
|
21
22
|
|
@@ -1,32 +1,48 @@
|
|
1
1
|
server {
|
2
|
-
|
3
|
-
|
2
|
+
listen 80;
|
3
|
+
listen [::]:80;
|
4
4
|
|
5
|
-
|
5
|
+
server_name testing;
|
6
6
|
|
7
|
-
|
7
|
+
root /var/www/html;
|
8
8
|
|
9
|
-
|
9
|
+
index index.php;
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
location / {
|
12
|
+
rewrite ^/(wp-(admin|includes).*) /wordpress/$1 last;
|
13
13
|
|
14
|
-
|
14
|
+
rewrite ^/$ /wordpress/index.php last;
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
}
|
16
|
+
location ~ \.php {
|
17
|
+
if ($request_uri !~* "/wp-config.php") {
|
18
|
+
rewrite ^/wp-(.*)\.php$ /wordpress/wp-$1.php last;
|
19
|
+
}
|
20
|
+
rewrite ^/index\.php$ /wordpress/index.php last;
|
21
|
+
rewrite ^/wp-login\.php$ /hello.php last;
|
22
|
+
include snippets/fastcgi-php.conf;
|
23
|
+
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
|
25
24
|
}
|
25
|
+
}
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
27
|
+
location ~ /\. {
|
28
|
+
deny all;
|
29
|
+
access_log off;
|
30
|
+
log_not_found off;
|
31
|
+
}
|
32
|
+
|
33
|
+
location ~* \.(blade\.php)$ {
|
34
|
+
deny all;
|
35
|
+
}
|
36
|
+
|
37
|
+
location ~* composer\.(json|lock)$ {
|
38
|
+
deny all;
|
39
|
+
}
|
40
|
+
|
41
|
+
location ~* package(-lock)?\.json$ {
|
42
|
+
deny all;
|
43
|
+
}
|
44
|
+
|
45
|
+
location ~* yarn\.lock$ {
|
46
|
+
deny all;
|
47
|
+
}
|
32
48
|
}
|
data/base/public/.htaccess
CHANGED
@@ -14,3 +14,14 @@
|
|
14
14
|
# BEGIN WordPress
|
15
15
|
# END WordPress
|
16
16
|
</IfModule>
|
17
|
+
<FilesMatch ".+\.(blade\.php)$">
|
18
|
+
<IfModule mod_authz_core.c>
|
19
|
+
# Apache 2.4
|
20
|
+
Require all denied
|
21
|
+
</IfModule>
|
22
|
+
<IfModule !mod_authz_core.c>
|
23
|
+
# Apache 2.2
|
24
|
+
Order deny,allow
|
25
|
+
Deny from all
|
26
|
+
</IfModule>
|
27
|
+
</FilesMatch>
|
data/bin/wslave
CHANGED
@@ -8,6 +8,13 @@ class WSlaveCLI < Thor
|
|
8
8
|
true
|
9
9
|
end
|
10
10
|
|
11
|
+
desc 'version', "Prints the version of the installed WSlave"
|
12
|
+
def version()
|
13
|
+
require 'rubygems'
|
14
|
+
spec = Gem::Specification::load("#{__dir__}/../wslave.gemspec")
|
15
|
+
puts spec.version
|
16
|
+
end
|
17
|
+
|
11
18
|
desc 'new [APP_PATH]', "Generate a new app at APP_PATH"
|
12
19
|
long_desc "Creates a new application in the current directory or in the specificed path."
|
13
20
|
option :version, default: '',
|
@@ -27,37 +34,6 @@ class WSlaveCLI < Thor
|
|
27
34
|
WSlaveUpdate.new()
|
28
35
|
end
|
29
36
|
|
30
|
-
desc 'sage NAME', "Generate a theme with NAME"
|
31
|
-
long_desc "Generates a theme base with sage in the themes directory with the given" \
|
32
|
-
"NAME. A random name will be generated if you do not specify a NAME."
|
33
|
-
method_option :version, default: ''
|
34
|
-
def sage(name = '')
|
35
|
-
if name == ''
|
36
|
-
require 'haikunator'
|
37
|
-
name = Haikunator.haikunate(0)
|
38
|
-
end
|
39
|
-
puts "Generating sage theme base for #{name}"
|
40
|
-
require_relative '../lib/wslave_sage'
|
41
|
-
WSlaveSage.new(name, options['version'])
|
42
|
-
end
|
43
|
-
|
44
|
-
desc 'server', "Starts the development server"
|
45
|
-
method_option :f, type: :boolean, default: false, description: 'force close other servers first'
|
46
|
-
def server()
|
47
|
-
puts 'Starting server...'
|
48
|
-
require_relative '../lib/wslave_docker'
|
49
|
-
WSlaveDocker.new().server(options['f'])
|
50
|
-
end
|
51
|
-
|
52
|
-
desc 'stop [options]', "Stops the development server"
|
53
|
-
method_option :v, type: :boolean, default: false, description: 'remove volume data'
|
54
|
-
method_option :f, type: :boolean, default: false, description: 'force close other servers first'
|
55
|
-
def stop()
|
56
|
-
puts 'Stopping server...'
|
57
|
-
require_relative '../lib/wslave_docker'
|
58
|
-
WSlaveDocker.new().stop(options['f'], options['v'])
|
59
|
-
end
|
60
|
-
|
61
37
|
desc 'sync', "Synchronizes submodules and file permissions"
|
62
38
|
def sync()
|
63
39
|
require_relative '../lib/wslave_tools'
|
@@ -65,12 +41,76 @@ class WSlaveCLI < Thor
|
|
65
41
|
WSlaveTools.sync()
|
66
42
|
end
|
67
43
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
44
|
+
class Server < Thor
|
45
|
+
desc 'start [options]', "Starts the development server"
|
46
|
+
method_option :f, type: :boolean, default: false, description: 'force close other servers first'
|
47
|
+
def start()
|
48
|
+
puts 'Starting server...'
|
49
|
+
require_relative '../lib/wslave_docker'
|
50
|
+
WSlaveDocker.new().server(:start, options['f'])
|
51
|
+
end
|
52
|
+
|
53
|
+
desc 'stop [options]', "Stops the development server"
|
54
|
+
method_option :f, type: :boolean, default: false, description: 'force close other servers first'
|
55
|
+
def stop()
|
56
|
+
puts 'Stopping server...'
|
57
|
+
require_relative '../lib/wslave_docker'
|
58
|
+
WSlaveDocker.new().server(:stop, options['f'])
|
59
|
+
end
|
60
|
+
|
61
|
+
desc 'reset [options]', "Deletes all container data and volumes, then rebuilds and restarts the containers"
|
62
|
+
method_option :f, type: :boolean, default: false, description: 'force close other servers first'
|
63
|
+
def reset()
|
64
|
+
puts 'Stopping server...'
|
65
|
+
require_relative '../lib/wslave_docker'
|
66
|
+
WSlaveDocker.new().server(:reset, options['f'])
|
67
|
+
end
|
68
|
+
|
69
|
+
desc 'reset [options]', "Shuts down containers and deletes all container data and volumes"
|
70
|
+
method_option :f, type: :boolean, default: false, description: 'force close other servers first'
|
71
|
+
def remove()
|
72
|
+
puts 'Stopping server...'
|
73
|
+
require_relative '../lib/wslave_docker'
|
74
|
+
WSlaveDocker.new().server(:remove, options['f'])
|
75
|
+
end
|
76
|
+
end
|
77
|
+
desc 'server COMMAND [options]', "Control the development server container"
|
78
|
+
subcommand 'server', Server
|
79
|
+
|
80
|
+
class Sage < Thor
|
81
|
+
desc 'create THEME_NAME', "Creates a theme with the specified name using Sage"
|
82
|
+
def create(theme_name = "wslave_sage_theme")
|
83
|
+
require_relative '../lib/wslave_sage'
|
84
|
+
puts "Generating sage theme base for #{theme_name}"
|
85
|
+
WSlaveSage.new().create(theme_name)
|
86
|
+
end
|
87
|
+
|
88
|
+
desc 'update', "Updates theme generator components"
|
89
|
+
def update
|
90
|
+
require_relative '../lib/wslave_sage'
|
91
|
+
WSlaveSage.new().update()
|
92
|
+
end
|
93
|
+
|
94
|
+
desc 'dev', "Starts a development server which dynamically compiles the theme"
|
95
|
+
def dev
|
96
|
+
require_relative '../lib/wslave_sage'
|
97
|
+
WSlaveSage.new().dev()
|
98
|
+
end
|
99
|
+
|
100
|
+
desc 'build', "Builds the theme (generates development grade static assets)"
|
101
|
+
def build
|
102
|
+
require_relative '../lib/wslave_sage'
|
103
|
+
WSlaveSage.new().build()
|
104
|
+
end
|
105
|
+
|
106
|
+
desc 'production', "Builds the theme (generates production grade static assets)"
|
107
|
+
def production
|
108
|
+
require_relative '../lib/wslave_sage'
|
109
|
+
WSlaveSage.new().production()
|
110
|
+
end
|
73
111
|
end
|
112
|
+
desc 'sage COMMAND', "Generates and manages a Sage theme"
|
113
|
+
subcommand 'sage', Sage
|
74
114
|
end
|
75
115
|
|
76
116
|
WSlaveCLI.start(ARGV)
|
data/lib/wslave_docker.rb
CHANGED
@@ -6,18 +6,70 @@ class WSlaveDocker
|
|
6
6
|
puts 'Initializing WSlave Docker Control'
|
7
7
|
end
|
8
8
|
|
9
|
-
def server(force)
|
9
|
+
def server(command = :start, force = false)
|
10
|
+
case (command)
|
11
|
+
when :start
|
12
|
+
start(force)
|
13
|
+
when :stop
|
14
|
+
stop(force)
|
15
|
+
when :reset
|
16
|
+
reset(force)
|
17
|
+
when :remove
|
18
|
+
remove(force)
|
19
|
+
when :log
|
20
|
+
log()
|
21
|
+
when :console
|
22
|
+
console()
|
23
|
+
else
|
24
|
+
puts "server subcommand \"#{command.to_s}\" not found."
|
25
|
+
puts "Available commands: start stop log console"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def start(force = false)
|
10
30
|
return unless _check()
|
11
31
|
_force_down() if force
|
32
|
+
`docker-compose stop` # Shutdown existing instances
|
12
33
|
_unfuck_dot_htaccess()
|
13
34
|
WSlaveTools.set_dev_perms
|
35
|
+
`docker-compose build`
|
36
|
+
`docker-compose start -d`
|
37
|
+
`docker-compose up -d`
|
38
|
+
end
|
39
|
+
|
40
|
+
def stop(force = false)
|
41
|
+
return unless _check()
|
42
|
+
_force_down() if force
|
43
|
+
`docker-compose stop`
|
44
|
+
end
|
45
|
+
|
46
|
+
def reset(force = false)
|
47
|
+
return unless _check()
|
48
|
+
_force_down() if force
|
49
|
+
`docker-compose down -v`
|
50
|
+
`docker-compose build`
|
14
51
|
`docker-compose up -d`
|
15
52
|
end
|
16
53
|
|
17
|
-
def
|
54
|
+
def remove(force = false)
|
18
55
|
return unless _check()
|
19
56
|
_force_down() if force
|
20
|
-
`docker-compose down
|
57
|
+
`docker-compose down -v`
|
58
|
+
end
|
59
|
+
|
60
|
+
def log()
|
61
|
+
return unless _check()
|
62
|
+
begin
|
63
|
+
system("docker-compose logs -f")
|
64
|
+
rescue Exception => e
|
65
|
+
puts "\n\nEnding log trace. NOTE: Server containers are still running!\n\n"
|
66
|
+
return
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def console()
|
71
|
+
return unless _check()
|
72
|
+
system("docker-compose exec web /bin/bash")
|
21
73
|
end
|
22
74
|
|
23
75
|
def _check()
|
data/lib/wslave_new.rb
CHANGED
@@ -40,14 +40,14 @@ class WSlaveNew
|
|
40
40
|
`cd #{path} && git init && git add --all && git commit -am "initial commit by wslave"`
|
41
41
|
|
42
42
|
`cd #{path} && git submodule add git://github.com/WordPress/WordPress.git public/wordpress`
|
43
|
+
`cd #{path} && git submodule update --init --recursive public/wordpress`
|
43
44
|
if (version == 'edge' || version == 'master')
|
44
45
|
`cd #{path}/public/wordpress && git checkout master`
|
45
46
|
elsif version != ''
|
46
|
-
`cd #{path}/public/wordpress && git checkout #{version}
|
47
|
+
`cd #{path}/public/wordpress && git checkout #{version}`
|
47
48
|
else
|
48
49
|
`cd #{path}/public/wordpress && git checkout #{get_stable_branch_version("#{path}/public/wordpress")}-branch`
|
49
50
|
end
|
50
|
-
`cd #{path} && git submodule update --init --recursive public/wordpress`
|
51
51
|
|
52
52
|
puts " > Preparing detached content directory"
|
53
53
|
FileUtils.cp_r("#{path}/public/wordpress/wp-content", "#{path}/public/wp-content")
|
@@ -57,6 +57,9 @@ class WSlaveNew
|
|
57
57
|
FileUtils.touch("#{path}/public/wp-content/upgrade/.gitkeep")
|
58
58
|
Dir.chdir path
|
59
59
|
|
60
|
+
puts " > Preparing static data directory"
|
61
|
+
FileUtils.mkdir("#{path}/public/data") unless Dir.exist?("#{path}/public/data")
|
62
|
+
|
60
63
|
puts " > Setting permissions"
|
61
64
|
WSlaveTools.set_dev_perms
|
62
65
|
|
@@ -71,12 +74,28 @@ class WSlaveNew
|
|
71
74
|
end
|
72
75
|
|
73
76
|
def get_stable_branch_version(path)
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
#
|
77
|
+
latest_major = 5
|
78
|
+
latest_minor = 7
|
79
|
+
|
80
|
+
reg = /^(\d*)\.(\d)-branch$/
|
81
|
+
puts "> Checking for WordPress versions in: #{path}"
|
82
|
+
cdir = Dir.pwd()
|
83
|
+
Dir.chdir(path)
|
84
|
+
g = Git.open("./")
|
85
|
+
g.branches.remote.each do |branch|
|
86
|
+
ver = reg.match(branch.name)
|
87
|
+
if (ver) # If the branch matched the x.y-branch pattern
|
88
|
+
if ((ver[1].to_i >= latest_major) && (ver[2].to_i > latest_minor))
|
89
|
+
latest_major = ver[1].to_i
|
90
|
+
latest_minor = ver[2].to_i
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
Dir.chdir(cdir)
|
79
96
|
|
97
|
+
latest = "#{latest_major}.#{latest_minor}"
|
98
|
+
puts "> Detected latest WordPress version as: #{latest}"
|
80
99
|
latest
|
81
100
|
end
|
82
101
|
end
|
data/lib/wslave_sage.rb
CHANGED
@@ -1,9 +1,76 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
1
3
|
class WSlaveSage
|
2
|
-
|
4
|
+
attr_reader :theme_name
|
5
|
+
|
6
|
+
def initialize()
|
7
|
+
@theme_name = ''
|
8
|
+
end
|
9
|
+
|
10
|
+
def create(name)
|
3
11
|
unless File.exist?("./config/.wslave")
|
4
12
|
puts "This command must be run in the root of a WSlave setup"
|
5
13
|
end
|
6
|
-
|
7
|
-
|
14
|
+
|
15
|
+
name = 'wslave-sage-theme' if name.empty?
|
16
|
+
project_root = Dir.pwd
|
17
|
+
|
18
|
+
puts "Creating Sage theme at public/wp-content/themes/#{name}"
|
19
|
+
`cd public/wp-content/themes && composer create-project roots/sage #{name} dev-master`
|
20
|
+
|
21
|
+
Dir.chdir project_root
|
22
|
+
_write_wslave_sage_config(name)
|
23
|
+
_overwrite_sage_webpack_browsersync_config
|
24
|
+
end
|
25
|
+
|
26
|
+
def update()
|
27
|
+
return unless _check()
|
28
|
+
system("cd public/wp-content/themes/#{@theme_name} && yarn && yarn build")
|
29
|
+
end
|
30
|
+
|
31
|
+
def dev()
|
32
|
+
return unless _check()
|
33
|
+
system("cd public/wp-content/themes/#{@theme_name} && yarn start")
|
34
|
+
end
|
35
|
+
|
36
|
+
def build()
|
37
|
+
return unless _check()
|
38
|
+
system("cd public/wp-content/themes/#{@theme_name} && yarn build")
|
39
|
+
end
|
40
|
+
|
41
|
+
def production()
|
42
|
+
return unless _check()
|
43
|
+
system("cd public/wp-content/themes/#{@theme_name} && yarn build:production")
|
44
|
+
end
|
45
|
+
|
46
|
+
def theme_name?()
|
47
|
+
return '' unless _check()
|
48
|
+
@theme_name
|
49
|
+
end
|
50
|
+
|
51
|
+
def _write_wslave_sage_config(name)
|
52
|
+
File.open("./config/sage.yml", 'w') {|f| YAML.dump({theme: name}, f)}
|
53
|
+
end
|
54
|
+
|
55
|
+
def _overwrite_sage_webpack_browsersync_config
|
56
|
+
return unless _check()
|
57
|
+
theme_info = YAML.load_file("./config/sage.yml")
|
58
|
+
Dir.chdir "#{Dir.pwd}/public/wp-content/themes/#{theme_info[:theme]}"
|
59
|
+
|
60
|
+
webpack_config_path = './webpack.mix.js'
|
61
|
+
new_webpack_config = File.read(webpack_config_path).gsub(
|
62
|
+
/browserSync\('sage.test'\)/, "browserSync('localhost:8000')"
|
63
|
+
)
|
64
|
+
File.open(webpack_config_path, 'w') { |f| f.puts new_webpack_config }
|
65
|
+
end
|
66
|
+
|
67
|
+
def _check()
|
68
|
+
if (File.exist?("./config/.wslave") && File.exist?("./config/sage.yml"))
|
69
|
+
theme_info = YAML.load_file("./config/sage.yml")
|
70
|
+
@theme_name = theme_info[:theme]
|
71
|
+
return true
|
72
|
+
end
|
73
|
+
puts "This does not appear to be the root of a WSlave managed app with a Sage theme."
|
74
|
+
false
|
8
75
|
end
|
9
76
|
end
|
data/lib/wslave_tools.rb
CHANGED
@@ -23,6 +23,8 @@ class WSlaveTools
|
|
23
23
|
FileUtils.chmod(0775, "#{path}/public/wp-content/plugins")
|
24
24
|
FileUtils.chown(nil, 'www-data', "#{path}/public/wp-content/upgrade")
|
25
25
|
FileUtils.chmod(0775, "#{path}/public/wp-content/upgrade")
|
26
|
+
FileUtils.chown(nil, 'www-data', "#{path}/public/data")
|
27
|
+
FileUtils.chmod(0775, "#{path}/public/data")
|
26
28
|
|
27
29
|
unless Dir.exist?("#{path}/db")
|
28
30
|
FileUtils.mkdir("#{path}/db")
|
data/lib/wslave_update.rb
CHANGED
@@ -21,7 +21,7 @@ class WSlaveUpdate
|
|
21
21
|
FileUtils.cp("#{base_path}/Capfile", "#{path}/Capfile")
|
22
22
|
# FileUtils.cp("#{base_path}/Gemfile", "#{path}/Gemfile")
|
23
23
|
FileUtils.cp("#{base_path}/Rakefile", "#{path}/Rakefile")
|
24
|
-
FileUtils.cp_r("#{base_path}/docker", "#{path}/
|
24
|
+
FileUtils.cp_r("#{base_path}/docker", "#{path}/")
|
25
25
|
FileUtils.cp("#{base_path}/docker-compose.yml", "#{path}/docker-compose.yml")
|
26
26
|
FileUtils.cp("#{base_path}/public/.htaccess", "#{path}/public/.htaccess")
|
27
27
|
FileUtils.cp_r(Dir.glob("#{base_path}/config/*"), "#{path}/config")
|
data/wslave.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'wslave'
|
3
|
-
s.version = '0.
|
3
|
+
s.version = '0.3.0'
|
4
4
|
s.licenses = ['GPL-3.0', 'AGPL-3.0']
|
5
5
|
s.summary = '"Word Slave" generates and controls a WordPress installation'
|
6
6
|
s.description = 'Word Slave includes the wslave command and a control library to generate a ' \
|
@@ -20,13 +20,13 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.bindir = 'bin'
|
21
21
|
s.executables << 'wslave'
|
22
22
|
|
23
|
-
s.add_dependency 'capistrano', '= 3.
|
24
|
-
s.add_dependency 'capistrano-git-with-submodules', '~> 2.0', '2.0.
|
23
|
+
s.add_dependency 'capistrano', '= 3.16.0'
|
24
|
+
s.add_dependency 'capistrano-git-with-submodules', '~> 2.0', '2.0.4'
|
25
25
|
s.add_dependency 'capistrano-scm-copy', '~> 0.7', '0.7.0'
|
26
26
|
s.add_dependency 'capistrano-file-permissions', '~> 1.0', '1.0.0'
|
27
27
|
|
28
|
-
s.add_dependency 'git', '~> 1.
|
28
|
+
s.add_dependency 'git', '~> 1.8', '1.8.1'
|
29
29
|
|
30
|
-
s.add_dependency 'thor', '~>
|
31
|
-
s.add_dependency 'haikunator', '~> 1.1', '1.1.
|
30
|
+
s.add_dependency 'thor', '~> 1.1', '1.1.0'
|
31
|
+
s.add_dependency 'haikunator', '~> 1.1', '1.1.1'
|
32
32
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wslave
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rei Kagetsuki
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capistrano
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 3.
|
19
|
+
version: 3.16.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 3.
|
26
|
+
version: 3.16.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: capistrano-git-with-submodules
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -33,7 +33,7 @@ dependencies:
|
|
33
33
|
version: '2.0'
|
34
34
|
- - '='
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version: 2.0.
|
36
|
+
version: 2.0.4
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -43,107 +43,107 @@ dependencies:
|
|
43
43
|
version: '2.0'
|
44
44
|
- - '='
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: 2.0.
|
46
|
+
version: 2.0.4
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: capistrano-scm-copy
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
|
-
- - '='
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: 0.7.0
|
54
51
|
- - "~>"
|
55
52
|
- !ruby/object:Gem::Version
|
56
53
|
version: '0.7'
|
54
|
+
- - '='
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 0.7.0
|
57
57
|
type: :runtime
|
58
58
|
prerelease: false
|
59
59
|
version_requirements: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
|
-
- - '='
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
version: 0.7.0
|
64
61
|
- - "~>"
|
65
62
|
- !ruby/object:Gem::Version
|
66
63
|
version: '0.7'
|
64
|
+
- - '='
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 0.7.0
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
68
|
name: capistrano-file-permissions
|
69
69
|
requirement: !ruby/object:Gem::Requirement
|
70
70
|
requirements:
|
71
|
-
- - '='
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
version: 1.0.0
|
74
71
|
- - "~>"
|
75
72
|
- !ruby/object:Gem::Version
|
76
73
|
version: '1.0'
|
74
|
+
- - '='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 1.0.0
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- - '='
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
version: 1.0.0
|
84
81
|
- - "~>"
|
85
82
|
- !ruby/object:Gem::Version
|
86
83
|
version: '1.0'
|
84
|
+
- - '='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: 1.0.0
|
87
87
|
- !ruby/object:Gem::Dependency
|
88
88
|
name: git
|
89
89
|
requirement: !ruby/object:Gem::Requirement
|
90
90
|
requirements:
|
91
|
-
- - '='
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: 1.5.0
|
94
91
|
- - "~>"
|
95
92
|
- !ruby/object:Gem::Version
|
96
|
-
version: '1.
|
93
|
+
version: '1.8'
|
94
|
+
- - '='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.8.1
|
97
97
|
type: :runtime
|
98
98
|
prerelease: false
|
99
99
|
version_requirements: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - '='
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: 1.5.0
|
104
101
|
- - "~>"
|
105
102
|
- !ruby/object:Gem::Version
|
106
|
-
version: '1.
|
103
|
+
version: '1.8'
|
104
|
+
- - '='
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: 1.8.1
|
107
107
|
- !ruby/object:Gem::Dependency
|
108
108
|
name: thor
|
109
109
|
requirement: !ruby/object:Gem::Requirement
|
110
110
|
requirements:
|
111
111
|
- - "~>"
|
112
112
|
- !ruby/object:Gem::Version
|
113
|
-
version: '
|
113
|
+
version: '1.1'
|
114
114
|
- - '='
|
115
115
|
- !ruby/object:Gem::Version
|
116
|
-
version:
|
116
|
+
version: 1.1.0
|
117
117
|
type: :runtime
|
118
118
|
prerelease: false
|
119
119
|
version_requirements: !ruby/object:Gem::Requirement
|
120
120
|
requirements:
|
121
121
|
- - "~>"
|
122
122
|
- !ruby/object:Gem::Version
|
123
|
-
version: '
|
123
|
+
version: '1.1'
|
124
124
|
- - '='
|
125
125
|
- !ruby/object:Gem::Version
|
126
|
-
version:
|
126
|
+
version: 1.1.0
|
127
127
|
- !ruby/object:Gem::Dependency
|
128
128
|
name: haikunator
|
129
129
|
requirement: !ruby/object:Gem::Requirement
|
130
130
|
requirements:
|
131
|
-
- - '='
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
version: 1.1.0
|
134
131
|
- - "~>"
|
135
132
|
- !ruby/object:Gem::Version
|
136
133
|
version: '1.1'
|
134
|
+
- - '='
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: 1.1.1
|
137
137
|
type: :runtime
|
138
138
|
prerelease: false
|
139
139
|
version_requirements: !ruby/object:Gem::Requirement
|
140
140
|
requirements:
|
141
|
-
- - '='
|
142
|
-
- !ruby/object:Gem::Version
|
143
|
-
version: 1.1.0
|
144
141
|
- - "~>"
|
145
142
|
- !ruby/object:Gem::Version
|
146
143
|
version: '1.1'
|
144
|
+
- - '='
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: 1.1.1
|
147
147
|
description: Word Slave includes the wslave command and a control library to generate
|
148
148
|
a "best practice" WordPress installation and includes a pre-rolled Docker setup
|
149
149
|
for running a development server and a Capistrano setup for deployment.
|
@@ -164,6 +164,8 @@ files:
|
|
164
164
|
- base/config/deploy-tools/wp-config.php.erb
|
165
165
|
- base/config/deploy-tools/wp-config.php.local
|
166
166
|
- base/config/deploy.rb
|
167
|
+
- base/config/deploy/.production.rb.swp
|
168
|
+
- base/config/deploy/.staging.rb.swp
|
167
169
|
- base/config/deploy/production.rb
|
168
170
|
- base/config/deploy/staging.rb
|
169
171
|
- base/docker-compose.yml
|
@@ -202,7 +204,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
202
204
|
- !ruby/object:Gem::Version
|
203
205
|
version: '0'
|
204
206
|
requirements: []
|
205
|
-
rubygems_version: 3.
|
207
|
+
rubygems_version: 3.1.2
|
206
208
|
signing_key:
|
207
209
|
specification_version: 4
|
208
210
|
summary: '"Word Slave" generates and controls a WordPress installation'
|