scripts/prepare-changelog-entries.rb (40 lines of code) (raw):

#!/usr/bin/env ruby require 'json' require 'net/http' require 'uri' per_page = 15 private_token = ENV['GITLAB_PRIVATE_TOKEN'] unless private_token && !private_token.empty? STDERR.puts 'Please set GITLAB_PRIVATE_TOKEN variable' exit 1 end starting_point = ENV['STARTING_POINT'] if !starting_point || starting_point.empty? starting_point = `git describe --tags --abbrev=0 --match "v[0-9].[0-9].[0-9]"`.strip STDERR.puts "STARTING_POINT variable not set, using autodiscovered: #{starting_point}" end unless starting_point && !starting_point.empty? STDERR.puts 'Please set STARTING_POINT variable' end exclude_mr_ids = [] exclude_mr_ids = ENV['EXCLUDE_MR_IDS'].split(',').map(&:to_i) if ENV['EXCLUDE_MR_IDS'] project_id = ENV['PROJECT_ID'] || 'gitlab-org%2Fgitlab-ci-multi-runner' base_url = URI("https://gitlab.com/api/v3/projects/#{project_id}/merge_requests/") merge_requests = {} merge_request_ids_cmd = "git log #{starting_point}.. --first-parent | grep -E \"^\\s*See merge request \![0-9]+$\" | grep -Eo \"[0-9]+$\" | xargs echo" merge_request_ids = `#{merge_request_ids_cmd}`.split(' ').map(&:to_i).reject{ |id| exclude_mr_ids.include?(id) }.reverse merge_request_ids.sort.each_slice(per_page).to_a.each do |part| query = part.map do |id| "iid[]=#{id}" end query << "per_page=#{per_page}" query << "private_token=#{private_token}" base_url.query = query.join('&') data = JSON.parse(Net::HTTP.get(base_url)) data.each do |mr| merge_requests[mr['iid'].to_i] = mr['title'] end end puts merge_request_ids.each do |iid| puts "- #{merge_requests[iid]} !#{iid}" end