Skip to content

Use Azure Pipelines exclusively (i.e. drop Travis, AppVeyor) #1761

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Feb 16, 2020
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 2 additions & 41 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,46 +1,7 @@
# Travis-CI Build for libgit2sharp
# see travis-ci.org for details

language: csharp
mono: none

matrix:
include:
- os: linux
dist: xenial
before_install:
- |
wget -q https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get update
sudo apt-get install -y powershell
- os: osx
osx_image: xcode8.3
before_install:
- brew update # This is necessary to get pwsh 6.2 instead of some 6.0-preview that isn't named `pwsh`
- brew cask install powershell
fast_finish: true

before_install:
- date -u
- uname -a
- env | sort

install:
- git fetch --unshallow
- pwsh ./tools/Install-DotNetSdk.ps1 ; export PATH=~/.dotnet:$PATH

# Build libgit2, LibGit2Sharp and run the tests
script:
- ./buildandtest.sh 'LEAKS_IDENTIFYING'

# Only watch the development branch
# Disable Travis-CI
branches:
only:
- master
- /^maint.*/

# Notify of build changes
notifications:
email:
- emeric.fermas@gmail.com
- NOTTHISONE
4 changes: 4 additions & 0 deletions Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,11 @@
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<OutputPath>$(MSBuildThisFileDirectory)bin\$(MSBuildProjectName)\$(Configuration)\</OutputPath>
<BaseIntermediateOutputPath>$(MSBuildThisFileDirectory)obj\$(MSBuildProjectName)\</BaseIntermediateOutputPath>
<PackageOutputPath>$(MSBuildThisFileDirectory)bin\Packages\$(Configuration)\</PackageOutputPath>
<DefineConstants Condition=" '$(ExtraDefine)' != '' ">$(DefineConstants);$(ExtraDefine)</DefineConstants>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.0" PrivateAssets="All" />
</ItemGroup>
</Project>
8 changes: 8 additions & 0 deletions Directory.Build.targets
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<Project>
<PropertyGroup Condition=" '$(IsTestProject)' == 'true' ">
<CoverletOutputFormat>cobertura</CoverletOutputFormat>
<Exclude>[xunit.*]*</Exclude>
<!-- Ensure we preserve each coverlet output file per target framework: https://github.com/tonerdo/coverlet/issues/177 -->
<CoverletOutput>$(OutputPath)/</CoverletOutput>
</PropertyGroup>
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This whole file enables code coverage collection when /p:CollectCoverage=true is specified, as is now done in the Azure Pipelines .yml file.

</Project>
3 changes: 2 additions & 1 deletion LibGit2Sharp.Tests/LibGit2Sharp.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.0.1" />
<PackageReference Include="coverlet.msbuild" Version="2.7.0" />
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is required for code coverage.

<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
<PackageReference Include="Moq" Version="4.10.1" />
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
<PackageReference Include="xunit" Version="2.4.1" />
Expand Down
2 changes: 1 addition & 1 deletion LibGit2Sharp.Tests/StatusFixture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -640,7 +640,7 @@ public void CanIncludeStatusOfUnalteredFiles()
RepositoryStatus status = repo.RetrieveStatus(new StatusOptions() { IncludeUnaltered = true });

Assert.Equal(unalteredPaths.Length, status.Unaltered.Count());
Assert.Equal(unalteredPaths, status.Unaltered.OrderBy(s => s.FilePath).Select(s => s.FilePath).ToArray());
Assert.Equal(unalteredPaths, status.Unaltered.OrderBy(s => s.FilePath, StringComparer.OrdinalIgnoreCase).Select(s => s.FilePath).ToArray());
}
}

Expand Down
1 change: 1 addition & 0 deletions LibGit2Sharp.Tests/desktop/ShadowCopyFixture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ namespace LibGit2Sharp.Tests
public class ShadowCopyFixture : BaseFixture
{
[Fact]
[Trait("TestCategory", "FailsWhileInstrumented")]
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test sets up an appdomain and loads libgit2sharp. When code coverage is turned on, it invalidates the signature of the strong-name signed assembly and then .NET Framework won't load it. So skip the test during instrumented test runs. We run this test by itself in the very next step on Azure Pipelines to make sure it runs.

public void CanProbeForNativeBinariesFromAShadowCopiedAssembly()
{
Type type = typeof(Wrapper);
Expand Down
9 changes: 5 additions & 4 deletions LibGit2Sharp/LibGit2Sharp.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,13 @@
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
<SignAssembly>true</SignAssembly>
<AssemblyOriginatorKeyFile>..\libgit2sharp.snk</AssemblyOriginatorKeyFile>
<PackageIcon>square-logo.png</PackageIcon>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>

<ItemGroup>
<CodeAnalysisDictionary Include="CustomDictionary.xml" />
<None Include="..\square-logo.png" Pack="true" PackagePath="" />
<None Include="..\README.md" Pack="true" PackagePath="App_Readme\" />
<None Include="..\LICENSE.md" Pack="true" PackagePath="App_Readme\" />
<None Include="..\CHANGES.md" Pack="true" PackagePath="App_Readme\" />
Expand All @@ -28,18 +31,16 @@

<ItemGroup>
<PackageReference Include="LibGit2Sharp.NativeBinaries" Version="[2.0.305]" PrivateAssets="none" />
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0-beta-63127-02" PrivateAssets="all" />
<PackageReference Include="Nerdbank.GitVersioning" Version="2.3.138" PrivateAssets="all" />
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="all" />
<PackageReference Include="Nerdbank.GitVersioning" Version="3.0.50" PrivateAssets="all" />
</ItemGroup>

<Import Project="..\Targets\CodeGenerator.targets" />
<Import Project="..\Targets\GenerateNativeDllName.targets" />

<Target Name="SetNuSpecProperties" BeforeTargets="GenerateNuspec" DependsOnTargets="GetBuildVersion">
<PropertyGroup>
<PackageIconUrl>https://github.com/libgit2/libgit2sharp/raw/$(GitCommitIdShort)/square-logo.png</PackageIconUrl>
<PackageReleaseNotes>https://github.com/libgit2/libgit2sharp/blob/$(GitCommitIdShort)/CHANGES.md#libgit2sharp-changes</PackageReleaseNotes>
<PackageLicenseUrl>https://github.com/libgit2/libgit2sharp/raw/$(GitCommitIdShort)/LICENSE.md</PackageLicenseUrl>
</PropertyGroup>
</Target>

Expand Down
160 changes: 3 additions & 157 deletions appveyor.yml
Original file line number Diff line number Diff line change
@@ -1,158 +1,4 @@
version: '{build}'

os: Visual Studio 2019

# Disable AppVeyor
branches:
only:
- master
- /^maint.*/

configuration: release

skip_tags: true

nuget:
disable_publish_on_pr: true

environment:
coveralls_token:
secure: ixIsBslo9NheDb5lJknF58EYdgvZ0r3/L0ecRiXjfXmjHBLvoSU6/ZRwaMM+BAlG
coverity_token:
secure: nuzUT+HecXGIi3KaPd/1hgFEZJan/j6+oNbPV75JKjk=
coverity_email:
secure: eGVilNg1Yuq+Xj+SW8r3WCtjnzhoDV0sNJkma4NRq7A=
matrix:
- publish_on_success: False
ExtraDefine: LEAKS_IDENTIFYING
- publish_on_success: True

matrix:
fast_finish: true

install:
- ps: |
Write-Host "Commit being built = " -NoNewLine
Write-Host $Env:APPVEYOR_REPO_COMMIT -ForegroundColor "Green"
Write-Host "Target branch = " -NoNewLine
Write-Host $Env:APPVEYOR_REPO_BRANCH -ForegroundColor "Green"
Write-Host "Is a Pull Request = " -NoNewLine
Write-Host $($Env:APPVEYOR_PULL_REQUEST_NUMBER -ne $null) -ForegroundColor "Green"

$CommitDate = [DateTime]::Parse($Env:APPVEYOR_REPO_COMMIT_TIMESTAMP)
$BuildDate = $CommitDate.ToUniversalTime().ToString("yyyyMMddHHmmss")
Write-Host "Merge commit UTC timestamp = " -NoNewLine
Write-Host $BuildDate -ForegroundColor "Green"

$Env:SHOULD_RUN_COVERITY_ANALYSIS = $($Env:APPVEYOR_SCHEDULED_BUILD -eq $True)
Write-Host "Should run Coverity analysis = " -NoNewLine
Write-Host $Env:SHOULD_RUN_COVERITY_ANALYSIS -ForegroundColor "Green"

$Env:SHOULD_RUN_COVERALLS = $($Env:APPVEYOR_SCHEDULED_BUILD -eq $True)
Write-Host "Should run Coveralls = " -NoNewLine
Write-Host $Env:SHOULD_RUN_COVERALLS -ForegroundColor "Green"

Write-Host "Identifying leaks = " -NoNewLine
Write-Host ($Env:ExtraDefine -eq "LEAKS_IDENTIFYING") -ForegroundColor "Green"

Write-Host "Should publish on success = " -NoNewLine
Write-Host $Env:publish_on_success -ForegroundColor "Green"

If ($Env:SHOULD_RUN_COVERALLS -eq $True)
{
nuget install OpenCover -Version 4.6.166 -ExcludeVersion -OutputDirectory .\packages
nuget install coveralls.net -Version 0.6.0 -ExcludeVersion -OutputDirectory .\packages
}

If ($Env:SHOULD_RUN_COVERITY_ANALYSIS -eq $True)
{
cinst curl -y
}

./tools/Install-DotNetSdk.ps1

before_build:
- ps: |
msbuild "$Env:APPVEYOR_BUILD_FOLDER\LibGit2Sharp.sln" `
/nologo /verbosity:quiet `
/logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" `
/t:restore

build_script:
- ps: |
& cov-build.exe --dir cov-int msbuild "$Env:APPVEYOR_BUILD_FOLDER\LibGit2Sharp.sln" `
/nologo /verbosity:minimal /fl /flp:verbosity=normal `
/logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" `
/t:build,pack

test_script:
- ps: |
Foreach ($runner in 'xunit.console.exe','xunit.console.x86.exe')
{
If ($Env:SHOULD_RUN_COVERALLS -eq $True -and $Env:publish_on_success -eq $True)
{
.\packages\OpenCover\tools\OpenCover.Console.exe `
-register:user `
"-target:""$Env:userprofile\.nuget\packages\xunit.runner.console\2.4.1\tools\net46\$runner""" `
"-targetargs:""$Env:APPVEYOR_BUILD_FOLDER\bin\LibGit2Sharp.Tests\Release\net46\LibGit2Sharp.Tests.dll"" -noshadow" `
"-filter:+[LibGit2Sharp]* -[LibGit2Sharp.Tests]*" `
-hideskipped:All `
-output:opencoverCoverage.xml
}
ElseIf ($Env:SHOULD_RUN_COVERITY_ANALYSIS -eq $False)
{
& "$Env:userprofile\.nuget\packages\xunit.runner.console\2.4.1\tools\net46\$runner" `
"$Env:APPVEYOR_BUILD_FOLDER\bin\LibGit2Sharp.Tests\Release\net46\LibGit2Sharp.Tests.dll" -noshadow
}
}

- dotnet test LibGit2Sharp.Tests/LibGit2Sharp.Tests.csproj -f netcoreapp2.1 --no-restore --no-build

after_test:
- ps: |
If ($Env:SHOULD_RUN_COVERALLS -eq $True -and $Env:publish_on_success -eq $True)
{
Write-Host "Uploading code coverage result..." -ForegroundColor "Green"

.\packages\coveralls.net\tools\csmacnz.Coveralls.exe `
--opencover -i opencoverCoverage.xml `
--repoToken $Env:coveralls_token `
--useRelativePaths `
--basePath "$Env:APPVEYOR_BUILD_FOLDER\"`
}

If ($Env:SHOULD_RUN_COVERITY_ANALYSIS -eq $True -and $Env:publish_on_success -eq $True)
{
7z a "$Env:APPVEYOR_BUILD_FOLDER\$Env:APPVEYOR_PROJECT_NAME.zip" "$Env:APPVEYOR_BUILD_FOLDER\cov-int\"

# cf. http://stackoverflow.com/a/25045154/335418
Remove-item alias:curl

Write-Host "Uploading Coverity analysis result..." -ForegroundColor "Green"

curl --silent --show-error `
--output curl-out.txt `
--form token="$Env:coverity_token" `
--form email="$Env:coverity_email" `
--form "file=@$Env:APPVEYOR_BUILD_FOLDER\$Env:APPVEYOR_PROJECT_NAME.zip" `
--form version="$Env:APPVEYOR_REPO_COMMIT" `
--form description="CI server scheduled build." `
https://scan.coverity.com/builds?project=libgit2%2Flibgit2sharp

cat .\curl-out.txt
}

on_finish:
- ps: Push-AppveyorArtifact "msbuild.log"

on_success:
- ps: |
if ($Env:publish_on_success -eq $True)
{
Get-ChildItem "bin\LibGit2Sharp\$env:configuration\*.nupkg" |% { Push-AppveyorArtifact $_.FullName -FileName $_.Name }
}

notifications:
- provider: Email
to:
- emeric.fermas@gmail.com
on_build_status_changed: true
only:
- NOTTHISONE
43 changes: 14 additions & 29 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
@@ -1,34 +1,19 @@
trigger:
- master
- maint/*
branches:
include:
- master
- 'maint.*'
paths:
exclude:
- doc/
- '*.md'
- .vscode/

variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
TreatWarningsAsErrors: true
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TreatWarningsAsErrors to keep your build clean. You had a few warnings before I fixed them in #1221, and this helps slam the door against such engineering debt in the future.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of putting this here, I think it makes sense to add <TreatWarningsAsErrors>true</TreatWarningsAsErrors> to Directory.Build.props.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The problem with that is then you can't even build locally when there are warnings. That slows down your dev inner loop. I greatly prefer for warnings to be allowed during the inner loop and only be accountable to fix all warnings before a PR is accepted.

DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
BuildConfiguration: Release
NUGET_PACKAGES: $(Agent.TempDirectory)/.nuget/packages

jobs:
- job: Windows
pool:
vmImage: 'windows-2019'
steps:
- pwsh: ./tools/Install-DotNetSdk.ps1
displayName: Installing .NET Core SDK and runtimes
- script: buildandtest.cmd
displayName: Build and test
- job: Linux
pool:
vmImage: 'Ubuntu 16.04'
steps:
- pwsh: ./tools/Install-DotNetSdk.ps1
displayName: Installing .NET Core SDK and runtimes
- script: ./buildandtest.sh
displayName: Build and test
- job: macOS
pool:
vmImage: 'macOS 10.13'
steps:
- pwsh: ./tools/Install-DotNetSdk.ps1
displayName: Installing .NET Core SDK and runtimes
- script: ./buildandtest.sh
displayName: Build and test
- template: azure-pipelines/build.yml
37 changes: 37 additions & 0 deletions azure-pipelines/Convert-PDB.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<#
.SYNOPSIS
Converts between Windows PDB and Portable PDB formats.
.PARAMETER DllPath
The path to the DLL whose PDB is to be converted.
.PARAMETER PdbPath
The path to the PDB to convert. May be omitted if the DLL was compiled on this machine and the PDB is still at its original path.
.PARAMETER OutputPath
The path of the output PDB to write.
#>
#Function Convert-PortableToWindowsPDB() {
Param(
[Parameter(Mandatory=$true,Position=0)]
[string]$DllPath,
[Parameter()]
[string]$PdbPath,
[Parameter(Mandatory=$true,Position=1)]
[string]$OutputPath
)

$version = '1.1.0-beta2-19516-01'
$baseDir = "$PSScriptRoot\..\obj\tools"
$pdb2pdbpath = "$baseDir\pdb2pdb.$version\tools\Pdb2Pdb.exe"
if (-not (Test-Path $pdb2pdbpath)) {
if (-not (Test-Path $baseDir)) { New-Item -Type Directory -Path $baseDir | Out-Null }
$baseDir = (Resolve-Path $baseDir).Path # Normalize it
& (& $PSScriptRoot\Get-NuGetTool.ps1) install pdb2pdb -version $version -PackageSaveMode nuspec -OutputDirectory $baseDir -Source https://dotnet.myget.org/F/symreader-converter/api/v3/index.json | Out-Null
}

$args = $DllPath,'/out',$OutputPath,'/nowarn','0021'
if ($PdbPath) {
$args += '/pdb',$PdbPath
}

Write-Verbose "$pdb2pdbpath $args"
& $pdb2pdbpath $args
#}
Loading