1# -*- ruby -*- 2 3require "open-uri" 4require_relative "helper" 5 6package = "pgroonga" 7package_label = "PGroonga" 8rsync_base_path = "packages@packages.groonga.org:public" 9 10def latest_groonga_version 11 @latest_groonga_version ||= Helper.detect_latest_groonga_version 12end 13 14def export_source(base_name) 15 sh("git archive --prefix=#{base_name}/ --format=tar HEAD | " + 16 "tar xf -") 17 sh("(cd vendor/xxHash && " + 18 "git archive --prefix=#{base_name}/vendor/xxHash/ --format=tar HEAD) | " + 19 "tar xf -") 20end 21 22version = Helper.detect_version(package) 23 24archive_base_name = "#{package}-#{version}" 25suffix = ENV["SUFFIX"] 26if suffix 27 archive_base_name << suffix 28end 29archive_name = "#{archive_base_name}.tar.gz" 30windows_archive_name = "#{archive_base_name}.zip" 31 32dist_files = `git ls-files`.split("\n").reject do |file| 33 file.start_with?("packages/") 34end 35 36file archive_name => dist_files do 37 export_source(archive_base_name) 38 sh("tar", "czf", archive_name, archive_base_name) 39 rm_r(archive_base_name) 40end 41 42file windows_archive_name => dist_files do 43 export_source(archive_base_name) 44 groonga_base_name = "groonga-#{latest_groonga_version}" 45 groonga_suffix = ENV["GROONGA_SUFFIX"] 46 if groonga_suffix 47 groonga_base_name << groonga_suffix 48 groonga_archive_name = "#{groonga_base_name}.zip" 49 sh("curl", 50 "-O", 51 "https://packages.groonga.org/tmp/#{groonga_archive_name}") 52 else 53 groonga_archive_name = "#{groonga_base_name}.zip" 54 sh("curl", 55 "-O", 56 "https://packages.groonga.org/source/groonga/#{groonga_archive_name}") 57 end 58 rm_rf(groonga_base_name) 59 sh("unzip", groonga_archive_name) 60 rm(groonga_archive_name) 61 mkdir_p("#{archive_base_name}/vendor") 62 mv(groonga_base_name, "#{archive_base_name}/vendor/groonga") 63 rm_f(windows_archive_name) 64 sh("zip", "-r", windows_archive_name, archive_base_name) 65 rm_r(archive_base_name) 66end 67 68desc "Create release package" 69task :dist => [archive_name, windows_archive_name] 70 71desc "Tag #{version}" 72task :tag do 73 sh("git", "tag", 74 "-a", version, 75 "-m", "#{package_label} #{version} has been released!!!") 76 sh("git", "push", "--tags") 77end 78 79namespace :version do 80 desc "Update version" 81 task :update do 82 new_version = Helper.env_value("NEW_VERSION") 83 84 Dir.glob("*.control") do |control_path| 85 package_name = File.basename(control_path, ".*") 86 content = File.read(control_path) 87 content = content.gsub(/^default_version = '.+?'/, 88 "default_version = '#{new_version}'") 89 File.open(control_path, "w") do |control_file| 90 control_file.print(content) 91 end 92 sh("git", "add", control_path) 93 94 upgrade_sql_name = "#{package_name}--#{version}--#{new_version}.sql" 95 upgrade_sql_path = File.join("data", upgrade_sql_name) 96 File.open(upgrade_sql_path, "w") do |upgrade_sql| 97 upgrade_sql.puts("-- Upgrade SQL") 98 end 99 sh("git", "add", upgrade_sql_path) 100 end 101 end 102end 103 104packages_dir = "packages" 105 106namespace :package do 107 package_names = [ 108 "pgroonga", 109 "postgresql-10-pgroonga", 110 "postgresql-10-pgdg-pgroonga", 111 "postgresql-11-pgroonga", 112 "postgresql-12-pgroonga", 113 "postgresql-12-pgdg-pgroonga", 114 "postgresql-13-pgroonga", 115 "postgresql-13-pgdg-pgroonga", 116 "postgresql-14-pgdg-pgroonga", 117 ] 118 119 namespace :source do 120 rsync_path = "#{rsync_base_path}/source/#{package}" 121 source_dir = "#{packages_dir}/source" 122 123 directory source_dir 124 125 desc "Clean sources" 126 task :clean do 127 rm_rf(source_dir) 128 end 129 130 desc "Upload sources" 131 task :upload => [archive_name, windows_archive_name, source_dir] do 132 groonga_repository = ENV["GROONGA_REPOSITORY"] 133 if groonga_repository.nil? 134 raise "Specify GROONGA_REPOSITORY environment variable" 135 end 136 gpg_uid = File.read(File.join(groonga_repository, "gpg_uid_rsa4096")).strip 137 138 prepare_archive = lambda do |archive, latest_archive| 139 cp(archive, source_dir) 140 cd(source_dir) do 141 ln_sf(archive, latest_archive) 142 sh("gpg", 143 "--local-user", gpg_uid, 144 "--armor", 145 "--detach-sign", 146 archive) 147 ln_sf("#{archive}.asc", "#{latest_archive}.asc") 148 end 149 end 150 151 prepare_archive.call(archive_name, "#{package}-latest.tar.gz") 152 prepare_archive.call(windows_archive_name, "#{package}-latest.zip") 153 sh("rsync", "-avz", "--progress", "#{source_dir}/", rsync_path) 154 end 155 156 namespace :snapshot do 157 desc "Upload snapshot sources" 158 task :upload => [archive_name, windows_archive_name] do 159 sh("scp", archive_name, "#{rsync_base_path}/tmp") 160 sh("scp", windows_archive_name, "#{rsync_base_path}/tmp") 161 end 162 end 163 end 164 165 desc "Release sources" 166 source_tasks = [ 167 "package:source:clean", 168 "package:source:upload", 169 ] 170 task :source => source_tasks 171 172 desc "Release APT packages" 173 task :apt do 174 package_names.each do |package_name| 175 cd("packages/#{package_name}") do 176 ruby("-S", "rake", "apt") 177 end 178 end 179 end 180 181 desc "Release Ubuntu packages" 182 task :ubuntu do 183 package_names.each do |package_name| 184 cd("packages/#{package_name}") do 185 ruby("-S", "rake", "ubuntu", "--trace") 186 end 187 end 188 end 189 190 desc "Release Yum packages" 191 task :yum do 192 package_names.each do |package_name| 193 cd("packages/#{package_name}") do 194 ruby("-S", "rake", "yum") 195 end 196 end 197 end 198 199 namespace :version do 200 desc "Update versions" 201 task :update do 202 package_names.each do |package_name| 203 cd("packages/#{package_name}") do 204 ruby("-S", "rake", "version:update") 205 end 206 end 207 spec_in = nil 208 package_names.reverse_each do |package_name| 209 spec_in = Dir.glob("packages/#{package_name}/yum/*.spec.in").first 210 break if spec_in 211 end 212 cp(spec_in, "packages/yum/postgresql-pgroonga.spec.in") 213 end 214 end 215end 216