chore: Build linux aot cross #720
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: | |
DOTNETRUNTIME_COMMIT: be32947d322ae71526ad1dde412a1dca44ea4fba | |
DOTNETSDK_VERSION: 9.0.100-preview.6.24328.19 | |
ADDITIONAL_BUILD_ARGS: '/p:MonoEnableAssertMessages=true /p:WasmEnableES6=true /p:WasmExceptionHandling=true' | |
GitVersion_Version: 5.10.3 | |
concurrency: | |
group: ${{github.workflow}} - ${{github.ref}} | |
cancel-in-progress: true | |
jobs: | |
## | |
## Windows AOT Cross | |
## | |
build_aot_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] | |
steps: | |
- name: Setup .NET SDK | |
uses: actions/[email protected] | |
with: | |
dotnet-version: ${{ env.DOTNETSDK_VERSION }} | |
- uses: actions/checkout@v2 | |
with: | |
submodules: true | |
fetch-depth: 0 | |
- name: Setup GitVersion | |
uses: gittools/actions/gitversion/[email protected] | |
with: | |
versionSpec: ${{ env.GitVersion_Version }} | |
- name: GitVersion | |
id: gitversion | |
uses: gittools/actions/gitversion/[email protected] | |
with: | |
useConfigFile: true | |
configFilePath: build/gitversion.yml | |
- name: Update variables | |
run: | | |
echo "BUILD_CONFIGURATION=${{ matrix.BUILD_CONFIGURATION }}" >> $env:GITHUB_ENV | |
- 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: Build Wasm Runtime | |
run: | | |
$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=singlethread" /p:TestAssemblies=false /p:CrossBuild=false /bl:ci-artifacts\msbuild.binlog | |
- name: Create NuGet Package | |
run: | | |
New-Item -ItemType Directory -Force -Path $env:GITHUB_WORKSPACE/nuget/tools | |
New-Item -ItemType Directory -Force -Path $env:GITHUB_WORKSPACE/ci-output | |
# Move cross compiler to appropriate location | |
move $env:GITHUB_WORKSPACE\runtime\artifacts\bin\mono\Browser.wasm.Release\cross $env:GITHUB_WORKSPACE/nuget/tools | |
cd $env:GITHUB_WORKSPACE/nuget | |
dotnet pack Uno.NETCore.App.Runtime.AOT.Cross.browser-wasm.csproj /p:OutputPath=$env:GITHUB_WORKSPACE\ci-output "/p:Version=${{ steps.gitversion.outputs.semVer }}" | |
- uses: actions/upload-artifact@v2 | |
if: ${{ always() }} | |
with: | |
name: nuget | |
path: ci-output | |
## | |
## Build Linux AOT Cross | |
## | |
build_aot_linux_job: | |
if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') | |
runs-on: ubuntu-latest | |
container: 'mcr.microsoft.com/dotnet/sdk:8.0.303-jammy' | |
strategy: | |
matrix: | |
BUILD_CONFIGURATION: [Release] | |
steps: | |
- uses: actions/checkout@v2 | |
with: | |
submodules: true | |
fetch-depth: 0 | |
- name: Setup GitVersion | |
uses: gittools/actions/gitversion/[email protected] | |
with: | |
versionSpec: ${{ env.GitVersion_Version }} | |
- name: GitVersion | |
id: gitversion | |
uses: gittools/actions/gitversion/[email protected] | |
with: | |
useConfigFile: true | |
configFilePath: build/gitversion.yml | |
- name: Setup .NET SDK | |
uses: actions/[email protected] | |
with: | |
dotnet-version: 8.0.303 | |
- name: Setup .NET SDK | |
uses: actions/[email protected] | |
with: | |
dotnet-version: ${{ env.DOTNETSDK_VERSION }} | |
- name: Install dependencies | |
run: | | |
set -e | |
apt-get update | |
apt-get install -y sudo | |
sudo apt-get install -y python3-pip locales p7zip-full zip | |
sudo apt-get install -y lsb-release wget software-properties-common gnupg | |
sudo apt-get install -y unzip zip libc6 ninja-build \ | |
libtool build-essential curl git \ | |
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 | |
run: | | |
set -e | |
wget https://apt.llvm.org/llvm.sh | |
chmod u+x llvm.sh | |
sudo ./llvm.sh 18 | |
- name: Trust My Directory | |
run: git config --global --add safe.directory /__w/Uno.DotnetRuntime.WebAssembly/Uno.DotnetRuntime.WebAssembly | |
- name: Set Variable from current Commit | |
run: | | |
set -e | |
echo "BUILD_CONFIGURATION=${{ matrix.BUILD_CONFIGURATION }}" >> $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: Build Wasm Runtime | |
run: | | |
set -e | |
cd runtime | |
./build.sh -arch wasm -os browser -c $BUILD_CONFIGURATION $ADDITIONAL_BUILD_ARGS "/p:MonoWasmBuildVariant=singlethread" /p:TestAssemblies=false | |
- name: Create NuGet Package | |
run: | | |
mkdir -p $GITHUB_WORKSPACE/nuget/tools | |
mkdir -p $GITHUB_WORKSPACE/ci-output | |
# Mark AOT generation binaries executable | |
chmod +x $GITHUB_WORKSPACE/runtime/artifacts/bin/mono/browser.wasm.Release/cross/* | |
# Move cross compiler to appropriate location | |
mv $GITHUB_WORKSPACE/runtime/artifacts/bin/mono/Browser.wasm.Release/cross $GITHUB_WORKSPACE/nuget/tools | |
cd $env:GITHUB_WORKSPACE/nuget | |
dotnet pack Uno.NETCore.App.Runtime.AOT.Cross.browser-wasm.csproj /p:OutputPath=$GITHUB_WORKSPACE/ci-output "/p:Version=${{ steps.gitversion.outputs.semVer }}" | |
- uses: actions/upload-artifact@v2 | |
if: ${{ always() }} | |
with: | |
name: nuget | |
path: ci-output | |
## | |
## Build Job | |
## | |
build_linux_job: | |
if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') | |
runs-on: ubuntu-latest | |
container: 'mcr.microsoft.com/dotnet/sdk:8.0.303-jammy' | |
strategy: | |
matrix: | |
BUILD_CONFIGURATION: [Release] | |
MONO_WASM_THREADS: ['multithread', 'singlethread'] | |
steps: | |
- uses: actions/checkout@v2 | |
with: | |
submodules: true | |
fetch-depth: 0 | |
- name: Setup GitVersion | |
uses: gittools/actions/gitversion/[email protected] | |
with: | |
versionSpec: ${{ env.GitVersion_Version }} | |
- name: GitVersion | |
id: gitversion | |
uses: gittools/actions/gitversion/[email protected] | |
with: | |
useConfigFile: true | |
configFilePath: build/gitversion.yml | |
- name: Setup .NET SDK | |
uses: actions/[email protected] | |
with: | |
dotnet-version: 8.0.303 | |
- name: Setup .NET SDK | |
uses: actions/[email protected] | |
with: | |
dotnet-version: ${{ env.DOTNETSDK_VERSION }} | |
- name: Install dependencies | |
run: | | |
set -e | |
apt-get update | |
apt-get install -y sudo | |
sudo apt-get install -y python3-pip locales p7zip-full zip | |
sudo apt-get install -y unzip zip libc6 ninja-build | |
sudo apt-get install -y lsb-release wget software-properties-common gnupg | |
sudo apt-get install -y unzip zip libc6 ninja-build \ | |
libtool build-essential curl git \ | |
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 | |
run: | | |
set -e | |
wget https://apt.llvm.org/llvm.sh | |
chmod u+x llvm.sh | |
sudo ./llvm.sh 18 | |
- name: Trust My Directory | |
run: git config --global --add safe.directory /__w/Uno.DotnetRuntime.WebAssembly/Uno.DotnetRuntime.WebAssembly | |
- name: Set Variable from current Commit | |
run: | | |
set -e | |
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 | |
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: Build Wasm Runtime | |
run: | | |
set -e | |
cd runtime | |
./build.sh -arch wasm -os browser -c $BUILD_CONFIGURATION $ADDITIONAL_BUILD_ARGS /p:TestAssemblies=false "/p:MonoWasmBuildVariant=$MONO_WASM_THREADS" | |
- name: Create artifact structure | |
run: | | |
set -e | |
cd ./runtime/artifacts/packages/Release/Shipping | |
rm *.symbols.nupkg | |
rm *.Templates.*.nupkg | |
rm *ToolChain.net6.Manifest*.nupkg | |
rm *ToolChain.net7.Manifest*.nupkg | |
rm *ToolChain.net8.Manifest*.nupkg | |
unzip -o '*.nupkg' -d uno | |
cd uno | |
rm *.nuspec | |
# remove unused assets that are part of the official SDK | |
rm -fR _rels | |
rm -fR package | |
rm -fR analyzers | |
rm -fR ref | |
rm -f \[Content_Types\].xml | |
rm -f Icon.png | |
rm -f LICENCE.TXT | |
find data ! -name 'RuntimeList.xml' -type f -exec rm -f {} + | |
- name: Zip Archive | |
run: | | |
ARTIFACTS_FOLDER=`pwd`/ci-artifacts | |
mkdir -p $ARTIFACTS_FOLDER | |
cd ./runtime/artifacts/packages/Release/Shipping/uno | |
/usr/bin/zip -r $ARTIFACTS_FOLDER/sdk-${{ matrix.MONO_WASM_THREADS }}.zip * | |
- uses: actions/upload-artifact@v2 | |
if: ${{ always() }} | |
with: | |
name: wasm-sdk | |
path: ci-artifacts | |
package_job: | |
needs: [build_linux_job] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v2 | |
with: | |
submodules: true | |
fetch-depth: 0 | |
- name: Setup GitVersion | |
uses: gittools/actions/gitversion/[email protected] | |
with: | |
versionSpec: ${{ env.GitVersion_Version }} | |
- name: GitVersion | |
id: gitversion | |
uses: gittools/actions/gitversion/[email protected] | |
with: | |
useConfigFile: true | |
configFilePath: build/gitversion.yml | |
- name: Setup .NET SDK | |
uses: actions/[email protected] | |
with: | |
dotnet-version: 8.0.303 | |
- name: Download package | |
uses: actions/download-artifact@v2 | |
with: | |
name: wasm-sdk | |
path: nuget | |
- name: Create NuGet SDK Packages | |
run: | | |
cd nuget | |
ls -la | |
find . -name '*.zip' -exec sh -c 'unzip -d "${1%.*}" "$1"' _ {} \; | |
dotnet pack Uno.NETCore.App.Runtime.Mono.browser-wasm.csproj /p:OutputPath=$GITHUB_WORKSPACE/ci-output "/p:Version=${{ steps.gitversion.outputs.semVer }}" | |
- uses: actions/upload-artifact@v2 | |
if: ${{ always() }} | |
with: | |
name: nuget | |
path: ci-output | |
sign: | |
name: Sign Package | |
if: ${{ github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/release/')) }} | |
runs-on: windows-latest | |
needs: [package_job,build_aot_windows_job,build_aot_linux_job] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
- name: Download Artifacts | |
uses: actions/download-artifact@v2 | |
with: | |
name: nuget | |
path: artifacts | |
- name: Setup .NET SDK | |
uses: actions/setup-dotnet@v1 | |
with: | |
dotnet-version: '3.1.x' | |
- name: Setup SignClient | |
run: | | |
dotnet tool install --tool-path build SignClient | |
- name: SignClient | |
shell: pwsh | |
run: | | |
build\SignClient sign -i artifacts\*.nupkg -c build\signing\SignClient.json -r "${{ secrets.UNO_PLATFORM_CODESIGN_USERNAME }}" -s "${{ secrets.UNO_PLATFORM_CODESIGN_SECRET }}" -n "dotnet runtime" -d "dotnet runtime" -u "https://github.dev/unoplatform/Uno.DotnetRuntime.WebAssembly" | |
- name: Upload Signed Artifacts | |
uses: actions/upload-artifact@v2 | |
with: | |
name: nuget-signed | |
path: .\artifacts | |
publish_dev: | |
name: Publish Dev | |
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} | |
runs-on: windows-latest | |
needs: | |
- sign | |
steps: | |
- name: Download Artifacts | |
uses: actions/download-artifact@v2 | |
with: | |
name: nuget-signed | |
path: artifacts | |
- name: NuGet Push | |
shell: pwsh | |
run: | | |
dotnet nuget push artifacts\*.nupkg -s https://api.nuget.org/v3/index.json -k "${{ secrets.NUGET_ORG_API_KEY }}" | |
publish_prod: | |
name: Publish Production | |
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/heads/release/') }} | |
runs-on: windows-latest | |
environment: Production | |
needs: | |
- sign | |
steps: | |
- name: Download Artifacts | |
uses: actions/download-artifact@v2 | |
with: | |
name: nuget-signed | |
path: artifacts | |
- name: NuGet Push | |
shell: pwsh | |
run: | | |
dotnet nuget push artifacts\*.nupkg -s https://api.nuget.org/v3/index.json -k "${{ secrets.NUGET_ORG_API_KEY }}" |