You've already forked linux-packaging-mono
Imported Upstream version 6.4.0.137
Former-commit-id: 943baa9f16a098c33e129777827f3a9d20da00d6
This commit is contained in:
parent
e9207cf623
commit
ef583813eb
4
external/linker/.github/CODEOWNERS
vendored
4
external/linker/.github/CODEOWNERS
vendored
@@ -6,8 +6,6 @@
|
||||
* @marek-safar
|
||||
|
||||
/src/analyzer @radekdoulik
|
||||
/corebuild @sbomer
|
||||
/src/ILLink.Tasks @sbomer
|
||||
/src/linker @marek-safar @mrvoorhe
|
||||
/test @marek-safar @mrvoorhe
|
||||
|
||||
netci.groovy @sbomer
|
||||
|
36
external/linker/LICENSE
vendored
36
external/linker/LICENSE
vendored
@@ -1,19 +1,23 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
Copyright (c) .NET Foundation and Contributors
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
All rights reserved.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
7
external/linker/README.md
vendored
7
external/linker/README.md
vendored
@@ -20,8 +20,15 @@ TODO
|
||||
|
||||
## Build & Test Status
|
||||
|
||||
**Mono**
|
||||
|
||||
[](https://jenkins.mono-project.com/job/test-linker-mainline/)
|
||||
|
||||
|
||||
**.NET Core**
|
||||
|
||||
[](https://dev.azure.com/dnceng/public/_build/latest?definitionId=364&branchName=master)
|
||||
|
||||
## Link xml file examples
|
||||
|
||||
A link xml file can be used to explicitly preserve assemblies, types, and members. Below is a sample file containing examples of various usages.
|
||||
|
6
external/linker/corebuild/build.cmd
vendored
6
external/linker/corebuild/build.cmd
vendored
@@ -1,6 +0,0 @@
|
||||
@if not defined _echo @echo off
|
||||
|
||||
REM build.cmd will bootstrap the cli and ultimately call "dotnet pack"
|
||||
|
||||
@call %~dp0dotnet.cmd pack %~dp0..\src\ILLink.Tasks\ILLink.Tasks.csproj %*
|
||||
@exit /b %ERRORLEVEL%
|
7
external/linker/corebuild/build.sh
vendored
7
external/linker/corebuild/build.sh
vendored
@@ -1,7 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# build.sh will bootstrap the cli and ultimately call "dotnet build"
|
||||
|
||||
working_tree_root="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
$working_tree_root/../eng/dotnet.sh build $working_tree_root/../illink.sln $@
|
||||
exit $?
|
19
external/linker/corebuild/dotnet.cmd
vendored
19
external/linker/corebuild/dotnet.cmd
vendored
@@ -1,19 +0,0 @@
|
||||
@if not defined _echo @echo off
|
||||
setlocal
|
||||
|
||||
if not defined VisualStudioVersion (
|
||||
if defined VS150COMNTOOLS (
|
||||
call "%VS150COMNTOOLS%\VsDevCmd.bat"
|
||||
goto :Run
|
||||
)
|
||||
if defined VS140COMNTOOLS (
|
||||
call "%VS140COMNTOOLS%\VsDevCmd.bat"
|
||||
goto :Run
|
||||
)
|
||||
echo Error: Visual Studio 2015 or 2017 required.
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
:Run
|
||||
powershell -NoProfile -ExecutionPolicy unrestricted -Command "%~dp0..\eng\dotnet.ps1 -- %*"
|
||||
exit /b %ERRORLEVEL%
|
@@ -1,9 +0,0 @@
|
||||
$tasksFolder="~\.nuget\packages\illink.tasks"
|
||||
If (Test-Path $tasksFolder) {
|
||||
Remove-Item -r $tasksFolder
|
||||
}
|
||||
|
||||
$dotNetTool = Join-Path $PSScriptRoot "..\..\eng\dotnet.ps1"
|
||||
# create integration packages
|
||||
& $dotNetTool restore (Join-Path $PSScriptRoot ".." ".." "illink.sln")
|
||||
& $dotNetTool pack (Join-Path $PSScriptRoot ".." ".." "illink.sln")
|
14
external/linker/corebuild/integration/build.sh
vendored
14
external/linker/corebuild/integration/build.sh
vendored
@@ -1,14 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
__scriptpath=$(cd "$(dirname "$0")"; pwd -P)
|
||||
|
||||
tasksFolder=~/.nuget/packages/illink.tasks
|
||||
if [ -d $tasksFolder ]
|
||||
then
|
||||
rm -r $tasksFolder
|
||||
fi
|
||||
|
||||
dotNetTool=$__scriptpath/../../eng/dotnet.sh
|
||||
# create integration packages
|
||||
$dotNetTool restore $__scriptpath/../../illink.sln
|
||||
$dotNetTool pack $__scriptpath/../../illink.sln
|
7
external/linker/corebuild/restore.cmd
vendored
7
external/linker/corebuild/restore.cmd
vendored
@@ -1,7 +0,0 @@
|
||||
@if not defined _echo @echo off
|
||||
|
||||
REM restore.sh will bootstrap the cli and ultimately call "dotnet
|
||||
REM restore". Dependencies of the linker will get restored as well.
|
||||
|
||||
@call powershell %~dp0..\eng\common\msbuild.ps1 /t:Restore %~dp0..\illink.sln %*
|
||||
@exit /b %ERRORLEVEL%
|
7
external/linker/corebuild/restore.sh
vendored
7
external/linker/corebuild/restore.sh
vendored
@@ -1,7 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# restore.sh will bootstrap the cli and ultimately call "dotnet
|
||||
# restore". Dependencies of the linker will get restored as well.
|
||||
|
||||
working_tree_root="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
$working_tree_root/../eng/dotnet.sh restore $working_tree_root/../illink.sln $@
|
7
external/linker/eng/Version.Details.xml
vendored
7
external/linker/eng/Version.Details.xml
vendored
@@ -1,10 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Dependencies>
|
||||
<ProductDependencies></ProductDependencies>
|
||||
<ProductDependencies>
|
||||
</ProductDependencies>
|
||||
<ToolsetDependencies>
|
||||
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="1.0.0-beta.19125.2">
|
||||
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="1.0.0-beta.19318.2">
|
||||
<Uri>https://github.com/dotnet/arcade</Uri>
|
||||
<Sha>a0ed7c38c714b1f60f50a4a408171e2c3bcf8f7f</Sha>
|
||||
<Sha>dc538a29793fd56618d0fa3186e2388d47d00c19</Sha>
|
||||
</Dependency>
|
||||
</ToolsetDependencies>
|
||||
</Dependencies>
|
||||
|
7
external/linker/eng/Versions.props
vendored
7
external/linker/eng/Versions.props
vendored
@@ -4,16 +4,17 @@
|
||||
<VersionPrefix>0.1.6</VersionPrefix>
|
||||
<PreReleaseVersionLabel>prerelease</PreReleaseVersionLabel>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<MicrosoftNetCoreIlasmPackageVersion>3.0.0-preview4-27520-71</MicrosoftNetCoreIlasmPackageVersion>
|
||||
<!-- These should match the SDK version at https://github.com/dotnet/sdk/blob/master/eng/Versions.props -->
|
||||
<SystemReflectionMetadataVersion>1.5.0</SystemReflectionMetadataVersion>
|
||||
<MicrosoftBuildFrameworkVersion>15.4.8</MicrosoftBuildFrameworkVersion>
|
||||
<MicrosoftBuildUtilitiesCoreVersion>15.4.8</MicrosoftBuildUtilitiesCoreVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<RestoreSources>
|
||||
$(RestoreSources);
|
||||
https://dotnetfeed.blob.core.windows.net/dotnet-coreclr/index.json
|
||||
</RestoreSources>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
|
3
external/linker/eng/azure-pipelines.yml
vendored
3
external/linker/eng/azure-pipelines.yml
vendored
@@ -29,7 +29,8 @@ jobs:
|
||||
${{ if eq(variables.officialBuild, 'false') }}:
|
||||
name: Hosted VS2017
|
||||
${{ if eq(variables.officialBuild, 'true') }}:
|
||||
name: dotnet-internal-temp
|
||||
name: NetCoreInternal-Int-Pool
|
||||
queue: BuildPool.Windows.10.Amd64.VS2017
|
||||
variables:
|
||||
- ${{ if eq(variables.officialBuild, 'false') }}:
|
||||
- _SignType: test
|
||||
|
158
external/linker/eng/common/CheckSymbols.ps1
vendored
Normal file
158
external/linker/eng/common/CheckSymbols.ps1
vendored
Normal file
@@ -0,0 +1,158 @@
|
||||
param(
|
||||
[Parameter(Mandatory=$true)][string] $InputPath, # Full path to directory where NuGet packages to be checked are stored
|
||||
[Parameter(Mandatory=$true)][string] $ExtractPath, # Full path to directory where the packages will be extracted during validation
|
||||
[Parameter(Mandatory=$true)][string] $SymbolToolPath # Full path to directory where dotnet symbol-tool was installed
|
||||
)
|
||||
|
||||
Add-Type -AssemblyName System.IO.Compression.FileSystem
|
||||
|
||||
function FirstMatchingSymbolDescriptionOrDefault {
|
||||
param(
|
||||
[string] $FullPath, # Full path to the module that has to be checked
|
||||
[string] $TargetServerParam, # Parameter to pass to `Symbol Tool` indicating the server to lookup for symbols
|
||||
[string] $SymbolsPath
|
||||
)
|
||||
|
||||
$FileName = [System.IO.Path]::GetFileName($FullPath)
|
||||
$Extension = [System.IO.Path]::GetExtension($FullPath)
|
||||
|
||||
# Those below are potential symbol files that the `dotnet symbol` might
|
||||
# return. Which one will be returned depend on the type of file we are
|
||||
# checking and which type of file was uploaded.
|
||||
|
||||
# The file itself is returned
|
||||
$SymbolPath = $SymbolsPath + "\" + $FileName
|
||||
|
||||
# PDB file for the module
|
||||
$PdbPath = $SymbolPath.Replace($Extension, ".pdb")
|
||||
|
||||
# PDB file for R2R module (created by crossgen)
|
||||
$NGenPdb = $SymbolPath.Replace($Extension, ".ni.pdb")
|
||||
|
||||
# DBG file for a .so library
|
||||
$SODbg = $SymbolPath.Replace($Extension, ".so.dbg")
|
||||
|
||||
# DWARF file for a .dylib
|
||||
$DylibDwarf = $SymbolPath.Replace($Extension, ".dylib.dwarf")
|
||||
|
||||
.\dotnet-symbol.exe --symbols --modules --windows-pdbs $TargetServerParam $FullPath -o $SymbolsPath | Out-Null
|
||||
|
||||
if (Test-Path $PdbPath) {
|
||||
return "PDB"
|
||||
}
|
||||
elseif (Test-Path $NGenPdb) {
|
||||
return "NGen PDB"
|
||||
}
|
||||
elseif (Test-Path $SODbg) {
|
||||
return "DBG for SO"
|
||||
}
|
||||
elseif (Test-Path $DylibDwarf) {
|
||||
return "Dwarf for Dylib"
|
||||
}
|
||||
elseif (Test-Path $SymbolPath) {
|
||||
return "Module"
|
||||
}
|
||||
else {
|
||||
return $null
|
||||
}
|
||||
}
|
||||
|
||||
function CountMissingSymbols {
|
||||
param(
|
||||
[string] $PackagePath # Path to a NuGet package
|
||||
)
|
||||
|
||||
# Ensure input file exist
|
||||
if (!(Test-Path $PackagePath)) {
|
||||
throw "Input file does not exist: $PackagePath"
|
||||
}
|
||||
|
||||
# Extensions for which we'll look for symbols
|
||||
$RelevantExtensions = @(".dll", ".exe", ".so", ".dylib")
|
||||
|
||||
# How many files are missing symbol information
|
||||
$MissingSymbols = 0
|
||||
|
||||
$PackageId = [System.IO.Path]::GetFileNameWithoutExtension($PackagePath)
|
||||
$PackageGuid = New-Guid
|
||||
$ExtractPath = Join-Path -Path $ExtractPath -ChildPath $PackageGuid
|
||||
$SymbolsPath = Join-Path -Path $ExtractPath -ChildPath "Symbols"
|
||||
|
||||
[System.IO.Compression.ZipFile]::ExtractToDirectory($PackagePath, $ExtractPath)
|
||||
|
||||
# Makes easier to reference `symbol tool`
|
||||
Push-Location $SymbolToolPath
|
||||
|
||||
Get-ChildItem -Recurse $ExtractPath |
|
||||
Where-Object {$RelevantExtensions -contains $_.Extension} |
|
||||
ForEach-Object {
|
||||
if ($_.FullName -Match "\\ref\\") {
|
||||
Write-Host "`t Ignoring reference assembly file" $_.FullName
|
||||
return
|
||||
}
|
||||
|
||||
$SymbolsOnMSDL = FirstMatchingSymbolDescriptionOrDefault $_.FullName "--microsoft-symbol-server" $SymbolsPath
|
||||
$SymbolsOnSymWeb = FirstMatchingSymbolDescriptionOrDefault $_.FullName "--internal-server" $SymbolsPath
|
||||
|
||||
Write-Host -NoNewLine "`t Checking file" $_.FullName "... "
|
||||
|
||||
if ($SymbolsOnMSDL -ne $null -and $SymbolsOnSymWeb -ne $null) {
|
||||
Write-Host "Symbols found on MSDL (" $SymbolsOnMSDL ") and SymWeb (" $SymbolsOnSymWeb ")"
|
||||
}
|
||||
else {
|
||||
$MissingSymbols++
|
||||
|
||||
if ($SymbolsOnMSDL -eq $null -and $SymbolsOnSymWeb -eq $null) {
|
||||
Write-Host "No symbols found on MSDL or SymWeb!"
|
||||
}
|
||||
else {
|
||||
if ($SymbolsOnMSDL -eq $null) {
|
||||
Write-Host "No symbols found on MSDL!"
|
||||
}
|
||||
else {
|
||||
Write-Host "No symbols found on SymWeb!"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Pop-Location
|
||||
|
||||
return $MissingSymbols
|
||||
}
|
||||
|
||||
function CheckSymbolsAvailable {
|
||||
if (Test-Path $ExtractPath) {
|
||||
Remove-Item $ExtractPath -Force -Recurse -ErrorAction SilentlyContinue
|
||||
}
|
||||
|
||||
Get-ChildItem "$InputPath\*.nupkg" |
|
||||
ForEach-Object {
|
||||
$FileName = $_.Name
|
||||
|
||||
# These packages from Arcade-Services include some native libraries that
|
||||
# our current symbol uploader can't handle. Below is a workaround until
|
||||
# we get issue: https://github.com/dotnet/arcade/issues/2457 sorted.
|
||||
if ($FileName -Match "Microsoft\.DotNet\.Darc\.") {
|
||||
Write-Host "Ignoring Arcade-services file: $FileName"
|
||||
Write-Host
|
||||
return
|
||||
}
|
||||
elseif ($FileName -Match "Microsoft\.DotNet\.Maestro\.Tasks\.") {
|
||||
Write-Host "Ignoring Arcade-services file: $FileName"
|
||||
Write-Host
|
||||
return
|
||||
}
|
||||
|
||||
Write-Host "Validating $FileName "
|
||||
$Status = CountMissingSymbols "$InputPath\$FileName"
|
||||
|
||||
if ($Status -ne 0) {
|
||||
Write-Error "Missing symbols for $Status modules in the package $FileName"
|
||||
}
|
||||
|
||||
Write-Host
|
||||
}
|
||||
}
|
||||
|
||||
CheckSymbolsAvailable
|
@@ -1,22 +1,29 @@
|
||||
<!--
|
||||
This MSBuild file is intended to be used as the body of the default
|
||||
publishing release pipeline. The release pipeline will use this file
|
||||
to invoke the PushToStaticFeed task that will read the build asset
|
||||
manifest and publish the assets described in the manifest to
|
||||
informed target feeds.
|
||||
-->
|
||||
<!-- Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE file in the project root for more information. -->
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<!--
|
||||
This MSBuild file is intended to be used as the body of the default
|
||||
publishing release pipeline. The release pipeline will use this file
|
||||
to invoke the PushToStaticFeed task that will read the build asset
|
||||
manifest and publish the assets described in the manifest to
|
||||
informed target feeds.
|
||||
-->
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<Import Project="$(MSBuildThisFileDirectory)DefaultVersions.props" Condition="Exists('$(MSBuildThisFileDirectory)DefaultVersions.props')" />
|
||||
<Import Project="$(MSBuildThisFileDirectory)Versions.props" Condition="Exists('$(MSBuildThisFileDirectory)Versions.props')" />
|
||||
|
||||
<!--
|
||||
This won't be necessary once we solve this issue:
|
||||
https://github.com/dotnet/arcade/issues/2266
|
||||
-->
|
||||
<Import Project="$(MSBuildThisFileDirectory)ArtifactsCategory.props" Condition="Exists('$(MSBuildThisFileDirectory)ArtifactsCategory.props')" />
|
||||
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.dotnet.build.tasks.feed\$(MicrosoftDotNetBuildTasksFeedVersion)\build\Microsoft.DotNet.Build.Tasks.Feed.targets" />
|
||||
|
||||
<Target Name="PublishToFeed">
|
||||
<Error Condition="'$(TargetStaticFeed)' == ''" Text="TargetStaticFeed: Target feed for publishing assets wasn't provided." />
|
||||
<Error Condition="'$(ArtifactsCategory)' == ''" Text="ArtifactsCategory: The artifacts' category produced by the build wasn't provided." />
|
||||
<Error Condition="'$(AccountKeyToStaticFeed)' == ''" Text="AccountKeyToStaticFeed: Account key for target feed wasn't provided." />
|
||||
<Error Condition="'$(ManifestsBasePath)' == ''" Text="Full path to asset manifests directory wasn't provided." />
|
||||
<Error Condition="'$(BlobBasePath)' == '' AND '$(PackageBasePath)' == ''" Text="A valid full path to BlobBasePath of PackageBasePath is required." />
|
||||
@@ -27,7 +34,33 @@
|
||||
</ItemGroup>
|
||||
|
||||
<Error Condition="'@(ManifestFiles)' == ''" Text="No manifest file was found in the provided path: $(ManifestsBasePath)" />
|
||||
|
||||
|
||||
<!--
|
||||
For now the type of packages being published will be informed for the whole build.
|
||||
Eventually this will be specified on a per package basis:
|
||||
TODO: https://github.com/dotnet/arcade/issues/2266
|
||||
-->
|
||||
<PropertyGroup>
|
||||
<TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == '.NETCORE'">https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json</TargetStaticFeed>
|
||||
<TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == '.NETCOREVALIDATION'">https://dotnetfeed.blob.core.windows.net/arcade-validation/index.json</TargetStaticFeed>
|
||||
<TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'ASPNETCORE'">https://dotnetfeed.blob.core.windows.net/aspnet-aspnetcore/index.json</TargetStaticFeed>
|
||||
<TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'ASPNETCORETOOLING'">https://dotnetfeed.blob.core.windows.net/aspnet-aspnetcore-tooling/index.json</TargetStaticFeed>
|
||||
<TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'ENTITYFRAMEWORKCORE'">https://dotnetfeed.blob.core.windows.net/aspnet-entityframeworkcore/index.json</TargetStaticFeed>
|
||||
<TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'ASPNETEXTENSIONS'">https://dotnetfeed.blob.core.windows.net/aspnet-extensions/index.json</TargetStaticFeed>
|
||||
<TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'CORECLR'">https://dotnetfeed.blob.core.windows.net/dotnet-coreclr/index.json</TargetStaticFeed>
|
||||
<TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'CORESDK'">https://dotnetfeed.blob.core.windows.net/dotnet-sdk/index.json</TargetStaticFeed>
|
||||
<TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'TOOLSINTERNAL'">https://dotnetfeed.blob.core.windows.net/dotnet-tools-internal/index.json</TargetStaticFeed>
|
||||
<TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'TOOLSET'">https://dotnetfeed.blob.core.windows.net/dotnet-toolset/index.json</TargetStaticFeed>
|
||||
<TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'WINDOWSDESKTOP'">https://dotnetfeed.blob.core.windows.net/dotnet-windowsdesktop/index.json</TargetStaticFeed>
|
||||
<TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'NUGETCLIENT'">https://dotnetfeed.blob.core.windows.net/nuget-nugetclient/index.json</TargetStaticFeed>
|
||||
<TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'ASPNETENTITYFRAMEWORK6'">https://dotnetfeed.blob.core.windows.net/aspnet-entityframework6/index.json</TargetStaticFeed>
|
||||
<TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'ASPNETBLAZOR'">https://dotnetfeed.blob.core.windows.net/aspnet-blazor/index.json</TargetStaticFeed>
|
||||
</PropertyGroup>
|
||||
|
||||
<Error
|
||||
Condition="'$(TargetStaticFeed)' == ''"
|
||||
Text="'$(ArtifactsCategory)' wasn't recognized as a valid artifact category. Valid categories are: '.NetCore' and '.NetCoreValidation'" />
|
||||
|
||||
<!-- Iterate publishing assets from each manifest file. -->
|
||||
<PushArtifactsInManifestToFeed
|
||||
ExpectedFeedUrl="$(TargetStaticFeed)"
|
||||
@@ -41,7 +74,7 @@
|
||||
UploadTimeoutInMinutes="$(MaxUploadTimeoutInMinutes)"
|
||||
AssetManifestPath="%(ManifestFiles.Identity)"
|
||||
BlobAssetsBasePath="$(BlobBasePath)"
|
||||
PackageAssetsBasePath="$(PackageBasePath)" />
|
||||
PackageAssetsBasePath="$(PackageBasePath)"/>
|
||||
</Target>
|
||||
|
||||
<ItemGroup>
|
||||
|
82
external/linker/eng/common/PublishToSymbolServers.proj
vendored
Normal file
82
external/linker/eng/common/PublishToSymbolServers.proj
vendored
Normal file
@@ -0,0 +1,82 @@
|
||||
<!-- Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE file in the project root for more information. -->
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<!--
|
||||
This MSBuild file is intended to be used as the body of the default
|
||||
publishing release pipeline. The release pipeline will use this file
|
||||
to invoke the PublishSymbols tasks to publish symbols to MSDL and SymWeb.
|
||||
|
||||
Parameters:
|
||||
|
||||
- PDBArtifactsDirectory : Full path to directory containing PDB files to be published.
|
||||
- BlobBasePath : Full path containing *.symbols.nupkg packages to be published.
|
||||
- DotNetSymbolServerTokenMsdl : PAT to access MSDL.
|
||||
- DotNetSymbolServerTokenSymWeb : PAT to access SymWeb.
|
||||
- DotNetSymbolExpirationInDays : Expiration days for published packages. Default is 3650.
|
||||
-->
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.symboluploader.build.task\$(SymbolUploaderVersion)\build\PublishSymbols.targets" />
|
||||
|
||||
<Target Name="PublishSymbols">
|
||||
<ItemGroup>
|
||||
<FilesToPublishToSymbolServer Include="$(PDBArtifactsDirectory)\*.pdb"/>
|
||||
<PackagesToPublishToSymbolServer Include="$(BlobBasePath)\*.symbols.nupkg"/>
|
||||
|
||||
<!--
|
||||
These packages from Arcade-Services include some native libraries that
|
||||
our current symbol uploader can't handle. Below is a workaround until
|
||||
we get issue: https://github.com/dotnet/arcade/issues/2457 sorted.
|
||||
-->
|
||||
<PackagesToPublishToSymbolServer Remove="$(BlobBasePath)\Microsoft.DotNet.Darc.*" />
|
||||
<PackagesToPublishToSymbolServer Remove="$(BlobBasePath)\Microsoft.DotNet.Maestro.Tasks.*" />
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<DotNetSymbolExpirationInDays Condition="'$(DotNetSymbolExpirationInDays)' == ''">3650</DotNetSymbolExpirationInDays>
|
||||
<PublishToSymbolServer>true</PublishToSymbolServer>
|
||||
<PublishToSymbolServer Condition="'@(FilesToPublishToSymbolServer)' == '' and '@(PackagesToPublishToSymbolServer)' == ''">false</PublishToSymbolServer>
|
||||
</PropertyGroup>
|
||||
|
||||
<Message
|
||||
Importance="High"
|
||||
Text="No symbol package(s) were found to publish."
|
||||
Condition="$(PublishToSymbolServer) == false" />
|
||||
|
||||
<!-- Symbol Uploader: MSDL -->
|
||||
<Message Importance="High" Text="Publishing symbol packages to MSDL ..." Condition="$(PublishToSymbolServer)" />
|
||||
<PublishSymbols PackagesToPublish="@(PackagesToPublishToSymbolServer)"
|
||||
FilesToPublish="@(FilesToPublishToSymbolServer)"
|
||||
PersonalAccessToken="$(DotNetSymbolServerTokenMsdl)"
|
||||
SymbolServerPath="https://microsoftpublicsymbols.artifacts.visualstudio.com/DefaultCollection"
|
||||
ExpirationInDays="$(DotNetSymbolExpirationInDays)"
|
||||
VerboseLogging="true"
|
||||
DryRun="false"
|
||||
ConvertPortablePdbsToWindowsPdbs="false"
|
||||
PdbConversionTreatAsWarning=""
|
||||
Condition="$(PublishToSymbolServer)"/>
|
||||
|
||||
<!--
|
||||
Symbol Uploader: SymWeb
|
||||
Watson, VS insertion testings and the typical internal dev usage require SymWeb.
|
||||
Currently we need to call the task twice (https://github.com/dotnet/core-eng/issues/3489).
|
||||
-->
|
||||
<Message Importance="High" Text="Publishing symbol packages to SymWeb ..." Condition="$(PublishToSymbolServer)" />
|
||||
<PublishSymbols PackagesToPublish="@(PackagesToPublishToSymbolServer)"
|
||||
FilesToPublish="@(FilesToPublishToSymbolServer)"
|
||||
PersonalAccessToken="$(DotNetSymbolServerTokenSymWeb)"
|
||||
SymbolServerPath="https://microsoft.artifacts.visualstudio.com/DefaultCollection"
|
||||
ExpirationInDays="$(DotNetSymbolExpirationInDays)"
|
||||
VerboseLogging="true"
|
||||
DryRun="false"
|
||||
ConvertPortablePdbsToWindowsPdbs="false"
|
||||
PdbConversionTreatAsWarning=""
|
||||
Condition="$(PublishToSymbolServer)"/>
|
||||
</Target>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.SymbolUploader.Build.Task" Version="$(SymbolUploaderVersion)" />
|
||||
</ItemGroup>
|
||||
</Project>
|
83
external/linker/eng/common/SigningValidation.proj
vendored
Normal file
83
external/linker/eng/common/SigningValidation.proj
vendored
Normal file
@@ -0,0 +1,83 @@
|
||||
<!-- Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE file in the project root for more information. -->
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<!--
|
||||
This MSBuild file is intended to be used as the body of the default
|
||||
publishing release pipeline. The release pipeline will use this file
|
||||
to invoke the the SignCheck tool to validate that packages about to
|
||||
be published are correctly signed.
|
||||
|
||||
Parameters:
|
||||
|
||||
- PackageBasePath : Directory containing all files that need to be validated.
|
||||
- SignCheckVersion : Version of SignCheck package to be used.
|
||||
- SignValidationExclusionList : ItemGroup containing exclusion list to be forwarded to SignCheck.
|
||||
- EnableJarSigningCheck : Whether .jar files should be validated.
|
||||
- EnableStrongNameCheck : Whether strong name check should be performed.
|
||||
-->
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<!--
|
||||
From 'Signing.props' we import $(SignValidationExclusionList)
|
||||
-->
|
||||
<Import Project="$(MSBuildThisFileDirectory)Signing.props" Condition="Exists('$(MSBuildThisFileDirectory)Signing.props')" />
|
||||
|
||||
<Target Name="ValidateSigning">
|
||||
<PropertyGroup>
|
||||
<SignCheckToolPath>$(NuGetPackageRoot)Microsoft.DotNet.SignCheck\$(SignCheckVersion)\tools\Microsoft.DotNet.SignCheck.exe</SignCheckToolPath>
|
||||
|
||||
<SignCheckInputDir>$(PackageBasePath)</SignCheckInputDir>
|
||||
<SignCheckLog>signcheck.log</SignCheckLog>
|
||||
<SignCheckErrorLog>signcheck.errors.log</SignCheckErrorLog>
|
||||
<SignCheckExclusionsFile>signcheck.exclusions.txt</SignCheckExclusionsFile>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<!--
|
||||
Documentation for these arguments is available here:
|
||||
https://github.com/dotnet/arcade/tree/master/src/SignCheck
|
||||
-->
|
||||
<SignCheckArgs Include="--recursive" />
|
||||
<SignCheckArgs Include="--traverse-subfolders" />
|
||||
<SignCheckArgs Include="--file-status AllFiles" />
|
||||
<SignCheckArgs Include="--log-file $(SignCheckLog)" />
|
||||
<SignCheckArgs Include="--error-log-file $(SignCheckErrorLog)" />
|
||||
<SignCheckArgs Include="--input-files $(SignCheckInputDir)" />
|
||||
|
||||
<SignCheckArgs Include="--exclusions-file $(SignCheckExclusionsFile)" Condition="'@(SignValidationExclusionList)' != ''" />
|
||||
<SignCheckArgs Include="--verify-jar" Condition="'$(EnableJarSigningCheck)' == 'true'" />
|
||||
<SignCheckArgs Include="--verify-strongname" Condition="'$(EnableStrongNameCheck)' == 'true'" />
|
||||
</ItemGroup>
|
||||
|
||||
<WriteLinesToFile
|
||||
File="$(SignCheckExclusionsFile)"
|
||||
Lines="@(SignValidationExclusionList)"
|
||||
Condition="'@(SignValidationExclusionList)' != ''"
|
||||
Overwrite="true"
|
||||
Encoding="Unicode"/>
|
||||
|
||||
<!--
|
||||
IgnoreExitCode='true' because the tool doesn't return '0' on success.
|
||||
-->
|
||||
<Exec
|
||||
Command=""$(SignCheckToolPath)" @(SignCheckArgs, ' ')"
|
||||
IgnoreExitCode='true'
|
||||
ConsoleToMsBuild="false"
|
||||
StandardErrorImportance="high" />
|
||||
|
||||
<Error
|
||||
Text="Signing validation failed. Check $(SignCheckErrorLog) for more information."
|
||||
Condition="Exists($(SignCheckErrorLog)) and '$([System.IO.File]::ReadAllText($(SignCheckErrorLog)))' != ''" />
|
||||
|
||||
<Message
|
||||
Text="##vso[artifact.upload containerfolder=LogFiles;artifactname=LogFiles]{SignCheckErrorLog}"
|
||||
Condition="Exists($(SignCheckErrorLog)) and '$([System.IO.File]::ReadAllText($(SignCheckErrorLog)))' != ''" />
|
||||
|
||||
</Target>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.DotNet.SignCheck" Version="$(SignCheckVersion)" />
|
||||
</ItemGroup>
|
||||
</Project>
|
184
external/linker/eng/common/SourceLinkValidation.ps1
vendored
Normal file
184
external/linker/eng/common/SourceLinkValidation.ps1
vendored
Normal file
@@ -0,0 +1,184 @@
|
||||
param(
|
||||
[Parameter(Mandatory=$true)][string] $InputPath, # Full path to directory where Symbols.NuGet packages to be checked are stored
|
||||
[Parameter(Mandatory=$true)][string] $ExtractPath, # Full path to directory where the packages will be extracted during validation
|
||||
[Parameter(Mandatory=$true)][string] $SourceLinkToolPath, # Full path to directory where dotnet SourceLink CLI was installed
|
||||
[Parameter(Mandatory=$true)][string] $GHRepoName, # GitHub name of the repo including the Org. E.g., dotnet/arcade
|
||||
[Parameter(Mandatory=$true)][string] $GHCommit # GitHub commit SHA used to build the packages
|
||||
)
|
||||
|
||||
# Cache/HashMap (File -> Exist flag) used to consult whether a file exist
|
||||
# in the repository at a specific commit point. This is populated by inserting
|
||||
# all files present in the repo at a specific commit point.
|
||||
$global:RepoFiles = @{}
|
||||
|
||||
$ValidatePackage = {
|
||||
param(
|
||||
[string] $PackagePath # Full path to a Symbols.NuGet package
|
||||
)
|
||||
|
||||
# Ensure input file exist
|
||||
if (!(Test-Path $PackagePath)) {
|
||||
throw "Input file does not exist: $PackagePath"
|
||||
}
|
||||
|
||||
# Extensions for which we'll look for SourceLink information
|
||||
# For now we'll only care about Portable & Embedded PDBs
|
||||
$RelevantExtensions = @(".dll", ".exe", ".pdb")
|
||||
|
||||
Write-Host -NoNewLine "Validating" ([System.IO.Path]::GetFileName($PackagePath)) "... "
|
||||
|
||||
$PackageId = [System.IO.Path]::GetFileNameWithoutExtension($PackagePath)
|
||||
$ExtractPath = Join-Path -Path $using:ExtractPath -ChildPath $PackageId
|
||||
$FailedFiles = 0
|
||||
|
||||
Add-Type -AssemblyName System.IO.Compression.FileSystem
|
||||
|
||||
[System.IO.Directory]::CreateDirectory($ExtractPath);
|
||||
|
||||
$zip = [System.IO.Compression.ZipFile]::OpenRead($PackagePath)
|
||||
|
||||
$zip.Entries |
|
||||
Where-Object {$RelevantExtensions -contains [System.IO.Path]::GetExtension($_.Name)} |
|
||||
ForEach-Object {
|
||||
$FileName = $_.FullName
|
||||
$Extension = [System.IO.Path]::GetExtension($_.Name)
|
||||
$FakeName = -Join((New-Guid), $Extension)
|
||||
$TargetFile = Join-Path -Path $ExtractPath -ChildPath $FakeName
|
||||
|
||||
# We ignore resource DLLs
|
||||
if ($FileName.EndsWith(".resources.dll")) {
|
||||
return
|
||||
}
|
||||
|
||||
[System.IO.Compression.ZipFileExtensions]::ExtractToFile($_, $TargetFile, $true)
|
||||
|
||||
$ValidateFile = {
|
||||
param(
|
||||
[string] $FullPath, # Full path to the module that has to be checked
|
||||
[string] $RealPath,
|
||||
[ref] $FailedFiles
|
||||
)
|
||||
|
||||
# Makes easier to reference `sourcelink cli`
|
||||
Push-Location $using:SourceLinkToolPath
|
||||
|
||||
$SourceLinkInfos = .\sourcelink.exe print-urls $FullPath | Out-String
|
||||
|
||||
if ($LASTEXITCODE -eq 0 -and -not ([string]::IsNullOrEmpty($SourceLinkInfos))) {
|
||||
$NumFailedLinks = 0
|
||||
|
||||
# We only care about Http addresses
|
||||
$Matches = (Select-String '(http[s]?)(:\/\/)([^\s,]+)' -Input $SourceLinkInfos -AllMatches).Matches
|
||||
|
||||
if ($Matches.Count -ne 0) {
|
||||
$Matches.Value |
|
||||
ForEach-Object {
|
||||
$Link = $_
|
||||
$CommitUrl = -Join("https://raw.githubusercontent.com/", $using:GHRepoName, "/", $using:GHCommit, "/")
|
||||
$FilePath = $Link.Replace($CommitUrl, "")
|
||||
$Status = 200
|
||||
$Cache = $using:RepoFiles
|
||||
|
||||
if ( !($Cache.ContainsKey($FilePath)) ) {
|
||||
try {
|
||||
$Uri = $Link -as [System.URI]
|
||||
|
||||
# Only GitHub links are valid
|
||||
if ($Uri.AbsoluteURI -ne $null -and $Uri.Host -match "github") {
|
||||
$Status = (Invoke-WebRequest -Uri $Link -UseBasicParsing -Method HEAD -TimeoutSec 5).StatusCode
|
||||
}
|
||||
else {
|
||||
$Status = 0
|
||||
}
|
||||
}
|
||||
catch {
|
||||
$Status = 0
|
||||
}
|
||||
}
|
||||
|
||||
if ($Status -ne 200) {
|
||||
if ($NumFailedLinks -eq 0) {
|
||||
if ($FailedFiles.Value -eq 0) {
|
||||
Write-Host
|
||||
}
|
||||
|
||||
Write-Host "`tFile $RealPath has broken links:"
|
||||
}
|
||||
|
||||
Write-Host "`t`tFailed to retrieve $Link"
|
||||
|
||||
$NumFailedLinks++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($NumFailedLinks -ne 0) {
|
||||
$FailedFiles.value++
|
||||
$global:LASTEXITCODE = 1
|
||||
}
|
||||
}
|
||||
|
||||
Pop-Location
|
||||
}
|
||||
|
||||
&$ValidateFile $TargetFile $FileName ([ref]$FailedFiles)
|
||||
}
|
||||
|
||||
$zip.Dispose()
|
||||
|
||||
if ($FailedFiles -eq 0) {
|
||||
Write-Host "Passed."
|
||||
}
|
||||
}
|
||||
|
||||
function ValidateSourceLinkLinks {
|
||||
if (!($GHRepoName -Match "^[^\s\/]+/[^\s\/]+$")) {
|
||||
Write-Host "GHRepoName should be in the format <org>/<repo>"
|
||||
$global:LASTEXITCODE = 1
|
||||
return
|
||||
}
|
||||
|
||||
if (!($GHCommit -Match "^[0-9a-fA-F]{40}$")) {
|
||||
Write-Host "GHCommit should be a 40 chars hexadecimal string"
|
||||
$global:LASTEXITCODE = 1
|
||||
return
|
||||
}
|
||||
|
||||
$RepoTreeURL = -Join("https://api.github.com/repos/", $GHRepoName, "/git/trees/", $GHCommit, "?recursive=1")
|
||||
$CodeExtensions = @(".cs", ".vb", ".fs", ".fsi", ".fsx", ".fsscript")
|
||||
|
||||
try {
|
||||
# Retrieve the list of files in the repo at that particular commit point and store them in the RepoFiles hash
|
||||
$Data = Invoke-WebRequest $RepoTreeURL | ConvertFrom-Json | Select-Object -ExpandProperty tree
|
||||
|
||||
foreach ($file in $Data) {
|
||||
$Extension = [System.IO.Path]::GetExtension($file.path)
|
||||
|
||||
if ($CodeExtensions.Contains($Extension)) {
|
||||
$RepoFiles[$file.path] = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
catch {
|
||||
Write-Host "Problems downloading the list of files from the repo. Url used: $RepoTreeURL"
|
||||
$global:LASTEXITCODE = 1
|
||||
return
|
||||
}
|
||||
|
||||
if (Test-Path $ExtractPath) {
|
||||
Remove-Item $ExtractPath -Force -Recurse -ErrorAction SilentlyContinue
|
||||
}
|
||||
|
||||
# Process each NuGet package in parallel
|
||||
$Jobs = @()
|
||||
Get-ChildItem "$InputPath\*.symbols.nupkg" |
|
||||
ForEach-Object {
|
||||
$Jobs += Start-Job -ScriptBlock $ValidatePackage -ArgumentList $_.FullName
|
||||
}
|
||||
|
||||
foreach ($Job in $Jobs) {
|
||||
Wait-Job -Id $Job.Id | Receive-Job
|
||||
}
|
||||
}
|
||||
|
||||
Measure-Command { ValidateSourceLinkLinks }
|
24
external/linker/eng/common/build.ps1
vendored
24
external/linker/eng/common/build.ps1
vendored
@@ -1,6 +1,7 @@
|
||||
[CmdletBinding(PositionalBinding=$false)]
|
||||
Param(
|
||||
[string][Alias('c')]$configuration = "Debug",
|
||||
[string]$platform = $null,
|
||||
[string] $projects,
|
||||
[string][Alias('v')]$verbosity = "minimal",
|
||||
[string] $msbuildEngine = $null,
|
||||
@@ -11,7 +12,7 @@ Param(
|
||||
[switch][Alias('b')]$build,
|
||||
[switch] $rebuild,
|
||||
[switch] $deploy,
|
||||
[switch] $test,
|
||||
[switch][Alias('t')]$test,
|
||||
[switch] $integrationTest,
|
||||
[switch] $performanceTest,
|
||||
[switch] $sign,
|
||||
@@ -29,6 +30,7 @@ Param(
|
||||
function Print-Usage() {
|
||||
Write-Host "Common settings:"
|
||||
Write-Host " -configuration <value> Build configuration: 'Debug' or 'Release' (short: -c)"
|
||||
Write-Host " -platform <value> Platform configuration: 'x86', 'x64' or any valid Platform value to pass to msbuild"
|
||||
Write-Host " -verbosity <value> Msbuild verbosity: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic] (short: -v)"
|
||||
Write-Host " -binaryLog Output binary log (short: -bl)"
|
||||
Write-Host " -help Print help and exit"
|
||||
@@ -40,10 +42,10 @@ function Print-Usage() {
|
||||
Write-Host " -rebuild Rebuild solution"
|
||||
Write-Host " -deploy Deploy built VSIXes"
|
||||
Write-Host " -deployDeps Deploy dependencies (e.g. VSIXes for integration tests)"
|
||||
Write-Host " -test Run all unit tests in the solution"
|
||||
Write-Host " -pack Package build outputs into NuGet packages and Willow components"
|
||||
Write-Host " -test Run all unit tests in the solution (short: -t)"
|
||||
Write-Host " -integrationTest Run all integration tests in the solution"
|
||||
Write-Host " -performanceTest Run all performance tests in the solution"
|
||||
Write-Host " -pack Package build outputs into NuGet packages and Willow components"
|
||||
Write-Host " -sign Sign build outputs"
|
||||
Write-Host " -publish Publish artifacts (e.g. symbols)"
|
||||
Write-Host ""
|
||||
@@ -51,9 +53,11 @@ function Print-Usage() {
|
||||
Write-Host "Advanced settings:"
|
||||
Write-Host " -projects <value> Semi-colon delimited list of sln/proj's to build. Globbing is supported (*.sln)"
|
||||
Write-Host " -ci Set when running on CI server"
|
||||
Write-Host " -prepareMachine Prepare machine for CI run"
|
||||
Write-Host " -prepareMachine Prepare machine for CI run, clean up processes after build"
|
||||
Write-Host " -warnAsError <value> Sets warnaserror msbuild parameter ('true' or 'false')"
|
||||
Write-Host " -msbuildEngine <value> Msbuild engine to use to run build ('dotnet', 'vs', or unspecified)."
|
||||
Write-Host ""
|
||||
|
||||
Write-Host "Command line arguments not listed above are passed thru to msbuild."
|
||||
Write-Host "The above arguments can be shortened as much as to be unambiguous (e.g. -co for configuration, -t for test, etc.)."
|
||||
}
|
||||
@@ -75,6 +79,7 @@ function Build {
|
||||
InitializeCustomToolset
|
||||
|
||||
$bl = if ($binaryLog) { "/bl:" + (Join-Path $LogDir "Build.binlog") } else { "" }
|
||||
$platformArg = if ($platform) { "/p:Platform=$platform" } else { "" }
|
||||
|
||||
if ($projects) {
|
||||
# Re-assign properties to a new variable because PowerShell doesn't let us append properties directly for unclear reasons.
|
||||
@@ -86,6 +91,7 @@ function Build {
|
||||
|
||||
MSBuild $toolsetBuildProj `
|
||||
$bl `
|
||||
$platformArg `
|
||||
/p:Configuration=$configuration `
|
||||
/p:RepoRoot=$RepoRoot `
|
||||
/p:Restore=$restore `
|
||||
@@ -99,12 +105,11 @@ function Build {
|
||||
/p:PerformanceTest=$performanceTest `
|
||||
/p:Sign=$sign `
|
||||
/p:Publish=$publish `
|
||||
/p:ContinuousIntegrationBuild=$ci `
|
||||
@properties
|
||||
}
|
||||
|
||||
try {
|
||||
if ($help -or (($properties -ne $null) -and ($properties.Contains("/help") -or $properties.Contains("/?")))) {
|
||||
if ($help -or (($null -ne $properties) -and ($properties.Contains("/help") -or $properties.Contains("/?")))) {
|
||||
Print-Usage
|
||||
exit 0
|
||||
}
|
||||
@@ -121,12 +126,15 @@ try {
|
||||
. $configureToolsetScript
|
||||
}
|
||||
|
||||
if (($restore) -and ($null -eq $env:DisableNativeToolsetInstalls)) {
|
||||
InitializeNativeTools
|
||||
}
|
||||
|
||||
Build
|
||||
}
|
||||
catch {
|
||||
Write-Host $_
|
||||
Write-Host $_.Exception
|
||||
Write-Host $_.ScriptStackTrace
|
||||
Write-PipelineTelemetryError -Category "InitializeToolset" -Message $_
|
||||
ExitWithExitCode 1
|
||||
}
|
||||
|
||||
|
93
external/linker/eng/common/build.sh
vendored
93
external/linker/eng/common/build.sh
vendored
@@ -10,20 +10,24 @@ set -e
|
||||
usage()
|
||||
{
|
||||
echo "Common settings:"
|
||||
echo " --configuration <value> Build configuration: 'Debug' or 'Release' (short: --c)"
|
||||
echo " --configuration <value> Build configuration: 'Debug' or 'Release' (short: -c)"
|
||||
echo " --verbosity <value> Msbuild verbosity: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic] (short: -v)"
|
||||
echo " --binaryLog Create MSBuild binary log (short: -bl)"
|
||||
echo ""
|
||||
echo "Actions:"
|
||||
echo " --restore Restore dependencies (short: -r)"
|
||||
echo " --build Build all projects (short: -b)"
|
||||
echo " --rebuild Rebuild all projects"
|
||||
echo " --test Run all unit tests (short: -t)"
|
||||
echo " --sign Sign build outputs"
|
||||
echo " --publish Publish artifacts (e.g. symbols)"
|
||||
echo " --pack Package build outputs into NuGet packages and Willow components"
|
||||
echo " --help Print help and exit (short: -h)"
|
||||
echo ""
|
||||
|
||||
echo "Actions:"
|
||||
echo " --restore Restore dependencies (short: -r)"
|
||||
echo " --build Build solution (short: -b)"
|
||||
echo " --rebuild Rebuild solution"
|
||||
echo " --test Run all unit tests in the solution (short: -t)"
|
||||
echo " --integrationTest Run all integration tests in the solution"
|
||||
echo " --performanceTest Run all performance tests in the solution"
|
||||
echo " --pack Package build outputs into NuGet packages and Willow components"
|
||||
echo " --sign Sign build outputs"
|
||||
echo " --publish Publish artifacts (e.g. symbols)"
|
||||
echo ""
|
||||
|
||||
echo "Advanced settings:"
|
||||
echo " --projects <value> Project or solution file(s) to build"
|
||||
echo " --ci Set when running on CI server"
|
||||
@@ -31,7 +35,8 @@ usage()
|
||||
echo " --nodeReuse <value> Sets nodereuse msbuild parameter ('true' or 'false')"
|
||||
echo " --warnAsError <value> Sets warnaserror msbuild parameter ('true' or 'false')"
|
||||
echo ""
|
||||
echo "Command line arguments starting with '/p:' are passed through to MSBuild."
|
||||
echo "Command line arguments not listed above are passed thru to msbuild."
|
||||
echo "Arguments can also be passed in with a single hyphen."
|
||||
}
|
||||
|
||||
source="${BASH_SOURCE[0]}"
|
||||
@@ -50,10 +55,10 @@ restore=false
|
||||
build=false
|
||||
rebuild=false
|
||||
test=false
|
||||
pack=false
|
||||
publish=false
|
||||
integration_test=false
|
||||
performance_test=false
|
||||
pack=false
|
||||
publish=false
|
||||
sign=false
|
||||
public=false
|
||||
ci=false
|
||||
@@ -61,89 +66,83 @@ ci=false
|
||||
warn_as_error=true
|
||||
node_reuse=true
|
||||
binary_log=false
|
||||
pipelines_log=false
|
||||
|
||||
projects=''
|
||||
configuration='Debug'
|
||||
prepare_machine=false
|
||||
verbosity='minimal'
|
||||
|
||||
properties=''
|
||||
|
||||
while [[ $# > 0 ]]; do
|
||||
opt="$(echo "$1" | awk '{print tolower($0)}')"
|
||||
opt="$(echo "${1/#--/-}" | awk '{print tolower($0)}')"
|
||||
case "$opt" in
|
||||
--help|-h)
|
||||
-help|-h)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
--configuration|-c)
|
||||
-configuration|-c)
|
||||
configuration=$2
|
||||
shift
|
||||
;;
|
||||
--verbosity|-v)
|
||||
-verbosity|-v)
|
||||
verbosity=$2
|
||||
shift
|
||||
;;
|
||||
--binarylog|-bl)
|
||||
-binarylog|-bl)
|
||||
binary_log=true
|
||||
;;
|
||||
--restore|-r)
|
||||
-pipelineslog|-pl)
|
||||
pipelines_log=true
|
||||
;;
|
||||
-restore|-r)
|
||||
restore=true
|
||||
;;
|
||||
--build|-b)
|
||||
-build|-b)
|
||||
build=true
|
||||
;;
|
||||
--rebuild)
|
||||
-rebuild)
|
||||
rebuild=true
|
||||
;;
|
||||
--pack)
|
||||
-pack)
|
||||
pack=true
|
||||
;;
|
||||
--test|-t)
|
||||
-test|-t)
|
||||
test=true
|
||||
;;
|
||||
--integrationtest)
|
||||
-integrationtest)
|
||||
integration_test=true
|
||||
;;
|
||||
--performancetest)
|
||||
-performancetest)
|
||||
performance_test=true
|
||||
;;
|
||||
--sign)
|
||||
-sign)
|
||||
sign=true
|
||||
;;
|
||||
--publish)
|
||||
-publish)
|
||||
publish=true
|
||||
;;
|
||||
--preparemachine)
|
||||
-preparemachine)
|
||||
prepare_machine=true
|
||||
;;
|
||||
--projects)
|
||||
-projects)
|
||||
projects=$2
|
||||
shift
|
||||
;;
|
||||
--ci)
|
||||
-ci)
|
||||
ci=true
|
||||
;;
|
||||
--warnaserror)
|
||||
-warnaserror)
|
||||
warn_as_error=$2
|
||||
shift
|
||||
;;
|
||||
--nodereuse)
|
||||
-nodereuse)
|
||||
node_reuse=$2
|
||||
shift
|
||||
;;
|
||||
/p:*)
|
||||
properties="$properties $1"
|
||||
;;
|
||||
/m:*)
|
||||
properties="$properties $1"
|
||||
;;
|
||||
/bl:*)
|
||||
properties="$properties $1"
|
||||
;;
|
||||
*)
|
||||
echo "Invalid argument: $1"
|
||||
usage
|
||||
exit 1
|
||||
properties="$properties $1"
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -151,6 +150,7 @@ while [[ $# > 0 ]]; do
|
||||
done
|
||||
|
||||
if [[ "$ci" == true ]]; then
|
||||
pipelines_log=true
|
||||
binary_log=true
|
||||
node_reuse=false
|
||||
fi
|
||||
@@ -191,7 +191,6 @@ function Build {
|
||||
/p:PerformanceTest=$performance_test \
|
||||
/p:Sign=$sign \
|
||||
/p:Publish=$publish \
|
||||
/p:ContinuousIntegrationBuild=$ci \
|
||||
$properties
|
||||
|
||||
ExitWithExitCode 0
|
||||
@@ -210,4 +209,8 @@ if [[ -n "${useInstalledDotNetCli:-}" ]]; then
|
||||
use_installed_dotnet_cli="$useInstalledDotNetCli"
|
||||
fi
|
||||
|
||||
if [[ "$restore" == true && -z ${DisableNativeToolsetInstalls:-} ]]; then
|
||||
InitializeNativeTools
|
||||
fi
|
||||
|
||||
Build
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user