ci: Use python to extract JS snippets from style guide

The job that lints code snippets in the style guide only runs
when either the documentation or the linting rules are changed.

Because of that it went unnoticed that the awk tool it uses to
extract the snippets is no longer available since the CI image
was rebased to F42.

Given that awk is awkward anyway, use the opportunity to rewrite the
snippet extraction in python instead of adding awk back to the image.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3694>
This commit is contained in:
Florian Müllner 2025-04-13 03:07:16 +02:00 committed by Bruce Leidl
parent 567eb6e0d0
commit a7410d82ac

View File

@ -6,36 +6,36 @@ trap "rm -rf $OUTDIR" EXIT
# Turn ```javascript``` code snippets in the
# style guide into .js files in $OUTDIR
awk --assign dir=$OUTDIR -- '
BEGIN {
do_print = 0;
cur = 0;
}
cat <<'EOF' | python3 - docs/js-coding-style.md $OUTDIR
import sys
import re
# end of code snippet
/```$/ {
do_print = 0;
cur++;
}
def extract_js_snippets(input_file, output_dir):
with open(input_file, 'r') as file:
content = file.read()
do_print {
# remove one level of indent
sub(" ","")
# Find all JavaScript code blocks using regex
js_blocks = re.findall(r'```javascript\n(.*?)\n?```', content, flags=re.DOTALL)
# the following are class snippets, turn them
# into functions to not confuse eslint
sub("moveActor","function moveActor")
sub("desaturateActor","function desaturateActor")
for i, (match) in enumerate(js_blocks):
js_code = match
# finally, append to the currently generated .js file
print >> dir "/" cur ".js";
}
# Remove one level of indent
js_code = re.sub(r'^ {4}', '', js_code, flags=re.MULTILINE)
# start of code snippet
/```javascript$/ {
do_print = 1;
}
' docs/js-coding-style.md
# The following are class snippets, turn them
# into functions to not confuse eslint
js_code = re.sub(r'^moveActor', 'function moveActor', js_code)
js_code = re.sub(r'^desaturateActor', 'function desaturateActor', js_code)
# Finally, create a .js file in the output directory
output_filename = f'{output_dir}/{i}.js'
with open(output_filename, 'w') as out_file:
out_file.write(f'{js_code}\n')
input_file, output_dir = sys.argv[1:]
extract_js_snippets(input_file, output_dir)
EOF
eslint \
--rule 'no-undef: off' \