test suite cleanup + updates #990
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: continuous-integration | |
on: [push, pull_request] | |
jobs: | |
linux-os: | |
runs-on: ubuntu-22.04 | |
permissions: | |
checks: write | |
pull-requests: write | |
env: | |
ALSOFT_CONF: love2d-${{ github.sha }}/testing/resources/alsoft.conf | |
DISPLAY: :99 | |
steps: | |
- name: Update APT | |
run: sudo apt-get update | |
- name: Install Dependencies | |
run: | | |
sudo apt-get install --assume-yes build-essential git make cmake autoconf automake \ | |
libtool pkg-config libasound2-dev libpulse-dev libaudio-dev \ | |
libjack-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev \ | |
libxfixes-dev libxi-dev libxinerama-dev libxxf86vm-dev libxss-dev \ | |
libgl1-mesa-dev libdbus-1-dev libudev-dev libgles2-mesa-dev \ | |
libegl1-mesa-dev libibus-1.0-dev fcitx-libs-dev libsamplerate0-dev \ | |
libsndio-dev libwayland-dev libxkbcommon-dev libdrm-dev libgbm-dev \ | |
libcurl4-openssl-dev libfuse2 wmctrl openbox mesa-vulkan-drivers \ | |
libvulkan1 vulkan-tools vulkan-validationlayers | |
- name: Checkout love-appimage-source | |
uses: actions/checkout@v3 | |
with: | |
repository: love2d/love-appimage-source | |
ref: 12.x | |
- name: Checkout LÖVE | |
uses: actions/checkout@v3 | |
with: | |
path: love2d-${{ github.sha }} | |
- name: Get Dependencies for AppImage | |
shell: python | |
env: | |
LOVE_BRANCH: ${{ github.sha }} | |
run: | | |
import os | |
for i in range(250): | |
if os.system(f"make getdeps LOVE_BRANCH={os.environ['LOVE_BRANCH']}") == 0: | |
raise SystemExit(0) | |
raise Exception("make getdeps failed") | |
- name: Build AppImage | |
run: make LOVE_BRANCH=${{ github.sha }} | |
- name: Print LuaJIT branch | |
run: git -C LuaJIT-v2.1 branch -v | |
# start xvfb for test running | |
- name: Start xvfb and openbox | |
run: | | |
echo "Starting XVFB on $DISPLAY" | |
Xvfb $DISPLAY -screen 0, 360x240x24 & | |
echo "XVFBPID=$!" >> $GITHUB_ENV | |
# wait for xvfb to startup (3s is the same amount xvfb-run waits by default) | |
sleep 3 | |
openbox & | |
echo "OPENBOXPID=$!" >> $GITHUB_ENV | |
# linux opengl tests | |
- name: Run Test Suite (opengl) | |
run: | | |
chmod a+x love-${{ github.sha }}.AppImage | |
./love-${{ github.sha }}.AppImage love2d-${{ github.sha }}/testing/main.lua --runAllTests --isRunner | |
- name: Love Test Report (opengl) | |
id: report1 | |
uses: ellraiser/love-test-report@main | |
with: | |
name: Love Testsuite Linux | |
title: test-report-linux-opengl | |
path: love2d-${{ github.sha }}/testing/output/lovetest_runAllTests.md | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Zip Test Output (opengl) | |
run: | | |
7z a -tzip test-output-linux-opengl.zip love2d-${{ github.sha }}/testing/output/ | |
- name: Artifact Test Output (opengl) | |
uses: actions/upload-artifact@v3 | |
with: | |
name: test-output-linux-opengl-${{ steps.report1.outputs.conclusion }} | |
path: test-output-linux-opengl.zip | |
# linux opengles tests | |
- name: Run Test Suite (opengles) | |
run: | | |
export LOVE_GRAPHICS_USE_OPENGLES=1 | |
./love-${{ github.sha }}.AppImage love2d-${{ github.sha }}/testing/main.lua --runAllTests --isRunner | |
- name: Love Test Report (opengles) | |
uses: ellraiser/love-test-report@main | |
id: report2 | |
with: | |
name: Love Testsuite Linux | |
title: test-report-linux-opengles | |
path: love2d-${{ github.sha }}/testing/output/lovetest_runAllTests.md | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Zip Test Output (opengles) | |
run: | | |
7z a -tzip test-output-linux-opengles.zip love2d-${{ github.sha }}/testing/output/ | |
- name: Artifact Test Output (opengles) | |
uses: actions/upload-artifact@v3 | |
with: | |
name: test-output-linux-opengles-${{ steps.report2.outputs.conclusion }} | |
path: test-output-linux-opengles.zip | |
# # linux vulkan tests | |
# - name: Run Test Suite (vulkan) | |
# run: | | |
# export LOVE_GRAPHICS_DEBUG=1 | |
# ./love-${{ github.sha }}.AppImage love2d-${{ github.sha }}/testing/main.lua --runAllTests --isRunner --renderers vulkan | |
# - name: Love Test Report (vulkan) | |
# uses: ellraiser/love-test-report@main | |
# with: | |
# name: Love Testsuite Linux | |
# title: test-report-linux-vulkan | |
# path: love2d-${{ github.sha }}/testing/output/lovetest_runAllTests.md | |
# - name: Zip Test Output (vulkan) | |
# run: | | |
# 7z a -tzip test-output-linux-vulkan.zip love2d-${{ github.sha }}/testing/output/ | |
# - name: Artifact Test Output (vulkan) | |
# uses: actions/upload-artifact@v3 | |
# with: | |
# name: test-output-linux-vulkan | |
# path: test-output-linux-vulkan.zip | |
- name: Stop xvfb and openbox | |
# should always stop xvfb and openbox even if other steps failed | |
if: always() | |
run: | | |
kill $XVFBPID | |
kill $OPENBOXPID | |
- name: Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: love-linux-x86_64.AppImage | |
path: love-${{ github.sha }}.AppImage | |
- name: Artifact Debug Symbols | |
uses: actions/upload-artifact@v3 | |
with: | |
name: love-x86_64-AppImage-debug | |
path: love-${{ github.sha }}.AppImage-debug.tar.gz | |
- name: Check Tests Passing | |
if: steps.report1.outputs.conclusion == 'failure' || steps.report2.outputs.conclusion == 'failure' | |
run: | | |
echo "${{ steps.report1.outputs.failed }} opengl tests failed" | |
echo "${{ steps.report2.outputs.failed }} opengles tests failed" | |
exit 1 | |
windows-os: | |
runs-on: windows-latest | |
permissions: | |
checks: write | |
pull-requests: write | |
env: | |
ALSOFT_CONF: megasource/libs/love/testing/resources/alsoft.conf | |
VK_ICD_FILENAMES: ${{ github.workspace }}\mesa\x64\lvp_icd.x86_64.json | |
VULKAN_SDK: C:/VulkanSDK/1.3.231.1 | |
strategy: | |
matrix: | |
platform: [Win32, x64, ARM64] | |
install: [compat, modern] | |
exclude: | |
- platform: ARM64 | |
install: compat | |
defaults: | |
run: | |
shell: cmd | |
continue-on-error: ${{ matrix.platform == 'ARM64' }} | |
steps: | |
- name: Define Variables | |
id: vars | |
run: | | |
rem Compat/Modern switch | |
if "${{ matrix.install }}" == "compat" ( | |
echo moredef=-DLOVE_INSTALL_UCRT=ON>> "%GITHUB_OUTPUT%" | |
echo compatname=-compat>> "%GITHUB_OUTPUT%" | |
) else ( | |
echo moredef=>> "%GITHUB_OUTPUT%" | |
echo compatname=>> "%GITHUB_OUTPUT%" | |
) | |
rem JIT Modules | |
if "${{ matrix.platform }}-${{ matrix.install }}" == "x64-modern" ( | |
(echo jitmodules=1)>> "%GITHUB_OUTPUT%" | |
) else ( | |
(echo jitmodules=0)>> "%GITHUB_OUTPUT%" | |
) | |
rem Architecture-Specific Switch | |
goto ${{ matrix.platform }} | |
exit /b 1 | |
:Win32 | |
(echo arch=x86)>> "%GITHUB_OUTPUT%" | |
(echo angle=0)>> "%GITHUB_OUTPUT%" | |
echo nofiles=warn>> "%GITHUB_OUTPUT%" | |
exit /b 0 | |
:x64 | |
(echo arch=x64)>> "%GITHUB_OUTPUT%" | |
(echo angle=0)>> "%GITHUB_OUTPUT%" | |
echo nofiles=warn>> "%GITHUB_OUTPUT%" | |
exit /b 0 | |
:ARM64 | |
(echo arch=arm64)>> "%GITHUB_OUTPUT%" | |
(echo angle=1)>> "%GITHUB_OUTPUT%" | |
echo nofiles=ignore>> "%GITHUB_OUTPUT%" | |
echo moredef=-DLOVE_EXTRA_DLLS=%CD%\angle\libEGL.dll;%CD%\angle\libGLESv2.dll>> "%GITHUB_OUTPUT%" | |
exit /b 0 | |
- name: Download Windows SDK Setup 10.0.20348 | |
run: curl -Lo winsdksetup.exe https://go.microsoft.com/fwlink/?linkid=2164145 | |
- name: Install Debugging Tools for Windows | |
id: windbg | |
run: | | |
setlocal enabledelayedexpansion | |
start /WAIT %CD%\winsdksetup.exe /features OptionId.WindowsDesktopDebuggers /q /log %CD%\log.txt | |
echo ERRORLEVEL=!ERRORLEVEL! >> %GITHUB_OUTPUT% | |
- name: Print Debugging Tools Install Log | |
if: always() | |
run: | | |
type log.txt | |
exit /b ${{ steps.windbg.outputs.ERRORLEVEL }} | |
- name: Setup Python 3.10 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: "3.10" | |
- name: Download source_index.py | |
run: curl -Lo source_index.py https://gist.github.com/MikuAuahDark/d9c099f5714e09a765496471c2827a55/raw/df34956052035f3473c5f01861dfb53930d06843/source_index.py | |
- name: Clone Megasource | |
uses: actions/checkout@v3 | |
with: | |
path: megasource | |
repository: love2d/megasource | |
ref: 12.x | |
- id: megasource | |
name: Get Megasource Commit SHA | |
shell: python | |
run: | | |
import os | |
import subprocess | |
result = subprocess.run("git -C megasource rev-parse HEAD".split(), check=True, capture_output=True, encoding="UTF-8") | |
commit = result.stdout.split()[0] | |
with open(os.environ["GITHUB_OUTPUT"], "w", encoding="UTF-8") as f: f.write(f"commit={commit}") | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
path: megasource/libs/love | |
- name: Download ANGLE | |
uses: robinraju/release-downloader@v1.7 | |
if: steps.vars.outputs.angle == '1' | |
with: | |
repository: MikuAuahDark/angle-winbuild | |
tag: cr_5249 | |
fileName: angle-win-${{ steps.vars.outputs.arch }}.zip | |
tarBall: false | |
zipBall: false | |
out-file-path: angle | |
- name: Extract ANGLE | |
if: steps.vars.outputs.angle == '1' | |
working-directory: angle | |
run: 7z x angle-win-${{ steps.vars.outputs.arch }}.zip | |
- name: Delete Strawbery Perl | |
# https://github.com/actions/runner-images/issues/6627 | |
# In particular, this is not pretty, but even CMAKE_IGNORE_PREFIX_PATH | |
# cannot help in this case. Delete the whole folder! | |
run: | | |
rmdir /s /q C:\Strawberry | |
exit /b 0 | |
- name: Configure | |
env: | |
CFLAGS: /Zi | |
CXXFLAGS: /Zi | |
LDFLAGS: /DEBUG:FULL /OPT:REF /OPT:ICF | |
run: cmake -Bbuild -Smegasource -T v142 -A ${{ matrix.platform }} --install-prefix %CD%\install -DCMAKE_PDB_OUTPUT_DIRECTORY=%CD%\pdb ${{ steps.vars.outputs.moredef }} | |
- name: Install | |
run: cmake --build build --target PACKAGE --config Release -j2 | |
- name: Copy LuaJIT lua51.pdb | |
run: | | |
copy /Y build\libs\LuaJIT\src\lua51.pdb pdb\Release\lua51.pdb | |
exit /b 0 | |
- name: Add srcsrv to PATH | |
run: | | |
echo C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\srcsrv>>%GITHUB_PATH% | |
- name: Embed Source Index into PDBs | |
run: | | |
python source_index.py ^ | |
--source %CD%\megasource\libs\love https://raw.githubusercontent.com/${{ github.repository }}/${{ github.sha }} ^ | |
--source %CD%\megasource https://raw.githubusercontent.com/love2d/megasource/${{ steps.megasource.outputs.commit }} ^ | |
--source %CD%\build\libs\LuaJIT https://raw.githubusercontent.com/love2d/megasource/${{ steps.megasource.outputs.commit }}/libs/LuaJIT ^ | |
pdb\Release\*.pdb | |
- name: Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: love-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }} | |
path: | | |
build/*.zip | |
build/*.exe | |
if-no-files-found: ${{ steps.vars.outputs.nofiles }} | |
- name: Artifact JIT Modules | |
if: steps.vars.outputs.jitmodules == '1' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: love-windows-jitmodules | |
path: build/libs/LuaJIT/src/jit/*.lua | |
- name: Artifact PDB | |
uses: actions/upload-artifact@v3 | |
with: | |
name: love-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-dbg | |
path: pdb/Release/*.pdb | |
# install mesa for graphic tests | |
- name: Install Mesa | |
if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat' | |
run: | | |
curl -L --output mesa.7z --url https://github.com/pal1000/mesa-dist-win/releases/download/23.2.1/mesa3d-23.2.1-release-msvc.7z | |
7z x mesa.7z -o* | |
powershell.exe mesa\systemwidedeploy.cmd 1 | |
# build love to use for the tests | |
- name: Build Test Exe | |
if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat' | |
run: cmake --build build --config Release --target install | |
# windows opengl tests | |
- name: Run Tests (opengl) | |
if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat' | |
run: | | |
echo 'check dir' | |
ls | |
powershell.exe ./install/lovec.exe ./megasource/libs/love/testing/main.lua --runAllTests --isRunner | |
- name: Love Test Report (opengl) | |
id: report1 | |
if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat' | |
uses: ellraiser/love-test-report@main | |
with: | |
name: Love Testsuite Windows ${{ steps.vars.outputs.arch }} ${{ steps.vars.outputs.compatname }} (opengl) | |
title: test-report-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-opengl | |
path: megasource/libs/love/testing/output/lovetest_runAllTests.md | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Zip Test Output (opengl) | |
if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat' | |
run: | | |
7z a -tzip test-output-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-opengl.zip megasource/libs/love/testing/output/ | |
- name: Artifact Test Output (opengl) | |
if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: test-output-windows-${{ steps.vars.outputs.arch }}-opengl-${{ steps.report1.outputs.conclusion }} | |
path: test-output-windows-${{ steps.vars.outputs.arch }}-opengl.zip | |
# windows opengles tests | |
- name: Run Tests (opengles) | |
if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat' | |
run: | | |
$ENV:LOVE_GRAPHICS_USE_OPENGLES=1 | |
powershell.exe ./install/lovec.exe ./megasource/libs/love/testing/main.lua --runAllTests --isRunner | |
- name: Love Test Report (opengles) | |
id: report2 | |
if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat' | |
uses: ellraiser/love-test-report@main | |
with: | |
name: Love Testsuite Windows ${{ steps.vars.outputs.arch }} ${{ steps.vars.outputs.compatname }} (opengles) | |
title: test-report-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-opengles | |
path: megasource/libs/love/testing/output/lovetest_runAllTests.md | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Zip Test Output (opengles) | |
if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat' | |
run: | | |
7z a -tzip test-output-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-opengles.zip megasource/libs/love/testing/output/ | |
- name: Artifact Test Output (opengles) | |
if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: test-output-windows-${{ steps.vars.outputs.arch }}-opengles-${{ steps.report2.outputs.conclusion }} | |
path: test-output-windows-${{ steps.vars.outputs.arch }}-opengles.zip | |
- name: Check Tests Passing | |
if: steps.report1.outputs.conclusion == 'failure' || steps.report2.outputs.conclusion == 'failure' | |
run: | | |
echo "${{ steps.report1.outputs.failed }} opengl tests failed" | |
echo "${{ steps.report2.outputs.failed }} opengles tests failed" | |
exit 1 | |
# # install vulkan | |
# - name: Install Vulkan | |
# if: steps.vars.outputs.arch != 'ARM64' | |
# run: | | |
# curl -L --show-error --output VulkanSDK.exe https://sdk.lunarg.com/sdk/download/1.3.231.1/windows/VulkanSDK-1.3.231.1-Installer.exe | |
# ./VulkanSDK.exe --root C:/VulkanSDK/1.3.231.1 --accept-licenses --default-answer --confirm-command install com.lunarg.vulkan.core com.lunarg.vulkan.vma | |
# curl -L --show-error --output vulkan-runtime.zip https://sdk.lunarg.com/sdk/download/1.3.231.1/windows/vulkan-runtime-components.zip | |
# 7z e vulkan-runtime.zip -o"C:/VulkanSDK/1.3.231.1/runtime/x64" */x64 | |
# copy "C:/VulkanSDK/1.3.231.1/runtime/x64/vulkan-1.dll" "mesa/x64" | |
# copy "C:/VulkanSDK/1.3.231.1/runtime/x64/vulkan-1.dll" "C:/Windows/System32" | |
# copy "C:/VulkanSDK/1.3.231.1/runtime/x64/vulkan-1.dll" "love-12.0-win64/love-12.0-win64" | |
# reg add HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\Vulkan\Drivers /v "${{ github.workspace }}\mesa\x64\lvp_icd.x86_64.json" /t REG_DWORD /d 0 | |
# powershell.exe C:/VulkanSDK/1.3.231.1/runtime/x64/vulkaninfo.exe --summary | |
# # windows vulkan tests | |
# - name: Run Tests (vulkan) | |
# if: steps.vars.outputs.arch != 'ARM64' | |
# run: | | |
# $ENV:LOVE_GRAPHICS_DEBUG=1 | |
# powershell.exe ./install/lovec.exe ./megasource/libs/love/testing/main.lua --runAllTests --isRunner --renderers vulkan | |
# - name: Love Test Report (vulkan) | |
# if: steps.vars.outputs.arch != 'ARM64' | |
# uses: ellraiser/love-test-report@main | |
# with: | |
# name: Love Testsuite Windows ${{ steps.vars.outputs.arch }} ${{ steps.vars.outputs.compatname }} (vulkan) | |
# title: test-report-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-vulkan | |
# path: megasource/libs/love/testing/output/lovetest_runAllTests.md | |
# - name: Zip Test Output (vulkan) | |
# if: steps.vars.outputs.arch != 'ARM64' | |
# run: | | |
# 7z a -tzip test-output-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-vulkan.zip megasource/libs/love/testing/output/ | |
# - name: Artifact Test Output (vulkan) | |
# if: steps.vars.outputs.arch != 'ARM64' | |
# uses: actions/upload-artifact@v3 | |
# with: | |
# name: test-output-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-vulkan | |
# path: test-output-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-vulkan.zip | |
macOS: | |
runs-on: macos-latest | |
permissions: | |
checks: write | |
pull-requests: write | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Clone Dependencies | |
uses: actions/checkout@v3 | |
with: | |
path: apple-dependencies | |
repository: love2d/love-apple-dependencies | |
ref: 12.x | |
- name: Move Dependencies | |
run: | |
mv apple-dependencies/macOS/Frameworks platform/xcode/macosx | |
- name: Build | |
run: | |
xcodebuild clean archive -project platform/xcode/love.xcodeproj -scheme love-macosx -configuration Release -archivePath love-macos.xcarchive | |
- name: Export Archive | |
run: | |
xcodebuild -exportArchive -archivePath love-macos.xcarchive -exportPath love-macos -exportOptionsPlist platform/xcode/macosx/macos-copy-app.plist | |
- name: Zip Archive | |
run: | |
ditto -c -k --sequesterRsrc --keepParent love-macos/love.app love-macos.zip | |
- name: Artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: love-macos | |
path: love-macos.zip | |
# macos opengl tests (metal not supported on runners) | |
- name: Run Test Suite | |
run: | | |
ls | |
love-macos/love.app/Contents/MacOS/love ./testing/main.lua --runAllTests --isRunner | |
- name: Love Test Report | |
id: report1 | |
uses: ellraiser/love-test-report@main | |
with: | |
name: Love Testsuite MacOS | |
title: test-report-macos | |
path: testing/output/lovetest_runAllTests.md | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Zip Test Output | |
run: | | |
7z a -tzip test-output-macos-opengl.zip ./testing/output/ | |
- name: Artifact Test Output | |
uses: actions/upload-artifact@v3 | |
with: | |
name: test-output-macos-opengl-${{ steps.report1.outputs.conclusion }} | |
path: test-output-macos-opengl.zip | |
- name: Check Tests Passing | |
if: steps.report1.outputs.conclusion == 'failure' | |
run: | | |
echo "${{ steps.report1.outputs.failed }} opengl tests failed" | |
exit 1 | |
iOS-Simulator: | |
runs-on: macos-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Clone Dependencies | |
uses: actions/checkout@v3 | |
with: | |
path: apple-dependencies | |
repository: love2d/love-apple-dependencies | |
ref: 12.x | |
- name: Move Dependencies | |
run: | | |
mv apple-dependencies/iOS/libraries platform/xcode/ios | |
- name: Build | |
run: | |
xcodebuild -project platform/xcode/love.xcodeproj -scheme love-ios -configuration Release -destination 'platform=iOS Simulator,name=iPhone 11' |