Skip to content

Commit

Permalink
Build in module-aware mode (#11783)
Browse files Browse the repository at this point in the history
* Build in module-aware mode

Get the list of module directories.  For each directory, do
build/vet/test.

* remove published content

* exclude track 2 content from track 1 CI

* process coverage per module

include all test report.xml files
update azidentity dependencies

* fix path

* add some logging

* small updates to pull from environment variable for SCOPPE variable

* join SCOPE array so it can be split predictably further along the line

* erroneously removed a leading $ on a variable invocation

* fix bad logging commands

* improve test log

* add scripts for finding module and test directories

* add code coverage logging

* remove empty code coverage results

* fail on failed tests and/or empty code coverage

* fix comments in scripts

Co-authored-by: Scott Beddall <scbedd@microsoft.com>
  • Loading branch information
jhendrixMSFT and scbedd authored Jul 22, 2020
1 parent 81eb65d commit e1ce057
Show file tree
Hide file tree
Showing 43 changed files with 90 additions and 3,114 deletions.
4 changes: 2 additions & 2 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
GOPATH: '$(system.defaultWorkingDirectory)/work'
sdkPath: '$(GOPATH)/src/github.com/$(build.repository.name)'
IGNORE_BREAKING_CHANGES: true
go.list.filter: '| grep -v vendor'
go.list.filter: '| grep -v vendor | grep -v azure-sdk-for-go/sdk'

steps:
- task: GoTool@0
Expand Down Expand Up @@ -57,7 +57,7 @@ jobs:
- script: go build -v $(go list ./... $(go.list.filter))
workingDirectory: '$(sdkPath)'
displayName: 'Build'
- script: go test $(dirname $(find . -path ./vendor -prune -o -path ./sdk -prune -o -name '*_test.go' -print) | sort -u)
- script: go test $(dirname $(find . -path ./vendor -prune -o -path ./sdk -prune -o -path ./sdk -prune -o -name '*_test.go' -print) | sort -u)
workingDirectory: '$(sdkPath)'
displayName: 'Run Tests'
- script: go run ./tools/apidiff/main.go packages ./services FETCH_HEAD~1 FETCH_HEAD --copyrepo --breakingchanges || $IGNORE_BREAKING_CHANGES
Expand Down
61 changes: 48 additions & 13 deletions eng/pipelines/templates/steps/build-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,43 +12,78 @@ steps:
go get github.com/axw/gocov/gocov
go get github.com/AlekSi/gocov-xml
go get github.com/matm/gocov-html
go get -u github.com/wadey/gocovmerge
displayName: "Install Coverage and Junit Dependencies"
workingDirectory: '${{parameters.GoWorkspace}}'
- pwsh: |
go vet $(go list $(SCOPE))
displayName: 'Vet'
$modDirs = (./eng/scripts/get_module_dirs.ps1 -serviceDir $(SCOPE))
foreach ($md in $modDirs) {
pushd $md
Write-Host "##[command]Executing go build -v $md"
go build -v
}
displayName: 'Build'
workingDirectory: '${{parameters.GoWorkspace}}'
env:
GO111MODULE: 'on'
- pwsh: |
go build -v $(go list $(SCOPE))
displayName: 'Build'
$modDirs = (./eng/scripts/get_module_dirs.ps1 -serviceDir $(SCOPE))
foreach ($md in $modDirs) {
pushd $md
Write-Host "##[command]Executing go vet $md"
go vet
}
displayName: 'Vet'
workingDirectory: '${{parameters.GoWorkspace}}'
env:
GO111MODULE: 'on'
- pwsh: |
go test -run "^Test" -race -v -coverprofile coverage.txt -covermode atomic $(SCOPE) | go-junit-report -set-exit-code > $(Build.SourcesDirectory)/report.xml
$testDirs = (./eng/scripts/get_test_dirs.ps1 -serviceDir $(SCOPE))
foreach ($td in $testDirs) {
pushd $td
Write-Host "##[command]Executing go test -run "^Test" -race -v -coverprofile coverage.txt -covermode atomic $td | go-junit-report -set-exit-code > report.xml"
go test -run "^Test" -race -v -coverprofile coverage.txt -covermode atomic . | go-junit-report -set-exit-code > report.xml
# if no tests were actually run (e.g. examples) delete the coverage file so it's omitted from the coverage report
if (Select-String -path ./report.xml -pattern '<testsuites></testsuites>' -simplematch -quiet) {
Write-Host "##[command]Deleting empty coverage file"
rm coverage.txt
}
}
displayName: 'Run Tests'
workingDirectory: '${{parameters.GoWorkspace}}'
env:
GO111MODULE: 'on'
- pwsh: |
gocov convert ./coverage.txt > ./coverage.json
$coverageFiles = [Collections.Generic.List[String]]@()
Get-Childitem -recurse -path $(SCOPE) -filter coverage.txt | foreach-object {
$covFile = $_.FullName
Write-Host "Adding $covFile to the list of code coverage files"
$coverageFiles.Add($covFile)
}
gocovmerge $coverageFiles > mergedCoverage.txt
gocov convert ./mergedCoverage.txt > ./coverage.json
# gocov converts rely on standard input
Get-Content ./coverage.json | gocov-xml > $(Build.SourcesDirectory)/coverage.xml
Get-Content ./coverage.json | gocov-html > $(Build.SourcesDirectory)/coverage.html
Get-Content ./coverage.json | gocov-xml > ./coverage.xml
Get-Content ./coverage.json | gocov-html > ./coverage.html
displayName: 'Generate Coverage XML'
workingDirectory: '${{parameters.GoWorkspace}}'
workingDirectory: '${{parameters.GoWorkspace}}sdk'
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testRunner: JUnit
testResultsFiles: '$(Build.SourcesDirectory)/report.xml'
testResultsFiles: '${{parameters.GoWorkspace}}sdk/**/report.xml'
testRunTitle: 'Go ${{ parameters.GoVersion }} on ${{ parameters.Image }}'
failTaskOnFailedTests: true

- task: PublishCodeCoverageResults@1
condition: succeededOrFailed()
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(Build.SourcesDirectory)/coverage.xml'
additionalCodeCoverageFiles: '$(Build.SourcesDirectory)/coverage.html'
summaryFileLocation: '${{parameters.GoWorkspace}}sdk/coverage.xml'
additionalCodeCoverageFiles: '${{parameters.GoWorkspace}}sdk/coverage.html'
failIfCoverageEmpty: true
2 changes: 1 addition & 1 deletion eng/pipelines/templates/steps/set-scope.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ steps:
$serviceDir = "${{parameters.ServiceDirectory}}"
$scope = (./eng/scripts/scoped_discover.ps1 -serviceDir "$serviceDir")
Write-Host
Write-Host $scope
Write-Host "##vso[task.setvariable variable=SCOPE]$scope"
displayName: 'Set Target Scope'
workingDirectory: "${{ parameters.GoWorkspace }}"
15 changes: 15 additions & 0 deletions eng/scripts/get_module_dirs.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
Param(
[string] $serviceDir
)

$modDirs = [Collections.Generic.List[String]]@()

# find each module directory under $serviceDir
Get-Childitem -recurse -path $serviceDir -filter go.mod | foreach-object {
$cdir = $_.Directory
Write-Host "Adding $cdir to list of module paths"
$modDirs.Add($cdir)
}

# return the list of module directories
return $modDirs
17 changes: 17 additions & 0 deletions eng/scripts/get_test_dirs.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
Param(
[string] $serviceDir
)

$testDirs = [Collections.Generic.List[String]]@()

# find each directory under $serviceDir that contains Go test files
Get-Childitem -recurse -path $serviceDir -filter *_test.go | foreach-object {
$cdir = $_.Directory
if (!$testDirs.Contains($cdir)) {
Write-Host "Adding $cdir to list of test directories"
$testDirs.Add($cdir)
}
}

# return the list of test directories
return $testDirs
2 changes: 1 addition & 1 deletion eng/scripts/scoped_discover.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@ else {

$path = Resolve-Path -Path $targetDir

return "$path/..."
return $path
110 changes: 0 additions & 110 deletions sdk/azcore/core.go

This file was deleted.

52 changes: 0 additions & 52 deletions sdk/azcore/credential.go

This file was deleted.

Loading

0 comments on commit e1ce057

Please sign in to comment.