やりたいこと
Azure DevOpsのReposからPull Requestを引っこ抜きます。Pull Requestの情報から、プロジェクトがどの程度コードを生産しているか、どの程度レビューに時間を割いているか計測したいのです。普通に開発する分には気にすることは無いと思うのですが。
環境
Python 3.9.2
Azure DevOps api version 7.1
azure-devopsを使います。pipからインストールしてください。
コード
from azure.devops.connection import Connection
from azure.devops.v7_1.git.models import GitPullRequestSearchCriteria
from msrest.authentication import BasicAuthentication
# Fill in with your personal access token and org URL
# repository_id is not repository name
personal_access_token = 'xxxx'
organization_url = "https://dev.azure.com/FUGAFUGA"
project_name = "ほげほげプロジェクト"
repository_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
# Create a connection to the org
credentials = BasicAuthentication('', personal_access_token)
connection = Connection(base_url=organization_url, creds=credentials)
# Get a client (the "core" client provides access to projects, teams, etc)
git_client = connection.clients_v7_1.get_git_client()
# search criteria
search_criteria=GitPullRequestSearchCriteria()
search_criteria.status="Completed"
pullrequests=git_client.get_pull_requests(repository_id,search_criteria)
for pr in pullrequests:
print(str(pr.title)+":"+str(pr.created_by.display_name)+":"+str(pr.creation_date)+":"+str(pr.closed_date))
PATの設定
personal access tokenはお手元のAzure DevOpsから取得してください。ネットに大量に情報があると思います。Scopesはおそらく以下が必要です。
- Code
Pull Requestを読み取るために必要。Read以上の権限を付与してください。 - Pull Request Threads
Pull Requestの中のやり取りを読み取るために必要。Read & write権限を付与してください。writeは必要ではないのですがread & writeが最小権限のようでした。 - Service Connections
APIアクセスするために必要っぽいです。
認証
この辺りはMicrosft LearnにあるPythonのサンプルコードの通りです。
PATにはPersonal Settingsから取得したトークンを指定してください。organization_urlはブラウザのアドレスバーを見ればわかると思います。repository_idはIDです、リポジトリ名とは異なります。ネットを検索すれば情報はあると思いますがProject settingsにあるReposから確認することが可能です。
メソッドを実行する場合の注意
APIのメソッドはMicrosoft Learnに詳しい説明があります。Pythonの記法に則ってはいないことに注意してください。pull requestを全権取得するメソッドの説明はGetPullRequests()として記載があります。スネークケースへ読み替えてください。