fix: Apply patch for dotnet/runtime#94540 #642
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: runtime CI | |
on: | |
push: | |
branches: | |
- master | |
- release/** | |
pull_request: | |
types: [opened, synchronize, reopened, closed] | |
branches: | |
- master | |
- release/** | |
env: | |
EMSDK_VERSION: 3.1.34 # align with https://github.com/dotnet/runtime/blob/4ae9b33cc5bd291abd18d5b4353adf780f6810bc/src/mono/wasm/emscripten-version.txt | |
DOTNETRUNTIME_COMMIT: ef6283ac0a14c78d9e9fef4841545099bd7ad12b | |
DOTNETSDK_VERSION: 8.0.100-rc.1.23463.5 | |
ADDITIONAL_BUILD_ARGS: '/p:MonoEnableAssertMessages=true /p:WasmEnableES6=true /p:WasmExceptionHandling=true' | |
jobs: | |
## | |
## Build Job | |
## | |
build_windows_job: | |
if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') | |
runs-on: windows-latest | |
strategy: | |
matrix: | |
BUILD_CONFIGURATION: [Release] | |
MONO_WASM_THREADS: ['multithread', 'singlethread'] | |
MONO_WASM_SIMD: ['true', 'false'] | |
steps: | |
- name: Setup .NET SDK | |
uses: actions/[email protected] | |
with: | |
dotnet-version: ${{ env.DOTNETSDK_VERSION }} | |
- uses: actions/checkout@v2 | |
with: | |
submodules: true | |
- name: Set Variable from current Commit | |
run: | | |
Invoke-Expression "git rev-parse --short HEAD" | Out-String -NoNewLine -OutVariable CURRENT_COMMIT | |
echo "CURRENT_COMMIT=$CURRENT_COMMIT" >> $env:GITHUB_ENV | |
echo "CurrentCommit=$CURRENT_COMMIT" | |
echo "BUILD_CONFIGURATION=${{ matrix.BUILD_CONFIGURATION }}" >> $env:GITHUB_ENV | |
echo "MONO_WASM_THREADS=${{ matrix.MONO_WASM_THREADS }}" >> $env:GITHUB_ENV | |
echo "MONO_WASM_SIMD=${{ matrix.MONO_WASM_SIMD }}" >> $env:GITHUB_ENV | |
# Removed in agents since 20231001 | |
# - name: Remove ccache from chocolatey | |
# run: | | |
# # ccache installed by chocolatey in hosted agent is interfering with emscripten | |
# # Uninstalling does not work, as it's not registered in chocolatey. | |
# # So we'll delete it for now until we can find where it's actually used by | |
# # the runtime's build. | |
# del C:\ProgramData\chocolatey\bin\ccache.exe | |
- name: Clone dotnet/runtime | |
run: | | |
git clone --recursive https://github.com/dotnet/runtime -c core.longpaths=true | |
- run: ./scripts/apply-patches.ps1 | |
name: Apply uno-specific patches | |
shell: pwsh | |
- name: 'Setup Emscripten' | |
run: | | |
git clone --branch $env:EMSDK_VERSION https://github.com/emscripten-core/emsdk | |
cd emsdk | |
.\emsdk install $env:EMSDK_VERSION | |
.\emsdk activate $env:EMSDK_VERSION | |
- name: 'Setup Ninja' | |
run: | | |
choco install ninja | |
- name: Build ILLinker | |
run: | | |
cd runtime/src/tools/illink/src/linker | |
dotnet build -c Release | |
- name: Build Wasm Runtime | |
run: | | |
$env:EMSDK_PATH="$env:GITHUB_WORKSPACE\emsdk" | |
$env:MonoEnableAssertMessages=true # enable emsdk assert messages | |
cd runtime | |
.\build.cmd -arch wasm -os browser -subset mono+libs /p:RuntimeFlavor=Mono -c $env:BUILD_CONFIGURATION $env:ADDITIONAL_BUILD_ARGS /p:TestAssemblies=false "/p:MonoWasmBuildVariant=$env:MONO_WASM_THREADS" "/p:WasmEnableSIMD=$MONO_WASM_SIMD" /p:CrossBuild=false /bl:ci-artifacts\msbuild.binlog | |
# Move cross compiler to appropriate location | |
move .\artifacts\bin\mono\Browser.wasm.Release\cross .\artifacts\bin\microsoft.netcore.app.runtime.browser-wasm\$env:BUILD_CONFIGURATION\runtimes\browser-wasm\native | |
# Move src and include files to locations compatible with mono's packager | |
cd .\artifacts\bin\microsoft.netcore.app.runtime.browser-wasm\$env:BUILD_CONFIGURATION\runtimes\browser-wasm\native | |
move include\wasm\* . | |
move src\* . -Force | |
move System.Private.CoreLib.* ..\lib\net8.0 | |
- name: Copy Wasm Debugger files | |
run: | | |
$DEBUGGER_OUT="runtime\artifacts\bin\microsoft.netcore.app.runtime.browser-wasm\$env:BUILD_CONFIGURATION\dbg-proxy" | |
mkdir -p $DEBUGGER_OUT\net7.0 | |
cp -r runtime\artifacts\bin\BrowserDebugHost\wasm\$env:BUILD_CONFIGURATION\net7.0\* $DEBUGGER_OUT\net7.0 | |
mkdir -p $DEBUGGER_OUT\net8.0 | |
cp -r runtime\artifacts\bin\BrowserDebugHost\wasm\$env:BUILD_CONFIGURATION\* $DEBUGGER_OUT\net8.0 | |
Remove-Item "$DEBUGGER_OUT\net8.0\net7.0" -Recurse # remove additional required for standard net7.0 packaging | |
- name: Copy mono/linker files | |
run: | | |
$LINKER_OUT="runtime\artifacts\bin\microsoft.netcore.app.runtime.browser-wasm\$env:BUILD_CONFIGURATION\tools" | |
mkdir -p $LINKER_OUT | |
cp -r runtime\artifacts\bin\Mono.Linker\$env:BUILD_CONFIGURATION\net7.0\* $LINKER_OUT | |
- name: Copy ninja | |
run: | | |
Invoke-WebRequest https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-win.zip -OutFile ninja-win.zip | |
Expand-Archive -LiteralPath 'ninja-win.zip' -DestinationPath runtime\artifacts\bin\microsoft.netcore.app.runtime.browser-wasm\$env:BUILD_CONFIGURATION\tools | |
- name: Zip Archive | |
run: | | |
if('${{ matrix.MONO_WASM_THREADS }}' -ne 'singlethread') { | |
$archiveConfiguration="-threads"; | |
} | |
if('${{ matrix.MONO_WASM_SIMD }}' -ne 'false') { | |
$archiveConfiguration="$archiveConfiguration-simd"; | |
} | |
Invoke-Expression "Get-Location | select -ExpandProperty Path" | Out-String -NoNewLine -OutVariable Current_Path | |
$ARTIFACTS_FOLDER="$Current_Path\ci-artifacts" | |
mkdir -p $ARTIFACTS_FOLDER | |
cd runtime\artifacts\bin\microsoft.netcore.app.runtime.browser-wasm\$env:BUILD_CONFIGURATION | |
Compress-Archive -DestinationPath $ARTIFACTS_FOLDER\dotnet-runtime-wasm-windows-$env:CURRENT_COMMIT-$env:BASE_DOTNET_SHORT_COMMIT-${{ github.run_id }}-$env:BUILD_CONFIGURATION$archiveConfiguration.zip -Path * | |
- uses: actions/upload-artifact@v2 | |
if: ${{ always() }} | |
with: | |
name: wasm | |
path: ci-artifacts | |
## | |
## Build Job | |
## | |
build_linux_job: | |
if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') | |
runs-on: ubuntu-latest | |
container: 'unoplatform/wasm-build:2.3' | |
strategy: | |
matrix: | |
BUILD_CONFIGURATION: [Release] | |
MONO_WASM_THREADS: ['multithread', 'singlethread'] | |
MONO_WASM_SIMD: ['true', 'false'] | |
steps: | |
- name: Setup .NET SDK | |
uses: actions/[email protected] | |
with: | |
dotnet-version: ${{ env.DOTNETSDK_VERSION }} | |
- name: Install dependencies | |
run: | | |
set -e | |
sudo apt-get update | |
sudo apt-get install -y python3-pip locales p7zip-full zip | |
sudo apt-get install -y unzip zip python python3.7 msbuild libc6 ninja-build | |
sudo apt-get install -y cmake autoconf automake \ | |
libtool build-essential curl git lldb-6.0 liblldb-6.0-dev \ | |
libunwind8 libunwind8-dev gettext libicu-dev liblttng-ust-dev \ | |
libssl-dev libnuma-dev libkrb5-dev zlib1g-dev locales | |
sudo locale-gen en_US.UTF-8 | |
- name: Install LLVM 12 | |
run: | | |
set -e | |
printf "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-12 main" |sudo tee /etc/apt/sources.list.d/llvm-toolchain-xenial-12.list | |
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key |sudo apt-key add - | |
sudo apt update | |
sudo apt install -y llvm-12 clang-12 | |
- name: Update to Git 2.18 or later | |
run: | | |
set -e | |
sudo apt install -y software-properties-common | |
sudo add-apt-repository ppa:git-core/ppa | |
sudo apt update; | |
sudo apt install -y git | |
- name: Trust My Directory | |
run: git config --global --add safe.directory /__w/Uno.DotnetRuntime.WebAssembly/Uno.DotnetRuntime.WebAssembly | |
- uses: actions/checkout@v2 | |
with: | |
submodules: true | |
- name: Set Variable from current Commit | |
run: | | |
set -e | |
CURRENT_COMMIT=`git rev-parse --short HEAD` | |
echo "CURRENT_COMMIT=$CURRENT_COMMIT" >> $GITHUB_ENV | |
echo "CurrentCommit=$CURRENT_COMMIT" | |
echo "BUILD_CONFIGURATION=${{ matrix.BUILD_CONFIGURATION }}" >> $GITHUB_ENV | |
echo "MONO_WASM_THREADS=${{ matrix.MONO_WASM_THREADS }}" >> $GITHUB_ENV | |
echo "MONO_WASM_SIMD=${{ matrix.MONO_WASM_SIMD }}" >> $GITHUB_ENV | |
- name: Clone dotnet/runtime | |
run: | | |
git clone --recursive https://github.com/dotnet/runtime | |
- run: ./scripts/apply-patches.ps1 | |
name: Apply uno-specific patches | |
shell: pwsh | |
- name: Install cmake | |
run: | | |
set -e | |
wget -qO- https://github.com/Kitware/CMake/releases/download/v3.27.2/cmake-3.27.2-linux-x86_64.tar.gz | \ | |
sudo tar --strip-components=1 -xz -C /usr/local | |
- name: 'Setup Emscripten' | |
run: | | |
set -e | |
cd ~ | |
git clone --branch $EMSDK_VERSION https://github.com/emscripten-core/emsdk | |
cd emsdk | |
./emsdk install $EMSDK_VERSION | |
./emsdk activate $EMSDK_VERSION | |
- name: Build ILLinker | |
run: | | |
set -e | |
cd runtime/src/tools/illink/src/linker | |
dotnet build -c Release | |
- name: Build Wasm Runtime | |
run: | | |
set -e | |
export EMSDK_PATH=$HOME/emsdk | |
cd runtime | |
./build.sh -arch wasm -os browser -c $BUILD_CONFIGURATION $ADDITIONAL_BUILD_ARGS /p:TestAssemblies=false "/p:MonoWasmBuildVariant=$MONO_WASM_THREADS" "/p:WasmEnableSIMD=$MONO_WASM_SIMD" | |
# Mark AOT generation binaries executable | |
chmod +x ./artifacts/bin/mono/browser.wasm.Release/cross/* | |
# Move cross compiler to appropriate location | |
mv ./artifacts/bin/mono/browser.wasm.Release/cross ./artifacts/bin/microsoft.netcore.app.runtime.browser-wasm/$BUILD_CONFIGURATION/runtimes/browser-wasm/native | |
# Move src and include files to locations compatible with mono's packager | |
cd ./artifacts/bin/microsoft.netcore.app.runtime.browser-wasm/$BUILD_CONFIGURATION/runtimes/browser-wasm/native | |
mv include/wasm/* . | |
mv src/* . | |
mv System.Private.CoreLib.* ../lib/net8.0 | |
- name: Copy Wasm Debugger files | |
run: | | |
DEBUGGER_OUT=runtime/artifacts/bin/microsoft.netcore.app.runtime.browser-wasm/$BUILD_CONFIGURATION/dbg-proxy | |
mkdir -p $DEBUGGER_OUT/net7.0 | |
cp -r runtime/artifacts/bin/BrowserDebugHost/wasm/$BUILD_CONFIGURATION/net7.0/* $DEBUGGER_OUT/net7.0 | |
mkdir -p $DEBUGGER_OUT/net8.0 | |
cp -r runtime/artifacts/bin/BrowserDebugHost/wasm/$BUILD_CONFIGURATION/* $DEBUGGER_OUT/net8.0 | |
rm -fr $DEBUGGER_OUT/net8.0/net7.0 # remove additional required for standard net7.0 packaging | |
- name: Copy mono/linker files | |
run: | | |
LINKER_OUT=runtime/artifacts/bin/microsoft.netcore.app.runtime.browser-wasm/$BUILD_CONFIGURATION/tools | |
mkdir -p $LINKER_OUT | |
cp -r runtime/artifacts/bin/Mono.Linker/$BUILD_CONFIGURATION/net7.0/* $LINKER_OUT | |
- name: Zip Archive | |
run: | | |
if [ '${{ matrix.MONO_WASM_THREADS }}' != 'singlethread' ]; then | |
ARCHIVE_CONFIGURATION="-threads"; | |
fi | |
if [ '${{ matrix.MONO_WASM_SIMD }}' != 'false' ]; then | |
ARCHIVE_CONFIGURATION="$ARCHIVE_CONFIGURATION-simd"; | |
fi | |
ARTIFACTS_FOLDER=`pwd`/ci-artifacts | |
mkdir -p $ARTIFACTS_FOLDER | |
cd runtime/artifacts/bin/microsoft.netcore.app.runtime.browser-wasm/$BUILD_CONFIGURATION | |
/usr/bin/zip -r $ARTIFACTS_FOLDER/dotnet-runtime-wasm-linux-$CURRENT_COMMIT-$BASE_DOTNET_SHORT_COMMIT-$GITHUB_RUN_ID-$BUILD_CONFIGURATION$ARCHIVE_CONFIGURATION.zip * | |
- uses: actions/upload-artifact@v2 | |
if: ${{ always() }} | |
with: | |
name: wasm | |
path: ci-artifacts | |
## | |
## Release Job | |
## | |
release_job: | |
if: github.event_name == 'push' | |
needs: [build_linux_job,build_windows_job] | |
runs-on: ubuntu-latest | |
environment: | |
name: Release | |
steps: | |
- name: Download package | |
uses: actions/download-artifact@v2 | |
with: | |
name: wasm | |
- uses: azure/login@v1 | |
with: | |
creds: ${{ secrets.AZURE_STORAGE_CREDENTIALS }} | |
- name: Upload to blob storage | |
uses: azure/CLI@v1 | |
with: | |
inlineScript: | | |
az storage blob upload-batch --account-name unowasmbootstrap -d 'runtime' -s . | |