Skip to content

Commit d809eca

Browse files
committed
deploy archive: add support for Windows binaries
1 parent c5ad698 commit d809eca

File tree

2 files changed

+46
-19
lines changed

2 files changed

+46
-19
lines changed

ansible/files/home/packages/Rakefile

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@
1515
# You should have received a copy of the GNU General Public License
1616
# along with this program. If not, see <https://www.gnu.org/licenses/>.
1717

18+
require_relative "tasks/archive-task"
1819
require_relative "tasks/repository-task"
19-
require_relative "tasks/source-archive-task"
2020

2121
release = Release.new
2222
release.gpg_key_id = "2701F317CFCCCB975CADE9C2624CF77434839225"
2323
release.base_dir = Pathname(__dir__).expand_path
2424
release.public_dir = release.base_dir + "public"
25-
source_archive_task = SourceArchiveTask.new(release)
26-
source_archive_task.define
25+
archive_task = ArchiveTask.new(release)
26+
archive_task.define
2727
repository_task = RepositoryTask.new(release)
2828
repository_task.define

ansible/files/home/packages/tasks/source-archive-task.rb ansible/files/home/packages/tasks/archive-task.rb

+43-16
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
require_relative "release"
2020
require_relative "state"
2121

22-
class SourceArchiveTask
22+
class ArchiveTask
2323
include Rake::DSL
2424

2525
def initialize(release)
@@ -30,14 +30,30 @@ def initialize(release)
3030

3131
def define
3232
namespace :deploy do
33-
desc "Deploy source archive"
34-
task :source_archive do
35-
target_assets.each do |asset|
36-
extension = asset["name"].delete_prefix("#{@release.base_name}.")
33+
desc "Deploy archives"
34+
task :archives do
35+
target_assets.each do |type, asset|
36+
base_name = asset["name"]
37+
if type == "source"
38+
# groonga-14.1.1.tar.gz -> tar.gz
39+
# groonga-14.1.1.zip -> zip
40+
extension = base_name.delete_prefix("#{@release.base_name}.")
41+
state_id = "source-#{extension}"
42+
else
43+
# groonga-14.1.1-x64-vs2019-with-vcruntime.zip ->
44+
# x64-vs2019-with-vcruntime
45+
#
46+
# groonga-14.1.1-x64-vs2022.zip ->
47+
# x64-vs2022
48+
binary_type = base_name.
49+
delete_prefix("#{@release.base_name}-").
50+
delete_suffix(".zip")
51+
state_id = "windows-#{binary_type}"
52+
end
3753
state = State.new(@release.base_dir,
3854
@release.package,
3955
@release.version,
40-
"source-#{extension}")
56+
state_id)
4157
next if state.done?
4258

4359
state.lock do
@@ -47,7 +63,7 @@ def define
4763
upload(dir)
4864
end
4965

50-
update_htaccess(asset)
66+
update_htaccess(type, asset)
5167
state.done
5268
end
5369
end
@@ -57,22 +73,33 @@ def define
5773

5874
private
5975
def target_assets
60-
archive_assets = {}
76+
source_archive_assets = {}
77+
windows_binary_assets = {}
6178
sign_file_names = []
6279
@github_client.release(@release.tag)["assets"].each do |asset|
6380
file_name = asset["name"]
6481
case file_name
6582
when "#{@release.base_name}.tar.gz", "#{@release.base_name}.zip"
66-
archive_assets[file_name] = asset
83+
source_archive_assets[file_name] = asset
84+
when /\A#{Regexp.escape(@release.base_name)}-.+\.zip\z/
85+
windows_binary_assets[file_name] = asset
6786
when /\.asc\z/
6887
sign_file_names << file_name
6988
end
7089
end
7190
sign_file_names.each do |sign_file_name|
7291
signed_file_name = sign_file_name.gsub(/\.asc\z/, "")
73-
archive_assets.delete(signed_file_name)
92+
source_archive_assets.delete(signed_file_name)
93+
windows_binary_assets.delete(signed_file_name)
94+
end
95+
assets = []
96+
source_archive_assets.values.each do |asset|
97+
assets << ["source", asset]
7498
end
75-
archive_assets.values
99+
windows_binary_assets.values.each do |asset|
100+
assets << ["windows", asset]
101+
end
102+
assets
76103
end
77104

78105
def download(dir, asset)
@@ -109,14 +136,14 @@ def upload(dir)
109136
*paths)
110137
end
111138

112-
def update_htaccess(asset)
113-
htaccess_path =
114-
@release.public_dir + "source" + @release.package + ".htaccess"
139+
def update_htaccess(type, asset)
140+
htaccess_path = @release.public_dir + type + @release.package + ".htaccess"
115141
return unless htaccess_path.exist?
116142

117143
base_name = asset["name"]
118-
extension = base_name.delete_prefix("#{@release.base_name}.")
119-
latest_base_name = "#{@release.package}-latest.#{extension}"
144+
latest_base_name = base_name.gsub(/\A#{Regexp.escape(@release.base_name)}/) do
145+
"#{@release.package}-latest"
146+
end
120147
htaccess_content = ""
121148
htaccess_path.open do |htaccess|
122149
htaccess.each_line do |line|

0 commit comments

Comments
 (0)