ladybird/.github/workflows/libjs-test262.yml
Daniel Bertalan 18ee6e457d CI: Update actions/cache to v3
This version now natively supports read-only caches (`cache/restore@v3`)
so we no longer need to pin the version to a commit in actions/cache#489
which is an unmerged PR.

The update is mostly mechanical:
- Steps with `CACHE_SKIP_SAVE` not set can use the plain `cache@v3`
  action.
- Steps with `CACHE_SKIP_SAVE` set to a constant `true` are changed to
  `cache/restore@v3`.
- Steps with saving disabled when running on a pull request are changed
  to a pair of `cache/restore@v3` and `cache/save@v3`. This setup is
  used for the large (100s of MB) ccache and Toolchain caches. As caches
  saved in pull requests can only be utilized from within the same PR,
  uploading these would only waste time and our storage quote.
  Therefore, we skip the `save` steps if running on a PR.

Co-authored-by: Cameron Youell <cameronyouell@gmail.com>
2023-05-28 05:05:09 -06:00

180 lines
7.1 KiB
YAML

name: Run test262 with LibJS and push results to the website repo
on: [push]
env:
SERENITY_SOURCE_DIR: ${{ github.workspace }}
jobs:
run_and_update_results:
runs-on: self-hosted
if: always() && github.repository == 'SerenityOS/serenity' && github.ref == 'refs/heads/master'
concurrency: libjs-test262
steps:
- name: Cleanup
run: |
echo "Cleaning up previous run"
rm -rf "${{ github.workspace }}/*"
- name: Checkout SerenityOS/serenity
uses: actions/checkout@v3
- name: Checkout linusg/libjs-test262
uses: actions/checkout@v3
with:
repository: linusg/libjs-test262
path: libjs-test262
- name: Checkout linusg/libjs-website
uses: actions/checkout@v3
with:
repository: linusg/libjs-website
path: libjs-website
- name: Checkout tc39/test262
uses: actions/checkout@v3
with:
repository: tc39/test262
path: test262
- name: Checkout tc39/test262-parser-tests
uses: actions/checkout@v3
with:
repository: tc39/test262-parser-tests
path: test262-parser-tests
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y ninja-build unzip gcc-12 g++-12 jq wget
test -e /opt/wabt-1.0.27 || (
cd /tmp
wget https://github.com/WebAssembly/wabt/releases/download/1.0.27/wabt-1.0.27-ubuntu.tar.gz
sudo tar xf wabt-1.0.27-ubuntu.tar.gz -C /opt
rm wabt-1.0.27-ubuntu.tar.gz
)
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.x'
- name: Install Python dependencies
# The setup-python action set default python to python3.x. Note that we are not using system python here.
run: |
python -m pip install --upgrade pip
pip install -r libjs-test262/requirements.txt
- name: Check versions
run: set +e; g++ --version; g++-12 --version; python --version; python3 --version; ninja --version
- name: Create build directory
run: |
mkdir -p libjs-test262/Build/TZDB
mkdir -p libjs-test262/Build/UCD
mkdir -p libjs-test262/Build/CLDR
- name: TimeZoneData cache
uses: actions/cache@v3
with:
path: ${{ github.workspace }}/libjs-test262/Build/TZDB
key: TimeZoneData-${{ hashFiles('Meta/CMake/time_zone_data.cmake') }}
- name: UnicodeData cache
uses: actions/cache@v3
with:
path: ${{ github.workspace }}/libjs-test262/Build/UCD
key: UnicodeData-${{ hashFiles('Meta/CMake/unicode_data.cmake') }}
- name: UnicodeLocale cache
uses: actions/cache@v3
with:
path: ${{ github.workspace }}/libjs-test262/Build/CLDR
key: UnicodeLocale-${{ hashFiles('Meta/CMake/locale_data.cmake') }}
- name: Build test262-runner, test-js and test-wasm
working-directory: libjs-test262
run: |
cd Build
env PATH="/opt/wabt-1.0.27/bin:$PATH" \
cmake -GNinja -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12 -DWASM_SPEC_TEST_SKIP_FORMATTING=ON -DINCLUDE_WASM_SPEC_TESTS=ON -DSERENITY_SOURCE_DIR=${{ env.SERENITY_SOURCE_DIR }} ..
ninja test262-runner test-js test-wasm
- name: Get previous results
working-directory: libjs-test262
run: |
cp -f ../libjs-website/test262/data/per-file-master.json .
cp -f ../libjs-website/test262/data/per-file-bytecode-master.json .
cp -f ../libjs-website/test262/data/per-file-bytecode-optimized-master.json .
cp -f ../libjs-website/wasm/data/per-file-master.json wasm-per-file-master.json
- name: Run test262 and test262-parser-tests
working-directory: libjs-test262
run: |
python3 run_all_and_update_results.py \
--serenity .. \
--test262 ../test262 \
--test262-parser-tests ../test262-parser-tests \
--results-json ../libjs-website/test262/data/results.json \
--per-file-output ../libjs-website/test262/data/per-file-master.json \
--per-file-bytecode-output ../libjs-website/test262/data/per-file-bytecode-master.json \
--per-file-bytecode-optimized-output ../libjs-website/test262/data/per-file-bytecode-optimized-master.json
- name: Run test-wasm
working-directory: libjs-test262/Build
run: |
_deps/lagom-build/test-wasm --per-file _deps/lagom-build/Userland/Libraries/LibWasm/Tests > ../../libjs-website/wasm/data/per-file-master.json || true
jq -nc -f /dev/stdin <<-EOF --slurpfile previous ../../libjs-website/wasm/data/results.json --slurpfile details ../../libjs-website/wasm/data/per-file-master.json > wasm-new-results.json
\$details[0] as \$details | \$previous[0] + [{
"commit_timestamp": $(git -C ../.. log -1 --format=%ct),
"run_timestamp": $(date +%s),
"versions": {
"serenity": "$(git -C ../.. rev-parse HEAD)"
},
"tests": {
"spectest": {
"duration": (\$details.duration),
"results": {
"total": (\$details.results | keys | length),
"passed": ([\$details.results | values[] | select(. == "PASSED")] | length),
"failed": ([\$details.results | values[] | select(. == "FAILED")] | length),
"skipped": ([\$details.results | values[] | select(. == "SKIPPED")] | length),
"process_error": ([\$details.results | values[] | select(. == "PROCESS_ERROR")] | length)
}
}
}
}]
EOF
mv wasm-new-results.json ../../libjs-website/wasm/data/results.json
- name: Deploy to GitHub pages
uses: JamesIves/github-pages-deploy-action@v4.4.1
with:
git-config-name: BuggieBot
git-config-email: buggiebot@serenityos.org
branch: main
repository-name: linusg/libjs-website
token: ${{ secrets.BUGGIEBOT_TOKEN }}
folder: libjs-website
- name: Compare non-bytecode
continue-on-error: true
working-directory: libjs-test262
run: ./per_file_result_diff.py -o per-file-master.json -n ../libjs-website/test262/data/per-file-master.json
- name: Compare bytecode
continue-on-error: true
working-directory: libjs-test262
run: ./per_file_result_diff.py -o per-file-bytecode-master.json -n ../libjs-website/test262/data/per-file-bytecode-master.json
- name: Compare optimized bytecode
continue-on-error: true
working-directory: libjs-test262
run: ./per_file_result_diff.py -o per-file-bytecode-optimized-master.json -n ../libjs-website/test262/data/per-file-bytecode-optimized-master.json
- name: Compare wasm
continue-on-error: true
working-directory: libjs-test262
run: ./per_file_result_diff.py -o wasm-per-file-master.json -n ../libjs-website/wasm/data/per-file-master.json