serenity/.github/workflows/libjs-test262.yml
Andreas Kling 1d29f9081f LibJS: Remove JIT compiler
The JIT compiler was an interesting experiment, but ultimately the
security & complexity cost of doing arbitrary code generation at runtime
is far too high.

In subsequent commits, the bytecode format will change drastically, and
instead of rewriting the JIT to fit the new bytecode, this patch simply
removes the JIT instead.

Other engines, JavaScriptCore in particular, have already proven that
it's possible to handle the vast majority of contemporary web content
with an interpreter. They are currently ~5x faster than us on benchmarks
when running without a JIT. We need to catch up to them before
considering performance techniques with a heavy security cost.
2024-02-19 21:45:27 +01:00

161 lines
5.9 KiB
YAML

name: Run test262 and test-wasm
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@v4
- name: Checkout SerenityOS/libjs-test262
uses: actions/checkout@v4
with:
repository: SerenityOS/libjs-test262
path: libjs-test262
- name: Checkout SerenityOS/libjs-data
uses: actions/checkout@v4
with:
repository: SerenityOS/libjs-data
path: libjs-data
- name: Checkout tc39/test262
uses: actions/checkout@v4
with:
repository: tc39/test262
path: test262
- name: Checkout tc39/test262-parser-tests
uses: actions/checkout@v4
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@v5
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: TimeZoneData cache
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/libjs-test262/Build/caches/TZDB
key: TimeZoneData-${{ hashFiles('Meta/CMake/time_zone_data.cmake') }}
- name: UnicodeData cache
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/libjs-test262/Build/caches/UCD
key: UnicodeData-${{ hashFiles('Meta/CMake/unicode_data.cmake') }}
- name: UnicodeLocale cache
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/libjs-test262/Build/caches/CLDR
key: UnicodeLocale-${{ hashFiles('Meta/CMake/locale_data.cmake') }}
- name: Get previous results
run: |
mkdir -p old-libjs-data
cp -R libjs-data/test262 libjs-data/wasm old-libjs-data
- name: Build test262-runner, test-js and test-wasm
working-directory: libjs-test262
run: |
env PATH="/opt/wabt-1.0.27/bin:$PATH" \
cmake -GNinja -B Build \
-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 }} \
-DSERENITY_CACHE_DIR=Build/caches
ninja -C Build test262-runner test-js test-wasm
- 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-data/test262/results.json \
--per-file-output ../libjs-data/test262/per-file-master.json
- name: Run test-wasm
working-directory: libjs-test262
run: |
Build/bin/test-wasm --per-file Build/_deps/lagom-build/Userland/Libraries/LibWasm/Tests > ../libjs-data/wasm/per-file-master.json || true
jq -nc -f /dev/stdin <<-EOF --slurpfile previous ../libjs-data/wasm/results.json --slurpfile details ../libjs-data/wasm/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-data/wasm/results.json
- name: Compare test262 results
run: ./libjs-test262/per_file_result_diff.py -o old-libjs-data/test262/per-file-master.json -n libjs-data/test262/per-file-master.json
- name: Compare Wasm results
run: ./libjs-test262/per_file_result_diff.py -o old-libjs-data/wasm/per-file-master.json -n libjs-data/wasm/per-file-master.json
- name: Deploy to GitHub
uses: JamesIves/github-pages-deploy-action@v4.5.0
with:
git-config-name: BuggieBot
git-config-email: buggiebot@serenityos.org
branch: master
repository-name: SerenityOS/libjs-data
token: ${{ secrets.BUGGIEBOT_TOKEN }}
folder: libjs-data