diff --git a/.github/actions/build-alphaskia/action.yml b/.github/actions/build-alphaskia/action.yml index 1dcfc54..fde52d0 100644 --- a/.github/actions/build-alphaskia/action.yml +++ b/.github/actions/build-alphaskia/action.yml @@ -18,6 +18,11 @@ inputs: runs: using: "composite" steps: + - uses: actions/download-artifact@v3 + with: + name: nuke + path: build/bin/Debug/publish/ + - uses: actions/download-artifact@v3 with: path: dist/.organize/libskia-${{ inputs.target-os }}-${{ inputs.architecture }}-static diff --git a/.github/actions/build-skia/action.yml b/.github/actions/build-skia/action.yml index 46c6e0b..8f16d25 100644 --- a/.github/actions/build-skia/action.yml +++ b/.github/actions/build-skia/action.yml @@ -15,6 +15,16 @@ inputs: runs: using: "composite" steps: + - uses: actions/download-artifact@v3 + with: + name: nuke + path: build/bin/Debug/publish/ + + - uses: actions/download-artifact@v3 + with: + name: nuke + path: build/bin/Debug/publish/ + - uses: actions/cache/restore@v3 if: ${{ inputs.use-cache }} with: diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 03804ee..fb386d3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,10 +10,23 @@ env: ALPHASKIA_VERSION: 1.0.0.${{ github.run_number }} jobs: +# +# Nuke + nuke: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - run: dotnet publish ./build/_build.csproj + - uses: actions/upload-artifact@v3 + with: + name: nuke + path: build/bin/Debug/publish/ + # # Windows windows-skia: runs-on: windows-latest + needs: [nuke] strategy: fail-fast: false matrix: @@ -47,6 +60,7 @@ jobs: # Linux linux-skia: runs-on: ubuntu-latest + needs: [nuke] strategy: fail-fast: false matrix: @@ -80,6 +94,7 @@ jobs: # Android android-skia: runs-on: ubuntu-latest + needs: [nuke] strategy: fail-fast: false matrix: @@ -114,6 +129,7 @@ jobs: # MacOs macos-skia: runs-on: macos-latest + needs: [nuke] strategy: fail-fast: false matrix: @@ -147,6 +163,7 @@ jobs: # iOS ios-skia: runs-on: macos-latest + needs: [nuke] strategy: fail-fast: false matrix: @@ -196,6 +213,10 @@ jobs: needs: [windows-alphaskia, linux-alphaskia, android-alphaskia, macos-alphaskia, ios-alphaskia] steps: - uses: actions/checkout@v3 + - uses: actions/download-artifact@v3 + with: + name: nuke + path: build/bin/Debug/publish/ - uses: actions/download-artifact@v3 with: path: dist/.organize @@ -222,6 +243,10 @@ jobs: needs: [dotnet] steps: - uses: actions/checkout@v3 + - uses: actions/download-artifact@v3 + with: + name: nuke + path: build/bin/Debug/publish/ - uses: actions/download-artifact@v3 with: name: nupkgs @@ -263,6 +288,10 @@ jobs: distribution: 'temurin' java-version: '17' - uses: actions/checkout@v3 + - uses: actions/download-artifact@v3 + with: + name: nuke + path: build/bin/Debug/publish/ - uses: actions/download-artifact@v3 with: name: maven @@ -299,6 +328,10 @@ jobs: needs: [node] steps: - uses: actions/checkout@v3 + - uses: actions/download-artifact@v3 + with: + name: nuke + path: build/bin/Debug/publish/ - uses: actions/download-artifact@v3 with: name: nodetars diff --git a/build.ps1 b/build.ps1 index c0c0e61..043e4ca 100644 --- a/build.ps1 +++ b/build.ps1 @@ -9,66 +9,72 @@ Write-Output "PowerShell $($PSVersionTable.PSEdition) version $($PSVersionTable. Set-StrictMode -Version 2.0; $ErrorActionPreference = "Stop"; $ConfirmPreference = "None"; trap { Write-Error $_ -ErrorAction Continue; exit 1 } $PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent -########################################################################### -# CONFIGURATION -########################################################################### - -$BuildProjectFile = "$PSScriptRoot\build\_build.csproj" -$TempDirectory = "$PSScriptRoot\\.nuke\temp" - -$DotNetGlobalFile = "$PSScriptRoot\\global.json" -$DotNetInstallUrl = "https://dot.net/v1/dotnet-install.ps1" -$DotNetChannel = "STS" - -$env:DOTNET_SKIP_FIRST_TIME_EXPERIENCE = 1 -$env:DOTNET_CLI_TELEMETRY_OPTOUT = 1 -$env:DOTNET_MULTILEVEL_LOOKUP = 0 - -########################################################################### -# EXECUTION -########################################################################### - function ExecSafe([scriptblock] $cmd) { & $cmd if ($LASTEXITCODE) { exit $LASTEXITCODE } } -# If dotnet CLI is installed globally and it matches requested version, use for execution -if ($null -ne (Get-Command "dotnet" -ErrorAction SilentlyContinue) -and ` - $(dotnet --version) -and $LASTEXITCODE -eq 0) { - $env:DOTNET_EXE = (Get-Command "dotnet").Path + +if( ($env:GITHUB_ACTIONS -eq "true") -And (Test-Path "$PSScriptRoot\build\bin\Debug\publish\_build.dll") ) { + ExecSafe { & dotnet "$PSScriptRoot\build\bin\Debug\publish\_build.dll" $BuildArguments } } else { - # Download install script - $DotNetInstallFile = "$TempDirectory\dotnet-install.ps1" - New-Item -ItemType Directory -Path $TempDirectory -Force | Out-Null - [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 - (New-Object System.Net.WebClient).DownloadFile($DotNetInstallUrl, $DotNetInstallFile) + ########################################################################### + # CONFIGURATION + ########################################################################### - # If global.json exists, load expected version - if (Test-Path $DotNetGlobalFile) { - $DotNetGlobal = $(Get-Content $DotNetGlobalFile | Out-String | ConvertFrom-Json) - if ($DotNetGlobal.PSObject.Properties["sdk"] -and $DotNetGlobal.sdk.PSObject.Properties["version"]) { - $DotNetVersion = $DotNetGlobal.sdk.version - } + $BuildProjectFile = "$PSScriptRoot\build\_build.csproj" + $TempDirectory = "$PSScriptRoot\\.nuke\temp" + + $DotNetGlobalFile = "$PSScriptRoot\\global.json" + $DotNetInstallUrl = "https://dot.net/v1/dotnet-install.ps1" + $DotNetChannel = "STS" + + $env:DOTNET_SKIP_FIRST_TIME_EXPERIENCE = 1 + $env:DOTNET_CLI_TELEMETRY_OPTOUT = 1 + $env:DOTNET_MULTILEVEL_LOOKUP = 0 + + ########################################################################### + # EXECUTION + ########################################################################### + + # If dotnet CLI is installed globally and it matches requested version, use for execution + if ($null -ne (Get-Command "dotnet" -ErrorAction SilentlyContinue) -and ` + $(dotnet --version) -and $LASTEXITCODE -eq 0) { + $env:DOTNET_EXE = (Get-Command "dotnet").Path } + else { + # Download install script + $DotNetInstallFile = "$TempDirectory\dotnet-install.ps1" + New-Item -ItemType Directory -Path $TempDirectory -Force | Out-Null + [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 + (New-Object System.Net.WebClient).DownloadFile($DotNetInstallUrl, $DotNetInstallFile) + + # If global.json exists, load expected version + if (Test-Path $DotNetGlobalFile) { + $DotNetGlobal = $(Get-Content $DotNetGlobalFile | Out-String | ConvertFrom-Json) + if ($DotNetGlobal.PSObject.Properties["sdk"] -and $DotNetGlobal.sdk.PSObject.Properties["version"]) { + $DotNetVersion = $DotNetGlobal.sdk.version + } + } - # Install by channel or version - $DotNetDirectory = "$TempDirectory\dotnet-win" - if (!(Test-Path variable:DotNetVersion)) { - ExecSafe { & powershell $DotNetInstallFile -InstallDir $DotNetDirectory -Channel $DotNetChannel -NoPath } - } else { - ExecSafe { & powershell $DotNetInstallFile -InstallDir $DotNetDirectory -Version $DotNetVersion -NoPath } + # Install by channel or version + $DotNetDirectory = "$TempDirectory\dotnet-win" + if (!(Test-Path variable:DotNetVersion)) { + ExecSafe { & powershell $DotNetInstallFile -InstallDir $DotNetDirectory -Channel $DotNetChannel -NoPath } + } else { + ExecSafe { & powershell $DotNetInstallFile -InstallDir $DotNetDirectory -Version $DotNetVersion -NoPath } + } + $env:DOTNET_EXE = "$DotNetDirectory\dotnet.exe" } - $env:DOTNET_EXE = "$DotNetDirectory\dotnet.exe" -} -Write-Output "Microsoft (R) .NET SDK version $(& $env:DOTNET_EXE --version)" + Write-Output "Microsoft (R) .NET SDK version $(& $env:DOTNET_EXE --version)" -if (Test-Path env:NUKE_ENTERPRISE_TOKEN) { - & $env:DOTNET_EXE nuget remove source "nuke-enterprise" > $null - & $env:DOTNET_EXE nuget add source "https://f.feedz.io/nuke/enterprise/nuget" --name "nuke-enterprise" --username "PAT" --password $env:NUKE_ENTERPRISE_TOKEN > $null -} + if (Test-Path env:NUKE_ENTERPRISE_TOKEN) { + & $env:DOTNET_EXE nuget remove source "nuke-enterprise" > $null + & $env:DOTNET_EXE nuget add source "https://f.feedz.io/nuke/enterprise/nuget" --name "nuke-enterprise" --username "PAT" --password $env:NUKE_ENTERPRISE_TOKEN > $null + } -ExecSafe { & $env:DOTNET_EXE build $BuildProjectFile /nodeReuse:false /p:UseSharedCompilation=false -nologo -clp:NoSummary --verbosity quiet } -ExecSafe { & $env:DOTNET_EXE run --project $BuildProjectFile --no-build -- $BuildArguments } + ExecSafe { & $env:DOTNET_EXE build $BuildProjectFile /nodeReuse:false /p:UseSharedCompilation=false -nologo -clp:NoSummary --verbosity quiet } + ExecSafe { & $env:DOTNET_EXE run --project $BuildProjectFile --no-build -- $BuildArguments } +} \ No newline at end of file diff --git a/build.sh b/build.sh index 2f10dcb..a51d3a7 100755 --- a/build.sh +++ b/build.sh @@ -5,63 +5,69 @@ bash --version 2>&1 | head -n 1 set -eo pipefail SCRIPT_DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd) -########################################################################### -# CONFIGURATION -########################################################################### -BUILD_PROJECT_FILE="$SCRIPT_DIR/build/_build.csproj" -TEMP_DIRECTORY="$SCRIPT_DIR//.nuke/temp" +if [ "$GITHUB_ACTIONS" == "true" ] && [ -f "$SCRIPT_DIR/build/bin/Debug/publish/_build.dll" ]; then + dotnet "$SCRIPT_DIR/build/bin/Debug/publish/_build.dll" "$@" +else + ########################################################################### + # CONFIGURATION + ########################################################################### -DOTNET_GLOBAL_FILE="$SCRIPT_DIR//global.json" -DOTNET_INSTALL_URL="https://dot.net/v1/dotnet-install.sh" -DOTNET_CHANNEL="STS" + BUILD_PROJECT_FILE="$SCRIPT_DIR/build/_build.csproj" + TEMP_DIRECTORY="$SCRIPT_DIR//.nuke/temp" -export DOTNET_CLI_TELEMETRY_OPTOUT=1 -export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 -export DOTNET_MULTILEVEL_LOOKUP=0 + DOTNET_GLOBAL_FILE="$SCRIPT_DIR//global.json" + DOTNET_INSTALL_URL="https://dot.net/v1/dotnet-install.sh" + DOTNET_CHANNEL="STS" -########################################################################### -# EXECUTION -########################################################################### + export DOTNET_CLI_TELEMETRY_OPTOUT=1 + export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 + export DOTNET_MULTILEVEL_LOOKUP=0 -function FirstJsonValue { - perl -nle 'print $1 if m{"'"$1"'": "([^"]+)",?}' <<< "${@:2}" -} + ########################################################################### + # EXECUTION + ########################################################################### -# If dotnet CLI is installed globally and it matches requested version, use for execution -if [ -x "$(command -v dotnet)" ] && dotnet --version &>/dev/null; then - export DOTNET_EXE="$(command -v dotnet)" -else - # Download install script - DOTNET_INSTALL_FILE="$TEMP_DIRECTORY/dotnet-install.sh" - mkdir -p "$TEMP_DIRECTORY" - curl -Lsfo "$DOTNET_INSTALL_FILE" "$DOTNET_INSTALL_URL" - chmod +x "$DOTNET_INSTALL_FILE" - - # If global.json exists, load expected version - if [[ -f "$DOTNET_GLOBAL_FILE" ]]; then - DOTNET_VERSION=$(FirstJsonValue "version" "$(cat "$DOTNET_GLOBAL_FILE")") - if [[ "$DOTNET_VERSION" == "" ]]; then - unset DOTNET_VERSION - fi - fi + function FirstJsonValue { + perl -nle 'print $1 if m{"'"$1"'": "([^"]+)",?}' <<< "${@:2}" + } - # Install by channel or version - DOTNET_DIRECTORY="$TEMP_DIRECTORY/dotnet-unix" - if [[ -z ${DOTNET_VERSION+x} ]]; then - "$DOTNET_INSTALL_FILE" --install-dir "$DOTNET_DIRECTORY" --channel "$DOTNET_CHANNEL" --no-path + # If dotnet CLI is installed globally and it matches requested version, use for execution + if [ -x "$(command -v dotnet)" ] && dotnet --version &>/dev/null; then + export DOTNET_EXE="$(command -v dotnet)" else - "$DOTNET_INSTALL_FILE" --install-dir "$DOTNET_DIRECTORY" --version "$DOTNET_VERSION" --no-path + # Download install script + DOTNET_INSTALL_FILE="$TEMP_DIRECTORY/dotnet-install.sh" + mkdir -p "$TEMP_DIRECTORY" + curl -Lsfo "$DOTNET_INSTALL_FILE" "$DOTNET_INSTALL_URL" + chmod +x "$DOTNET_INSTALL_FILE" + + # If global.json exists, load expected version + if [[ -f "$DOTNET_GLOBAL_FILE" ]]; then + DOTNET_VERSION=$(FirstJsonValue "version" "$(cat "$DOTNET_GLOBAL_FILE")") + if [[ "$DOTNET_VERSION" == "" ]]; then + unset DOTNET_VERSION + fi + fi + + # Install by channel or version + DOTNET_DIRECTORY="$TEMP_DIRECTORY/dotnet-unix" + if [[ -z ${DOTNET_VERSION+x} ]]; then + "$DOTNET_INSTALL_FILE" --install-dir "$DOTNET_DIRECTORY" --channel "$DOTNET_CHANNEL" --no-path + else + "$DOTNET_INSTALL_FILE" --install-dir "$DOTNET_DIRECTORY" --version "$DOTNET_VERSION" --no-path + fi + export DOTNET_EXE="$DOTNET_DIRECTORY/dotnet" fi - export DOTNET_EXE="$DOTNET_DIRECTORY/dotnet" -fi -echo "Microsoft (R) .NET SDK version $("$DOTNET_EXE" --version)" + echo "Microsoft (R) .NET SDK version $("$DOTNET_EXE" --version)" + + if [[ ! -z ${NUKE_ENTERPRISE_TOKEN+x} && "$NUKE_ENTERPRISE_TOKEN" != "" ]]; then + "$DOTNET_EXE" nuget remove source "nuke-enterprise" &>/dev/null || true + "$DOTNET_EXE" nuget add source "https://f.feedz.io/nuke/enterprise/nuget" --name "nuke-enterprise" --username "PAT" --password "$NUKE_ENTERPRISE_TOKEN" --store-password-in-clear-text &>/dev/null || true + fi -if [[ ! -z ${NUKE_ENTERPRISE_TOKEN+x} && "$NUKE_ENTERPRISE_TOKEN" != "" ]]; then - "$DOTNET_EXE" nuget remove source "nuke-enterprise" &>/dev/null || true - "$DOTNET_EXE" nuget add source "https://f.feedz.io/nuke/enterprise/nuget" --name "nuke-enterprise" --username "PAT" --password "$NUKE_ENTERPRISE_TOKEN" --store-password-in-clear-text &>/dev/null || true -fi + "$DOTNET_EXE" build "$BUILD_PROJECT_FILE" /nodeReuse:false /p:UseSharedCompilation=false -nologo -clp:NoSummary --verbosity quiet + "$DOTNET_EXE" run --project "$BUILD_PROJECT_FILE" --no-build -- "$@" -"$DOTNET_EXE" build "$BUILD_PROJECT_FILE" /nodeReuse:false /p:UseSharedCompilation=false -nologo -clp:NoSummary --verbosity quiet -"$DOTNET_EXE" run --project "$BUILD_PROJECT_FILE" --no-build -- "$@" +fi \ No newline at end of file diff --git a/build/Build.LibSkia.cs b/build/Build.LibSkia.cs index 97ee8b8..8ab5d6f 100644 --- a/build/Build.LibSkia.cs +++ b/build/Build.LibSkia.cs @@ -127,7 +127,6 @@ void PatchVulcanAllocatorIncludes() { // https://github.com/microsoft/vcpkg/issues/31875 var buildFile = SkiaPath / "third_party" / "externals" / "vulkanmemoryallocator" / "include" / "vk_mem_alloc.h"; - const string searchText = "CONFIGURATION SECTION"; var include = """ #if VMA_STATS_STRING_ENABLED