Skip to content
Permalink
Browse files

Switch to GitHub Actions for CI/PR builds

  • Loading branch information
AArnott committed Jan 30, 2020
1 parent 9d2e900 commit a3d9f7b29ad0555dc4647f74f7b241d340670455
Showing with 764 additions and 234 deletions.
  1. +97 −0 .github/workflows/build.yml
  2. +2 −41 .travis.yml
  3. +4 −0 Directory.Build.props
  4. +8 −0 Directory.Build.targets
  5. +2 −1 LibGit2Sharp.Tests/LibGit2Sharp.Tests.csproj
  6. +1 −0 LibGit2Sharp.Tests/desktop/ShadowCopyFixture.cs
  7. +2 −2 LibGit2Sharp/LibGit2Sharp.csproj
  8. +3 −157 appveyor.yml
  9. +14 −29 azure-pipelines.yml
  10. +37 −0 azure-pipelines/Convert-PDB.ps1
  11. +22 −0 azure-pipelines/Get-NuGetTool.ps1
  12. +13 −0 azure-pipelines/Get-TempToolsPath.ps1
  13. +24 −0 azure-pipelines/Get-nbgv.ps1
  14. 0 {tools → azure-pipelines}/Set-EnvVars.ps1
  15. +50 −0 azure-pipelines/artifacts/_all.ps1
  16. +10 −0 azure-pipelines/artifacts/_pipelines.ps1
  17. +59 −0 azure-pipelines/artifacts/_stage_all.ps1
  18. +12 −0 azure-pipelines/artifacts/build_logs.ps1
  19. +22 −0 azure-pipelines/artifacts/coverageResults.ps1
  20. +13 −0 azure-pipelines/artifacts/deployables.ps1
  21. +9 −0 azure-pipelines/artifacts/projectAssetsJson.ps1
  22. +64 −0 azure-pipelines/build.yml
  23. +58 −0 azure-pipelines/dotnet.yml
  24. +15 −0 azure-pipelines/install-dependencies.yml
  25. +7 −0 azure-pipelines/justnugetorg.nuget.config
  26. +31 −0 azure-pipelines/publish-codecoverage.yml
  27. +14 −0 azure-pipelines/publish-deployables.yml
  28. +2 −0 azure-pipelines/variables/DotNetSdkVersion.ps1
  29. +11 −0 azure-pipelines/variables/_all.ps1
  30. +19 −0 azure-pipelines/variables/_pipelines.ps1
  31. +4 −0 init.cmd
  32. +67 −0 init.ps1
  33. +0 −2 tools/DotNetSdkVersion.ps1
  34. +2 −2 tools/Install-DotNetSdk.ps1
  35. +66 −0 tools/Install-NuGetCredProvider.ps1
@@ -0,0 +1,97 @@
name: CI

on:
push:
branches:
- master
- maint.*
- validate/*
pull_request:

env:
TreatWarningsAsErrors: true
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
BUILDCONFIGURATION: Release
CODECOV_TOKEN: a26c421a-824d-4a30-933b-47b2a203587f
NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages

jobs:
leak_check:
name: Leak check (ubuntu-18.04)
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0 # avoid shallow clone so nbgv can do its work.
- name: Install prerequisites
run: ./init.ps1 -UpgradePrerequisites
shell: pwsh
- name: Test
run: dotnet test LibGit2Sharp.Tests --no-restore -c ${{ env.BUILDCONFIGURATION }} --filter "TestCategory!=FailsInCloudTest" -v m /p:ExtraDefine=LEAKS_IDENTIFYING -f netcoreapp2.1

build:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
- ubuntu-18.04
- macos-latest
- windows-latest

steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0 # avoid shallow clone so nbgv can do its work.
- name: Install prerequisites
run: |
./init.ps1 -UpgradePrerequisites
dotnet --info
shell: pwsh
- name: Build
run: dotnet build --no-restore -c ${{ env.BUILDCONFIGURATION }} /v:m /bl:"bin/build_logs/build.binlog"
- name: Pack
run: dotnet pack --no-build -c ${{ env.BUILDCONFIGURATION }} /v:m /bl:"bin/build_logs/pack.binlog"
if: runner.os == 'Windows'
- name: Test everything
run: dotnet test --no-build -c ${{ env.BUILDCONFIGURATION }} /bl:"bin/build_logs/test.binlog" --filter "TestCategory!=FailsInCloudTest" -v n /p:CollectCoverage=true
if: runner.os == 'Windows'
- name: Test .NET Core
run: dotnet test --no-build -c ${{ env.BUILDCONFIGURATION }} /bl:"bin/build_logs/test.binlog" --filter "TestCategory!=FailsInCloudTest" -v n /p:CollectCoverage=true -f netcoreapp2.1
if: runner.os != 'Windows'
- name: Collect artifacts
run: azure-pipelines/artifacts/_stage_all.ps1
shell: pwsh
if: always()
- name: Upload project.assets.json files
if: always()
uses: actions/upload-artifact@v1
with:
name: projectAssetsJson-${{ runner.os }}
path: obj/_artifacts/projectAssetsJson
continue-on-error: true
- name: Upload build_logs
if: always()
uses: actions/upload-artifact@v1
with:
name: build_logs-${{ runner.os }}
path: obj/_artifacts/build_logs
continue-on-error: true
- name: Upload coverageResults
if: always()
uses: actions/upload-artifact@v1
with:
name: coverageResults-${{ runner.os }}
path: obj/_artifacts/coverageResults
continue-on-error: true
- name: Upload deployables
uses: actions/upload-artifact@v1
with:
name: deployables
path: obj/_artifacts/deployables
if: runner.os == 'Windows'
- name: Publish code coverage results to codecov.io
run: bash <(curl -s https://codecov.io/bash)
shell: bash
timeout-minutes: 3
continue-on-error: true
@@ -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,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>
@@ -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>
</Project>
@@ -11,7 +11,8 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.0.1" />
<PackageReference Include="coverlet.msbuild" Version="2.7.0" />
<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" />
@@ -11,6 +11,7 @@ namespace LibGit2Sharp.Tests
public class ShadowCopyFixture : BaseFixture
{
[Fact]
[Trait("TestCategory", "FailsWhileInstrumented")]
public void CanProbeForNativeBinariesFromAShadowCopiedAssembly()
{
Type type = typeof(Wrapper);
@@ -28,8 +28,8 @@

<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" />
@@ -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

0 comments on commit a3d9f7b

Please sign in to comment.
You can’t perform that action at this time.