forked from fluent/fluent-package-builder
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRakefile
More file actions
204 lines (182 loc) · 4.81 KB
/
Rakefile
File metadata and controls
204 lines (182 loc) · 4.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
# -*- ruby -*-
require_relative "../lib/package-task"
require "rake/clean"
require "time"
CLEAN.include("yum/tmp")
CLEAN.include("yum/build.sh")
CLEAN.include("yum/env.sh")
CLOBBER.include("yum/repositories")
class FluentReleasePackageTask < PackageTask
def initialize
super("fluent-release",
repository_version,
latest_commit_time(File.join(__dir__, "..")))
CLEAN.include(@archive_name)
end
def repository_version
"2025.9.29"
end
def repository_label
"Fluentd Project"
end
def repository_description
"Fluentd Project related packages"
end
def repository_url
# Navigate to R2 by default
# "https://packages.treasuredata.com"
"https://fluentd.cdn.cncf.io"
end
def define
super
define_yum_latest_task
end
def generate_repo_files
targets = [
{
id: "rhel-compat",
distribution: "redhat",
version: "$releasever",
},
{
id: "amazonlinux2023",
distribution: "amazon",
version: "2023",
},
# For v5
{
id: "amazonlinux2",
distribution: "amazon",
version: "2",
},
]
# fluent-release source tar.gz contains some fluent-package-${TARGET_DISTRIBUTION}-${RELEASE_CHANNEL}.repo files
targets.each do |target|
repo_path = "#{@archive_base_name}/fluent-package-#{target[:id]}.repo"
prefix = "gpgkey="
gpgkey = ""
repository_gpg_key_ids.each do |gpg_key_id|
gpgkey += <<-KEY
#{prefix}file:///etc/pki/rpm-gpg/#{rpm_gpg_key_path(gpg_key_id)}
KEY
prefix = " " * prefix.size
end
File.open(repo_path, "w") do |repo|
repo.puts(<<-REPOSITORY)
[fluent-package-v5]
name=#{repository_label}
baseurl=#{repository_url}/5/#{target[:distribution]}/#{target[:version]}/$basearch/
gpgcheck=1
enabled=0
#{gpgkey}
[fluent-package-v6]
name=#{repository_label}
baseurl=#{repository_url}/6/#{target[:distribution]}/#{target[:version]}/$basearch/
gpgcheck=1
enabled=1
#{gpgkey}
REPOSITORY
end
end
end
private
def git_directory?(directory)
candidate_paths = [".git", "HEAD"]
candidate_paths.any? do |candidate_path|
File.exist?(File.join(directory, candidate_path))
end
end
def latest_commit_time(git_directory)
return nil unless git_directory?(git_directory)
Dir.chdir(git_directory) do
return Time.iso8601(`git log -n 1 --format=%aI`.chomp).utc
end
end
def td_agent_key_id
"BEE682289B2217F45AF4CC3F901F9177AB97ACBE"
end
def fluent_package_key_id
"B40948B6A3B80E90F40E841F977D7A0943FA320E"
end
def rpm_gpg_key_path(id)
case id
when td_agent_key_id
"RPM-GPG-KEY-td-agent"
when fluent_package_key_id
"RPM-GPG-KEY-fluent-package"
end
end
def generate_gpg_keys
repository_gpg_key_ids.each do |gpg_key_id|
unless system("gpg", "--list-keys", gpg_key_id, out: IO::NULL)
sh("gpg",
"--keyserver", "keyserver.ubuntu.com",
"--recv-key", gpg_key_id)
end
sh("gpg", "--armor", "--export", gpg_key_id, out: "#{@archive_base_name}/#{rpm_gpg_key_path(gpg_key_id)}")
end
end
def repository_gpg_key_ids
[td_agent_key_id, fluent_package_key_id]
end
def define_archive_task
file @archive_name do
rm_rf(@archive_base_name)
mkdir(@archive_base_name)
generate_gpg_keys
generate_repo_files
cp("yum/fluent-release.spec.in", "#{@archive_base_name}/fluent-release.spec.in")
sh("tar", "czf", @archive_name, @archive_base_name)
end
end
def yum_targets_default
[
"rockylinux-8",
"almalinux-9",
"almalinux-10",
"amazonlinux-2023"
]
end
def define_yum_latest_task
namespace :yum do
task :build do
yum_targets.each do |target|
distribution, version, arch = target.split("-", 3)
arch = "x86_64" if arch.nil?
suffix = case version
when "2"
"amzn2"
when "2023"
"amzn2023"
else
"el#{version}"
end
distribution = case distribution
when "rockylinux"
"rocky"
when "amazonlinux"
"amazon"
else
distribution
end
rpm = [
yum_dir,
"repositories",
distribution,
version,
arch,
"Packages",
"#{@package}-#{@rpm_version}-#{@rpm_release}.#{suffix}.noarch.rpm",
].join("/")
rpm_dir = File.dirname(rpm)
directory rpm_dir
end
end
end
end
def enable_apt?
false
end
end
task = FluentReleasePackageTask.new
task.define