2022年9月16日金曜日

GitlabAPIを使ってユーザのアクティビティを取得する方法

GitlabAPIを使ってユーザのアクティビティを取得する方法

概要

user_events API を使います
Ruby を使ったサンプルコードを紹介します

環境

  • Ubuntu18.04
  • Ruby 3.0.0
  • gitlab 4.19.0

サンプルコード

require 'gitlab'
require 'date'

g = Gitlab.configure do |config|
  config.endpoint       = 'http://local.gitlab/api/v4'
  config.private_token  = 'xxx'
end

user_id = 1
now = DateTime.now
after = (now - 8).strftime("%Y-%m-%d")
events = Gitlab.user_events(user_id, { after: after, per_page: 100 })
summary = {}
events.each do |e|
  # pp e.to_h
  title = e['target_title']
  project_id = e['project_id']
  unless title.nil?
    summary[title] = project_id
  end
end

pp summary

summary.each do |title, project_id|
  is_next = false
  issues = Gitlab.issues(project_id, { per_page: 40 })
  issues.each do |issue|
    # pp issue.to_h
    if issue['title'] == title
      puts "* #{title} #{issue['web_url']}"
      is_next = true
      break
    end
  end
  next if is_next
  merge_requests = Gitlab.merge_requests(project_id, { per_page: 40 })
  merge_requests.each do |merge_request|
    # pp merge_request.to_h
    if merge_request['title'] == title
      puts "* #{title} #{merge_request['web_url']}"
      is_next = true
      break
    end
  end
  next if is_next
  wikis = Gitlab.wikis(project_id, { per_page: 40 })
  wikis.each do |wiki|
    # pp wiki.to_h
    if wiki['title'] == title
      puts "* #{title} #{wiki['slug']}"
      is_next = true
      break
    end
  end
  next if is_next
end

ちょっと解説

user_events を使って指定のユーザのイベントを取得します
期間は1週間分取得しています
直接 issue や merge request の URL を取得できないのでとりあえずプロジェクトIDとタイトルの一覧を取得します

その後一覧から issue と merge request と wiki の URL を生成します

もっといい方法がありそうですがとりあえず動けばで作ったのでこんな感じになっています

0 件のコメント:

コメントを投稿