forked from mailpoet/mailpoet
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.sh
executable file
·184 lines (154 loc) · 6.79 KB
/
build.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#!/bin/bash -e
# Translations (npm ci & composer install need to be run before)
# On CircleCI (when $CIRCLE_BRANCH is set) build them only on 'release' branch.
mkdir -p lang
if [[ -n ${CIRCLE_BRANCH} && ${CIRCLE_BRANCH} != 'release' ]]; then
echo '[BUILD] Skipping translations'
else
echo '[BUILD] Generating translations'
./do translations:pack
fi
echo '[BUILD] Generating translations .pot file'
./do translations:build
plugin_name='mailpoet'
# Remove previous build.
echo '[BUILD] Removing previous build'
rm -f $plugin_name.zip
# Create temp dir.
echo '[BUILD] Creating temporary directory'
rm -rf $plugin_name
mkdir $plugin_name
# Production assets.
echo '[BUILD] Generating production CSS and JS assets'
rm -rf node_modules
npm ci --prefer-offline
./do compile:all --env production
# Dependency injection container cache.
echo '[BUILD] Building DI Container cache'
./tools/vendor/composer.phar install
./do container:dump
# Generate Doctrine cache
echo '[BUILD] Generating Doctrine Cache'
./do doctrine:generate-cache
# Backup dev libraries
echo '[BUILD] Backup dev dependencies'
if [ -d 'vendor' ]; then
mv vendor vendor-backup
fi
if [ -d 'vendor-prefixed' ]; then
mv vendor-prefixed vendor-prefixed-backup
fi
# Production libraries.
echo '[BUILD] Fetching production libraries'
mkdir vendor-prefixed
./tools/vendor/composer.phar install --no-dev --prefer-dist --optimize-autoloader --no-scripts
echo '[BUILD] Fetching prefixed production libraries'
./tools/vendor/composer.phar install --no-dev --prefer-dist --working-dir=./prefixer/
# Remove Doctrinne Annotations (no need since generated metadata are packed)
# Should be removed before `dump-autoload` to not include the annotations classes on the autoloader.
rm -rf vendor-prefixed/doctrine/annotations
# Remove DI Container files used for container dump (no need since generated metadata are packed)
# Should be removed before `dump-autoload` to not include these classes in the autoloader.
echo '[BUILD] Removing DI Container development dependencies'
rm -rf vendor-prefixed/symfony/dependency-injection/Compiler
rm -rf vendor-prefixed/symfony/dependency-injection/Config
rm -rf vendor-prefixed/symfony/dependency-injection/Dumper
rm -rf vendor-prefixed/symfony/dependency-injection/Loader
rm -rf vendor-prefixed/symfony/dependency-injection/LazyProxy
rm -rf vendor-prefixed/symfony/dependency-injection/Extension
./tools/vendor/composer.phar dump-autoload
# Copy release folders.
echo '[BUILD] Copying release folders'
cp -Rf lang $plugin_name
cp -RfL assets $plugin_name
cp -Rf generated $plugin_name
cp -Rf lib $plugin_name
cp -Rf lib-3rd-party $plugin_name
cp -Rf vendor $plugin_name
cp -Rf vendor-prefixed $plugin_name
cp -Rf views $plugin_name
rm -Rf $plugin_name/assets/css/src
rm -Rf $plugin_name/assets/js/src
rm -Rf $plugin_name/lang/*.po
# Remove generated PHP files after they were copied for release
rm -Rf generated/*.php
# Remove extra files (docs, examples,...) from 3rd party extensions
unameString=`uname`
if [ "$unameString" = 'Darwin' ]; then
findPreArgs=' -E '
findMidArgs=''
else
findPreArgs=''
findMidArgs=' -regextype posix-egrep '
fi
findDestinations="$plugin_name/vendor $plugin_name/vendor-prefixed"
echo '[BUILD] Removing obsolete files from vendor libraries'
find $findPreArgs $findDestinations -type f $findMidArgs -iregex ".*\/*\.(markdown|md|txt)" -print0 | xargs -0 rm -f
find $findPreArgs $findDestinations -type f $findMidArgs -iregex ".*\/(readme|license|version|changes|changelog|composer\.json|composer\.lock|phpunit\.xml.*|doxyfile)" -print0 | xargs -0 rm -f
find $findPreArgs $findDestinations -type f $findMidArgs -iregex ".*\/(\.editorconfig|\.git.*|\.travis.yml|\.php_cs.*)" -print0 | xargs -0 rm -f
find $findPreArgs $findDestinations -type d $findMidArgs -iregex ".*\/(docs?|examples?|\.git)" -print0 | xargs -0 rm -rf
# Remove all .gitignore files
find $findPreArgs $plugin_name -type f $findMidArgs -iregex ".*\/\.gitignore" -print0 | xargs -0 rm -f
# Remove Tracy panels
rm -rf $plugin_name/lib/Tracy
# Remove unit tests from 3rd party extensions
echo '[BUILD] Removing unit tests from vendor libraries'
rm -rf $plugin_name/vendor-prefixed/cerdic/css-tidy/COPYING
rm -rf $plugin_name/vendor-prefixed/cerdic/css-tidy/NEWS
rm -rf $plugin_name/vendor-prefixed/cerdic/css-tidy/testing
rm -rf $plugin_name/vendor/mtdowling/cron-expression/tests
rm -rf $plugin_name/vendor/phpmailer/phpmailer/test
rm -rf $plugin_name/vendor-prefixed/psr/log/Psr/Log/Test
rm -rf $plugin_name/vendor-prefixed/sabberworm/php-css-parser/tests
rm -rf $plugin_name/vendor/soundasleep/html2text/tests
rm -rf $plugin_name/vendor-prefixed/swiftmailer/swiftmailer/tests
rm -rf $plugin_name/vendor-prefixed/symfony/service-contracts/Tests
rm -rf $plugin_name/vendor-prefixed/symfony/translation/Tests
rm -rf $plugin_name/vendor-prefixed/symfony/translation-contracts/Tests
# Remove risky files from 3rd party extensions
echo '[BUILD] Removing risky and demo files from vendor libraries'
rm -f $plugin_name/vendor-prefixed/cerdic/css-tidy/css_optimiser.php
rm -rf $plugin_name/vendor-prefixed/gregwar/captcha/demo
rm -rf $plugin_name/vendor-prefixed/gregwar/captcha/src/Gregwar/Captcha/Font/captcha4.ttf # big font
rm -rf $plugin_name/vendor-prefixed/cerdic/css-tidy/bin
rm -f $plugin_name/vendor-prefixed/egulias/email-validator/psalm*.xml
# Copy release files.
echo '[BUILD] Copying release files'
cp license.txt $plugin_name
cp index.php $plugin_name
cp $plugin_name-cron.php $plugin_name
cp $plugin_name.php $plugin_name
cp mailpoet_initializer.php $plugin_name
cp readme.txt $plugin_name
cp uninstall.php $plugin_name
# Prefix all PHP files with "<?php if (!defined('ABSPATH')) exit; ?>"
echo '[BUILD] Adding ABSPATH ensuring prefix to all PHP files (to avoid path disclosure)'
php "$(dirname "$0")"/tasks/fix-full-path-disclosure.php $plugin_name
# Add index.php files if they don't exist to all folders
echo '[BUILD] Adding index.php files to all project folders (to avoid directory listing disclosure)'
find $plugin_name -type d -print0 | while read -d $'\0' dir; do
if [ ! -f "$dir/Index.php" ]; then
touch "$dir/index.php"
fi
done
# Strip whitespaces and comments from PHP files in vendor and vendor prefixed folders
echo '[BUILD] Strip whitespaces and comments from PHP files in vendor folder'
php "$(dirname "$0")"/tasks/strip-whitespaces.php $plugin_name/vendor
php "$(dirname "$0")"/tasks/strip-whitespaces.php $plugin_name/vendor-prefixed
# Zip final release.
echo '[BUILD] Creating final release zip'
zip -r $plugin_name.zip $plugin_name
# Remove temp dir.
echo '[BUILD] Removing temp directory'
rm -rf $plugin_name
# Restore dev dependencies.
echo '[BUILD] Restoring dev dependencies'
if [ -d 'vendor-backup' ]; then
rm -rf vendor
mv vendor-backup vendor
fi
if [ -d 'vendor-prefixed-backup' ]; then
rm -rf vendor-prefixed
mv vendor-prefixed-backup vendor-prefixed
fi
echo '[BUILD] Build finished!'