Skip to content

Commit

Permalink
Use whitelist-files for polyfills
Browse files Browse the repository at this point in the history
  • Loading branch information
veewee committed May 21, 2021
1 parent c40fdb6 commit 3207ee0
Show file tree
Hide file tree
Showing 5 changed files with 75 additions and 60 deletions.
51 changes: 30 additions & 21 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -13,24 +13,14 @@ compile:
@echo Cloning GrumPHP $(TAG) in directory $(BUILD_DIR)
git clone git@github.com:phpro/grumphp.git $(BUILD_DIR)
git --work-tree=$(BUILD_DIR) --git-dir='$(BUILD_DIR)/.git' checkout 'tags/v$(TAG)'
cp build/* '$(BUILD_DIR)'
cp src/Composer/FixBrokenStaticAutoloader.php '$(BUILD_DIR)/src/Composer'
php $(BUILD_DIR)/fix-some-stuff-in-composer.php
composer --working-dir='$(BUILD_DIR)' config platform.php '$(PHP)'
composer install --working-dir='$(BUILD_DIR)' --no-scripts --no-plugins --no-dev --no-interaction --optimize-autoloader
./vendor/bin/box compile --working-dir='$(BUILD_DIR)'
# Run sanity Check:
mv '$(BUILD_DIR)/composer.json.backup' '$(BUILD_DIR)/composer.json'
rm -rf '$(BUILD_DIR)/vendor'
composer update --dev --working-dir='$(BUILD_DIR)' --no-interaction
cd $(BUILD_DIR) && ./grumphp.phar run --testsuite=git_pre_commit && cd $(ROOT_DIR)
# Copy composer plugin
cp '$(BUILD_DIR)/src/Composer/GrumPHPPlugin.php' '$(ROOT_DIR)/src/Composer/GrumPHPPlugin.php'
# All good : lets finish up
cp '$(BUILD_DIR)/grumphp.phar' '$(ROOT_DIR)'
gpg --local-user toonverwerft@gmail.com --armor --detach-sign grumphp.phar
rm -rf $(BUILD_DIR)
make prepare BUILD_DIR=$(BUILD_DIR) PHP=$(PHP)
make sanity BUILD_DIR=$(BUILD_DIR)
make cleanup BUILD_DIR=$(BUILD_DIR)
# Release tag
@echo "Run 'make release TAG=$(TAG)' to tag a new release"

release:
$(if $(TAG),,$(error TAG is not defined. Pass via "make release TAG=4.2.1"))
git add -A
git commit -m '$(TAG) release'
git tag -s 'v$(TAG)' -m'Version $(TAG)'
Expand All @@ -41,13 +31,32 @@ testlocal:
$(eval BUILD_DIR := $(shell mktemp -d -t grumphp-shim-build))
@echo Copying GrumPHP to directory $(BUILD_DIR)
cp -r $(GRUMPHP_DIR)/. $(BUILD_DIR)
make prepare BUILD_DIR=$(BUILD_DIR) PHP=$(PHP)
make cleanup BUILD_DIR=$(BUILD_DIR)

prepare:
$(if $(PHP),,$(error PHP is not defined. Pass via "make prepare PHP=7.4.19"))
$(if $(BUILD_DIR),,$(error BUILD_DIR is not defined. Pass via "make prepare BUILD_DIR=/tmp/prepared-grumphp-src"))
cp build/* '$(BUILD_DIR)'
# Remove vendor and lock to make sure a unique composer autoloader is created
rm -rf $(BUILD_DIR)/vendor
rm $(BUILD_DIR)/composer.lock
cp src/Composer/FixBrokenStaticAutoloader.php '$(BUILD_DIR)/src/Composer'
php $(BUILD_DIR)/fix-some-stuff-in-composer.php
composer --working-dir='$(BUILD_DIR)' config platform.php '$(PHP)'
composer install --working-dir='$(BUILD_DIR)' --no-scripts --no-plugins --no-dev --no-interaction --optimize-autoloader
./vendor/bin/box compile --working-dir='$(BUILD_DIR)' -vvv
./vendor/bin/box compile --working-dir='$(BUILD_DIR)'
# Copy composer plugin
cp '$(BUILD_DIR)/src/Composer/GrumPHPPlugin.php' '$(ROOT_DIR)/src/Composer/GrumPHPPlugin.php'
# All good : lets finish up
cp '$(BUILD_DIR)/grumphp.phar' '$(ROOT_DIR)'
gpg --local-user toonverwerft@gmail.com --armor --detach-sign grumphp.phar

sanity:
$(if $(BUILD_DIR),,$(error BUILD_DIR is not defined. Pass via "make sanity BUILD_DIR=/tmp/prepared-grumphp-src"))
mv '$(BUILD_DIR)/composer.json.backup' '$(BUILD_DIR)/composer.json'
rm -rf '$(BUILD_DIR)/vendor'
composer update --dev --working-dir='$(BUILD_DIR)' --no-interaction
cd $(BUILD_DIR) && ./grumphp.phar run --testsuite=git_pre_commit && cd $(ROOT_DIR)

cleanup:
$(if $(BUILD_DIR),,$(error BUILD_DIR is not defined. Pass via "make sanity BUILD_DIR=/tmp/prepared-grumphp-src"))
rm -rf $(BUILD_DIR)

54 changes: 30 additions & 24 deletions build/scoper.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,40 @@

declare(strict_types=1);

use Symfony\Component\Finder\Finder;

$polyfillsBootstraps = array_map(
static fn (SplFileInfo $fileInfo) => $fileInfo->getPathname(),
iterator_to_array(
Finder::create()
->files()
->in(__DIR__ . '/vendor/symfony/polyfill-*')
->name('bootstrap.php'),
false,
),
);

$polyfillsStubs = array_map(
static fn (SplFileInfo $fileInfo) => $fileInfo->getPathname(),
iterator_to_array(
Finder::create()
->files()
->in(__DIR__ . '/vendor/symfony/polyfill-*/Resources/stubs')
->name('*.php'),
false,
),
);

return [
'whitelist-global-classes' => true,
'whitelist' => [
'GrumPHP\*',
'PhpParser\*',
'Composer\*',
'Symfony\\Polyfill\\*',
],
'patchers' => [
// Remove scoper namespace prefix from Symfony polyfills namespace
static function (string $filePath, string $prefix, string $contents): string {
if (!preg_match('{vendor/symfony/polyfill[^/]*/bootstrap.php}i', $filePath)) {
return $contents;
}

return preg_replace('/namespace .+;/', '', $contents);
},
// Bug in scoper : it does not add class_alias if the interface is inside an if statement.
// TODO : fix me on feedback in https://github.com/humbug/php-scoper/issues/473
static function (string $filePath, string $prefix, string $contents): string {
if ($filePath !== 'vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php') {
return $contents;
}

$contents .= 'if (\PHP_VERSION_ID < 80000) {'.PHP_EOL;
$contents .= " \class_alias('$prefix\\\\Stringable', 'Stringable', \\false);".PHP_EOL;
$contents .= "}".PHP_EOL;

return $contents;
}
]
'files-whitelist' => [
...$polyfillsBootstraps,
...$polyfillsStubs
],
'patchers' => []
];
Binary file modified grumphp.phar
Binary file not shown.
28 changes: 14 additions & 14 deletions grumphp.phar.asc
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
-----BEGIN PGP SIGNATURE-----

iQJLBAABCAA1FiEEW1zViimZLVHyF1jeO6jkJuArJ7YFAmCcF4QXHHRvb252ZXJ3
ZXJmdEBnbWFpbC5jb20ACgkQO6jkJuArJ7bq6Q/9Eq0Lj22K3Qvu1Q29kfcpQtUC
KilqyMPcTuK4s9K80Jg7OOztuoWEQ+xCHcyBJKCVkYGKTYUDYJc3ecmjU6hxOfrw
j9f9whXcB04wrZKVSIw/qwG4ByIBZb+5G240PCd3DDGjzU7roEb5FhdoWx6HC1Z9
0PvOXNekslVFkisvSHU/hXMN2TOUycJglUvoJiL03VYcXtgRtj+bFn8xihx6N0Ej
8+09VONTuSRIBYJP31KglAlQ57CveuZxbSMjfMRHZItIY/LdgLnG7wUSf7r74k1h
QH2DoSE2iG0MRbgmpXlh1hLRn2ytYIebaxRWFfKlCp/+b/Wzi6Q8A/10hIwJ3y0G
PL7se22t8/JP8ebYtLjbNDioNTA01MxQKtIjToxYnQCdKl91SiUn3luZEfxKpjGR
Bp/+hY/upLINKJRfzb9mRcR+w1B0DrPTrfSMCeAShDpxAk+7wfUTUw9/F5gk/LGO
bZbGtNg4VJ0kyClCRgksVGzwnhA/O/uKSaXWW3Uxhc2faP9Wh+3W33SfKHiholkb
0DZyY63qiI9q3VhZJAzN1CAqrdrak+tpIpxW8mxKAGjSQ/jOtCf5R2bCWesoIixC
qU3qM4+BWTUmltTRJWphymkTcxFgNc6anE+CVZ2UBRqS0/ibs7C7rPkenlvItlOC
PdiirGY1jnPbhAqdT94=
=wQLV
iQJLBAABCAA1FiEEW1zViimZLVHyF1jeO6jkJuArJ7YFAmCnXWoXHHRvb252ZXJ3
ZXJmdEBnbWFpbC5jb20ACgkQO6jkJuArJ7bn9A/+I0zqBcMSsBIJbojXLc12etpj
Yth26LjEyJJaxuj2/4JyWTCMXmd1ybX1DytFdZQhZ0CiTO523Lqn7aKUo8zR474r
ubDjeuc6SVEr1zfflI1D0EH/Vyi1mrxNNXPxBTYs9FLm1TUGLJX0OchWK1fRaApF
eB2PIqe5X/u02LwuWDF+IALXFWTMyaQooDcfpY8Lnptw7qE3lVqy2sql5UYTPOir
/tvQkFsdkKi/ku4owDTvtug8A4/sx7aHf+V89V/c2Lvs1fxv9LCrbowprNdlv49D
bJuyM1iBO0bbSfsbnb7xbHWcRnBtFd1Als0Qe5ioRxzrrUjhjapK+gpaalq90f/B
Lptm+w4aby0zpPQCio0LNnVeQMAiMgdhsDQCYElmWNh4U4EB55EHbYxxNuOO0eMU
mXjwr1kva1Me4r0E8a36mG9WSlncdfCToThM3g0AqMaxiGDHuMdKgcWG5g1BRnHP
1gKTjq64STcSfGs3kM7YdoaaqHVzOqmntAaTYjQ6GjtxXZ70Fs7Th85J+Iyp1e+5
n/9yn+1tu7v/+A1rEafpAZAMS988EOc2ZXTb25O6tY3pLHolV6aVLH2/7+Ws1/Wd
cgnzdyqfvCx2+oADsJT5KF3ehIB5mUoDj/w70WGeuI/2juUHAtiTdqe/47OH3c2i
NnSaT/L+VTW6ZOr0BQ8=
=3/v8
-----END PGP SIGNATURE-----
2 changes: 1 addition & 1 deletion src/Composer/FixBrokenStaticAutoloader.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public static function fix(Event $event)
$event->getIO()->write(["Fixing $static_loader_path"]);
$static_loader = file_get_contents($static_loader_path);
$static_loader = \preg_replace(
'/\'([A-Za-z0-9]*?)\' => __DIR__ \. (.*?),/',
'/\'([a-z0-9]*?)\' => __DIR__ \. (.*?),/',
'\'scoped$1\' => __DIR__ . $2,',
$static_loader
);
Expand Down

0 comments on commit 3207ee0

Please sign in to comment.