mirror of
https://github.com/MariaDB/server.git
synced 2025-02-05 21:32:18 +01:00
247 lines
7.9 KiB
Ruby
Executable file
247 lines
7.9 KiB
Ruby
Executable file
#!/usr/bin/env ruby
|
|
#
|
|
# Copyright(C) 2014-2016 Kouhei Sutou <kou@clear-code.com>
|
|
# Copyright(C) 2014 HAYASHI Kentaro <hayashi@clear-code.com>
|
|
#
|
|
# This library is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU Lesser General Public
|
|
# License version 2.1 as published by the Free Software Foundation.
|
|
#
|
|
# This library is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
# Lesser General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Lesser General Public
|
|
# License along with this library; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
|
|
|
|
require "optparse"
|
|
require "fileutils"
|
|
require "pathname"
|
|
require "open-uri"
|
|
|
|
class Uploader
|
|
def initialize
|
|
@dput_configuration_name = "groonga-ppa"
|
|
@use_pbuilder = false
|
|
end
|
|
|
|
def run
|
|
ensure_dput_configuration
|
|
|
|
parse_command_line!
|
|
|
|
ensure_mysql_version
|
|
|
|
@required_groonga_version = required_groonga_version
|
|
|
|
@code_names.each do |code_name|
|
|
mysql55_version = @mysql55_versions[code_name]
|
|
mysql56_version = @mysql56_versions[code_name]
|
|
mysql57_version = @mysql57_versions[code_name]
|
|
mariadb10_0_version = @mariadb10_0_versions[code_name]
|
|
if mysql55_version
|
|
upload(code_name, "5.5", mysql55_version)
|
|
end
|
|
if mysql56_version
|
|
upload(code_name, "5.6", mysql56_version)
|
|
end
|
|
if mysql57_version
|
|
upload(code_name, "5.7", mysql57_version)
|
|
end
|
|
if mariadb10_0_version
|
|
upload(code_name, "mariadb-10.0", mariadb10_0_version)
|
|
end
|
|
end
|
|
end
|
|
|
|
private
|
|
def ensure_dput_configuration
|
|
dput_cf_path = Pathname.new("~/.dput.cf").expand_path
|
|
if dput_cf_path.exist?
|
|
dput_cf_content = dput_cf_path.read
|
|
else
|
|
dput_cf_content = ""
|
|
end
|
|
dput_cf_content.each_line do |line|
|
|
return if line.chomp == "[#{@dput_configuration_name}]"
|
|
end
|
|
|
|
dput_cf_path.open("w") do |dput_cf|
|
|
dput_cf.puts(dput_cf_content)
|
|
dput_cf.puts(<<-CONFIGURATION)
|
|
[#{@dput_configuration_name}]
|
|
fqdn = ppa.launchpad.net
|
|
method = ftp
|
|
incoming = ~groonga/ppa/ubuntu/
|
|
login = anonymous
|
|
allow_unsigned_uploads = 0
|
|
CONFIGURATION
|
|
end
|
|
end
|
|
|
|
def ensure_mysql_version
|
|
@mysql_versions = {}
|
|
@mysql55_versions = {}
|
|
@mysql56_versions = {}
|
|
@mysql57_versions = {}
|
|
@mariadb10_0_versions = {}
|
|
@code_names.each do |code_name|
|
|
source_names = [code_name, "#{code_name}-updates"]
|
|
source_names.each do |source_name|
|
|
allpackages_url =
|
|
"http://packages.ubuntu.com/#{source_name}/allpackages?format=txt.gz"
|
|
open(allpackages_url) do |file|
|
|
file.each_line do |line|
|
|
case line
|
|
when /\Amysql-server \((.+?)[\s)]/
|
|
@mysql_versions[code_name] = $1
|
|
when /\Amysql-server-5\.5 \((.+?)[\s)]/
|
|
@mysql55_versions[code_name] = $1
|
|
when /\Amysql-server-5\.6 \((.+?)[\s)]/
|
|
@mysql56_versions[code_name] = $1
|
|
when /\Amysql-server-5\.7 \((.+?)[\s)]/
|
|
@mysql57_versions[code_name] = $1
|
|
when /\Amariadb-server-10\.0 \((.+?)[\s)]/
|
|
@mariadb10_0_versions[code_name] = $1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def parse_command_line!
|
|
parser = OptionParser.new
|
|
parser.on("--package=NAME",
|
|
"The package name") do |name|
|
|
@package = name
|
|
end
|
|
parser.on("--version=VERSION",
|
|
"The version") do |version|
|
|
@version = version
|
|
end
|
|
parser.on("--source-archive-directory=DIRECTORY",
|
|
"The directory that has source archives") do |directory|
|
|
@source_archive_directory = Pathname.new(directory).expand_path
|
|
end
|
|
parser.on("--code-names=CODE_NAME1,CODE_NAME2,CODE_NAME3,...", Array,
|
|
"The target code names") do |code_names|
|
|
@code_names = code_names
|
|
end
|
|
parser.on("--debian-base-directory=DIRECTORY",
|
|
"The directory that has debianXX/ directory") do |directory|
|
|
@debian_base_directory = Pathname.new(directory).expand_path
|
|
end
|
|
parser.on("--ppa=PPA",
|
|
"The personal package archive name (groonga-ppa or groonga-nightly") do |ppa|
|
|
@dput_configuration_name = ppa
|
|
end
|
|
parser.on("--pgp-sign-key=KEY",
|
|
"The PGP key to sign .changes and .dsc") do |pgp_sign_key|
|
|
@pgp_sign_key = pgp_sign_key
|
|
end
|
|
parser.on("--[no-]pbuilder",
|
|
"Use pbuilder for build check") do |use_pbuilder|
|
|
@use_pbuilder = use_pbuilder
|
|
end
|
|
|
|
parser.parse!
|
|
end
|
|
|
|
def upload(code_name, mysql_short_version, mysql_version)
|
|
default_mysql_version = (@mysql_versions[code_name] == mysql_version)
|
|
deb_package_name = "#{@package}-#{mysql_short_version}"
|
|
in_temporary_directory do
|
|
source_archive =
|
|
@source_archive_directory + "#{deb_package_name}_#{@version}.orig.tar.gz"
|
|
run_command("tar", "xf", source_archive.to_s)
|
|
directory_name = "#{deb_package_name}-#{@version}"
|
|
Dir.chdir(directory_name) do
|
|
debian_directory =
|
|
@debian_base_directory + "debian-#{mysql_short_version}"
|
|
FileUtils.cp_r(debian_directory.to_s, "debian")
|
|
deb_version = "#{current_deb_version.succ}~#{code_name}1"
|
|
run_command("dch",
|
|
"--distribution", code_name,
|
|
"--newversion", deb_version,
|
|
"Build for #{code_name}.")
|
|
remove_versionless_mroonga = true
|
|
if default_mysql_version or mysql_short_version.start_with?("mariadb-")
|
|
remove_versionless_mroonga = false
|
|
end
|
|
if remove_versionless_mroonga
|
|
control_content = File.read("debian/control")
|
|
File.open("debian/control", "w") do |control|
|
|
in_mysql_server_mroonga = false
|
|
control_content.each_line do |line|
|
|
case line.chomp
|
|
when ""
|
|
if in_mysql_server_mroonga
|
|
in_mysql_server_mroonga = false
|
|
else
|
|
control.print(line)
|
|
end
|
|
when "Package: mysql-server-mroonga"
|
|
in_mysql_server_mroonga = true
|
|
else
|
|
next if in_mysql_server_mroonga
|
|
control.print(line)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
run_command("sed",
|
|
"-i", "-e",
|
|
"s,MYSQL_VERSION\\|MARIADB_VERSION,#{mysql_version},",
|
|
"debian/control")
|
|
run_command("debuild",
|
|
"--no-lintian",
|
|
# Workaround for Launchpad. Launchpad doesn't accept
|
|
# .buildinfo yet.
|
|
# See also: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=853795
|
|
"--buildinfo-option=-O",
|
|
"-d",
|
|
"-S",
|
|
"-sa",
|
|
"-pgpg2",
|
|
"-k#{@pgp_sign_key}")
|
|
if @use_pbuilder
|
|
run_command("pbuilder-dist", code_name, "build",
|
|
"../#{deb_package_name}_#{deb_version}.dsc")
|
|
else
|
|
run_command("dput", @dput_configuration_name,
|
|
"../#{deb_package_name}_#{deb_version}_source.changes")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def required_groonga_version
|
|
File.read("../../required_groonga_version").lines.first.chomp
|
|
end
|
|
|
|
def current_deb_version
|
|
/\((.+)\)/ =~ File.read("debian/changelog").lines.first
|
|
$1
|
|
end
|
|
|
|
def in_temporary_directory
|
|
name = "tmp"
|
|
FileUtils.rm_rf(name)
|
|
FileUtils.mkdir_p(name)
|
|
Dir.chdir(name) do
|
|
yield
|
|
end
|
|
end
|
|
|
|
def run_command(*command_line)
|
|
unless system(*command_line)
|
|
raise "failed to run command: #{command_line.join(' ')}"
|
|
end
|
|
end
|
|
end
|
|
|
|
uploader = Uploader.new
|
|
uploader.run
|