Skip to content

Update to latest runtime #605

Update to latest runtime

Update to latest runtime #605

Workflow file for this run

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: 6d0e3e59dd2f96eb9ca5c5397ff2a9d7c5526cac
DOTNETSDK_VERSION: 8.0.100-preview.4.23260.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']
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
- 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:MonoWasmBuildVariant=$env:MONO_WASM_THREADS" /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";
}
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']
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 llvm-9 clang-9 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: 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
- 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 3.16
run: |
set -e
wget -qO- https://cmake.org/files/v3.16/cmake-3.16.5-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:MonoWasmBuildVariant=$MONO_WASM_THREADS"
# 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
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 .