はじめに
例によってCI/CD的なことをC#で実行したかったので。。。
GitLabにはAPIがあるため、HTTPリクエストで実行しても良いのですが、GitLabApiClientというライブラリを見つけたので使ってみました。
マージリクエストを取得する
Nugetで「GitLabApiClient」を検索してインストール。
次のようにしてプロジェクト情報を取得する。
using GitLabApiClient; GitLabClient client = new GitLabClient("リポジトリのURL", "アカウントのPAT"); GitLabApiClient.Models.Projects.Responses.Project project = client.Projects.GetAsync("プロジェクトID").Result;
マージ済みのリクエスト情報一覧(及びリクエスト情報)を取得する場合は、次のようにする。
var requests = client.MergeRequests.GetAsync(project, option => option.State = QueryMergeRequestState.Merged).Result;
foreach(var request in requests){ //省略 }
特定(リクエストIDを指定)のリクエスト情報を取得する場合は、次のようにする。
GitLabApiClient.Models.MergeRequests.Responses.MergeRequest request = client.MergeRequests.GetAsync(project, "マージリクエストID").Result;
リクエスト情報は、次のように内容を取得できる。
string description = request.Description; DateTime updatedat = request.UpdatedAt; string mergedby = request.MergedBy.Name; string sha = request.Sha;
また、コミットの差分情報一覧(及び差分情報)は次のようにして取得する。
IList<GitLabApiClient.Models.Commits.Responses.Diff> diffs = client.Commits.GetDiffsAsync("プロジェクトID", sha).Result;
foreach (var diff in diffs) { //省略 }
差分情報は、次のようにして内容を取得できる。
string difftext = diff.DiffText; string newpath = diff.NewPath;
気になった点
プロジェクト指定でマージリクエストを取りに行く際に、プロジェクト名とプロジェクトIDのうちプロジェクト名を優先して使ってること。
GitLabのAPIがプロジェクト名だけ%エンコードするみたいな仕様なので、サーバーによってはエラー吐く。プロジェクトIDを優先したい場合はプロジェクト指定ではなく、プロジェクトID指定で実行する必要がある。
最後に
比較的高速に動作していたので、良い。
コメント