Skip to content

Commit 44b8b68

Browse files
committed
[build] namespace Rake tasks for building and releasing by language
1 parent 22dcb17 commit 44b8b68

File tree

1 file changed

+187
-107
lines changed

1 file changed

+187
-107
lines changed

Rakefile

Lines changed: 187 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -56,18 +56,6 @@ def java_version
5656
end
5757
end
5858

59-
def dotnet_version
60-
File.foreach('dotnet/selenium-dotnet-version.bzl') do |line|
61-
return line.split('=').last.strip.tr('"', '') if line.include?('SE_VERSION')
62-
end
63-
end
64-
65-
def python_version
66-
File.foreach('py/BUILD.bazel') do |line|
67-
return line.split('=').last.strip.tr('"', '') if line.include?('SE_VERSION')
68-
end
69-
end
70-
7159
# The build system used by webdriver is layered on top of rake, and we call it
7260
# "crazy fun" for no readily apparent reason.
7361

@@ -336,45 +324,22 @@ task ios_driver: [
336324
'//javascript/webdriver/atoms/fragments:get_location_in_view:ios'
337325
]
338326

339-
task 'dotnet-release-zip': [
340-
'//dotnet:all'
341-
] do
342-
[
343-
"build/dist/selenium-dotnet-#{dotnet_version}.zip",
344-
"build/dist/selenium-dotnet-strongnamed-#{dotnet_version}.zip",
345-
].each do |f|
346-
rm_f(f) if File.exists?(f)
347-
end
348-
mkdir_p 'build/dist'
349-
File.delete
350-
351-
cp "bazel-bin/dotnet/release.zip", "build/dist/selenium-dotnet-#{dotnet_version}.zip", preserve: false
352-
chmod 0666, "build/dist/selenium-dotnet-#{dotnet_version}.zip"
353-
cp "bazel-bin/dotnet/strongnamed.zip", "build/dist/selenium-dotnet-strongnamed-#{dotnet_version}.zip", preserve: false
354-
chmod 0666, "build/dist/selenium-dotnet-strongnamed-#{dotnet_version}.zip"
355-
end
356-
357-
task 'java-release-zip': [
358-
'//java/src/org/openqa/selenium:client-zip',
359-
'//java/src/org/openqa/selenium/grid:server-zip',
360-
'//java/src/org/openqa/selenium/grid:executable-grid',
361-
] do
362-
[
363-
"build/dist/selenium-server-#{java_version}.zip",
364-
"build/dist/selenium-java-#{java_version}.zip",
365-
"build/dist/selenium-server-#{java_version}.jar"
366-
].each do |f|
367-
rm_f(f) if File.exists?(f)
368-
end
369-
327+
task :'java-release-zip' do
328+
Bazel.execute('build', ['--stamp'], '//java/src/org/openqa/selenium:client-zip')
329+
Bazel.execute('build', ['--stamp'], '//java/src/org/openqa/selenium/grid:server-zip')
330+
Bazel.execute('build', ['--stamp'], '//java/src/org/openqa/selenium/grid:executable-grid')
370331
mkdir_p 'build/dist'
371-
File.delete
372-
cp "bazel-bin/java/src/org/openqa/selenium/grid/server-zip.zip", "build/dist/selenium-server-#{java_version}.zip", preserve: false
373-
chmod 0666, "build/dist/selenium-server-#{java_version}.zip"
374-
cp "bazel-bin/java/src/org/openqa/selenium/client-zip.zip", "build/dist/selenium-java-#{java_version}.zip", preserve: false
375-
chmod 0666, "build/dist/selenium-java-#{java_version}.zip"
376-
cp "bazel-bin/java/src/org/openqa/selenium/grid/selenium", "build/dist/selenium-server-#{java_version}.jar", preserve: false
377-
chmod 0777, "build/dist/selenium-server-#{java_version}.jar"
332+
FileUtils.rm_f('build/dist/**/*.{server,java}*', force: true)
333+
334+
FileUtils.copy('bazel-bin/java/src/org/openqa/selenium/grid/server-zip.zip',
335+
"build/dist/selenium-server-#{java_version}.zip")
336+
FileUtils.chmod(666, "build/dist/selenium-server-#{java_version}.zip")
337+
FileUtils.copy('bazel-bin/java/src/org/openqa/selenium/client-zip.zip',
338+
"build/dist/selenium-java-#{java_version}.zip")
339+
FileUtils.chmod(666, "build/dist/selenium-java-#{java_version}.zip")
340+
FileUtils.copy('bazel-bin/java/src/org/openqa/selenium/grid/selenium',
341+
"build/dist/selenium-server-#{java_version}.jar")
342+
FileUtils.chmod(777, "build/dist/selenium-server-#{java_version}.jar")
378343
end
379344

380345
task 'release-java': %i[java-release-zip publish-maven]
@@ -406,46 +371,27 @@ def read_m2_user_pass
406371
return [user, pass]
407372
end
408373

409-
task :prepare_release do
410-
RELEASE_TARGETS = [
411-
'//java/src/org/openqa/selenium:client-zip',
412-
'//java/src/org/openqa/selenium/grid:server-zip',
413-
'//java/src/org/openqa/selenium/grid:executable-grid',
414-
'//dotnet/src/webdriver:webdriver-pack',
415-
'//dotnet/src/webdriver:webdriver-strongnamed-pack',
416-
'//dotnet/src/support:support-pack',
417-
'//dotnet/src/support:support-strongnamed-pack',
418-
'//javascript/node/selenium-webdriver:selenium-webdriver',
419-
'//py:selenium-wheel',
420-
'//py:selenium-sdist',
421-
]
422-
423-
RELEASE_TARGETS.each do |target|
424-
Bazel::execute('build', ['--config', 'release'], target)
425-
end
426-
Bazel::execute('build', ['--stamp'], '//rb:selenium-webdriver')
427-
end
428-
429-
PYPI_ASSETS = [
430-
"bazel-bin/py/selenium-#{python_version}-py3-none-any.whl",
431-
"bazel-bin/py/selenium-#{python_version}.tar.gz"
432-
]
433-
434-
task 'publish-pypi' do
435-
PYPI_ASSETS.each do |asset|
436-
sh "python3 -m twine upload #{asset}"
437-
end
438-
end
439-
440-
NUGET_RELEASE_ASSETS = [
441-
"./bazel-bin/dotnet/src/webdriver/Selenium.WebDriver.#{dotnet_version}.nupkg",
442-
"./bazel-bin/dotnet/src/support/Selenium.Support.#{dotnet_version}.nupkg"
443-
]
374+
task :prepare_release, [:args] do |_task, arguments|
375+
args = arguments[:args] ? [arguments[:args]] : %w[--config release]
376+
377+
RELEASE_TARGETS = [
378+
'//java/src/org/openqa/selenium:client-zip',
379+
'//java/src/org/openqa/selenium/grid:server-zip',
380+
'//java/src/org/openqa/selenium/grid:executable-grid',
381+
'//dotnet/src/webdriver:webdriver-pack',
382+
'//dotnet/src/webdriver:webdriver-strongnamed-pack',
383+
'//dotnet/src/support:support-pack',
384+
'//dotnet/src/support:support-strongnamed-pack',
385+
'//javascript/node/selenium-webdriver:selenium-webdriver',
386+
'//py:selenium-wheel',
387+
'//py:selenium-sdist'
388+
]
444389

445-
task 'publish-nuget': '//dotnet:all' do
446-
NUGET_RELEASE_ASSETS.each do |asset|
447-
sh "dotnet nuget push #{asset} --api-key #{ENV['NUGET_API_KEY']} --source https://api.nuget.org/v3/index.json"
390+
RELEASE_TARGETS.each do |target|
391+
Bazel.execute('build', args, target)
448392
end
393+
# Ruby cannot be executed with config remote or release
394+
Bazel.execute('build', ['--stamp'], '//rb:selenium-webdriver')
449395
end
450396

451397
task 'publish-maven': JAVA_RELEASE_TARGETS do
@@ -558,46 +504,180 @@ namespace :node do
558504
end
559505
end
560506

561-
task :build do
562-
sh 'bazel build //javascript/node/selenium-webdriver'
507+
desc 'Build Node npm package'
508+
task :build, [:args] do |_task, arguments|
509+
args = arguments[:args] ? [arguments[:args]] : []
510+
Bazel.execute('build', args, '//javascript/node/selenium-webdriver')
563511
end
564512

565-
task 'dry-run': [
566-
'node:build'
567-
] do
568-
sh 'bazel run javascript/node/selenium-webdriver:selenium-webdriver.pack'
513+
task :'dry-run' do
514+
Bazel.execute('run', ['--stamp'], '//javascript/node/selenium-webdriver:selenium-webdriver.pack')
569515
end
570516

571-
task deploy: [
572-
'node:build'
573-
] do
574-
sh 'bazel run javascript/node/selenium-webdriver:selenium-webdriver.publish'
517+
desc 'Release Node npm package'
518+
task :release do
519+
Bazel.execute('run', ['--stamp'], '//javascript/node/selenium-webdriver:selenium-webdriver.publish')
575520
end
576521

577-
task :docs do
578-
sh 'node javascript/node/gendocs.js'
579-
end
522+
desc 'Release Node npm package'
523+
task deploy: :release
580524
end
581525

526+
def py_version
527+
File.foreach('py/BUILD.bazel') do |line|
528+
return line.split('=').last.strip.tr('"', '') if line.include?('SE_VERSION')
529+
end
530+
end
582531
namespace :py do
532+
desc 'Build Python wheel and sdist with optional arguments'
533+
task :build, [:args] do |_task, arguments|
534+
args = arguments[:args] ? [arguments[:args]] : []
535+
Bazel.execute('build', args, '//py:selenium-wheel')
536+
Bazel.execute('build', args, '//py:selenium-sdist')
537+
end
538+
539+
desc 'Release Python wheel and sdist to pypi'
540+
task :release, [:args] do |_task, arguments|
541+
args = arguments[:args] ? [arguments[:args]] : ['--stamp']
542+
Rake::Task['py:build'].invoke(args)
543+
sh "python3 -m twine upload `bazel-bin/py/selenium`-#{py_version}-py3-none-any.whl"
544+
sh "python3 -m twine upload bazel-bin/py/selenium-#{py_version}.tar.gz"
545+
end
546+
547+
desc 'Update generated Python files for local development'
583548
task :update do
584549
Bazel.execute('build', [], '//py:selenium')
585550

586-
FileUtils.rm_r("py/selenium/webdriver/common/devtools/", force: true)
551+
FileUtils.rm_r('py/selenium/webdriver/common/devtools/', force: true)
587552
FileUtils.cp_r('bazel-bin/py/selenium/webdriver/.', 'py/selenium/webdriver', remove_destination: true)
588553
end
589554

590-
bazel :unit do
591-
Bazel.execute('test', [], '//py:unit')
592-
end
593-
555+
desc 'Generate Python documentation'
594556
task docs: :update do
595557
sh 'tox -c py/tox.ini -e docs', verbose: true
596558
end
597559

560+
desc 'Install Python wheel locally'
598561
task :install do
599562
Bazel.execute('build', [], '//py:selenium-wheel')
600-
sh 'pip install bazel-bin/py/selenium-*.whl'
563+
begin
564+
sh 'pip install bazel-bin/py/selenium-*.whl'
565+
rescue
566+
puts 'Ensure that Python and pip are installed on your system'
567+
raise
568+
end
569+
end
570+
end
571+
572+
namespace :rb do
573+
desc 'Generate ruby gems'
574+
task :build, [:args] do |_task, arguments|
575+
args = arguments[:args] ? [arguments[:args]] : []
576+
Bazel.execute('build', args, '//rb:selenium-webdriver')
577+
Bazel.execute('build', args, '//rb:selenium-devtools')
578+
end
579+
580+
desc 'Update generated Ruby files for local development'
581+
task :update do
582+
Bazel.execute('build', [], '@bundle//:bundle')
583+
Rake::Task['rb:build'].invoke
584+
Rake::Task['grid'].invoke
585+
end
586+
587+
desc 'Push ruby gems to rubygems'
588+
task :release, [:args] do |_task, arguments|
589+
args = arguments[:args] ? [arguments[:args]] : ['--stamp']
590+
Bazel.execute('run', args, '//rb:selenium-webdriver')
591+
Bazel.execute('run', args, '//rb:selenium-devtools')
592+
end
593+
end
594+
595+
namespace :dotnet do
596+
def version
597+
File.foreach('dotnet/selenium-dotnet-version.bzl') do |line|
598+
return line.split('=').last.strip.tr('"', '') if line.include?('SE_VERSION')
599+
end
600+
end
601+
602+
def dotnet_version
603+
File.foreach('dotnet/selenium-dotnet-version.bzl') do |line|
604+
return line.split('=').last.strip.tr('"', '') if line.include?('SE_VERSION')
605+
end
606+
end
607+
namespace :dotnet do
608+
desc 'Build nupkg files'
609+
task :build, [:args] do |_task, arguments|
610+
args = arguments[:args] ? [arguments[:args]] : []
611+
Bazel.execute('build', args, '//dotnet:all')
612+
end
613+
614+
desc 'Create zipped assets for .NET for uploading to GitHub'
615+
task :zip_assets, [:args] do |_task, arguments|
616+
args = arguments[:args] ? [arguments[:args]] : ['--stamp']
617+
Rake::Task['dotnet:build'].invoke(args)
618+
mkdir_p 'build/dist'
619+
FileUtils.rm_f('build/dist/*dotnet*', force: true)
620+
621+
FileUtils.copy('bazel-bin/dotnet/release.zip', "build/dist/selenium-dotnet-#{dotnet_version}.zip")
622+
FileUtils.chmod(666, "build/dist/selenium-dotnet-#{dotnet_version}.zip")
623+
FileUtils.copy('bazel-bin/dotnet/strongnamed.zip', "build/dist/selenium-dotnet-strongnamed-#{dotnet_version}.zip")
624+
FileUtils.chmod(666, "build/dist/selenium-dotnet-strongnamed-#{dotnet_version}.zip")
625+
end
626+
627+
desc 'Upload nupkg files to Nuget'
628+
task :release, [:args] do |_task, arguments|
629+
args = arguments[:args] ? [arguments[:args]] : ['--stamp']
630+
Rake::Task['dotnet:build'].invoke(args)
631+
Rake::Task['dotnet:zip_assets'].invoke(args)
632+
633+
["./bazel-bin/dotnet/src/webdriver/Selenium.WebDriver.#{dotnet_version}.nupkg",
634+
"./bazel-bin/dotnet/src/support/Selenium.Support.#{dotnet_version}.nupkg"].each do |asset|
635+
sh "dotnet nuget push #{asset} --api-key #{ENV.fetch('NUGET_API_KEY', nil)} --source https://api.nuget.org/v3/index.json"
636+
end
637+
end
638+
end
639+
640+
namespace :java do
641+
desc 'Build Java Client Jars'
642+
task :build, [:args] do |_task, arguments|
643+
args = arguments[:args] ? [arguments[:args]] : []
644+
Bazel.execute('build', args, '//java/src/org/openqa/selenium:client-combined')
645+
end
646+
647+
desc 'Build Grid Jar'
648+
task :grid, [:args] do |_task, arguments|
649+
args = arguments[:args] ? [arguments[:args]] : []
650+
Bazel.execute('build', args, '//java/src/org/openqa/selenium/grid:grid')
651+
end
652+
653+
desc 'Package Java bindings and grid into releasable packages'
654+
task :package, [:args] do |_task, arguments|
655+
args = arguments[:args] ? [arguments[:args]] : []
656+
Rake::Task['java:build'].invoke(args)
657+
Rake::Task['java-release-zip'].invoke
658+
end
659+
660+
desc 'Deploy all jars to Maven'
661+
task :release, [:args] do |_task, arguments|
662+
args = arguments[:args] ? [arguments[:args]] : ['--stamp']
663+
Rake::Task['java:package'].invoke(args)
664+
Rake::Task['publish-maven'].invoke
665+
end
666+
667+
desc 'Install jars to local m2 directory'
668+
task install: :'maven-install'
669+
end
670+
671+
namespace :rust do
672+
desc 'Build Selenium Manager'
673+
task :build, [:args] do |_task, arguments|
674+
args = arguments[:args] ? [arguments[:args]] : []
675+
Bazel.execute('build', args, '//rust:selenium-manager')
676+
end
677+
678+
desc 'Update the rust lock files'
679+
task :update do
680+
sh 'CARGO_BAZEL_REPIN=true bazel sync --only=crates'
601681
end
602682
end
603683

0 commit comments

Comments
 (0)