wslave 0.0.18 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c8df8f2d9fb3ddae0dfbc1d47fdf8107b20c455e3d4eadb15538e1d9483cfcb8
4
- data.tar.gz: ab496e09948a4edf41cc828c01a34487cb7a29633c203356b231e967f582d4a9
3
+ metadata.gz: 9ee627106f6ba97b14f1adf9d636ef8b66a9ffcf89c996b59bb077633f2f1eaa
4
+ data.tar.gz: 1d31cf735fbeacb810f2558fd7c3b49af4fcef1a7421f27511aa89b0dbba0dee
5
5
  SHA512:
6
- metadata.gz: c97f9515d2229be7bfee1b2e1df26347be54f178e47382bf67390651dba0aa10ec1158574e5aedd3e233ec610be25ae9a42afd03f4e27c427ea148780dad21aa
7
- data.tar.gz: 9622367e6bd226bc525146f6792fb598220397528055946e393dbc1f1952215b1ade9b90a010420d30748944875105e545f68fa15896a9caddce594c4c3e1ee8
6
+ metadata.gz: ce2bce83363782e099e55132d5cf63730e4ebf16f5588446c69149a536c2d90a250eb94f07dc0748c820106513e210d31b889274c5df6bbcd52d33a4143e474c
7
+ data.tar.gz: 53fe21ad452756017e8a4ad0c7ef93b200f08b877b531776e80898e345cdd6f6608db58ffb6d4cb3af81754a97e2abf4329f65bb8b15d5d0032adff703c34fdf
@@ -2,3 +2,4 @@ log
2
2
  .swp
3
3
  .swo
4
4
  db/tmp/*
5
+ .vscode
@@ -1,35 +1,51 @@
1
1
  server {
2
- listen 80;
3
- listen [::]:80;
2
+ listen 80;
3
+ listen [::]:80;
4
4
 
5
- server_name <%= server[:name] %>;
5
+ server_name <%= server[:name] %>;
6
6
 
7
- root <%= server[:root] %>;
7
+ root <%= server[:root] %>;
8
8
 
9
- access_log <%= server[:root] %>/access.log;
10
- error_log <%= server[:root] %>/error.log;
9
+ access_log <%= server[:root] %>/access.log;
10
+ error_log <%= server[:root] %>/error.log;
11
11
 
12
- index index.php;
12
+ index index.php;
13
13
 
14
- location / {
15
- rewrite ^/(wp-(admin|includes).*) /wordpress/$1 last;
14
+ location / {
15
+ rewrite ^/(wp-(admin|includes).*) /wordpress/$1 last;
16
16
 
17
- rewrite ^/$ /wordpress/index.php last;
17
+ rewrite ^/$ /wordpress/index.php last;
18
18
 
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] %>;
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
- location ~ /\. {
31
- deny all;
32
- access_log off;
33
- log_not_found off;
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
  }
@@ -1,5 +1,5 @@
1
1
  # config valid only for current version of Capistrano
2
- lock "3.11.0"
2
+ lock "3.14.1"
3
3
 
4
4
  require 'yaml'
5
5
  opts = YAML.load_file('config/definitions.yml')
@@ -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
@@ -2,7 +2,7 @@ version: '3'
2
2
 
3
3
  services:
4
4
  db:
5
- image: mysql:5.7
5
+ image: mariadb:10.5.4-focal
6
6
  volumes:
7
7
  - "./db/dev:/db"
8
8
  - "./db/active:/docker-entrypoint-initdb.d"
@@ -12,7 +12,7 @@ services:
12
12
  web:
13
13
  depends_on:
14
14
  - db
15
- build: .
15
+ build: ./docker/apache/
16
16
  volumes:
17
17
  - "./public:/var/www/html"
18
18
  ports:
@@ -20,3 +20,14 @@ services:
20
20
  environment:
21
21
  WORDPRESS_DB_HOST: db:3306
22
22
  WORDPRESS_DB_PASSWORD: wordpress
23
+ nweb:
24
+ depends_on:
25
+ - db
26
+ build: ./docker/nginx/
27
+ volumes:
28
+ - "./public:/var/www/html"
29
+ ports:
30
+ - "8001:80"
31
+ environment:
32
+ WORDPRESS_DB_HOST: db:3306
33
+ WORDPRESS_DB_PASSWORD: wordpress
@@ -1,13 +1,11 @@
1
- FROM php:7.2.6-apache
1
+ FROM php:7.4-apache
2
2
 
3
3
  RUN a2enmod rewrite
4
4
  RUN service apache2 restart
5
5
  RUN apt-get update \
6
- && apt-get install -y libpng-dev libjpeg-dev mysql-client mysql-common \
7
- && docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr \
6
+ && apt-get install -y libpng-dev libjpeg-dev mariadb-client mariadb-common libonig-dev \
8
7
  && docker-php-ext-install gd \
9
8
  && docker-php-ext-install mbstring \
10
- # && docker-php-ext-install mysql \
11
9
  && docker-php-ext-install mysqli \
12
10
  && docker-php-ext-install pdo \
13
11
  && docker-php-ext-install pdo_mysql \
@@ -0,0 +1,24 @@
1
+ FROM ubuntu:20.04
2
+
3
+ COPY nginx.vhost /etc/nginx/sites-enabled/default
4
+ COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
5
+
6
+ RUN apt-get update
7
+ RUN DEBIAN_FRONTEND="noninteractive" apt-get -y install tzdata
8
+ RUN apt-get install -y nginx php-fpm php-mysql \
9
+ libpng-dev libjpeg-dev \
10
+ mariadb-client mariadb-common \
11
+ supervisor curl
12
+ RUN apt-get clean
13
+ RUN adduser www-data root
14
+ RUN mkdir /db \
15
+ && chmod 777 /db
16
+
17
+ RUN ln -sf /dev/stdout /var/log/nginx/access.log \
18
+ && ln -sf /dev/stderr /var/log/nginx/error.log
19
+
20
+ EXPOSE 80
21
+
22
+ STOPSIGNAL SIGTERM
23
+
24
+ CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
@@ -0,0 +1,48 @@
1
+ server {
2
+ listen 80;
3
+ listen [::]:80;
4
+
5
+ server_name testing;
6
+
7
+ root /var/www/html;
8
+
9
+ index index.php;
10
+
11
+ location / {
12
+ rewrite ^/(wp-(admin|includes).*) /wordpress/$1 last;
13
+
14
+ rewrite ^/$ /wordpress/index.php last;
15
+
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.2-fpm.sock;
24
+ }
25
+ }
26
+
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
+ }
48
+ }
@@ -0,0 +1,23 @@
1
+ [supervisord]
2
+ nodaemon=true
3
+ logfile=/dev/null
4
+ logfile_maxbytes=0
5
+ pidfile=/run/supervisord.pid
6
+
7
+ [program:php-fpm]
8
+ command=php-fpm7.2 -F
9
+ stdout_logfile=/dev/stdout
10
+ stdout_logfile_maxbytes=0
11
+ stderr_logfile=/dev/stderr
12
+ stderr_logfile_maxbytes=0
13
+ autorestart=false
14
+ startretries=0
15
+
16
+ [program:nginx]
17
+ command=nginx -g 'daemon off;'
18
+ stdout_logfile=/dev/stdout
19
+ stdout_logfile_maxbytes=0
20
+ stderr_logfile=/dev/stderr
21
+ stderr_logfile_maxbytes=0
22
+ autorestart=false
23
+ startretries=0
@@ -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
@@ -4,13 +4,20 @@ require 'fileutils'
4
4
 
5
5
  class WSlaveCLI < Thor
6
6
 
7
+ def self.exit_on_failure?
8
+ true
9
+ end
10
+
7
11
  desc 'new [APP_PATH]', "Generate a new app at APP_PATH"
8
12
  long_desc "Creates a new application in the current directory or in the specificed path."
9
- method_option :version, default: ''
13
+ option :version, default: '',
14
+ desc: 'Specify the version, EG: "--version 5.3". To specify edge/development master use "--version edge".'
15
+ option :wspath, default: '',
16
+ desc: 'specify the path to the wslave distribution, EG: "--wspath ../wslave".'
10
17
  def new(path = './')
11
18
  require_relative '../lib/wslave_new'
12
19
  real_path = File.expand_path(path)
13
- WSlaveNew.new(real_path, options['version'])
20
+ WSlaveNew.new(real_path, options['version'], options['wspath'])
14
21
  end
15
22
 
16
23
  desc 'update', "Updates toolchain"
@@ -20,35 +27,55 @@ class WSlaveCLI < Thor
20
27
  WSlaveUpdate.new()
21
28
  end
22
29
 
23
- desc 'sage NAME', "Generate a theme with NAME"
24
- long_desc "Generates a theme base with sage in the themes directory with the given" \
25
- "NAME. A random name will be generated if you do not specify a NAME."
26
- method_option :version, default: ''
27
- def sage(name = '')
28
- if name == ''
29
- require 'haikunator'
30
- name = Haikunator.haikunate(0)
31
- end
32
- puts "Generating sage theme base for #{name}"
33
- require_relative '../lib/wslave_sage'
34
- WSlaveSage.new(name, options['version'])
30
+ desc 'server COMMAND [options]', "Control the development server container. " \
31
+ "Commands include: start stop log console"
32
+ long_desc <<-LONGDESC
33
+ Start, stop, view logs for, or connect to a console in a development server container.
34
+ \x5
35
+ \x5 COMMANDs:
36
+ \x5 start Starts a development server container. *Will restart the container if already running.
37
+ \x5 stop Stops a running development container.
38
+ \x5 log Connects to the container logs and follows them.
39
+ \x5 console Gives a terminal connection to a bash console on the web container.
40
+ \x5\x5
41
+ Examples:
42
+ \x5 Start dev container servers
43
+ \x5 > wslave server start
44
+ \x5 Start or restart dev container servers after resetting all volumes (reinit)
45
+ \x5 > wslave server start -v
46
+ \x5 Force stop all dev container servers
47
+ \x5 > wslave server stop -f
48
+ \x5 Show logs
49
+ \x5 > wslave server logs
50
+
51
+
52
+ \x5 * If you do not specify a COMMAND the default is to start a server.
53
+ \x5 * If a server is alredy running this command will restart the server.
54
+ LONGDESC
55
+ method_option :v, type: :boolean, default: false, description: 'remove volume data'
56
+ method_option :f, type: :boolean, default: false, description: 'force close other servers first'
57
+ def server(command = 'start')
58
+ puts 'Starting server...'
59
+ require_relative '../lib/wslave_docker'
60
+ WSlaveDocker.new().server(command.to_sym, options['f'], options['v'])
35
61
  end
36
62
 
37
- desc 'server', "Starts the development server"
38
- method_option :f, default: false, description: 'force close other servers first'
39
- def server()
63
+ desc 'start [options]', "Starts the development server (short for 'server start')"
64
+ method_option :v, type: :boolean, default: false, description: 'remove volume data'
65
+ method_option :f, type: :boolean, default: false, description: 'force close other servers first'
66
+ def start()
40
67
  puts 'Starting server...'
41
68
  require_relative '../lib/wslave_docker'
42
- WSlaveDocker.new().server(options['f'])
69
+ WSlaveDocker.new().server(:start, options['f'], options['v'])
43
70
  end
44
71
 
45
- desc 'stop [options]', "Stops the development server"
46
- method_option :v, default: false, description: 'remove volume data'
47
- method_option :f, default: false, description: 'force close other servers first'
72
+ desc 'stop [options]', "Stops the development server (short for 'server stop')"
73
+ method_option :v, type: :boolean, default: false, description: 'remove volume data'
74
+ method_option :f, type: :boolean, default: false, description: 'force close other servers first'
48
75
  def stop()
49
76
  puts 'Stopping server...'
50
77
  require_relative '../lib/wslave_docker'
51
- WSlaveDocker.new().stop(options['f'], options['v'])
78
+ WSlaveDocker.new().server(:stop, options['f'], options['v'])
52
79
  end
53
80
 
54
81
  desc 'sync', "Synchronizes submodules and file permissions"
@@ -64,6 +91,33 @@ class WSlaveCLI < Thor
64
91
  spec = Gem::Specification::load("#{__dir__}/../wslave.gemspec")
65
92
  puts spec.version
66
93
  end
94
+
95
+ desc 'sage COMMAND', "Generate a theme with NAME"
96
+ long_desc "Generates a theme base with sage in the themes directory with the given " \
97
+ "NAME. A random name will be generated if you do not specify a NAME."
98
+ def sage(command = '', arg = '')
99
+ case command
100
+ when 'create'
101
+ require_relative '../lib/wslave_sage'
102
+ puts "Generating sage theme base for #{arg}"
103
+ WSlaveSage.new().create(arg)
104
+ when 'update'
105
+ require_relative '../lib/wslave_sage'
106
+ WSlaveSage.new().update()
107
+ when 'dev'
108
+ require_relative '../lib/wslave_sage'
109
+ WSlaveSage.new().dev()
110
+ when 'build'
111
+ require_relative '../lib/wslave_sage'
112
+ WSlaveSage.new().build()
113
+ when 'production'
114
+ require_relative '../lib/wslave_sage'
115
+ WSlaveSage.new().production()
116
+ else
117
+ puts "sage command \"#{command}\" not found."
118
+ puts "sage commands available: create update dev build production"
119
+ end
120
+ end
67
121
  end
68
122
 
69
123
  WSlaveCLI.start(ARGV)
@@ -6,23 +6,54 @@ 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, volume = false)
10
+ case (command)
11
+ when :start
12
+ start(force, volume)
13
+ when :stop
14
+ stop(force, volume)
15
+ when :log
16
+ log()
17
+ when :console
18
+ console()
19
+ else
20
+ puts "server subcommand \"#{command.to_s}\" not found."
21
+ puts "Available commands: start stop log console"
22
+ end
23
+ end
24
+
25
+ def start(force = false, volume = false)
10
26
  return unless _check()
11
27
  _force_down() if force
28
+ `docker-compose down#{volume ? ' -v' : ''}` # Shutdown existing instances
12
29
  _unfuck_dot_htaccess()
13
30
  WSlaveTools.set_dev_perms
14
31
  `docker-compose up -d`
15
32
  end
16
33
 
17
- def stop(force, volume)
34
+ def stop(force = false, volume = false)
18
35
  return unless _check()
19
36
  _force_down() if force
20
37
  `docker-compose down#{volume ? ' -v' : ''}`
21
38
  end
22
39
 
40
+ def log()
41
+ return unless _check()
42
+ begin
43
+ system("docker-compose logs -f")
44
+ rescue Exception => e
45
+ puts "\n\nEnding log trace. NOTE: Server containers are still running!\n\n"
46
+ return
47
+ end
48
+ end
49
+
50
+ def console()
51
+ return unless _check()
52
+ system("docker-compose exec web /bin/bash")
53
+ end
54
+
23
55
  def _check()
24
56
  return true if (File.exist?("./config/.wslave") &&
25
- File.exist?("Dockerfile") &&
26
57
  File.exist?("docker-compose.yml"))
27
58
  puts "This does not appear to be the root of a WSlave managed app."
28
59
  false
@@ -1,43 +1,85 @@
1
1
  require 'fileutils'
2
2
  require 'rubygems'
3
+ require 'pathname'
4
+ require 'git'
5
+
3
6
  require_relative 'wslave_tools'
4
7
 
5
8
  class WSlaveNew
6
- def initialize(path, version)
9
+ def initialize(path, version = '', wspath = '')
7
10
  puts '⚙ Initializing Toolchain・・・'
8
11
 
9
- base_path = File.expand_path "#{__dir__}/../base/"
10
- template_path = File.expand_path "#{__dir__}/../templates/"
12
+ if (wspath != '')
13
+ manual_path = true
14
+ if ((Pathname.new(wspath)).absolute?)
15
+ base_path = File.expand_path "#{wspath}/base/"
16
+ template_path = File.expand_path "#{wspath}/templates/"
17
+ else
18
+ base_path = File.expand_path "#{path}/#{wspath}/base/"
19
+ template_path = File.expand_path "#{path}/#{wspath}/templates/"
20
+ end
21
+ else
22
+ manual_path = false
23
+ wspath = "#{__dir__}/.."
24
+ base_path = File.expand_path "#{wspath}/base/"
25
+ template_path = File.expand_path "#{wspath}/templates/"
26
+ end
11
27
 
12
28
  FileUtils.mkdir_p path
13
29
 
14
30
  Dir.chdir path
15
-
31
+
16
32
  puts " > Setting up WordPress WSlave setup in: #{path}"
17
33
  FileUtils.cp_r Dir.glob("#{base_path}/*"), path
18
34
  FileUtils.cp_r Dir.glob("#{template_path}/*"), path
35
+ add_path_to_Gemspec(wspath, path) if manual_path
19
36
 
20
- spec = Gem::Specification::load("#{__dir__}/../wslave.gemspec")
37
+ spec = Gem::Specification::load("#{wspath}/wslave.gemspec")
21
38
  File.open("#{path}/config/.wslave", 'w') {|f| f.write(spec.version)}
22
39
 
23
40
  `cd #{path} && git init && git add --all && git commit -am "initial commit by wslave"`
24
41
 
25
42
  `cd #{path} && git submodule add git://github.com/WordPress/WordPress.git public/wordpress`
26
- `cd #{path}/public/wordpress && git checkout #{version}-branch` if version != ''
27
43
  `cd #{path} && git submodule update --init --recursive public/wordpress`
44
+ if (version == 'edge' || version == 'master')
45
+ `cd #{path}/public/wordpress && git checkout master`
46
+ elsif version != ''
47
+ `cd #{path}/public/wordpress && git checkout #{version}`
48
+ else
49
+ `cd #{path}/public/wordpress && git checkout #{get_stable_branch_version("#{path}/public/wordpress")}-branch`
50
+ end
28
51
 
29
52
  puts " > Preparing detached content directory"
30
53
  FileUtils.cp_r("#{path}/public/wordpress/wp-content", "#{path}/public/wp-content")
31
- FileUtils.mkdir("#{path}/public/wp-content/uploads")
54
+ FileUtils.mkdir("#{path}/public/wp-content/uploads") unless Dir.exist?("#{path}/public/wp-content/uploads")
32
55
  FileUtils.touch("#{path}/public/wp-content/uploads/.gitkeep")
33
- FileUtils.mkdir("#{path}/public/wp-content/upgrade")
56
+ FileUtils.mkdir("#{path}/public/wp-content/upgrade") unless Dir.exist?("#{path}/public/wp-content/upgrade")
34
57
  FileUtils.touch("#{path}/public/wp-content/upgrade/.gitkeep")
35
58
  Dir.chdir path
36
59
 
60
+ puts " > Preparing statid data directory"
61
+ FileUtils.mkdir("#{path}/public/data") unless Dir.exist?("#{path}/public/data")
62
+
37
63
  puts " > Setting permissions"
38
64
  WSlaveTools.set_dev_perms
39
-
65
+
40
66
  `cd #{path} && git add --all && git commit -am "Add and initialize WordPress#{version}"`
41
67
  puts " > Done!"
42
68
  end
69
+
70
+ def add_path_to_Gemspec(wspath, path)
71
+ gemtext = File.read("#{path}/Gemfile")
72
+ gemtext.gsub!("gem 'wslave'", "gem 'wslave', path: '#{wspath}'")
73
+ File.open("#{path}/Gemfile", "w") {|gemfile| gemfile.puts gemtext}
74
+ end
75
+
76
+ def get_stable_branch_version(path)
77
+ latest = '5.4' # This is just a fallback (latest at time of update)
78
+ # TODO Implementation requires this issue be resolved: https://github.com/ruby-git/ruby-git/issues/424
79
+ #g = Git.open(path)
80
+ #g.brances.remote.each do |branch|
81
+ #end
82
+
83
+ latest
84
+ end
43
85
  end
@@ -1,9 +1,76 @@
1
+ require 'yaml'
2
+
1
3
  class WSlaveSage
2
- def initialize(name, version)
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
- `cd public/wp-content/themes && composer create-project roots/sage #{name} #{version}`
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
@@ -3,7 +3,6 @@ require 'fileutils'
3
3
  class WSlaveTools
4
4
  def self.wslave_root?()
5
5
  return true if (File.exist?("./config/.wslave") &&
6
- File.exist?("Dockerfile") &&
7
6
  File.exist?("docker-compose.yml"))
8
7
  puts "This does not appear to be the root of a WSlave managed app."
9
8
  puts "Run command again from the root directory of a WSlave app."
@@ -24,6 +23,8 @@ class WSlaveTools
24
23
  FileUtils.chmod(0775, "#{path}/public/wp-content/plugins")
25
24
  FileUtils.chown(nil, 'www-data', "#{path}/public/wp-content/upgrade")
26
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")
27
28
 
28
29
  unless Dir.exist?("#{path}/db")
29
30
  FileUtils.mkdir("#{path}/db")
@@ -9,7 +9,7 @@ class WSlaveUpdate
9
9
  path = Dir.pwd
10
10
  if !File.exist?("#{path}/config/.wslave")
11
11
  puts "!!!This command must be run in a WSlave generated project!!!"
12
- return
12
+ return
13
13
  end
14
14
 
15
15
  base_path = File.expand_path "#{__dir__}/../base/"
@@ -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("#{base_path}/Dockerfile", "#{path}/Dockerfile")
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")
@@ -9,6 +9,9 @@ deployer:
9
9
  fqdn:
10
10
  staging:
11
11
  production:
12
+ branch:
13
+ staging: master
14
+ production: master
12
15
  app:
13
16
  name:
14
17
  repo:
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'wslave'
3
- s.version = '0.0.18'
3
+ s.version = '0.2.3'
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,11 +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.11.0'
24
- s.add_dependency 'capistrano-git-with-submodules', '~> 2.0', '2.0.3'
23
+ s.add_dependency 'capistrano', '= 3.14.1'
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 'thor', '~> 0.20', '0.20.0'
28
+ s.add_dependency 'git', '~> 1.7', '1.7.0'
29
+
30
+ s.add_dependency 'thor', '~> 1.0', '1.0.1'
29
31
  s.add_dependency 'haikunator', '~> 1.1', '1.1.0'
30
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.0.18
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rei Kagetsuki
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-27 00:00:00.000000000 Z
11
+ date: 2020-11-19 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.11.0
19
+ version: 3.14.1
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.11.0
26
+ version: 3.14.1
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.3
36
+ version: 2.0.4
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '2.0'
44
44
  - - '='
45
45
  - !ruby/object:Gem::Version
46
- version: 2.0.3
46
+ version: 2.0.4
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: capistrano-scm-copy
49
49
  requirement: !ruby/object:Gem::Requirement
@@ -84,26 +84,46 @@ dependencies:
84
84
  - - '='
85
85
  - !ruby/object:Gem::Version
86
86
  version: 1.0.0
87
+ - !ruby/object:Gem::Dependency
88
+ name: git
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - "~>"
92
+ - !ruby/object:Gem::Version
93
+ version: '1.7'
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 1.7.0
97
+ type: :runtime
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.7'
104
+ - - '='
105
+ - !ruby/object:Gem::Version
106
+ version: 1.7.0
87
107
  - !ruby/object:Gem::Dependency
88
108
  name: thor
89
109
  requirement: !ruby/object:Gem::Requirement
90
110
  requirements:
91
111
  - - "~>"
92
112
  - !ruby/object:Gem::Version
93
- version: '0.20'
113
+ version: '1.0'
94
114
  - - '='
95
115
  - !ruby/object:Gem::Version
96
- version: 0.20.0
116
+ version: 1.0.1
97
117
  type: :runtime
98
118
  prerelease: false
99
119
  version_requirements: !ruby/object:Gem::Requirement
100
120
  requirements:
101
121
  - - "~>"
102
122
  - !ruby/object:Gem::Version
103
- version: '0.20'
123
+ version: '1.0'
104
124
  - - '='
105
125
  - !ruby/object:Gem::Version
106
- version: 0.20.0
126
+ version: 1.0.1
107
127
  - !ruby/object:Gem::Dependency
108
128
  name: haikunator
109
129
  requirement: !ruby/object:Gem::Requirement
@@ -135,7 +155,6 @@ extra_rdoc_files: []
135
155
  files:
136
156
  - base/.gitignore
137
157
  - base/Capfile
138
- - base/Dockerfile
139
158
  - base/Gemfile
140
159
  - base/Rakefile
141
160
  - base/config/deploy-tools/gen-nginx-vhost.rb
@@ -148,6 +167,10 @@ files:
148
167
  - base/config/deploy/production.rb
149
168
  - base/config/deploy/staging.rb
150
169
  - base/docker-compose.yml
170
+ - base/docker/apache/Dockerfile
171
+ - base/docker/nginx/Dockerfile
172
+ - base/docker/nginx/nginx.vhost
173
+ - base/docker/nginx/supervisord.conf
151
174
  - base/public/.htaccess
152
175
  - base/public/wp-config.php
153
176
  - bin/wslave
@@ -179,8 +202,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
179
202
  - !ruby/object:Gem::Version
180
203
  version: '0'
181
204
  requirements: []
182
- rubyforge_project:
183
- rubygems_version: 2.7.7
205
+ rubygems_version: 3.1.2
184
206
  signing_key:
185
207
  specification_version: 4
186
208
  summary: '"Word Slave" generates and controls a WordPress installation'