【忘備録】GitLabのマージリクエストをC#から取得する【C#】

スポンサーリンク
スポンサーリンク

はじめに

例によって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指定で実行する必要がある。

最後に

比較的高速に動作していたので、良い。

コメント

タイトルとURLをコピーしました