Skip to content

CI

CI #10

Workflow file for this run

name: CI
on:
push: # trigger on commits to the `main` branch (no PRs)
branches:
- main
paths-ignore:
- '.github/workflows/x-*.yml'
workflow_dispatch: # and 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: "CI - ${{ matrix.name }}"
strategy:
matrix:
include:
- name: "Ubuntu ARM64"
os: ubuntu-24-arm64-gh
env:
OS: "linux"
NUGET_RID: "linux-arm64"
- name: "Ubuntu x64"
os: ubuntu-latest
env:
OS: "linux"
NUGET_RID: "linux-x64"
- name: "macOS ARM64"
os: macos-15
env:
OS: "apple"
NUGET_RID: "osx"
- name: "Windows x64"
os: windows-latest
env:
OS: "windows"
NUGET_RID: "win-x64"
NUGET_PACK_DOTNET_LIB: "1"
#- 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: 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
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '9.0.x'
# - 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/[email protected]
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
- name: test RoyalVNCKit
run: |
swift test
# .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