From 885aff21bbe8ce7020cf16f2e48f413987fee970 Mon Sep 17 00:00:00 2001 From: nil4 Date: Tue, 5 Nov 2024 10:44:37 +0100 Subject: [PATCH] [test] probe `win-arm64` environment --- .github/workflows/x-win-arm64.yml | 165 ++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 .github/workflows/x-win-arm64.yml diff --git a/.github/workflows/x-win-arm64.yml b/.github/workflows/x-win-arm64.yml new file mode 100644 index 00000000..738f842a --- /dev/null +++ b/.github/workflows/x-win-arm64.yml @@ -0,0 +1,165 @@ +name: Experiment-Windows-ARM64 +on: + workflow_dispatch: # manually-triggered runs + +permissions: + # only allowed to read source code (ref. https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs) + contents: read + +concurrency: + # cancel pending runs when a PR gets updated + group: "${{ github.head_ref || github.run_id }}-${{ github.actor }}" + cancel-in-progress: true + +jobs: + build: + name: "X-Win - ${{ matrix.name }}" + + strategy: + matrix: + include: + - name: "Windows ARM64" + os: windows-11-arm64-gh + env: + OS: "windows" + NUGET_RID: "win-arm64" + + runs-on: "${{ matrix.os }}" + + defaults: + run: + shell: "${{ matrix.env.OS == 'windows' && 'pwsh' || 'bash' }}" + + env: + DOTNET_NOLOGO: 1 + DOTNET_CLI_TELEMETRY_OPTOUT: 1 + DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1 + VCPKG_DISABLE_METRICS: 1 + NUGET_BASE_VERSION: "0.0" + ROYALVNC_BUILD_DEBUG: 0 + SWIFT_VERSION: "6.0.2" + + steps: + - name: test + shell: cmd + run: | + set + where winget + winget --version + exit 1 + + - name: setup tools (win-arm64) + if: "success() && matrix.env.NUGET_RID == 'win-arm64'" + shell: powershell + run: | + # Install choco + Set-ExecutionPolicy Bypass -Scope Process -Force + [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072 # Enable TLS1.2 + Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) + "C:\ProgramData\Chocolatey\bin" | Out-File -FilePath $env:GITHUB_PATH -Append -Encoding utf8 + + # Install pwsh + choco install -y --no-progress powershell-core + "C:\Program Files\PowerShell\7" | Out-File -FilePath $env:GITHUB_PATH -Append -Encoding utf8 + + # Install git + choco install -y --no-progress git + "C:\Program Files\Git\cmd" | Out-File -FilePath $env:GITHUB_PATH -Append -Encoding utf8 + + # Install dotnet + Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://dot.net/v1/dotnet-install.ps1')) + "C:\Program Files\dotnet" | Out-File -FilePath $env:GITHUB_PATH -Append -Encoding utf8 + + - name: checkout + uses: actions/checkout@v4 + + # setup build environment + + - name: setup environment (Apple) + if: "success() && matrix.env.OS == 'apple'" + run: | + sudo xcode-select --switch /Applications/Xcode_16.0.app + + - name: setup VC++ environment (Windows) + if: "success() && matrix.env.OS == 'windows'" + uses: compnerd/gha-setup-vsdevenv@v6 + + - name: setup Swift (Windows) + if: "success() && matrix.env.OS == 'windows'" + uses: compnerd/gha-setup-swift@v0.2.3 + with: + branch: "swift-${{ env.SWIFT_VERSION }}-release" + tag: "${{ env.SWIFT_VERSION }}-RELEASE" + + # build RoyalVNCKit + + - name: build RoyalVNCKit (Apple) + if: "success() && matrix.env.OS == 'apple'" + run: | + swift package clean --configuration release + swift build --configuration release --arch arm64 + swift build --configuration release --arch x86_64 + + mkdir -p .build/universal-apple-macosx/release + lipo -create \ + .build/arm64-apple-macosx/release/libRoyalVNCKit.dylib \ + .build/x86_64-apple-macosx/release/libRoyalVNCKit.dylib \ + -output .build/universal-apple-macosx/release/libRoyalVNCKit.dylib + + - name: build RoyalVNCKit + if: "success() && matrix.env.OS != 'apple'" + run: | + swift package clean --configuration release + swift build --configuration release + + # .NET bindings and NuGet package artifacts + + - name: build .NET bindings + run: | + dotnet build --configuration Release Bindings/dotnet/RoyalApps.RoyalVNCKit.sln + + - name: create native NuGet package + if: "success() && matrix.env.NUGET_RID != ''" + env: + NUGET_VERSION: "${{ env.NUGET_BASE_VERSION }}.${{ github.run_number }}" + NUGET_RID: "${{ matrix.env.NUGET_RID }}" + NUGET_GIT_COMMIT: "${{ github.sha }}" + NUGET_SWIFT_RT_VERSION: "${{ env.SWIFT_VERSION }}" + run: | + pwsh Bindings/dotnet/nuget-pack-native.ps1 + + #- name: test AOT build and interop + # if: "success() && matrix.env.NUGET_RID != ''" + # env: + # NUGET_VERSION: "${{ env.NUGET_BASE_VERSION }}.${{ github.run_number }}" + # NUGET_RID: "${{ matrix.env.NUGET_RID }}" + # run: | + # pwsh Bindings/dotnet/nuget-test-aot.ps1 + + - name: create NuGet package + if: "success() && matrix.env.NUGET_PACK_DOTNET_LIB == '1'" + env: + NUGET_VERSION: "${{ env.NUGET_BASE_VERSION }}.${{ github.run_number }}" + NUGET_GIT_COMMIT: "${{ github.sha }}" + run: | + pwsh Bindings/dotnet/nuget-pack-dotnet.ps1 + + - name: publish native NuGet packages + if: "success() && matrix.env.NUGET_RID != ''" + uses: actions/upload-artifact@v4 + with: + name: "RoyalApps.RoyalVNCKit.native.${{ matrix.env.NUGET_RID }}" + retention-days: 5 + if-no-files-found: "error" + path: | + Bindings/dotnet/RoyalApps.RoyalVNCKit.native/bin/Release/RoyalApps.*.nupkg + + - name: publish NuGet package + if: "success() && matrix.env.NUGET_PACK_DOTNET_LIB == '1'" + uses: actions/upload-artifact@v4 + with: + name: "RoyalApps.RoyalVNCKit" + retention-days: 5 + if-no-files-found: "error" + path: | + Bindings/dotnet/RoyalApps.RoyalVNCKit/bin/Release/RoyalApps.RoyalVNCKit.*.nupkg