-
Notifications
You must be signed in to change notification settings - Fork 91
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
GitHub Action: runs Axe accessibility tests on changed files (#132)
* Installs pa11y-ci NPM package as dev dependency * Installs wait-on NPM package as dev dependency * Bash script generates URLs for pa11y-ci from git diff * Writes pa11y-ci configuration file * Adds GitHub Action workflow file * Adds CI/CD section to README * Don't run pipeline on push to gh-pages branch
- Loading branch information
1 parent
bb059d2
commit 74adad6
Showing
8 changed files
with
2,055 additions
and
1,434 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
name: Check accessibility of changed content | ||
|
||
on: | ||
workflow_dispatch: | ||
pull_request: | ||
|
||
permissions: | ||
contents: read | ||
pull-requests: read | ||
|
||
concurrency: | ||
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}' | ||
cancel-in-progress: true | ||
|
||
jobs: | ||
check-a11y-of-changed-content: | ||
name: Check accessibility of changed content | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
|
||
- name: Fetch gh-pages branch | ||
run: >- | ||
git fetch origin gh-pages | ||
&& git branch gh-pages origin/gh-pages; | ||
- name: Calculate URLs and output to JavaScript module | ||
run: >- | ||
chmod +x ./generate_pa11y_ci_urls_from_git_diff.sh | ||
&& ./generate_pa11y_ci_urls_from_git_diff.sh gh-pages | ||
>> ./pa11y-ci-urls.js; | ||
- name: Log contents of resulting JavaScript module | ||
run: cat ./pa11y-ci-urls.js; | ||
|
||
- name: Setup Ruby | ||
uses: ruby/setup-ruby@v1 | ||
with: | ||
ruby-version: 2.3 | ||
|
||
- name: Install gems | ||
run: bundle config path vendor/bundle && bundle install | ||
|
||
- name: Run the blog | ||
run: bundle exec jekyll serve & | ||
|
||
- name: Setup Node | ||
uses: actions/setup-node@v4 | ||
with: | ||
node-version: 20.10.x | ||
cache: npm | ||
|
||
- name: Install NPM dependencies | ||
run: npm ci | ||
|
||
- name: Setup Chrome | ||
uses: browser-actions/setup-chrome@v1 | ||
id: setup-chrome | ||
|
||
- name: Wait for blog to be running | ||
run: npx wait-on http://localhost:4000 --timeout 60000 | ||
|
||
- name: Run pa11y-ci | ||
run: CHROMIUM_BIN=$(which chrome) npx pa11y-ci |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
/// This is a configuration file automatically picked up by pa11y-ci. | ||
|
||
const relativeUrls = require('./pa11y-ci-urls'); | ||
|
||
const chromiumBin = process.env.CHROMIUM_BIN; | ||
if (!chromiumBin) { | ||
throw new Error('CHROMIUM_BIN environment variable is not set'); | ||
} | ||
|
||
const baseUrl = 'http://localhost:4000'; | ||
|
||
// Colour contrast is a known issue. If we ever fix the brand colours, this should be removed. | ||
const colourContrastRuleId = 'WCAG2AA.Principle1.Guideline1_4.1_4_3.G18.Fail'; | ||
|
||
module.exports = { | ||
defaults: { | ||
chromeLaunchConfig: { | ||
executablePath: chromiumBin, | ||
}, | ||
ignore: [ | ||
colourContrastRuleId, | ||
], | ||
}, | ||
urls: relativeUrls.map((url) => `${baseUrl}${url}`), | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
#!/usr/bin/env bash | ||
# Take in a base ref. Gets the files that have changed from the base to the HEAD. | ||
# Export the list as a CommonJS module for the pa11y-ci configuration to use. | ||
# Typical usage: generate_pa11y_ci_urls_from_git_diff.sh gh-pages > .pa11yci.js | ||
# Assumes git is installed and on the path. | ||
|
||
function generate_pa11y_ci_urls_from_git_diff { | ||
base_ref=$1 | ||
if [ -z "$base_ref" ]; then | ||
echo "No Git base ref provided. Usage: $0 <base_ref>" | ||
exit 1 | ||
fi | ||
|
||
changed_files=$(git diff --name-only $base_ref) | ||
|
||
echo -n "module.exports=["; | ||
for file in $changed_files; do | ||
if [[ $file == _posts/* ]]; then | ||
echo -n "'/$(url_of_post $file)',"; | ||
# _includes and _layouts don’t correspond to pages on the blog. If someone | ||
# changes these files, they should run a test on the whole blog. | ||
elif [[ \ | ||
$file == *.html \ | ||
&& ! ( $file == _includes/* || $file == _layouts/* ) \ | ||
]]; then | ||
echo -n "'/$(url_of_page $file)',"; | ||
fi | ||
done | ||
echo -n "];"; | ||
} | ||
|
||
function url_of_page { | ||
# Remove trailing /index.html, index.html or .html | ||
echo $1 | sed "s/\(\/\?index\)\?\.html$//"; | ||
} | ||
|
||
function url_of_post { | ||
year="\([0-9][0-9][0-9][0-9]\)" | ||
month="\([0-9][0-9]\)" | ||
day="\([0-9][0-9]\)" | ||
slug="\(.*\)" | ||
file_ext="\(html\|markdown\|md\)" | ||
|
||
echo $1 | sed "s/^_posts\/$year-$month-$day-$slug\.$file_ext$/\1\/\2\/\3\/\4.html/"; | ||
} | ||
|
||
generate_pa11y_ci_urls_from_git_diff $1 | ||
|
Oops, something went wrong.