mirror of
https://github.com/primer/css.git
synced 2024-12-26 15:43:59 +03:00
97 lines
2.9 KiB
Plaintext
97 lines
2.9 KiB
Plaintext
|
#!/bin/bash
|
||
|
|
||
|
# This workflow runs axe checks on modified doc/content/components/* or doc/content/components/* pages because those include code examples.
|
||
|
# Developers frequently copy and paste examples directly so it's important to ensure the examples are accessible.
|
||
|
# Learn about @axe-core/cli: https://github.com/dequelabs/axe-core-npm/tree/develop/packages/cli
|
||
|
|
||
|
if [ -z "$STRING_OF_PATHS_WE_CARE_ABOUT" ]; then
|
||
|
echo "The script cannot run because STRING_OF_PATHS_WE_CARE_ABOUT is not correctly set for some reason"
|
||
|
echo "Exiting..."
|
||
|
exit 1
|
||
|
else
|
||
|
array=($STRING_OF_PATHS_WE_CARE_ABOUT)
|
||
|
printf "%s\n" "${array[@]}" > temp.txt
|
||
|
fi
|
||
|
|
||
|
# Parsing paths from the filenames...
|
||
|
nav_paths=()
|
||
|
while IFS= read -r file
|
||
|
do
|
||
|
prefix="docs/content"
|
||
|
suffix=".md"
|
||
|
doc_path=${file#"$prefix"}
|
||
|
doc_path=${doc_path%"$suffix"}
|
||
|
nav_paths+=($doc_path)
|
||
|
done < temp.txt
|
||
|
rm temp.txt
|
||
|
|
||
|
# https://stackoverflow.com/a/8574392
|
||
|
containsElement () {
|
||
|
local e match="$1"
|
||
|
shift
|
||
|
for e; do [[ "$e" == "$match" ]] && return 0; done
|
||
|
return 1
|
||
|
}
|
||
|
|
||
|
# Starting point violations
|
||
|
# DO NOT ADD TO THIS LIST!
|
||
|
needs_to_be_fixed=(
|
||
|
/components/autocomplete
|
||
|
/components/avatars
|
||
|
/components/box
|
||
|
/components/buttons
|
||
|
/components/header
|
||
|
/components/markdown
|
||
|
/components/progress
|
||
|
/components/select-menu
|
||
|
/components/labels
|
||
|
/components/timeline
|
||
|
/components/toasts
|
||
|
/utilities/flexbox
|
||
|
/utilities/layout
|
||
|
)
|
||
|
|
||
|
echo "Pages that included in this starting point violations list are excluded from checks:"
|
||
|
printf '%s\n' "${needs_to_be_fixed[@]}"
|
||
|
|
||
|
doc_urls=()
|
||
|
skipped=()
|
||
|
for i in "${nav_paths[@]}";
|
||
|
do
|
||
|
if containsElement "${i//\"/}" "${needs_to_be_fixed[@]}"; then
|
||
|
skipped+=($i)
|
||
|
continue
|
||
|
else
|
||
|
doc_url="http://localhost:8000$i"
|
||
|
doc_url="${doc_url//\"/}"
|
||
|
doc_urls+=($doc_url)
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
if (( ${#skipped[@]} )); then
|
||
|
echo "==========================================================================================="
|
||
|
echo "WARNING"
|
||
|
echo ""
|
||
|
echo "Oh no! We have to skip accessibility checks on these doc pages you updated:"
|
||
|
echo ""
|
||
|
printf '%s\n' "${skipped[@]}"
|
||
|
echo ""
|
||
|
echo "because they are part of the starting point violations list."
|
||
|
echo ""
|
||
|
echo "Help us get one closer to getting rid of this list!"
|
||
|
echo "Consider addressing the accessibility issues on the examples of these pages as part of your PR ❤️"
|
||
|
echo "==========================================================================================="
|
||
|
fi
|
||
|
|
||
|
# Run axe checks only if there are pages to run it on
|
||
|
if [ ${#doc_urls[@]} -eq 0 ]; then
|
||
|
exit
|
||
|
else
|
||
|
echo "Installing axe..."
|
||
|
npm install -g @axe-core/cli
|
||
|
# https://github.com/dequelabs/axe-core-npm/tree/develop/packages/cli
|
||
|
# We exclude rules that depend on full page context.
|
||
|
echo "Running axe..."
|
||
|
axe ${doc_urls[@]} --include "iframe" --disable html-has-lang,frame-title,page-has-heading-one,region,color-contrast,landmark-unique,landmark-one-main --exit --show-errors
|
||
|
fi
|