Kotlin が更新されたらさくっとバージョン更新する
はじめに
Kotlin の更新速度が早いので自動化したいなぁという願望から無理やり書いた Rakefile で管理 実践利用をする前段階
Maven リポジトリと現在のバージョンを比較
desc "build.gradle からバージョン情報を取得する"
def get_version(regex)
now_version = ""
open("build.gradle", "r+") { |f|
f.flock(File::LOCK_EX)
body = f.read
body = body.gsub regex do |tmp|
now_version = "#{$2}"
end
}
now_version
end
desc "Maven リポジトリにある metadata.xml を取得して XML を返す"
def get_metadata(path, base_url)
data = path.split(':')
base_url = "#{base_url}/#{data.first.gsub(/\./, '/')}/#{data[1]}/maven-metadata.xml"
response = Net::HTTP.get URI.parse(base_url)
REXML::Document.new(response)
end
desc "現在のバージョン情報が最新かどうかチェックする"
def check_version(xml, now_version)
latest_version = xml.elements['metadata/versioning/latest'].text
release_version = xml.elements['metadata/versioning/release'].text
puts "latest: #{latest_version}, release: #{release_version}, project: #{now_version}"
exit (now_version == release_version)
end
desc 'Kotlin バージョンチェック'
task :check_kotlin do
puts "Check Kotlin metadata of maven repository"
xml = get_metadata("org.jetbrains.kotlin:kotlin-gradle-plugin", "https://jcenter.bintray.com")
check_version(xml, get_version(/(ext.kotlin_version = ')(.*)(')/))
end
Maven リポジトリの最新バージョンに変更する
def get_latest_version()
xml = get_metadata("org.jetbrains.kotlin:kotlin-gradle-plugin", "https://jcenter.bintray.com")
xml.elements['metadata/versioning/latest'].text
end
def set_version()
version = get_latest_version()
base_version = version.split('-')
semantic_version = base_version[0].split('.')
open("build.gradle", "r+") { |f|
f.flock(File::LOCK_EX)
body = f.read
body = body.gsub /(ext.kotlin_version = ')(.*)(')/ do |tmp|
"#{$1}#{version}#{$3}"
end
f.rewind
f.puts body
f.truncate(f.tell)
}
end
desc 'Kotlin のバージョンを更新する'
task :update_kotlin do
set_version()
end
おわりに
どのタイミングでこれを実行するのかは結構難しい 仕込むなら CI 中だが1週間に1回 update_kotlin をするとかかな