azure-rest-api-specs/eng/pipelines/codeowners-linter.yml

77 строки
3.9 KiB
YAML

# Lint the CODEOWNERS file for a given repository and filter out baseline errors
# Note: Due to the nature of the verifications, which includes source paths/globs
# for the repository, this pipeline cannot use sparse-checkout.
trigger: none
pr:
branches:
include:
- main
- feature/*
- hotfix/*
- release/*
paths:
include:
- .github/CODEOWNERS
- .github/CODEOWNERS_baseline_errors.txt
- eng/pipelines/codeowners-linter.yml
stages:
- stage: Run
variables:
skipComponentGovernanceDetection: true
nugetMultiFeedWarnLevel: 'none'
baseBranchBaseline: ''
jobs:
- job: Run
timeoutInMinutes: 120
pool:
name: azsdk-pool-mms-ubuntu-2204-general
vmImage: ubuntu-22.04
variables:
CodeownersLinterVersion: '1.0.0-dev.20240917.2'
DotNetDevOpsFeed: "https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-net/nuget/v3/index.json"
RepoLabelUri: "https://azuresdkartifacts.blob.core.windows.net/azure-sdk-write-teams/repository-labels-blob"
TeamUserUri: "https://azuresdkartifacts.blob.core.windows.net/azure-sdk-write-teams/azure-sdk-write-teams-blob"
UserOrgUri: "https://azuresdkartifacts.blob.core.windows.net/azure-sdk-write-teams/user-org-visibility-blob"
steps:
- task: DotNetCoreCLI@2
displayName: 'Install CodeownersLinter'
inputs:
command: custom
custom: 'tool'
arguments: 'install --global --add-source "$(DotNetDevOpsFeed)" --version "$(CodeownersLinterVersion)" "Azure.Sdk.Tools.CodeownersLinter"'
workingDirectory: '$(Build.SourcesDirectory)/eng/pipelines'
- ${{ if eq(variables['Build.Reason'], 'PullRequest') }}:
- pwsh: |
Write-Host "git checkout $ENV:SYSTEM_PULLREQUEST_TARGETBRANCH"
git checkout $ENV:SYSTEM_PULLREQUEST_TARGETBRANCH
displayName: Checkout the base branch
- pwsh: |
# Generate the base branch baseline file to the Build.BinariesDirectory. This will create
# a baseline error file against the CODEOWNERS in the base branch
$baseBranchBaselineFile = "$(Build.BinariesDirectory)/CODEOWNERS_BaseBranch_Baseline_errors.txt"
Write-Host "codeowners-linter --repoRoot $(Build.SourcesDirectory) --repoName $(Build.Repository.Name) -gbl -rUri ""$(RepoLabelUri)"" -tUri ""$(TeamUserUri)"" -uUri ""$(UserOrgUri)"" -bbf ""$baseBranchBaselineFile"""
codeowners-linter --repoRoot $(Build.SourcesDirectory) --repoName $(Build.Repository.Name) -gbl -rUri "$(RepoLabelUri)" -tUri "$(TeamUserUri)" -uUri "$(UserOrgUri)" -bbf "$baseBranchBaselineFile"
echo "##vso[task.setvariable variable=baseBranchBaseline]$baseBranchBaselineFile"
displayName: 'Generate baseline file for base branch'
workingDirectory: '$(Build.SourcesDirectory)/eng/pipelines'
- pwsh: |
Write-Host "git checkout refs/remotes/pull/$ENV:SYSTEM_PULLREQUEST_PULLREQUESTNUMBER/merge"
git checkout refs/remotes/pull/$ENV:SYSTEM_PULLREQUEST_PULLREQUESTNUMBER/merge
displayName: Checkout the PR branch
- pwsh: |
# In the case of a PR, the baseBranchBaseline will be set which will be used to further filter results.
# For scheduled runs, the baseBranchBaseline won't be set and only the existing baseline file will be used to filter
Write-Host "codeowners-linter --repoRoot $(Build.SourcesDirectory) --repoName $(Build.Repository.Name) -fbl -rUri ""$(RepoLabelUri)"" -tUri ""$(TeamUserUri)"" -uUri ""$(UserOrgUri)"" -bbf ""$(baseBranchBaseline)"""
codeowners-linter --repoRoot $(Build.SourcesDirectory) --repoName $(Build.Repository.Name) -fbl -rUri "$(RepoLabelUri)" -tUri "$(TeamUserUri)" -uUri "$(UserOrgUri)" -bbf "$(baseBranchBaseline)"
displayName: 'Lint CODEOWNERS and filter using baseline'
workingDirectory: '$(Build.SourcesDirectory)/eng/pipelines'