Skip to content

Experiment-Windows

Experiment-Windows #34

Workflow file for this run

name: Experiment-Windows
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: "Ubuntu ARM64"
os:
- ARM64
- linux
- Ubuntu
env:
OS: "linux"
NUGET_RID: "linux-arm64"
- name: "Ubuntu x64"
os: ubuntu-latest
# - X64
# - linux
# - Ubuntu
env:
OS: "linux"
NUGET_RID: "linux-x64"
- name: "MacOS ARM64"
os: macos-14
env:
OS: "apple"
NUGET_RID: "osx"
- name: "Windows x64"
os: windows-latest
env:
OS: "windows"
NUGET_RID: "win-x64"
NUGET_PACK_DOTNET_LIB: "1"
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: 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