guibranco/calendarific-sdk-dotnet

View on GitHub
appveyor.yml

Summary

Maintainability
Test Coverage
version: 1.0.{build}
skip_tags: true
image: Visual Studio 2022
configuration: Release

environment:  
  CODACY_PROJECT_TOKEN:
    secure: l8V0IouUDx6L9GPi0se/1XXXGMWmZjKbcqUUeYlhAHKQJ1Ydp9zIn7aHlg0Hy02N
  CODECLIMATE_TOKEN:
    secure: +9ooTaCme0ygM72K+OnlXTLab2o5UAmPfBIAybHsP7btGLpPfgAYumPrGIWOpVX+bitVVcfOdMXAxY8dSGsbXJ8EpW6HTvMdQdn0AJ3MeQQ=
  apiKey:
    secure: jYa53DCUT/2uCePOhs+z/8jmP+h9hYYztt0s/6AvQMhE5YSBX0gUk/CbjXW+uq22

dotnet_csproj:
  patch: true
  file: '**\*.csproj'
  version: '{version}'
  package_version: '{version}'
  assembly_version: '{version}'
  file_version: '{version}'
  informational_version: '{version}'

init:
  - SET JAVA_HOME=C:\Program Files\Java\jdk19
  - SET PATH=%JAVA_HOME%\bin;%PATH%

install:
  # If a newer build is queued for the same PR, cancel this one.
  # The AppVeyor 'rollout builds' option is supposed to serve the same
  # purpose, but it is problematic because it tends to cancel builds pushed
  # directly to main/master instead of just PR builds (or the converse).
  # credits: JuliaLang developers.
  - ps: if ($env:APPVEYOR_PULL_REQUEST_NUMBER -and $env:APPVEYOR_BUILD_NUMBER -ne ((Invoke-RestMethod `
        https://ci.appveyor.com/api/projects/$env:APPVEYOR_ACCOUNT_NAME/$env:APPVEYOR_PROJECT_SLUG/history?recordsNumber=50).builds | `
        Where-Object pullRequestId -eq $env:APPVEYOR_PULL_REQUEST_NUMBER)[0].buildNumber) { `
          throw "There are newer queued builds for this pull request, failing early." }

before_build:
  - ps: $env:SOLUTION_NAME = $([io.path]::GetFileNameWithoutExtension($(Get-ChildItem -Path .\* -Include *.sln)))
  - ps: $env:SONAR_PROJECT = "$env:APPVEYOR_REPO_NAME" -replace "/","_"
  - ps: $env:SONAR_ORGANIZATION = ("$env:APPVEYOR_REPO_NAME" -replace "/.*$","").toLower()
  - ps: $env:LOCAL_PR = 0
  - ps: if(-Not $env:APPVEYOR_PULL_REQUEST_NUMBER) { $env:LOCAL_PR = 1 }
  - ps: if($env:APPVEYOR_PULL_REQUEST_HEAD_REPO_NAME -Eq $env:APPVEYOR_REPO_NAME) { $env:LOCAL_PR = 1 }
  - cmd: nuget restore
  - cmd: choco install opencover.portable
  - cmd: choco install codecov
  - cmd: curl -L https://github.com/codacy/codacy-coverage-reporter/releases/latest/download/codacy-coverage-reporter-assembly.jar > ./codacy-test-reporter.jar
  - cmd: curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-windows-amd64 > codeclimate-test-reporter.exe
  - cmd: dotnet tool install --global dotnet-sonarscanner

build: off

build_script:
  - ps: $Params =  "/k:`"$env:SONAR_PROJECT`"", "/o:`"$env:SONAR_ORGANIZATION`"", "/v:`"$env:APPVEYOR_BUILD_NUMBER`""
  - ps: $Params += "/d:sonar.host.url=`"https://sonarcloud.io`""
  - ps: if($env:LOCAL_PR -Eq 1) { $Params +=  "/d:sonar.token=`"$env:SONAR_TOKEN`"" }
  - ps: $Params += "/d:sonar.exclusions=`"**/bin/**/*,**/obj/**/*`"", "/d:sonar.coverage.exclusions=`"**/$env:SOLUTION_NAME.UnitTests/**,**/*Tests.cs`""
  - ps: $Params += "/d:sonar.cs.opencover.reportsPaths=`"Tests\$env:SOLUTION_NAME.UnitTests\coverage.opencover.xml`""
  - ps: if(-Not $env:APPVEYOR_PULL_REQUEST_NUMBER) { $Params += "/d:sonar.branch.name=`"$env:APPVEYOR_REPO_BRANCH`"" }
  - ps: if($env:APPVEYOR_PULL_REQUEST_NUMBER) { $Params += "/d:sonar.pullrequest.key=$env:APPVEYOR_PULL_REQUEST_NUMBER", "/d:sonar.pullrequest.branch=`"$env:APPVEYOR_REPO_BRANCH`"" }
  - ps: Start-process "dotnet" "sonarscanner begin $($Params -join ' ')"
  - codeclimate-test-reporter before-build
  - dotnet build --verbosity minimal %SOLUTION_NAME%.sln
  - ps: $TEST_PROJECTS = (Get-ChildItem -Path .\Tests\**\ -Recurse -Include *.csproj).Fullname
  - ps: |
      foreach($testProject in $TEST_PROJECTS)
      {
          dotnet test $testProject --no-build --verbosity minimal /p:CollectCoverage=true "/p:CoverletOutputFormat=\`"cobertura,opencover,lcov\`"" --logger:"junit;LogFilePath=test-results.xml"
          $path = Split-Path $testProject
          $wc = New-Object 'System.Net.WebClient'
          $wc.UploadFile("https://ci.appveyor.com/api/testresults/xunit/$($env:APPVEYOR_JOB_ID)", (Resolve-Path $path/test-results.xml))
      }
  - if %LOCAL_PR% EQU 1 codecov -f "Tests\%SOLUTION_NAME%.UnitTests\coverage.opencover.xml"
  - if %LOCAL_PR% EQU 1 codeclimate-test-reporter format-coverage -t lcov -o "Tests\%SOLUTION_NAME%.UnitTests\code-climate.json" "Tests\%SOLUTION_NAME%.UnitTests\coverage.info"
  - if %LOCAL_PR% EQU 1 codeclimate-test-reporter upload-coverage -i "Tests\%SOLUTION_NAME%.UnitTests\code-climate.json" -r %CODECLIMATE_TOKEN%
  - if %LOCAL_PR% EQU 1 java -jar ./codacy-test-reporter.jar report -l CSharp -t %CODACY_PROJECT_TOKEN% -r "Tests\%SOLUTION_NAME%.UnitTests\coverage.opencover.xml"
  - if %LOCAL_PR% EQU 1 dotnet sonarscanner end /d:sonar.token="%SONAR_TOKEN%"

after_build:
  - xcopy %CD%\Src\%SOLUTION_NAME%\bin\Release\netstandard2.0\*.* %CD%\Build\netstandard2.0\
  - xcopy %CD%\Src\%SOLUTION_NAME%\bin\Release\netstandard2.1\*.* %CD%\Build\netstandard2.1\

  - copy %CD%\Src\%SOLUTION_NAME%\bin\Release\%SOLUTION_NAME%.%APPVEYOR_BUILD_VERSION%.nupkg %SOLUTION_NAME%.%APPVEYOR_BUILD_VERSION%.nupkg

  - rd /s /q %CD%\Src\%SOLUTION_NAME%\bin\Release\

  - xcopy %CD%\Tests\%SOLUTION_NAME%.UnitTests\*.xml %CD%\Coverage\UnitTests\
  - xcopy %CD%\Tests\%SOLUTION_NAME%.UnitTests\*.json %CD%\Coverage\UnitTests\
  - xcopy %CD%\Tests\%SOLUTION_NAME%.UnitTests\*.info %CD%\Coverage\UnitTests\

  - xcopy %CD%\Tests\%SOLUTION_NAME%.IntegrationTests\*.xml %CD%\Coverage\IntegrationTests\
  - xcopy %CD%\Tests\%SOLUTION_NAME%.IntegrationTests\*.json %CD%\Coverage\IntegrationTests\
  - xcopy %CD%\Tests\%SOLUTION_NAME%.IntegrationTests\*.info %CD%\Coverage\IntegrationTests\

  - cd %CD%

  - 7z a -tzip -mx9 "%SOLUTION_NAME%.%APPVEYOR_BUILD_VERSION%.zip" Build
  - 7z a -tzip -mx9 "%SOLUTION_NAME%.%APPVEYOR_BUILD_VERSION%.Coverage.zip" Coverage

artifacts:
  - path: $(SOLUTION_NAME).%APPVEYOR_BUILD_VERSION%.zip
    name: ZipFile

  - path: $(SOLUTION_NAME).%APPVEYOR_BUILD_VERSION%.nupkg
    name: Package

  - path: $(SOLUTION_NAME).%APPVEYOR_BUILD_VERSION%.Coverage.zip
    name: Coverage

deploy:
  - provider: NuGet
    api_key: $(NUGET_TOKEN)
    skip_symbols: false
    on:
      branch: main
    artifact: Package

  - provider: GitHub
    on:
      branch: main
    tag: v$(appveyor_build_version)
    description: 'Release of $(SOLUTION_NAME) - v($appveyor_build_version)'
    auth_token: $(GITHUB_TOKEN)
    force_update: true
    artifact: ZipFile, Package, Coverage