Executable
This commit is contained in:
Родитель
ba1709c6fb
Коммит
8829bbd1b4
|
@ -0,0 +1 @@
|
||||||
|
LanguageEditor.sln
|
|
@ -0,0 +1,69 @@
|
||||||
|
[CmdletBinding()]
|
||||||
|
Param(
|
||||||
|
#[switch]$CustomParam,
|
||||||
|
[Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)]
|
||||||
|
[string[]]$BuildArguments
|
||||||
|
)
|
||||||
|
|
||||||
|
Write-Output "Windows PowerShell $($Host.Version)"
|
||||||
|
|
||||||
|
Set-StrictMode -Version 2.0; $ErrorActionPreference = "Stop"; $ConfirmPreference = "None"; trap { exit 1 }
|
||||||
|
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
|
||||||
|
|
||||||
|
###########################################################################
|
||||||
|
# CONFIGURATION
|
||||||
|
###########################################################################
|
||||||
|
|
||||||
|
$BuildProjectFile = "$PSScriptRoot\build\build\_build.csproj"
|
||||||
|
$TempDirectory = "$PSScriptRoot\\.tmp"
|
||||||
|
|
||||||
|
$DotNetGlobalFile = "$PSScriptRoot\\global.json"
|
||||||
|
$DotNetInstallUrl = "https://raw.githubusercontent.com/dotnet/cli/master/scripts/obtain/dotnet-install.ps1"
|
||||||
|
$DotNetChannel = "Current"
|
||||||
|
|
||||||
|
$env:DOTNET_SKIP_FIRST_TIME_EXPERIENCE = 1
|
||||||
|
$env:DOTNET_CLI_TELEMETRY_OPTOUT = 1
|
||||||
|
$env:NUGET_XMLDOC_MODE = "skip"
|
||||||
|
|
||||||
|
###########################################################################
|
||||||
|
# EXECUTION
|
||||||
|
###########################################################################
|
||||||
|
|
||||||
|
function ExecSafe([scriptblock] $cmd) {
|
||||||
|
& $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)) {
|
||||||
|
$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-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 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Output "Microsoft (R) .NET Core SDK version $(& $env:DOTNET_EXE --version)"
|
||||||
|
|
||||||
|
ExecSafe { & $env:DOTNET_EXE run --project $BuildProjectFile -- $BuildArguments }
|
|
@ -0,0 +1,72 @@
|
||||||
|
#!/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
|
||||||
|
|
||||||
|
set -eo pipefail
|
||||||
|
SCRIPT_DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)
|
||||||
|
|
||||||
|
###########################################################################
|
||||||
|
# CONFIGURATION
|
||||||
|
###########################################################################
|
||||||
|
|
||||||
|
BUILD_PROJECT_FILE="$SCRIPT_DIR/build/build/_build.csproj"
|
||||||
|
TEMP_DIRECTORY="$SCRIPT_DIR//.tmp"
|
||||||
|
|
||||||
|
DOTNET_GLOBAL_FILE="$SCRIPT_DIR//global.json"
|
||||||
|
DOTNET_INSTALL_URL="https://raw.githubusercontent.com/dotnet/cli/master/scripts/obtain/dotnet-install.sh"
|
||||||
|
DOTNET_CHANNEL="Current"
|
||||||
|
|
||||||
|
export DOTNET_CLI_TELEMETRY_OPTOUT=1
|
||||||
|
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
|
||||||
|
export NUGET_XMLDOC_MODE="skip"
|
||||||
|
|
||||||
|
###########################################################################
|
||||||
|
# EXECUTION
|
||||||
|
###########################################################################
|
||||||
|
|
||||||
|
function FirstJsonValue {
|
||||||
|
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
|
||||||
|
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"
|
||||||
|
|
||||||
|
# Install by channel or version
|
||||||
|
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
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Microsoft (R) .NET Core SDK version $("$DOTNET_EXE" --version)"
|
||||||
|
|
||||||
|
"$DOTNET_EXE" run --project "$BUILD_PROJECT_FILE" -- ${BUILD_ARGUMENTS[@]}
|
|
@ -0,0 +1,126 @@
|
||||||
|
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 static Nuke.Common.IO.FileSystemTasks;
|
||||||
|
using static Nuke.Common.IO.PathConstruction;
|
||||||
|
using static Nuke.Common.Tools.DotNet.DotNetTasks;
|
||||||
|
|
||||||
|
class Build : NukeBuild
|
||||||
|
{
|
||||||
|
public static int Main() => Execute<Build>(x => x.Compile);
|
||||||
|
|
||||||
|
[Solution]
|
||||||
|
readonly Solution Solution;
|
||||||
|
|
||||||
|
[GitRepository]
|
||||||
|
readonly GitRepository GitRepository;
|
||||||
|
|
||||||
|
[Parameter("configuration")]
|
||||||
|
public string Configuration { get; set; }
|
||||||
|
|
||||||
|
[Parameter("version-suffix")]
|
||||||
|
public string VersionSuffix { get; set; }
|
||||||
|
|
||||||
|
[Parameter("publish-framework")]
|
||||||
|
public string PublishFramework { get; set; }
|
||||||
|
|
||||||
|
[Parameter("publish-runtime")]
|
||||||
|
public string PublishRuntime { get; set; }
|
||||||
|
|
||||||
|
[Parameter("publish-project")]
|
||||||
|
public string PublishProject { get; set; }
|
||||||
|
|
||||||
|
AbsolutePath SourceDirectory => RootDirectory / "src";
|
||||||
|
|
||||||
|
AbsolutePath TestsDirectory => RootDirectory / "tests";
|
||||||
|
|
||||||
|
AbsolutePath ArtifactsDirectory => RootDirectory / "artifacts";
|
||||||
|
|
||||||
|
protected override void OnBuildInitialized()
|
||||||
|
{
|
||||||
|
Configuration = Configuration ?? "Release";
|
||||||
|
VersionSuffix = VersionSuffix ?? "";
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DeleteDirectories(IReadOnlyCollection<string> directories)
|
||||||
|
{
|
||||||
|
foreach (var directory in directories)
|
||||||
|
{
|
||||||
|
DeleteDirectory(directory);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Target Clean => _ => _
|
||||||
|
.Executes(() =>
|
||||||
|
{
|
||||||
|
DeleteDirectories(GlobDirectories(SourceDirectory, "**/bin", "**/obj"));
|
||||||
|
DeleteDirectories(GlobDirectories(TestsDirectory, "**/bin", "**/obj"));
|
||||||
|
EnsureCleanDirectory(ArtifactsDirectory);
|
||||||
|
});
|
||||||
|
|
||||||
|
Target Restore => _ => _
|
||||||
|
.DependsOn(Clean)
|
||||||
|
.Executes(() =>
|
||||||
|
{
|
||||||
|
DotNetRestore(s => s
|
||||||
|
.SetProjectFile(Solution));
|
||||||
|
});
|
||||||
|
|
||||||
|
Target Compile => _ => _
|
||||||
|
.DependsOn(Restore)
|
||||||
|
.Executes(() =>
|
||||||
|
{
|
||||||
|
DotNetBuild(s => s
|
||||||
|
.SetProjectFile(Solution)
|
||||||
|
.SetConfiguration(Configuration)
|
||||||
|
.SetVersionSuffix(VersionSuffix)
|
||||||
|
.EnableNoRestore());
|
||||||
|
});
|
||||||
|
|
||||||
|
Target Test => _ => _
|
||||||
|
.DependsOn(Compile)
|
||||||
|
.Executes(() =>
|
||||||
|
{
|
||||||
|
DotNetTest(s => s
|
||||||
|
.SetProjectFile(Solution)
|
||||||
|
.SetConfiguration(Configuration)
|
||||||
|
.SetLogger("trx")
|
||||||
|
.SetResultsDirectory(ArtifactsDirectory / "TestResults")
|
||||||
|
.EnableNoBuild()
|
||||||
|
.EnableNoRestore());
|
||||||
|
});
|
||||||
|
|
||||||
|
Target Pack => _ => _
|
||||||
|
.DependsOn(Test)
|
||||||
|
.Executes(() =>
|
||||||
|
{
|
||||||
|
DotNetPack(s => s
|
||||||
|
.SetProject(Solution)
|
||||||
|
.SetConfiguration(Configuration)
|
||||||
|
.SetVersionSuffix(VersionSuffix)
|
||||||
|
.SetOutputDirectory(ArtifactsDirectory / "NuGet")
|
||||||
|
.EnableNoBuild()
|
||||||
|
.EnableNoRestore());
|
||||||
|
});
|
||||||
|
|
||||||
|
Target Publish => _ => _
|
||||||
|
.DependsOn(Test)
|
||||||
|
.Requires(() => PublishRuntime)
|
||||||
|
.Requires(() => PublishFramework)
|
||||||
|
.Requires(() => PublishProject)
|
||||||
|
.Executes(() =>
|
||||||
|
{
|
||||||
|
DotNetPublish(s => s
|
||||||
|
.SetProject(Solution.GetProject(PublishProject))
|
||||||
|
.SetConfiguration(Configuration)
|
||||||
|
.SetVersionSuffix(VersionSuffix)
|
||||||
|
.SetFramework(PublishFramework)
|
||||||
|
.SetRuntime(PublishRuntime)
|
||||||
|
.SetOutput(ArtifactsDirectory / "Publish" / PublishProject + "-" + PublishFramework + "-" + PublishRuntime));
|
||||||
|
});
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||||
|
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
|
||||||
|
<RootNamespace></RootNamespace>
|
||||||
|
<IsPackable>False</IsPackable>
|
||||||
|
<NoWarn>CS0649;CS0169</NoWarn>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Nuke.Common" Version="0.21.2" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<NukeMetadata Include="**\*.json" Exclude="bin\**;obj\**" />
|
||||||
|
<NukeExternalFiles Include="**\*.*.ext" Exclude="bin\**;obj\**" />
|
||||||
|
<None Remove="*.ref;*.txt" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
Загрузка…
Ссылка в новой задаче