-
Notifications
You must be signed in to change notification settings - Fork 800
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Synced Newspack Blocks: Update to 4.5.2 #40636
Changes from 25 commits
f8fb1e9
73e653f
7520915
26ed945
f51d4b3
e385469
58c59a2
428a09d
c1caf91
de03fc9
3af28b0
bdee6ad
307bbd4
f334dbe
0b0dba3
ba51ed5
83b0491
3135249
ed996dd
de0c564
c354232
877a79d
38dafc1
8465bfc
5d3d690
2f56f6b
bc7ac12
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
src/features/newspack-blocks/synced-newspack-blocks |
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -14,7 +14,7 @@ fi | |||||
|
||||||
# pick up value considering that the argument | ||||||
# has the --key=value shape. | ||||||
key_value=$(echo ${1} | cut -d'=' -f 2) | ||||||
key_value=$(echo "${1}" | cut -d'=' -f 2) | ||||||
# Set mode depending on first argument | ||||||
if [[ $1 =~ ^--release= ]] | ||||||
then | ||||||
|
@@ -44,15 +44,14 @@ then | |||||
echo --branch=master | ||||||
echo "--nodemodules (to use defined in package.json)" | ||||||
echo "--path=/path/to/newspack-blocks" | ||||||
echo --release=v2.0.0 | ||||||
echo --release=v4.0.0 | ||||||
echo | ||||||
echo You can find the latest release ID on https://github.com/Automattic/newspack-blocks/releases/latest | ||||||
echo | ||||||
exit 1 | ||||||
fi | ||||||
|
||||||
TARGET=./src/features/newspack-blocks/synced-newspack-blocks | ||||||
ENTRY=./src/features/newspack-blocks/index.php | ||||||
|
||||||
if [[ ( "$MODE" != "path" ) && ( "$MODE" != "npm" ) ]]; | ||||||
then | ||||||
|
@@ -62,20 +61,23 @@ then | |||||
|
||||||
if [[ "$CURRENT_VERSION" == "$NAME" ]]; then | ||||||
echo "The current version $CURRENT_VERSION of the newspack-blocks is synced." | ||||||
exit 0 | ||||||
read -rp "Do you want to proceed anyway? (y/N): " proceed | ||||||
if [[ ! "$proceed" =~ ^[Yy]$ ]]; then | ||||||
exit 0 | ||||||
fi | ||||||
fi | ||||||
fi | ||||||
|
||||||
# make a temp directory | ||||||
TEMP_DIR=`mktemp -d` | ||||||
TEMP_DIR=$(mktemp -d) | ||||||
CODE=$TEMP_DIR/code | ||||||
|
||||||
# download zip file | ||||||
echo Downloading $MODE $NAME into $TEMP_DIR | ||||||
(cd $TEMP_DIR && curl -L --fail -s -O $URL) | ||||||
echo "Downloading $MODE $NAME into $TEMP_DIR" | ||||||
(cd "$TEMP_DIR" && curl -L --fail -s -O "$URL") | ||||||
|
||||||
# handle download error | ||||||
ZIPS=( $TEMP_DIR/*.zip ) | ||||||
ZIPS=( "$TEMP_DIR"/*.zip ) | ||||||
ZIP=${ZIPS[0]} | ||||||
if [ ! -f "$ZIP" ]; then | ||||||
echo "Tried to download $URL" | ||||||
|
@@ -90,13 +92,13 @@ then | |||||
fi | ||||||
|
||||||
# extract zip | ||||||
echo Extracting into $CODE | ||||||
mkdir -p $CODE | ||||||
unzip -q $ZIP -d $CODE | ||||||
echo "Extracting into $CODE" | ||||||
mkdir -p "$CODE" | ||||||
unzip -q "$ZIP" -d "$CODE" | ||||||
|
||||||
# find the main file and use its directory as the root of our source dir | ||||||
MAIN_FILE=`find $CODE -name "newspack-blocks.php"` | ||||||
CODE=`dirname $MAIN_FILE` | ||||||
MAIN_FILE=$(find "$CODE" -name "newspack-blocks.php") | ||||||
CODE=$(dirname "$MAIN_FILE") | ||||||
|
||||||
# handle unzip error | ||||||
if [ ! -f "$CODE/newspack-blocks.php" ]; then | ||||||
|
@@ -127,31 +129,95 @@ mkdir -p $TARGET/components | |||||
mkdir -p $TARGET/shared | ||||||
mkdir -p $TARGET/types | ||||||
|
||||||
# copy files and directories | ||||||
NEW_VERSION=v`jq -r .version $CODE/package.json` | ||||||
# Update Newspack Blocks version number in the package. | ||||||
NEW_VERSION=v$(jq -r .version "$CODE"/package.json) | ||||||
echo "$NEW_VERSION" > $TARGET/version.txt | ||||||
cp $CODE/includes/class-newspack-blocks-api.php $TARGET/ | ||||||
cp $CODE/includes/class-newspack-blocks.php $TARGET/ | ||||||
cp -R $CODE/src/blocks/homepage-articles $TARGET/blocks/ | ||||||
cp -R $CODE/src/blocks/carousel $TARGET/blocks/ | ||||||
cp -R $CODE/src/shared $TARGET/ | ||||||
cp -R $CODE/src/components $TARGET/ | ||||||
sed -E -i.bak "s|^define\( 'NEWSPACK_BLOCKS__VERSION', '.*' \);$|define( 'NEWSPACK_BLOCKS__VERSION', '$NEW_VERSION' );|" "$TARGET"/../index.php | ||||||
rm "$TARGET"/../index.php.bak | ||||||
|
||||||
# copy files and directories | ||||||
cp "$CODE"/includes/class-newspack-blocks-api.php $TARGET/ | ||||||
cp "$CODE"/includes/class-newspack-blocks.php $TARGET/ | ||||||
cp -R "$CODE"/src/blocks/homepage-articles $TARGET/blocks/ | ||||||
cp -R "$CODE"/src/blocks/carousel $TARGET/blocks/ | ||||||
cp -R "$CODE"/src/shared $TARGET/ | ||||||
cp -R "$CODE"/src/components $TARGET/ | ||||||
|
||||||
# Get Typescript working by copying the main type defs over. | ||||||
cp $CODE/src/types/index.d.ts $TARGET/types/ | ||||||
cp "$CODE"/src/types/index.d.ts $TARGET/types/ | ||||||
# Function types need to be capitalized in our system. We only match " function" | ||||||
# beginning with a space to avoid matching it as a substring. (Not perfect, but | ||||||
# imperfections will be caught by CI with failing tsc, etc.) | ||||||
sed "${sedi[@]}" -e "s| function| Function|g" "$TARGET/types/index.d.ts" | ||||||
|
||||||
# Note: I would have used eslint-nibble, but it doesn't support autofixing via the CLI. | ||||||
echo "Changing JS textdomain to match jetpack-mu-wpcom..." | ||||||
pnpm [email protected] dlx eslint --no-ignore --rule '"@wordpress/i18n-text-domain":["error",{"allowedTextDomain":"jetpack-mu-wpcom"}]' --fix $TARGET > /dev/null | ||||||
BASE=$(cd "$(dirname "${BASH_SOURCE[0]}")"/../../../.. && pwd) | ||||||
FULLTARGET="$PWD/$TARGET" | ||||||
|
||||||
# Add a temporary single-rule eslint.config.mjs file. | ||||||
cat > "$TARGET/eslint.config.mjs" <<EOF | ||||||
import makeBaseConfig from 'jetpack-js-tools/eslintrc/base.mjs'; | ||||||
|
||||||
// This directory is copy-pasted from elsewhere, but we still need to run this one rule over it so we can't just .eslintignore. | ||||||
tbradsha marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
export default [ | ||||||
// Import base config, but no rules. | ||||||
...makeBaseConfig( import.meta.url ).map( block => ( { ...block, rules: {} } ) ), | ||||||
// Enable just this one rule. | ||||||
{ | ||||||
rules: { | ||||||
"@wordpress/i18n-text-domain": [ "error", { allowedTextDomain: "jetpack-mu-wpcom" } ], | ||||||
} | ||||||
}, | ||||||
]; | ||||||
EOF | ||||||
( cd "$BASE" && pnpm run lint-file --no-inline-config --no-ignore --fix "$FULLTARGET" ) | ||||||
rm "$TARGET/eslint.config.mjs" | ||||||
|
||||||
echo "Changing JS translation function call to avoid bad minification..." | ||||||
pnpm --package=jscodeshift dlx jscodeshift -t ./bin/sync-newspack-blocks-formatter.js --extensions=js $TARGET | ||||||
|
||||||
# Add temporary PHPCS config file. | ||||||
PHPCSSTANDARDFILE="$TARGET/phpcs.tmp.xml" | ||||||
cat > "$PHPCSSTANDARDFILE" <<EOF | ||||||
<?xml version="1.0"?> | ||||||
<ruleset> | ||||||
<rule ref="Jetpack.Functions.I18n"> | ||||||
<properties> | ||||||
<property name="text_domain" value="jetpack-mu-wpcom" /> | ||||||
</properties> | ||||||
</rule> | ||||||
|
||||||
<rule ref="WordPress.Utils.I18nTextDomainFixer"> | ||||||
<properties> | ||||||
<property name="old_text_domain" type="array"> | ||||||
<element value="newspack-blocks" /> | ||||||
</property> | ||||||
<property name="new_text_domain" value="jetpack-mu-wpcom" /> | ||||||
</properties> | ||||||
</rule> | ||||||
</ruleset> | ||||||
EOF | ||||||
echo "Changing PHP textdomain to match jetpack-mu-wpcom..." | ||||||
../../../vendor/bin/phpcbf --standard=./.phpcs.dir.xml --filter=../../../vendor/automattic/jetpack-phpcs-filter/src/PhpcsFilter.php --runtime-set jetpack-filter-no-ignore -q $TARGET | ||||||
|
||||||
"$BASE"/vendor/bin/phpcbf --standard="$PHPCSSTANDARDFILE" "$TARGET" | ||||||
rm "$PHPCSSTANDARDFILE" | ||||||
|
||||||
# Add textdomain to block.json | ||||||
echo "Adding textdomain to all block.json files..." | ||||||
for block_json_file in "$TARGET"/blocks/*/block.json; do | ||||||
TMPFILE=$(mktemp) | ||||||
jq --tab '. += {"textdomain": "jetpack-mu-wpcom"}' "$block_json_file" > "$TMPFILE" | ||||||
mv "$TMPFILE" "$block_json_file" | ||||||
done | ||||||
|
||||||
echo | ||||||
|
||||||
# Warn about the need to use ENT_COMPAT. | ||||||
echo "Please ensure htmlentities and html_entity_decode use 'ENT_COMPAT'!" | ||||||
ent_compat_needed=$(grep -rino 'html_entity_decode\|htmlentities' --include="$TARGET/*.php") | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This doesn't seem to work.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Works for me:
That said, it'll only detect files directly in said folder. Either way, it should soon be a non-issue. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Upon further thought, no need to wait to remove this: bc7ac12 |
||||||
if [[ -n $ent_compat_needed ]]; then | ||||||
echo 'Detected the below instances:' | ||||||
echo "$ent_compat_needed" | ||||||
fi | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Won't this be a bunch of noise, since it doesn't actually check if Ideally we'd let OTOH, will the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
As far as I can see, it's only ever been one line to change, so I don't think it's too much noise. It's in there because the README said it was important to check for, and I figured it'd be helpful to point out places to check vs. assume the user knows what to look for. 🤷
Yeah, the synced folder will be ignored by CI, so it's a manual fix we need to be aware of (though I'm open to alternatives). That said, I wonder if this is an issue upstream too, at which point a patch there would remove the need to fix it here... 🤔 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah, if it needs fixing, the fix really should be upstreamed. The consequences of not fixing it are that behavior will differ depending on the PHP version, PHP <8.1 vs 8.1+. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Put in a PR upstream: Automattic/newspack-blocks#2010 Once that's merged, I'll remove that task from the script/README. :^) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Removed now instead of waiting: bc7ac12 |
||||||
echo | ||||||
echo Sync done. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
Significance: minor | ||
Type: changed | ||
|
||
Newspack Blocks: Updated to version 4.5.2. |
This file was deleted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you want you could source the file from the monorepo root
tools/includes/proceed_p.sh
to use our fancy function for doing prompts like this.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Any advantage of sourcing vs a simple
read
? :^)There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The
proceed_p
function handles a bunch of edge cases. It doesn't matter a whole lot though. 🤷