diff --git a/.gitignore b/.gitignore index ca98c103..3f3ac9a8 100644 --- a/.gitignore +++ b/.gitignore @@ -7,5 +7,6 @@ pub .ssh .vscode *.css.map +*.br deployment-report.json build/ diff --git a/deploy.php b/deploy.php index 413af046..4e8d6813 100644 --- a/deploy.php +++ b/deploy.php @@ -4,10 +4,7 @@ namespace Hypernode\DeployConfiguration; -use function Deployer\after; -use function Deployer\run; -use function Deployer\task; -use function Deployer\test; +use function Deployer\{run, task, test, within, set}; $DOCKER_HOST = '172.17.0.2'; $DOCKER_WEBROOT = sprintf('/data/web/apps/%s/current/pub', $DOCKER_HOST); @@ -74,12 +71,29 @@ run('cp {{release_path}}/etc/nginx/server.redirects.conf /data/web/nginx/server.redirects.conf'); }); +// This will pre-compress files using brotli compression so we can serve them directly from nginx +// without needing to compress them on-the-fly. +task('build:compress:brotli', function () { + set('brotli_compression_level', 11); + + run('apt update && apt install brotli -y'); + within('{{release_or_current_path}}/docs/_build/html', function () { + run('find . -name "*.html" -type f -exec brotli -f -q {{brotli_compression_level}} {} \\;'); + run('find . -name "*.css" -type f -exec brotli -f -q {{brotli_compression_level}} {} \\;'); + run('find . -name "*.js" -type f -exec brotli -f -q {{brotli_compression_level}} {} \\;'); + run('find . -name "*.svg" -type f -exec brotli -f -q {{brotli_compression_level}} {} \\;'); + run('find . -name "*.png" -type f -exec brotli -f -q {{brotli_compression_level}} {} \\;'); + run('find . -name "*.jpg" -type f -exec brotli -f -q {{brotli_compression_level}} {} \\;'); + }); +}); + $configuration = new Configuration(); $configuration->addBuildTask('node:build:scss'); $configuration->addBuildTask('python:venv:create'); $configuration->addBuildTask('python:venv:requirements'); $configuration->addBuildTask('python:build_documentation'); $configuration->addBuildTask('python:generate_redirects'); +$configuration->addBuildTask('build:compress:brotli'); $configuration->addDeployTask('deploy:disable_public'); $configuration->addDeployTask('deploy:hmv_docker'); $configuration->addDeployTask('deploy:docs_vhost:acceptance');