Skip to content

Commit bce39a2

Browse files
committed
[build] verify release targets are correct during build
1 parent 6baaf9f commit bce39a2

File tree

1 file changed

+37
-10
lines changed

1 file changed

+37
-10
lines changed

Rakefile

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,7 @@ task '//java/test/org/openqa/selenium/environment/webserver:webserver:uber' => [
9292
'//java/test/org/openqa/selenium/environment:webserver'
9393
]
9494

95-
# Java targets required for release. These should all be java_export targets.
96-
# Generated from: bazel query 'kind(maven_publish, set(//java/... //third_party/...))' | sort
95+
# use #java_release_targets to access this list
9796
JAVA_RELEASE_TARGETS = %w[
9897
//java/src/org/openqa/selenium/chrome:chrome.publish
9998
//java/src/org/openqa/selenium/chromium:chromium.publish
@@ -120,6 +119,34 @@ JAVA_RELEASE_TARGETS = %w[
120119
//java/src/org/openqa/selenium:core.publish
121120
].freeze
122121

122+
def java_release_targets
123+
@targets_verified ||= verify_java_release_targets
124+
125+
JAVA_RELEASE_TARGETS
126+
end
127+
128+
def verify_java_release_targets
129+
query = 'kind(maven_publish, set(//java/... //third_party/...))'
130+
current_targets = []
131+
132+
Bazel.execute('query', [], query) do |output|
133+
current_targets = output.lines.map(&:strip).reject(&:empty?)
134+
end
135+
136+
missing_targets = current_targets - JAVA_RELEASE_TARGETS
137+
extra_targets = JAVA_RELEASE_TARGETS - current_targets
138+
139+
return if missing_targets.empty? && extra_targets.empty?
140+
141+
error_message = 'Java release targets are out of sync with Bazel query results.'
142+
143+
error_message += "\nMissing targets: #{missing_targets.join(', ')}" unless missing_targets.empty?
144+
145+
error_message += "\nObsolete targets: #{extra_targets.join(', ')}" unless extra_targets.empty?
146+
147+
raise error_message
148+
end
149+
123150
# Notice that because we're using rake, anything you can do in a normal rake
124151
# build can also be done here. For example, here we set the default task
125152
task default: [:grid]
@@ -364,7 +391,7 @@ end
364391

365392
desc 'Install jars to local m2 directory'
366393
task :'maven-install' do
367-
JAVA_RELEASE_TARGETS.each do |p|
394+
java_release_targets.each do |p|
368395
Bazel.execute('run',
369396
['--stamp',
370397
'--define',
@@ -826,7 +853,7 @@ namespace :java do
826853
desc 'Build Java Client Jars'
827854
task :build do |_task, arguments|
828855
args = arguments.to_a.compact
829-
JAVA_RELEASE_TARGETS.each { |target| Bazel.execute('build', args, target) }
856+
java_release_targets.each { |target| Bazel.execute('build', args, target) }
830857
end
831858

832859
desc 'Build Grid Server'
@@ -873,7 +900,7 @@ namespace :java do
873900
Rake::Task['java:package'].invoke('--config=release')
874901
Rake::Task['java:build'].invoke('--config=release')
875902
# Because we want to `run` things, we can't use the `release` config
876-
JAVA_RELEASE_TARGETS.each { |target| Bazel.execute('run', ['--config=release'], target) }
903+
java_release_targets.each { |target| Bazel.execute('run', ['--config=release'], target) }
877904
end
878905

879906
desc 'Install jars to local m2 directory'
@@ -894,14 +921,14 @@ namespace :java do
894921

895922
file_path = 'MODULE.bazel'
896923
content = File.read(file_path)
897-
output = nil
898-
Bazel.execute('run', [], '@maven//:outdated') do |out|
899-
output = out
900-
end
924+
output = nil
925+
Bazel.execute('run', [], '@maven//:outdated') do |out|
926+
output = out
927+
end
901928

902929
versions = output.scan(/(\S+) \[\S+ -> (\S+)\]/).to_h
903930
versions.each do |artifact, version|
904-
content.sub!(/#{Regexp.escape(artifact)}:([\d\.\-]+(?:[-.]?[A-Za-z0-9]+)*)/, "#{artifact}:#{version}")
931+
content.sub!(/#{Regexp.escape(artifact)}:([\d.-]+(?:[-.]?[A-Za-z0-9]+)*)/, "#{artifact}:#{version}")
905932
end
906933
File.write(file_path, content)
907934

0 commit comments

Comments
 (0)