diff --git a/eng/pipelines/templates/steps/analyze.yml b/eng/pipelines/templates/steps/analyze.yml index df7763035465..0de24dde56c1 100644 --- a/eng/pipelines/templates/steps/analyze.yml +++ b/eng/pipelines/templates/steps/analyze.yml @@ -8,6 +8,16 @@ parameters: steps: + - task: Powershell@2 + displayName: 'Dependency Check' + env: + GO111MODULE: 'on' + inputs: + targetType: filePath + pwsh: true + filePath: eng/scripts/Invoke-DependencyCheck.ps1 + arguments: 'sdk/${{ parameters.ServiceDirectory }}' + - script: | curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin ${{parameters.LintVersion}} golangci-lint --version diff --git a/eng/scripts/Invoke-DependencyCheck.ps1 b/eng/scripts/Invoke-DependencyCheck.ps1 new file mode 100644 index 000000000000..943b9110ea50 --- /dev/null +++ b/eng/scripts/Invoke-DependencyCheck.ps1 @@ -0,0 +1,78 @@ +Param( + [string] $PackageDirectory +) + +. (Join-Path $PSScriptRoot .. common scripts common.ps1) + +$sdks = Get-AllPackageInfoFromRepo + +## Create depcheck module +$workingPath = Join-Path $RepoRoot "sdk" "depcheck" +if (Test-Path -Path $workingPath) +{ + Remove-Item -Path $workingPath -Recurse -Force +} +New-Item -ItemType Directory -Force -Path $workingPath + +## Init go mod +Set-Location $workingPath +Write-Host "##[command]Executing go mod init in " $workingPath +go mod init github.com/Azure/azure-sdk-for-go/sdk/depcheck +if ($LASTEXITCODE) { exit $LASTEXITCODE } + +# Find whether latest version is in the `retract` section in `go.mod` to judge whether the package is temporarily deprecated. +function IsPackageDeprecated($sdk) +{ + $RETRACT_SECTION_REGEX = "retract\s*((?(.|\s)*))" + $modContent = Get-Content (Join-Path $sdk.DirectoryPath 'go.mod') -Raw + if ($modContent -match $RETRACT_SECTION_REGEX) { + return $($matches["retract"]).Indexof($sdk.Version) -ne -1 + } + return $false +} + +# Get all existed packages +$packagesImport = "" +foreach ($sdk in $sdks) +{ + if ($sdk.Name -like "*internal*" -or (IsPackageDeprecated $sdk)) + { + continue + } + if ($sdk.Name -eq $PackageDirectory) + { + ## Add replace for new package + $modPath = Join-Path $RepoRoot "sdk" "depcheck" "go.mod" + Add-Content $modPath "`nreplace github.com/Azure/azure-sdk-for-go/$($sdk.Name) => ../../$($sdk.Name)`n" + } + $packagesImport = $packagesImport + "`t_ `"github.com/Azure/azure-sdk-for-go/$($sdk.Name)`"`n" +} + +## Add main.go +$mainPath = Join-Path $RepoRoot "sdk" "depcheck" "main.go" +New-Item -Path $mainPath -ItemType File -Value '' -Force +Add-Content $mainPath "package main + +import ( +$packagesImport +) + +func main() { +} +" + +## Run go mod tidy +Write-Host "##[command]Executing go mod tidy in " $workingPath +go mod tidy +if ($LASTEXITCODE) { exit $LASTEXITCODE } + +## Run go build and go vet +Write-Host "##[command]Executing go build -v ./... in " $workingPath +go build -v ./... +if ($LASTEXITCODE) { exit $LASTEXITCODE } + +Write-Host "##[command]Executing go vet ./... in " $workingPath +go vet ./... +if ($LASTEXITCODE) { exit $LASTEXITCODE } + +Write-Host "Checking dependency has completed. All packages are compatible." diff --git a/eng/scripts/Invoke-MgmtTestgen.ps1 b/eng/scripts/Invoke-MgmtTestgen.ps1 index 4619445ede88..0559ad688281 100644 --- a/eng/scripts/Invoke-MgmtTestgen.ps1 +++ b/eng/scripts/Invoke-MgmtTestgen.ps1 @@ -79,8 +79,8 @@ function Invoke-MgmtTestgen () if (!$skipBuild) { - Write-Host "##[command]Executing go build -x -v ./... in " $currentDirectory - go build -x -v ./... + Write-Host "##[command]Executing go build -v ./... in " $currentDirectory + go build -v ./... Write-Host "##[command]Build Complete!" if ($LASTEXITCODE) { exit $LASTEXITCODE } } diff --git a/eng/scripts/build.ps1 b/eng/scripts/build.ps1 index 604081a12d36..eb94629e32c6 100644 --- a/eng/scripts/build.ps1 +++ b/eng/scripts/build.ps1 @@ -64,8 +64,8 @@ function Process-Sdk () if (!$skipBuild) { - Write-Host "##[command]Executing go build -x -v ./... in " $currentDirectory - go build -x -v ./... + Write-Host "##[command]Executing go build -v ./... in " $currentDirectory + go build -v ./... Write-Host "##[command]Build Complete!" if ($LASTEXITCODE) { exit $LASTEXITCODE } }