Log custom metrics for webalmanac #254
Workflow file for this run
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
name: Tests | |
on: | |
pull_request_target: | |
branches: | |
- main | |
paths-ignore: | |
- "**/*.md" | |
workflow_dispatch: | |
jobs: | |
test: | |
name: WebPageTest Test Cases | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.event.pull_request.head.sha }} | |
fetch-depth: 0 | |
- name: Install dependencies | |
run: | | |
npm install webpagetest | |
npm install jest | |
- name: Run WebPageTest with unit tests | |
run: | | |
echo "::group::Unit tests" | |
npm test | |
echo "::endgroup::" | |
env: | |
WPT_SERVER: "webpagetest.httparchive.org" | |
WPT_API_KEY: ${{ secrets.HA_API_KEY }} | |
- name: Run WebPageTest for more websites | |
run: | | |
# Get the PR body | |
PR_BODY="$(cat <<'EOF' | |
${{ github.event.pull_request.body }} | |
EOF | |
)" | |
# Read PR body into an array, removing line breaks and carriage returns | |
declare -a lines | |
while IFS= read -r line; do | |
lines+=("${line//[$'\r\n']}") | |
done <<< "$PR_BODY" | |
# Find the index of the line after "**Test websites**:" | |
start_index=-1 | |
for ((i=0; i<${#lines[@]}; i++)); do | |
if [[ "${lines[$i]}" == *"**Test websites**:"* ]]; then | |
start_index=$((i + 1)) | |
break | |
fi | |
done | |
# If the index is valid, then parse the URLs | |
if [ $start_index -gt -1 ]; then | |
# Initialize an array for URLs | |
declare -a URLS | |
url_pattern="((http|https|ftp):\/\/[a-zA-Z0-9.-]+(\.[a-zA-Z]{2,4})(\/[a-zA-Z0-9_.-]+)*(\/?)(\?[a-zA-Z0-9_.-]+=[a-zA-Z0-9%_.-]+)*(\#?)([a-zA-Z0-9%_.-=]+)*)" | |
for ((i=start_index; i<${#lines[@]}; i++)); do | |
if [[ ${lines[$i]} =~ $url_pattern ]]; then | |
URLS+=("${BASH_REMATCH[1]}") | |
fi | |
done | |
# Run WebPageTest for each URL | |
for TEST_WEBSITE in "${URLS[@]}"; do | |
echo "::group::Custom metrics for $TEST_WEBSITE" | |
node tests/wpt.js "$TEST_WEBSITE" "$METRICS" | |
echo "::endgroup::" | |
done | |
else | |
echo "No websites found." | |
fi | |
env: | |
WPT_SERVER: "webpagetest.httparchive.org" | |
WPT_API_KEY: ${{ secrets.HA_API_KEY }} | |
- name: Add comment with results | |
uses: mshick/add-pr-comment@v2 | |
if: always() | |
with: | |
refresh-message-position: true | |
message-path: test-results.md |