diff --git a/.nuke b/.nuke
deleted file mode 100644
index 7b6e2b9..0000000
--- a/.nuke
+++ /dev/null
@@ -1 +0,0 @@
-SpiroNet.sln
\ No newline at end of file
diff --git a/.nuke/build.schema.json b/.nuke/build.schema.json
new file mode 100644
index 0000000..ee72d94
--- /dev/null
+++ b/.nuke/build.schema.json
@@ -0,0 +1,131 @@
+{
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "title": "Build Schema",
+ "$ref": "#/definitions/build",
+ "definitions": {
+ "build": {
+ "type": "object",
+ "properties": {
+ "Configuration": {
+ "type": "string",
+ "description": "configuration"
+ },
+ "Continue": {
+ "type": "boolean",
+ "description": "Indicates to continue a previously failed build attempt"
+ },
+ "Help": {
+ "type": "boolean",
+ "description": "Shows the help text for this build assembly"
+ },
+ "Host": {
+ "type": "string",
+ "description": "Host for execution. Default is 'automatic'",
+ "enum": [
+ "AppVeyor",
+ "AzurePipelines",
+ "Bamboo",
+ "Bitrise",
+ "GitHubActions",
+ "GitLab",
+ "Jenkins",
+ "Rider",
+ "SpaceAutomation",
+ "TeamCity",
+ "Terminal",
+ "TravisCI",
+ "VisualStudio",
+ "VSCode"
+ ]
+ },
+ "NoLogo": {
+ "type": "boolean",
+ "description": "Disables displaying the NUKE logo"
+ },
+ "Partition": {
+ "type": "string",
+ "description": "Partition to use on CI"
+ },
+ "Plan": {
+ "type": "boolean",
+ "description": "Shows the execution plan (HTML)"
+ },
+ "Profile": {
+ "type": "array",
+ "description": "Defines the profiles to load",
+ "items": {
+ "type": "string"
+ }
+ },
+ "PublishFramework": {
+ "type": "string",
+ "description": "publish-framework"
+ },
+ "PublishProject": {
+ "type": "string",
+ "description": "publish-project"
+ },
+ "PublishRuntime": {
+ "type": "string",
+ "description": "publish-runtime"
+ },
+ "PublishSelfContained": {
+ "type": "boolean",
+ "description": "publish-self-contained"
+ },
+ "Root": {
+ "type": "string",
+ "description": "Root directory during build execution"
+ },
+ "Skip": {
+ "type": "array",
+ "description": "List of targets to be skipped. Empty list skips all dependencies",
+ "items": {
+ "type": "string",
+ "enum": [
+ "Clean",
+ "Compile",
+ "Pack",
+ "Publish",
+ "Restore",
+ "Test"
+ ]
+ }
+ },
+ "Solution": {
+ "type": "string",
+ "description": "Path to a solution file that is automatically loaded"
+ },
+ "Target": {
+ "type": "array",
+ "description": "List of targets to be invoked. Default is '{default_target}'",
+ "items": {
+ "type": "string",
+ "enum": [
+ "Clean",
+ "Compile",
+ "Pack",
+ "Publish",
+ "Restore",
+ "Test"
+ ]
+ }
+ },
+ "Verbosity": {
+ "type": "string",
+ "description": "Logging verbosity during build execution. Default is 'Normal'",
+ "enum": [
+ "Minimal",
+ "Normal",
+ "Quiet",
+ "Verbose"
+ ]
+ },
+ "VersionSuffix": {
+ "type": "string",
+ "description": "version-suffix"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/.nuke/parameters.json b/.nuke/parameters.json
new file mode 100644
index 0000000..73e9a7b
--- /dev/null
+++ b/.nuke/parameters.json
@@ -0,0 +1,4 @@
+{
+ "$schema": "./build.schema.json",
+ "Solution": "SpiroNet.sln"
+}
\ No newline at end of file
diff --git a/SpiroNet.sln b/SpiroNet.sln
index df82887..3b95771 100644
--- a/SpiroNet.sln
+++ b/SpiroNet.sln
@@ -22,10 +22,10 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{FE0DAB01-63F2-42B5-9F81-3B85B33E264B}"
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
- .nuke = .nuke
build.ps1 = build.ps1
build.sh = build.sh
global.json = global.json
+ azure-pipelines.yml = azure-pipelines.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "git", "git", "{E69A5428-7807-4FA9-AAE5-8FE55AECBFE0}"
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index fba3807..56c6349 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -11,8 +11,7 @@ resources:
variables:
BuildConfiguration: 'Release'
BuildPlatform: 'Any CPU'
- NetCoreSDK: '5.0.400'
- PublishFramework: 'net5.0'
+ PublishFramework: 'net6.0'
PublishProject: 'SpiroNet.Avalonia'
PublishRuntime: ''
diff --git a/build.cmd b/build.cmd
new file mode 100644
index 0000000..b08cc59
--- /dev/null
+++ b/build.cmd
@@ -0,0 +1,7 @@
+:; set -eo pipefail
+:; SCRIPT_DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)
+:; ${SCRIPT_DIR}/build.sh "$@"
+:; exit $?
+
+@ECHO OFF
+powershell -ExecutionPolicy ByPass -NoProfile -File "%~dp0build.ps1" %*
diff --git a/build.ps1 b/build.ps1
index d07775c..21da68e 100644
--- a/build.ps1
+++ b/build.ps1
@@ -1,13 +1,12 @@
[CmdletBinding()]
Param(
- #[switch]$CustomParam,
[Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)]
[string[]]$BuildArguments
)
-Write-Output "Windows PowerShell $($Host.Version)"
+Write-Output "PowerShell $($PSVersionTable.PSEdition) version $($PSVersionTable.PSVersion)"
-Set-StrictMode -Version 2.0; $ErrorActionPreference = "Stop"; $ConfirmPreference = "None"; trap { exit 1 }
+Set-StrictMode -Version 2.0; $ErrorActionPreference = "Stop"; $ConfirmPreference = "None"; trap { Write-Error $_ -ErrorAction Continue; exit 1 }
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
###########################################################################
@@ -15,15 +14,15 @@ $PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
###########################################################################
$BuildProjectFile = "$PSScriptRoot\build\build\_build.csproj"
-$TempDirectory = "$PSScriptRoot\\.tmp"
+$TempDirectory = "$PSScriptRoot\\.nuke\temp"
$DotNetGlobalFile = "$PSScriptRoot\\global.json"
-$DotNetInstallUrl = "https://raw.githubusercontent.com/dotnet/cli/master/scripts/obtain/dotnet-install.ps1"
+$DotNetInstallUrl = "https://dot.net/v1/dotnet-install.ps1"
$DotNetChannel = "Current"
$env:DOTNET_SKIP_FIRST_TIME_EXPERIENCE = 1
$env:DOTNET_CLI_TELEMETRY_OPTOUT = 1
-$env:NUGET_XMLDOC_MODE = "skip"
+$env:DOTNET_MULTILEVEL_LOOKUP = 0
###########################################################################
# EXECUTION
@@ -34,36 +33,37 @@ function ExecSafe([scriptblock] $cmd) {
if ($LASTEXITCODE) { exit $LASTEXITCODE }
}
-# 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
- }
-}
-
-# If dotnet is installed locally, and expected version is not set or installation matches the expected version
-if ((Get-Command "dotnet" -ErrorAction SilentlyContinue) -ne $null -and `
- (!(Test-Path variable:DotNetVersion) -or $(& dotnet --version) -eq $DotNetVersion)) {
+# 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 {
- $DotNetDirectory = "$TempDirectory\dotnet-win"
- $env:DOTNET_EXE = "$DotNetDirectory\dotnet.exe"
-
# Download install script
$DotNetInstallFile = "$TempDirectory\dotnet-install.ps1"
- md -force $TempDirectory > $null
+ New-Item -ItemType Directory -Path $TempDirectory -Force | Out-Null
+ [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
(New-Object System.Net.WebClient).DownloadFile($DotNetInstallUrl, $DotNetInstallFile)
- # Install by channel or version
- if (!(Test-Path variable:DotNetVersion)) {
- ExecSafe { & $DotNetInstallFile -InstallDir $DotNetDirectory -Channel $DotNetChannel -NoPath }
- } else {
- ExecSafe { & $DotNetInstallFile -InstallDir $DotNetDirectory -Version $DotNetVersion -NoPath }
+ # 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 }
+ }
+ $env:DOTNET_EXE = "$DotNetDirectory\dotnet.exe"
}
Write-Output "Microsoft (R) .NET Core SDK version $(& $env:DOTNET_EXE --version)"
-ExecSafe { & $env:DOTNET_EXE run --project $BuildProjectFile -- $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 }
diff --git a/build.sh b/build.sh
index f40cfb1..c2e4343 100644
--- a/build.sh
+++ b/build.sh
@@ -1,16 +1,6 @@
#!/usr/bin/env bash
-echo $(bash --version 2>&1 | head -n 1)
-
-#CUSTOMPARAM=0
-BUILD_ARGUMENTS=()
-for i in "$@"; do
- case $(echo $1 | awk '{print tolower($0)}') in
- # -custom-param) CUSTOMPARAM=1;;
- *) BUILD_ARGUMENTS+=("$1") ;;
- esac
- shift
-done
+bash --version 2>&1 | head -n 1
set -eo pipefail
SCRIPT_DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)
@@ -20,53 +10,53 @@ SCRIPT_DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)
###########################################################################
BUILD_PROJECT_FILE="$SCRIPT_DIR/build/build/_build.csproj"
-TEMP_DIRECTORY="$SCRIPT_DIR//.tmp"
+TEMP_DIRECTORY="$SCRIPT_DIR//.nuke/temp"
DOTNET_GLOBAL_FILE="$SCRIPT_DIR//global.json"
-DOTNET_INSTALL_URL="https://raw.githubusercontent.com/dotnet/cli/master/scripts/obtain/dotnet-install.sh"
+DOTNET_INSTALL_URL="https://dot.net/v1/dotnet-install.sh"
DOTNET_CHANNEL="Current"
export DOTNET_CLI_TELEMETRY_OPTOUT=1
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
-export NUGET_XMLDOC_MODE="skip"
+export DOTNET_MULTILEVEL_LOOKUP=0
###########################################################################
# EXECUTION
###########################################################################
function FirstJsonValue {
- perl -nle 'print $1 if m{"'$1'": "([^"\-]+)",?}' <<< ${@:2}
+ perl -nle 'print $1 if m{"'"$1"'": "([^"]+)",?}' <<< "${@:2}"
}
-# 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
-
-# If dotnet is installed locally, and expected version is not set or installation matches the expected version
-if [[ -x "$(command -v dotnet)" && (-z ${DOTNET_VERSION+x} || $(dotnet --version) == "$DOTNET_VERSION") ]]; then
+# 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_DIRECTORY="$TEMP_DIRECTORY/dotnet-unix"
- export DOTNET_EXE="$DOTNET_DIRECTORY/dotnet"
-
# 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
- if [ -z ${DOTNET_VERSION+x} ]; then
+ 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
echo "Microsoft (R) .NET Core SDK version $("$DOTNET_EXE" --version)"
-"$DOTNET_EXE" run --project "$BUILD_PROJECT_FILE" -- ${BUILD_ARGUMENTS[@]}
+"$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 -- "$@"
diff --git a/build/build/Build.cs b/build/build/Build.cs
index 725e94e..b89d875 100644
--- a/build/build/Build.cs
+++ b/build/build/Build.cs
@@ -1,11 +1,9 @@
-using System;
using System.Collections.Generic;
-using System.Linq;
using Nuke.Common;
using Nuke.Common.Git;
using Nuke.Common.ProjectModel;
using Nuke.Common.Tools.DotNet;
-using static Nuke.Common.EnvironmentInfo;
+using Nuke.Common.IO;
using static Nuke.Common.IO.FileSystemTasks;
using static Nuke.Common.IO.PathConstruction;
using static Nuke.Common.Tools.DotNet.DotNetTasks;
@@ -35,6 +33,9 @@ class Build : NukeBuild
[Parameter("publish-project")]
public string PublishProject { get; set; }
+ [Parameter("publish-self-contained")]
+ public bool PublishSelfContained { get; set; } = true;
+
AbsolutePath SourceDirectory => RootDirectory / "src";
AbsolutePath TestsDirectory => RootDirectory / "tests";
@@ -89,7 +90,7 @@ class Build : NukeBuild
DotNetTest(s => s
.SetProjectFile(Solution)
.SetConfiguration(Configuration)
- .SetLogger("trx")
+ .SetLoggers("trx")
.SetResultsDirectory(ArtifactsDirectory / "TestResults")
.EnableNoBuild()
.EnableNoRestore());
@@ -121,6 +122,7 @@ class Build : NukeBuild
.SetVersionSuffix(VersionSuffix)
.SetFramework(PublishFramework)
.SetRuntime(PublishRuntime)
+ .SetSelfContained(PublishSelfContained)
.SetOutput(ArtifactsDirectory / "Publish" / PublishProject + "-" + PublishFramework + "-" + PublishRuntime));
});
}
diff --git a/build/build/_build.csproj b/build/build/_build.csproj
index 6c25453..d144715 100644
--- a/build/build/_build.csproj
+++ b/build/build/_build.csproj
@@ -2,15 +2,15 @@
Exe
- net5.0
+ net6.0
false
-
False
CS0649;CS0169
+ 1
-
+
diff --git a/global.json b/global.json
index cef6095..055ac3d 100644
--- a/global.json
+++ b/global.json
@@ -1,6 +1,6 @@
{
"sdk": {
- "version": "5.0.400",
+ "version": "6.0.100",
"rollForward": "latestMinor",
"allowPrerelease": true
}
diff --git a/samples/SpiroNet.Avalonia/SpiroNet.Avalonia.csproj b/samples/SpiroNet.Avalonia/SpiroNet.Avalonia.csproj
index d79643d..20a5721 100644
--- a/samples/SpiroNet.Avalonia/SpiroNet.Avalonia.csproj
+++ b/samples/SpiroNet.Avalonia/SpiroNet.Avalonia.csproj
@@ -1,7 +1,7 @@
- net5.0;net461
+ net6.0
WinExe
False
False
diff --git a/src/SpiroNet.Editor.Avalonia/SpiroNet.Editor.Avalonia.csproj b/src/SpiroNet.Editor.Avalonia/SpiroNet.Editor.Avalonia.csproj
index 70ea266..bb420b1 100644
--- a/src/SpiroNet.Editor.Avalonia/SpiroNet.Editor.Avalonia.csproj
+++ b/src/SpiroNet.Editor.Avalonia/SpiroNet.Editor.Avalonia.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;netstandard2.1;net5.0;net461
+ netstandard2.0;netstandard2.1;net461;net5.0;net6.0
Library
False
False
diff --git a/src/SpiroNet.Editor/SpiroNet.Editor.csproj b/src/SpiroNet.Editor/SpiroNet.Editor.csproj
index c3bfc25..4fa4c07 100644
--- a/src/SpiroNet.Editor/SpiroNet.Editor.csproj
+++ b/src/SpiroNet.Editor/SpiroNet.Editor.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;netstandard2.1;net5.0;net461
+ netstandard2.0;netstandard2.1;net461;net5.0;net6.0
Library
False
False
diff --git a/src/SpiroNet.Json/SpiroNet.Json.csproj b/src/SpiroNet.Json/SpiroNet.Json.csproj
index fff0450..8cb9fd7 100644
--- a/src/SpiroNet.Json/SpiroNet.Json.csproj
+++ b/src/SpiroNet.Json/SpiroNet.Json.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;netstandard2.1;net5.0;net461
+ netstandard2.0;netstandard2.1;net461;net5.0;net6.0
Library
False
False
diff --git a/src/SpiroNet.ViewModels/SpiroNet.ViewModels.csproj b/src/SpiroNet.ViewModels/SpiroNet.ViewModels.csproj
index 3234ecc..f00c6a4 100644
--- a/src/SpiroNet.ViewModels/SpiroNet.ViewModels.csproj
+++ b/src/SpiroNet.ViewModels/SpiroNet.ViewModels.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;netstandard2.1;net5.0;net461
+ netstandard2.0;netstandard2.1;net461;net5.0;net6.0
Library
False
False
diff --git a/src/SpiroNet/SpiroNet.csproj b/src/SpiroNet/SpiroNet.csproj
index e1ad811..e0c20c7 100644
--- a/src/SpiroNet/SpiroNet.csproj
+++ b/src/SpiroNet/SpiroNet.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;netstandard2.1;net5.0;net461
+ netstandard2.0;netstandard2.1;net461;net5.0;net6.0
Library
False
False
diff --git a/tests/SpiroNet.UnitTests/SpiroNet.UnitTests.csproj b/tests/SpiroNet.UnitTests/SpiroNet.UnitTests.csproj
index 0e7b052..6463a7b 100644
--- a/tests/SpiroNet.UnitTests/SpiroNet.UnitTests.csproj
+++ b/tests/SpiroNet.UnitTests/SpiroNet.UnitTests.csproj
@@ -1,7 +1,7 @@
- net5.0
+ net6.0
Library
False
enable