Skip to content

Daily WPT report

Daily WPT report #396

Workflow file for this run

# This workflow runs every night and tests various releases of Node.js
# (latest nightly, current, and two latest LTS release lines) against the
# `epochs/daily` branch of WPT.
name: Daily WPT report
on:
workflow_dispatch:
schedule:
# This is 20 minutes after `epochs/daily` branch is triggered to be created
# in WPT repo.
# https://github.com/web-platform-tests/wpt/blob/master/.github/workflows/epochs.yml
- cron: 30 0 * * *
env:
PYTHON_VERSION: '3.14'
permissions:
contents: read
jobs:
collect-versions:
if: github.repository == 'nodejs/node' || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-slim
outputs:
matrix: ${{ steps.query.outputs.matrix }}
steps:
- id: query
run: |
matrix=$(curl -s https://raw.githubusercontent.com/nodejs/Release/refs/heads/main/schedule.json | jq -c --arg now "$(date +%Y-%m-%d)" '[with_entries(select(.value.end > $now and .value.start < $now)) | keys[] | ltrimstr("v") | tonumber] + ["latest-nightly"]')
echo "matrix=$matrix" >> "$GITHUB_OUTPUT"
report:
needs:
- collect-versions
strategy:
matrix:
node-version: ${{ fromJSON(needs.collect-versions.outputs.matrix) }}
fail-fast: false
runs-on: ubuntu-24.04-arm
steps:
- name: Set up Python ${{ env.PYTHON_VERSION }}
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: ${{ env.PYTHON_VERSION }}
allow-prereleases: true
- name: Environment Information
run: npx envinfo
# install a version and checkout
- name: Get latest nightly
if: matrix.node-version == 'latest-nightly'
run: echo "NIGHTLY=$(curl -s https://nodejs.org/download/nightly/index.json | jq -r '[.[] | select(.files[] | contains("linux-arm64"))][0].version')" >> $GITHUB_ENV
- name: Install Node.js
id: setup-node
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version: ${{ env.NIGHTLY || matrix.node-version }}
check-latest: true
- name: Get nightly ref
if: contains(matrix.node-version, 'nightly')
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
SHORT_SHA=$(node -p 'process.version.split(/-nightly\d{8}/)[1]')
echo "NIGHTLY_REF=$(gh api /repos/nodejs/node/commits/$SHORT_SHA --jq '.sha')" >> $GITHUB_ENV
- name: Checkout ${{ steps.setup-node.outputs.node-version }}
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
ref: ${{ env.NIGHTLY_REF || steps.setup-node.outputs.node-version }}
- name: Set env.NODE
run: echo "NODE=$(which node)" >> $GITHUB_ENV
- name: Set env.WPT_REVISION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: echo "WPT_REVISION=$(gh api /repos/web-platform-tests/wpt/branches/epochs/daily --jq '.commit.sha')" >> $GITHUB_ENV
# replace checked out WPT with the synchronized branch
- name: Remove stale WPT
run: rm -rf wpt
working-directory: test/fixtures
- name: Checkout epochs/daily WPT
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
repository: web-platform-tests/wpt
persist-credentials: false
path: test/fixtures/wpt
clean: false
ref: ${{ env.WPT_REVISION }}
# Node.js WPT Runner
- name: Run WPT and generate report
run: |
make test-wpt-report || true
if [ -e out/wpt/wptreport.json ]; then
echo "WPT_REPORT=$(pwd)/out/wpt/wptreport.json" >> $GITHUB_ENV
fi
# undici WPT Runner
- name: Set env.UNDICI_VERSION
if: ${{ env.WPT_REPORT != '' }}
run: |
UNDICI_VERSION=$(jq -r '.version' < deps/undici/src/package.json)
echo "UNDICI_VERSION=v$UNDICI_VERSION" >> $GITHUB_ENV
if [ "${UNDICI_VERSION%%.*}" -ge 7 ]; then
echo "UNDICI_WPT=current" >> $GITHUB_ENV
else
echo "UNDICI_WPT=legacy" >> $GITHUB_ENV
fi
# Checkout composite actions from the default branch since the
# version-specific checkout above overwrites .github/actions/
- name: Checkout undici WPT actions
if: ${{ env.WPT_REPORT != '' }}
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
sparse-checkout: |
.github/actions/undici-wpt-current
.github/actions/undici-wpt-legacy
sparse-checkout-cone-mode: false
persist-credentials: false
path: _wpt_actions
clean: false
- name: Place undici WPT actions
if: ${{ env.WPT_REPORT != '' }}
run: |
mkdir -p .github/actions
cp -r _wpt_actions/.github/actions/undici-wpt-* .github/actions/
- name: Run undici WPT (current)
if: ${{ env.UNDICI_WPT == 'current' }}
uses: ./.github/actions/undici-wpt-current
with:
undici-version: ${{ env.UNDICI_VERSION }}
wpt-report: ${{ env.WPT_REPORT }}
- name: Run undici WPT (legacy)
if: ${{ env.UNDICI_WPT == 'legacy' }}
uses: ./.github/actions/undici-wpt-legacy
with:
undici-version: ${{ env.UNDICI_VERSION }}
wpt-report: ${{ env.WPT_REPORT }}
# Upload artifacts
- name: Clone report for upload
if: ${{ env.WPT_REPORT != '' }}
working-directory: out/wpt
run: cp wptreport.json wptreport-${{ steps.setup-node.outputs.node-version }}.json
- name: Upload GitHub Actions artifact
if: ${{ env.WPT_REPORT != '' }}
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
with:
path: out/wpt/wptreport-*.json
name: WPT Report for ${{ steps.setup-node.outputs.node-version }}
if-no-files-found: error
# - name: Upload WPT Report to wpt.fyi API
# if: ${{ env.WPT_REPORT != '' }}
# env:
# WPT_FYI_USERNAME: ${{ vars.WPT_FYI_USERNAME }}
# WPT_FYI_PASSWORD: ${{ secrets.WPT_FYI_PASSWORD }}
# working-directory: out/wpt
# run: |
# gzip wptreport.json
# echo "## Node.js ${{ steps.setup-node.outputs.node-version }}" >> $GITHUB_STEP_SUMMARY
# echo "" >> $GITHUB_STEP_SUMMARY
# echo "WPT Revision: [\`${WPT_REVISION:0:7}\`](https://github.com/web-platform-tests/wpt/commits/$WPT_REVISION)" >> $GITHUB_STEP_SUMMARY
# for WPT_FYI_ENDPOINT in "https://wpt.fyi/api/results/upload" "https://staging.wpt.fyi/api/results/upload"
# do
# response=$(curl -sS \
# -u "$WPT_FYI_USERNAME:$WPT_FYI_PASSWORD" \
# -F "result_file=@wptreport.json.gz" \
# -F "labels=master" \
# $WPT_FYI_ENDPOINT)
# if [[ $response =~ Task\ ([0-9]+)\ added\ to\ queue ]]; then
# run_id=${BASH_REMATCH[1]}
# origin=${WPT_FYI_ENDPOINT%/api/results/upload}
# echo "" >> $GITHUB_STEP_SUMMARY
# echo "Run ID [\`$run_id\`]($origin/api/runs/$run_id) added to the processor queue at ${origin:8}" >> $GITHUB_STEP_SUMMARY
# echo "- [View on the ${origin:8} dashboard]($origin/results?run_id=$run_id)" >> $GITHUB_STEP_SUMMARY
# fi
# done