diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 8a9c46c..5d5d17d 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -5,152 +5,157 @@ resources: submodules: true lfs: true trigger: + batch: true branches: include: - master - develop - feature/* - bugfix/* + - release/* paths: include: + - azure-pipelines.yml - src/* - tests/* variables: - group: Environment - + - group: ApiKeys + - name: SONAR_PROJECT + value: REPLACE_ME jobs: -- job: Setup +- job: Version pool: - vmImage: windows-latest + vmImage: ubuntu-latest steps: - - powershell: | - dotnet tool install --tool-path .. gitversion.tool - displayName: Installing Dotnet Tools - - - powershell: | - $git = $(../dotnet-gitversion /output json /showvariable NugetVersion) - echo "##vso[task.setvariable variable=gitVersion;isOutput=true]$(../dotnet-gitversion /output json /showvariable NugetVersion)" - name: versioning - displayName: Setting version from git - - - powershell: | - echo "Current version: $(versioning.gitVersion)" - displayName: Shows currently compiling version - -- job: Building + - pwsh: dotnet tool install --tool-path .. gitversion.tool + displayName: Install GitVersion + - pwsh: | + echo "##vso[task.setvariable variable=gitVersion;isOutput=true]$(../dotnet-gitversion /output json /showvariable SemVer)" + "Current version: $(../dotnet-gitversion /output json /showvariable SemVer)" + displayName: Sets SemVer + name: versioning +- job: Build pool: vmImage: ubuntu-latest dependsOn: - - Setup + - Version variables: - Version: $[ dependencies.Setup.outputs['versioning.gitVersion'] ] + Version: $[ dependencies.Version.outputs['versioning.gitVersion'] ] steps: - checkout: self fetchDepth: 1 - - task: DotNetCoreCLI@2 - displayName: Restoring nugets + displayName: Build Solution inputs: - command: 'restore' - arguments: -Project2ProjectTimeOut 20 - verbosityRestore: Normal - - - task: DotNetCoreCLI@2 - displayName: Building Projects - inputs: - command: build - projects: src/*/*.csproj + command: 'build' configuration: $(BuildConfiguration) - arguments: -o $(build.artifactStagingDirectory)/build + arguments: '-o $(build.artifactStagingDirectory)/build' versioningScheme: byEnvVar versionEnvVar: Version - + verbosityRestore: Minimal - task: PublishBuildArtifacts@1 - displayName: Publish build artifacts + displayName: Publish Build inputs: PathtoPublish: $(build.artifactStagingDirectory)/build ArtifactName: 'drop' - + publishLocation: 'Container' - task: DotNetCoreCLI@2 - displayName: Packing as Nugets + displayName: Pack Nugets inputs: - command: pack - searchPatternPack: 'src/*/*.csproj' + command: 'pack' + packagesToPack: 'src/*/*.csproj' + packDirectory: '$(build.artifactStagingDirectory)/nuget' configuration: $(BuildConfiguration) versioningScheme: byEnvVar versionEnvVar: Version - verbosityPack: normal - packDirectory: $(build.artifactStagingDirectory)/nuget - + verbosityRestore: Minimal + verbosityPack: Minimal - task: PublishBuildArtifacts@1 - name: publishNuget - displayName: Publish nugets + displayName: Publish Nugets inputs: - PathtoPublish: $(build.artifactStagingDirectory)/nuget + PathtoPublish: '$(build.artifactStagingDirectory)/nuget' ArtifactName: 'nuget' - -- job: Testing + publishLocation: 'Container' +- job: Test pool: vmImage: ubuntu-latest dependsOn: - - Setup + - Version variables: - Version: $[ dependencies.Setup.outputs['versioning.gitVersion'] ] + Version: $[ dependencies.Version.outputs['versioning.gitVersion'] ] + GITHUB_KEY: $(GitHubApiKey) + SONAR_ORG: $(SonarCloudOrganization) + SONAR_KEY: $(SonarCloudApiKey) + SONAR_URL: $(SonarCloudHost) + CODECOV_KEY: $(CodeCovApiKey) + COVERALLS_KEY: $(CoverallsApiKey) steps: - checkout: self - fetchDepth: 1 - + - pwsh: | + dotnet tool install --tool-path .. dotnet-sonarscanner + dotnet tool install --tool-path .. coveralls.net + dotnet tool install --tool-path .. Codecov.Tool + displayName: Install Tools + - pwsh: | + ../dotnet-sonarscanner begin /k:"$(SONAR_PROJECT)" /v:"$(Version)" /o:"$(SONAR_ORG)" /d:sonar.host.url="$(SONAR_URL)" /d:sonar.login="$(SONAR_KEY)" /d:sonar.cs.opencover.reportsPaths="$(build.artifactStagingDirectory)/coverage/coverage.opencover.xml" /d:sonar.branch.name="$(Build.SourceBranchName)" /d:sonar.github.repository="$(Build.Repository.Name)" /d:sonar.github.oauth=$(GITHUB_KEY) + condition: ne(variables['Build.Reason'], 'PullRequest') + displayName: SonarCloud (commit) + - pwsh: | + ../dotnet-sonarscanner begin /k:"$(SONAR_PROJECT)" /v:"$(Version)" /o:"$(SONAR_ORG)" /d:sonar.host.url="$(SONAR_URL)" /d:sonar.login="$(SONAR_KEY)" /d:sonar.cs.opencover.reportsPaths="$(build.artifactStagingDirectory)/coverage/coverage.opencover.xml" /d:sonar.github.repository="$(Build.Repository.Name)" /d:sonar.github.oauth=$(GITHUB_KEY) /d:sonar.pullrequest.key="$(System.PullRequest.PullRequestNumber)" /d:sonar.pullrequest.branch="$(Build.SourceBranchName)" /d:sonar.pullrequest.provider="github" + condition: eq(variables['Build.Reason'], 'PullRequest') + displayName: SonarCloud (PR) - task: DotNetCoreCLI@2 - name: dotnetRestore - displayName: Restoring nugets + displayName: Test Solution inputs: - command: 'restore' - arguments: -Project2ProjectTimeOut 20 --packages "$(Build.BinariesDirectory)/.nuget) - verbosityRestore: Normal - - - task: DotNetCoreCLI@2 - name: dotnetBuild - displayName: Building Projects - inputs: - command: build - projects: src/*/*.*proj - configuration: $(BuildConfiguration) - versioningScheme: byEnvVar - versionEnvVar: Version - - - task: DotNetCoreCLI@2 - name: dotnetTest - displayName: Testing implementations - inputs: - command: test - projects: 'tests/*/*.*proj' + command: 'test' configuration: 'Debug' - testRunTitle: 'Running tests' - -- job: Publishing + arguments: '--logger trx /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:CoverletOutput=$(build.artifactStagingDirectory)/coverage/ /p:MergeWith=$(build.artifactStagingDirectory)/coverage/coverage.json' + publishTestResults: true + verbosityPack: Minimal + verbosityRestore: Minimal + testRunTitle: 'Unit Tests' + - pwsh: | + ../dotnet-sonarscanner end /d:sonar.login="$(SONAR_KEY)" + displayName: Publish SonarCloud + - task: PublishBuildArtifacts@1 + displayName: Publish Test Coverage + inputs: + PathtoPublish: $(build.artifactStagingDirectory)/coverage + ArtifactName: 'coverage' + publishLocation: 'Container' + - pwsh: | + ../csmacnz.Coveralls --repoToken "$(COVERALLS_KEY)" --opencover -i $(build.artifactStagingDirectory)/coverage/coverage.opencover.xml --useRelativePaths --commitId "$(Build.SourceVersion)" --commitBranch "$(Build.SourceBranchName)" --commitAuthor "$(Build.RequestedFor)" --commitEmail "$(Build.RequestedForEmail)" --commitMessage "$(Build.SourceVersionMessage)" --jobId "$(Build.BuildId)" + ../codecov --token "$(CodeCovApiKey)" --file $(build.artifactStagingDirectory)/coverage/coverage.opencover.xml --branch "$(Build.SourceBranchName)" --sha "$(Build.SourceVersion)" + condition: ne(variables['Build.Reason'], 'PullRequest') + displayName: Push Coverage (commit) + - pwsh: | + ../csmacnz.Coveralls --repoToken "$(COVERALLS_KEY)" --opencover -i $(build.artifactStagingDirectory)/coverage/coverage.opencover.xml --useRelativePaths --commitId "$(Build.SourceVersion)" --commitBranch "$(Build.SourceBranchName)" --commitAuthor "$(Build.RequestedFor)" --commitEmail "$(Build.RequestedForEmail)" --commitMessage "$(Build.SourceVersionMessage)" --jobId "$(Build.BuildId)" --pullRequest "$(System.PullRequest.PullRequestNumber)" + ../codecov --token "$(CodeCovApiKey)" --file $(build.artifactStagingDirectory)/coverage/coverage.opencover.xml --branch "$(Build.SourceBranchName)" --sha "$(Build.SourceVersion)" --pr "$(System.PullRequest.PullRequestNumber)" + condition: eq(variables['Build.Reason'], 'PullRequest') + displayName: Push Coverage (PR) +- job: Publish pool: vmImage: ubuntu-latest dependsOn: - - Setup - - Building - - Testing - variables: - Version: $[ dependencies.Setup.outputs['versioning.gitVersion'] ] + - Version + - Build + - Test steps: - checkout: none - - task: DownloadPipelineArtifact@2 - displayName: Downloading artifact + displayName: Fetch nugets inputs: + buildType: 'current' artifactName: 'nuget' targetPath: $(build.artifactStagingDirectory)/nuget - - task: DotNetCoreCLI@2 - displayName: Pushing to nuget server + condition: ne(variables['Build.Reason'], 'PullRequest') + displayName: Push Nugets inputs: workingDirectory: $(build.artifactStagingDirectory)/nuget command: 'custom' - custom: nuget + custom: 'nuget' arguments: > push *.nupkg -s $(KritikosNuget)