2023-12-20 00:34:26 -06:00
|
|
|
# frozen_string_literal: true
|
2013-11-04 19:28:35 -05:00
|
|
|
|
2023-12-19 16:36:53 -06:00
|
|
|
require 'English'
|
2019-10-25 05:36:58 +01:00
|
|
|
$LOAD_PATH.unshift File.expand_path('.')
|
2013-01-11 22:18:32 +01:00
|
|
|
|
|
|
|
|
require 'rake'
|
|
|
|
|
require 'net/telnet'
|
2013-11-07 17:02:10 -05:00
|
|
|
require 'stringio'
|
|
|
|
|
require 'fileutils'
|
2019-10-01 11:13:58 +02:00
|
|
|
require 'open-uri'
|
2023-12-27 09:27:08 -05:00
|
|
|
require 'git'
|
2024-01-17 10:16:52 -06:00
|
|
|
require 'find'
|
2013-01-11 22:18:32 +01:00
|
|
|
|
2019-10-25 05:36:58 +01:00
|
|
|
Rake.application.instance_variable_set(:@name, 'go')
|
2013-01-11 22:18:32 +01:00
|
|
|
orig_verbose = verbose
|
|
|
|
|
verbose(false)
|
|
|
|
|
|
|
|
|
|
# The CrazyFun build grammar. There's no magic here, just ruby
|
2019-10-01 08:55:55 +01:00
|
|
|
require 'rake_tasks/crazy_fun/main'
|
|
|
|
|
require 'rake_tasks/selenium_rake/detonating_handler'
|
|
|
|
|
require 'rake_tasks/selenium_rake/crazy_fun'
|
|
|
|
|
|
2019-10-25 11:00:31 +02:00
|
|
|
# The CrazyFun builders - Most of these are either partially or fully obsolete
|
2019-10-25 18:01:44 +02:00
|
|
|
# Note the order here is important - The top 2 are used in inheritance chains
|
2019-10-25 11:06:35 +02:00
|
|
|
require 'rake_tasks/crazy_fun/mappings/file_copy_hack'
|
2019-10-25 18:01:44 +02:00
|
|
|
require 'rake_tasks/crazy_fun/mappings/tasks'
|
2019-10-25 12:01:09 +02:00
|
|
|
require 'rake_tasks/crazy_fun/mappings/rake_mappings'
|
2019-10-01 08:55:55 +01:00
|
|
|
|
2019-10-25 12:06:00 +02:00
|
|
|
# Location of all new (non-CrazyFun) methods
|
|
|
|
|
require 'rake_tasks/selenium_rake/browsers'
|
2019-10-01 08:55:55 +01:00
|
|
|
require 'rake_tasks/selenium_rake/checks'
|
2019-10-25 12:06:00 +02:00
|
|
|
require 'rake_tasks/selenium_rake/cpp_formatter'
|
2019-10-25 05:36:58 +01:00
|
|
|
require 'rake_tasks/selenium_rake/ie_generator'
|
2019-10-01 08:55:55 +01:00
|
|
|
require 'rake_tasks/selenium_rake/java_formatter'
|
|
|
|
|
require 'rake_tasks/selenium_rake/type_definitions_generator'
|
2013-01-11 22:18:32 +01:00
|
|
|
|
2019-10-25 12:06:00 +02:00
|
|
|
# Our modifications to the Rake / Bazel libraries
|
|
|
|
|
require 'rake/task'
|
2019-10-25 10:55:52 +02:00
|
|
|
require 'rake_tasks/rake/task'
|
|
|
|
|
require 'rake_tasks/rake/dsl'
|
2019-10-25 12:06:00 +02:00
|
|
|
require 'rake_tasks/bazel/task'
|
2019-10-25 10:55:52 +02:00
|
|
|
|
2019-10-25 12:06:00 +02:00
|
|
|
# These are the final items mixed into the global NS
|
|
|
|
|
# These need moving into correct namespaces, and not be globally included
|
2019-10-01 11:13:58 +02:00
|
|
|
require 'rake_tasks/bazel'
|
|
|
|
|
require 'rake_tasks/python'
|
|
|
|
|
|
2023-12-20 00:34:26 -06:00
|
|
|
$DEBUG = orig_verbose != Rake::FileUtilsExt::DEFAULT
|
2019-10-01 08:55:55 +01:00
|
|
|
$DEBUG = true if ENV['debug'] == 'true'
|
|
|
|
|
|
2013-01-11 22:18:32 +01:00
|
|
|
verbose($DEBUG)
|
2023-12-27 09:27:08 -05:00
|
|
|
@git = Git.open(__dir__)
|
2013-01-11 22:18:32 +01:00
|
|
|
|
2023-12-06 00:13:10 -06:00
|
|
|
def java_version
|
|
|
|
|
File.foreach('java/version.bzl') do |line|
|
|
|
|
|
return line.split('=').last.strip.tr('"', '') if line.include?('SE_VERSION')
|
|
|
|
|
end
|
2013-01-11 22:18:32 +01:00
|
|
|
end
|
2016-02-27 21:58:47 -08:00
|
|
|
|
2013-01-11 22:18:32 +01:00
|
|
|
# The build system used by webdriver is layered on top of rake, and we call it
|
|
|
|
|
# "crazy fun" for no readily apparent reason.
|
|
|
|
|
|
|
|
|
|
# First off, create a new CrazyFun object.
|
2019-09-27 13:58:28 +01:00
|
|
|
crazy_fun = SeleniumRake::CrazyFun.new
|
2013-01-11 22:18:32 +01:00
|
|
|
|
|
|
|
|
# Secondly, we add the handlers, which are responsible for turning a build
|
|
|
|
|
# rule into a (series of) rake tasks. For example if we're looking at a file
|
|
|
|
|
# in subdirectory "subdir" contains the line:
|
|
|
|
|
#
|
|
|
|
|
# java_library(:name => "example", :srcs => ["foo.java"])
|
|
|
|
|
#
|
|
|
|
|
# we would generate a rake target of "//subdir:example" which would generate
|
|
|
|
|
# a Java JAR at "build/subdir/example.jar".
|
|
|
|
|
#
|
|
|
|
|
# If crazy fun doesn't know how to handle a particular output type ("java_library"
|
|
|
|
|
# in the example above) then it will throw an exception, stopping the build
|
2019-11-05 12:05:04 +00:00
|
|
|
CrazyFun::Mappings::RakeMappings.new.add_all(crazy_fun)
|
2013-01-11 22:18:32 +01:00
|
|
|
|
|
|
|
|
# Finally, find every file named "build.desc" in the project, and generate
|
|
|
|
|
# rake tasks from them. These tasks are normal rake tasks, and can be invoked
|
|
|
|
|
# from rake.
|
2021-05-12 06:17:05 -07:00
|
|
|
# FIXME: the rules for the targets were removed and build files won't load
|
|
|
|
|
# crazy_fun.create_tasks(Dir['**/build.desc'])
|
2013-01-11 22:18:32 +01:00
|
|
|
|
2022-03-26 21:23:28 +01:00
|
|
|
# If it looks like a bazel target, build it with bazel
|
2023-12-20 00:34:26 -06:00
|
|
|
rule(%r{//.*}) do |task|
|
2022-11-21 16:21:28 +01:00
|
|
|
task.out = Bazel.execute('build', %w[], task.name)
|
2019-08-07 13:54:39 +03:00
|
|
|
end
|
2016-04-21 18:02:45 +01:00
|
|
|
|
2019-08-31 17:52:35 +01:00
|
|
|
# Spoof tasks to get CI working with bazel
|
2021-08-03 17:39:24 +03:00
|
|
|
task '//java/test/org/openqa/selenium/environment/webserver:webserver:uber' => [
|
|
|
|
|
'//java/test/org/openqa/selenium/environment:webserver'
|
2016-06-05 23:01:59 +01:00
|
|
|
]
|
|
|
|
|
|
2025-03-16 15:36:06 -07:00
|
|
|
# use #java_release_targets to access this list
|
2019-11-05 13:08:23 +00:00
|
|
|
JAVA_RELEASE_TARGETS = %w[
|
2021-08-03 17:39:24 +03:00
|
|
|
//java/src/org/openqa/selenium/chrome:chrome.publish
|
|
|
|
|
//java/src/org/openqa/selenium/chromium:chromium.publish
|
2025-05-23 17:18:15 +02:00
|
|
|
//java/src/org/openqa/selenium/devtools/v137:v137.publish
|
2025-06-28 23:44:16 +02:00
|
|
|
//java/src/org/openqa/selenium/devtools/v138:v138.publish
|
2025-05-02 22:09:36 +02:00
|
|
|
//java/src/org/openqa/selenium/devtools/v136:v136.publish
|
2021-08-03 17:39:24 +03:00
|
|
|
//java/src/org/openqa/selenium/edge:edge.publish
|
|
|
|
|
//java/src/org/openqa/selenium/firefox:firefox.publish
|
|
|
|
|
//java/src/org/openqa/selenium/grid/sessionmap/jdbc:jdbc.publish
|
|
|
|
|
//java/src/org/openqa/selenium/grid/sessionmap/redis:redis.publish
|
2023-02-07 15:33:44 +00:00
|
|
|
//java/src/org/openqa/selenium/grid:bom-dependencies.publish
|
|
|
|
|
//java/src/org/openqa/selenium/grid:bom.publish
|
2021-08-03 17:39:24 +03:00
|
|
|
//java/src/org/openqa/selenium/grid:grid.publish
|
|
|
|
|
//java/src/org/openqa/selenium/ie:ie.publish
|
|
|
|
|
//java/src/org/openqa/selenium/json:json.publish
|
2022-10-18 14:42:13 +02:00
|
|
|
//java/src/org/openqa/selenium/manager:manager.publish
|
2023-08-01 17:54:46 +01:00
|
|
|
//java/src/org/openqa/selenium/os:os.publish
|
2021-08-03 17:39:24 +03:00
|
|
|
//java/src/org/openqa/selenium/remote/http:http.publish
|
|
|
|
|
//java/src/org/openqa/selenium/remote:remote.publish
|
|
|
|
|
//java/src/org/openqa/selenium/safari:safari.publish
|
|
|
|
|
//java/src/org/openqa/selenium/support:support.publish
|
|
|
|
|
//java/src/org/openqa/selenium:client-combined.publish
|
|
|
|
|
//java/src/org/openqa/selenium:core.publish
|
2023-12-20 00:34:26 -06:00
|
|
|
].freeze
|
2019-03-15 18:21:09 +00:00
|
|
|
|
2025-03-16 15:36:06 -07:00
|
|
|
def java_release_targets
|
|
|
|
|
@targets_verified ||= verify_java_release_targets
|
|
|
|
|
|
|
|
|
|
JAVA_RELEASE_TARGETS
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def verify_java_release_targets
|
|
|
|
|
query = 'kind(maven_publish, set(//java/... //third_party/...))'
|
|
|
|
|
current_targets = []
|
|
|
|
|
|
|
|
|
|
Bazel.execute('query', [], query) do |output|
|
2025-03-19 17:50:15 -07:00
|
|
|
current_targets = output.lines.map(&:strip).reject(&:empty?).select { |line| line.start_with?('//') }
|
2025-03-16 15:36:06 -07:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
missing_targets = current_targets - JAVA_RELEASE_TARGETS
|
|
|
|
|
extra_targets = JAVA_RELEASE_TARGETS - current_targets
|
|
|
|
|
|
|
|
|
|
return if missing_targets.empty? && extra_targets.empty?
|
|
|
|
|
|
|
|
|
|
error_message = 'Java release targets are out of sync with Bazel query results.'
|
|
|
|
|
|
|
|
|
|
error_message += "\nMissing targets: #{missing_targets.join(', ')}" unless missing_targets.empty?
|
|
|
|
|
|
|
|
|
|
error_message += "\nObsolete targets: #{extra_targets.join(', ')}" unless extra_targets.empty?
|
|
|
|
|
|
|
|
|
|
raise error_message
|
|
|
|
|
end
|
|
|
|
|
|
2013-01-11 22:18:32 +01:00
|
|
|
# Notice that because we're using rake, anything you can do in a normal rake
|
|
|
|
|
# build can also be done here. For example, here we set the default task
|
2019-11-05 13:08:23 +00:00
|
|
|
task default: [:grid]
|
2013-01-11 22:18:32 +01:00
|
|
|
|
2025-03-21 17:32:35 -07:00
|
|
|
# ./go update_browser stable
|
|
|
|
|
# ./go update_browser beta
|
|
|
|
|
desc 'Update pinned browser versions'
|
|
|
|
|
task :update_browsers, [:channel] do |_task, arguments|
|
|
|
|
|
chrome_channel = arguments[:channel] || 'Stable'
|
|
|
|
|
chrome_channel = 'beta' if chrome_channel == 'early-stable'
|
|
|
|
|
args = Array(chrome_channel) ? ['--', "--chrome_channel=#{chrome_channel.capitalize}"] : []
|
|
|
|
|
|
|
|
|
|
puts 'pinning updated browsers and drivers'
|
|
|
|
|
Bazel.execute('run', args, '//scripts:pinned_browsers')
|
|
|
|
|
@git.add('common/repositories.bzl')
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
desc 'Update Selenium Manager to latest release'
|
|
|
|
|
task :update_manager do |_task, _arguments|
|
|
|
|
|
puts 'Updating Selenium Manager references'
|
2025-04-03 15:44:34 -07:00
|
|
|
Bazel.execute('run', [], '//scripts:selenium_manager')
|
2025-03-21 17:32:35 -07:00
|
|
|
|
|
|
|
|
@git.add('common/selenium_manager.bzl')
|
|
|
|
|
end
|
|
|
|
|
|
2019-11-05 13:08:23 +00:00
|
|
|
task all: [
|
2023-12-20 00:34:26 -06:00
|
|
|
:'selenium-java',
|
2021-08-03 17:39:24 +03:00
|
|
|
'//java/test/org/openqa/selenium/environment:webserver'
|
2016-06-18 01:45:48 +01:00
|
|
|
]
|
2023-12-19 21:58:40 -06:00
|
|
|
|
2019-11-05 13:08:23 +00:00
|
|
|
task tests: [
|
2021-08-03 17:39:24 +03:00
|
|
|
'//java/test/org/openqa/selenium/htmlunit:htmlunit',
|
|
|
|
|
'//java/test/org/openqa/selenium/firefox:test-synthesized',
|
|
|
|
|
'//java/test/org/openqa/selenium/ie:ie',
|
|
|
|
|
'//java/test/org/openqa/selenium/chrome:chrome',
|
|
|
|
|
'//java/test/org/openqa/selenium/edge:edge',
|
|
|
|
|
'//java/test/org/openqa/selenium/support:small-tests',
|
|
|
|
|
'//java/test/org/openqa/selenium/support:large-tests',
|
|
|
|
|
'//java/test/org/openqa/selenium/remote:small-tests',
|
|
|
|
|
'//java/test/org/openqa/selenium/remote/server/log:test',
|
|
|
|
|
'//java/test/org/openqa/selenium/remote/server:small-tests'
|
2015-04-02 13:49:39 +01:00
|
|
|
]
|
2021-08-03 17:39:24 +03:00
|
|
|
task chrome: ['//java/src/org/openqa/selenium/chrome']
|
2019-11-05 13:08:23 +00:00
|
|
|
task grid: [:'selenium-server-standalone']
|
2021-08-03 17:39:24 +03:00
|
|
|
task ie: ['//java/src/org/openqa/selenium/ie']
|
|
|
|
|
task firefox: ['//java/src/org/openqa/selenium/firefox']
|
2019-11-05 13:08:23 +00:00
|
|
|
task remote: %i[remote_server remote_client]
|
2021-08-03 17:39:24 +03:00
|
|
|
task remote_client: ['//java/src/org/openqa/selenium/remote']
|
|
|
|
|
task remote_server: ['//java/src/org/openqa/selenium/remote/server']
|
|
|
|
|
task safari: ['//java/src/org/openqa/selenium/safari']
|
|
|
|
|
task selenium: ['//java/src/org/openqa/selenium:core']
|
2023-12-21 16:34:52 -06:00
|
|
|
task support: ['//java/src/org/openqa/selenium/support']
|
2013-01-11 22:18:32 +01:00
|
|
|
|
|
|
|
|
desc 'Build the standalone server'
|
2021-08-03 17:39:24 +03:00
|
|
|
task 'selenium-server-standalone' => '//java/src/org/openqa/selenium/grid:executable-grid'
|
2013-01-11 22:18:32 +01:00
|
|
|
|
2019-11-05 13:08:23 +00:00
|
|
|
task test_javascript: [
|
2019-10-27 22:51:15 +02:00
|
|
|
'//javascript/atoms:test-chrome:run',
|
|
|
|
|
'//javascript/webdriver:test-chrome:run',
|
|
|
|
|
'//javascript/selenium-atoms:test-chrome:run',
|
2019-11-05 13:08:23 +00:00
|
|
|
'//javascript/selenium-core:test-chrome:run'
|
|
|
|
|
]
|
2021-08-03 17:39:24 +03:00
|
|
|
task test_chrome: ['//java/test/org/openqa/selenium/chrome:chrome:run']
|
|
|
|
|
task test_edge: ['//java/test/org/openqa/selenium/edge:edge:run']
|
2019-11-05 13:08:23 +00:00
|
|
|
task test_chrome_atoms: [
|
2019-10-27 22:51:15 +02:00
|
|
|
'//javascript/atoms:test-chrome:run',
|
|
|
|
|
'//javascript/chrome-driver:test-chrome:run',
|
2019-11-05 13:08:23 +00:00
|
|
|
'//javascript/webdriver:test-chrome:run'
|
|
|
|
|
]
|
|
|
|
|
task test_htmlunit: [
|
2021-08-03 17:39:24 +03:00
|
|
|
'//java/test/org/openqa/selenium/htmlunit:htmlunit:run'
|
2013-01-11 22:18:32 +01:00
|
|
|
]
|
2019-11-05 13:08:23 +00:00
|
|
|
task test_grid: [
|
2021-08-03 17:39:24 +03:00
|
|
|
'//java/test/org/openqa/grid/common:common:run',
|
|
|
|
|
'//java/test/org/openqa/grid:grid:run',
|
|
|
|
|
'//java/test/org/openqa/grid/e2e:e2e:run',
|
|
|
|
|
'//java/test/org/openqa/selenium/remote:remote-driver-grid-tests:run'
|
2013-01-11 22:18:32 +01:00
|
|
|
]
|
2019-11-05 13:08:23 +00:00
|
|
|
task test_ie: [
|
|
|
|
|
'//cpp/iedriverserver:win32',
|
|
|
|
|
'//cpp/iedriverserver:x64',
|
2021-08-03 17:39:24 +03:00
|
|
|
'//java/test/org/openqa/selenium/ie:ie:run'
|
2016-10-11 06:39:27 +01:00
|
|
|
]
|
2019-11-05 13:08:23 +00:00
|
|
|
task test_jobbie: [:test_ie]
|
2021-08-03 17:39:24 +03:00
|
|
|
task test_firefox: ['//java/test/org/openqa/selenium/firefox:marionette:run']
|
2019-11-05 13:08:23 +00:00
|
|
|
task test_remote_server: [
|
2021-08-03 17:39:24 +03:00
|
|
|
'//java/test/org/openqa/selenium/remote/server:small-tests:run',
|
|
|
|
|
'//java/test/org/openqa/selenium/remote/server/log:test:run'
|
2016-10-05 15:58:47 +01:00
|
|
|
]
|
2019-11-05 13:08:23 +00:00
|
|
|
task test_remote: [
|
2021-08-03 17:39:24 +03:00
|
|
|
'//java/test/org/openqa/selenium/json:small-tests:run',
|
|
|
|
|
'//java/test/org/openqa/selenium/remote:common-tests:run',
|
|
|
|
|
'//java/test/org/openqa/selenium/remote:client-tests:run',
|
|
|
|
|
'//java/test/org/openqa/selenium/remote:remote-driver-tests:run',
|
2013-01-11 22:18:32 +01:00
|
|
|
:test_remote_server
|
|
|
|
|
]
|
2021-08-03 17:39:24 +03:00
|
|
|
task test_safari: ['//java/test/org/openqa/selenium/safari:safari:run']
|
2019-11-05 13:08:23 +00:00
|
|
|
task test_support: [
|
2021-08-03 17:39:24 +03:00
|
|
|
'//java/test/org/openqa/selenium/support:small-tests:run',
|
|
|
|
|
'//java/test/org/openqa/selenium/support:large-tests:run'
|
2013-01-11 22:18:32 +01:00
|
|
|
]
|
|
|
|
|
|
2023-12-21 16:34:52 -06:00
|
|
|
task :test_java_webdriver do
|
2023-12-20 00:34:26 -06:00
|
|
|
if SeleniumRake::Checks.windows?
|
|
|
|
|
Rake::Task['test_ie'].invoke
|
|
|
|
|
elsif SeleniumRake::Checks.chrome?
|
|
|
|
|
Rake::Task['test_chrome'].invoke
|
|
|
|
|
elsif SeleniumRake::Checks.edge?
|
|
|
|
|
Rake::Task['test_edge'].invoke
|
|
|
|
|
else
|
|
|
|
|
Rake::Task['test_htmlunit'].invoke
|
|
|
|
|
Rake::Task['test_firefox'].invoke
|
|
|
|
|
Rake::Task['test_remote_server'].invoke
|
|
|
|
|
end
|
|
|
|
|
end
|
2013-01-11 22:18:32 +01:00
|
|
|
|
2019-11-05 13:08:23 +00:00
|
|
|
task test_java: [
|
2021-08-03 17:39:24 +03:00
|
|
|
'//java/test/org/openqa/selenium/atoms:test:run',
|
2017-05-25 22:45:02 -07:00
|
|
|
:test_java_small_tests,
|
2013-01-11 22:18:32 +01:00
|
|
|
:test_support,
|
|
|
|
|
:test_java_webdriver,
|
|
|
|
|
:test_selenium,
|
2019-11-05 13:08:23 +00:00
|
|
|
'test_grid'
|
2013-01-11 22:18:32 +01:00
|
|
|
]
|
|
|
|
|
|
2019-11-05 13:08:23 +00:00
|
|
|
task test_java_small_tests: [
|
2021-08-03 17:39:24 +03:00
|
|
|
'//java/test/org/openqa/selenium:small-tests:run',
|
|
|
|
|
'//java/test/org/openqa/selenium/json:small-tests:run',
|
|
|
|
|
'//java/test/org/openqa/selenium/support:small-tests:run',
|
|
|
|
|
'//java/test/org/openqa/selenium/remote:common-tests:run',
|
|
|
|
|
'//java/test/org/openqa/selenium/remote:client-tests:run',
|
|
|
|
|
'//java/test/org/openqa/grid/selenium/node:node:run',
|
|
|
|
|
'//java/test/org/openqa/grid/selenium/proxy:proxy:run',
|
|
|
|
|
'//java/test/org/openqa/selenium/remote/server:small-tests:run',
|
|
|
|
|
'//java/test/org/openqa/selenium/remote/server/log:test:run'
|
2016-10-05 21:41:06 -07:00
|
|
|
]
|
|
|
|
|
|
2023-12-20 00:34:26 -06:00
|
|
|
task :test do
|
|
|
|
|
if SeleniumRake::Checks.python?
|
|
|
|
|
Rake::Task['test_py'].invoke
|
|
|
|
|
else
|
|
|
|
|
Rake::Task['test_javascript'].invoke
|
|
|
|
|
Rake::Task['test_java'].invoke
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2019-11-05 13:08:23 +00:00
|
|
|
task test_py: [:py_prep_for_install_release, 'py:marionette_test']
|
|
|
|
|
task build: %i[all firefox remote selenium tests]
|
2013-01-11 22:18:32 +01:00
|
|
|
|
|
|
|
|
desc 'Clean build artifacts.'
|
|
|
|
|
task :clean do
|
|
|
|
|
rm_rf 'build/'
|
2021-08-03 17:39:24 +03:00
|
|
|
rm_rf 'java/build/'
|
2013-02-19 12:21:56 -08:00
|
|
|
rm_rf 'dist/'
|
2013-01-11 22:18:32 +01:00
|
|
|
end
|
|
|
|
|
|
2019-09-27 13:58:28 +01:00
|
|
|
# Create a new IEGenerator instance
|
|
|
|
|
ie_generator = SeleniumRake::IEGenerator.new
|
|
|
|
|
|
2013-01-11 22:18:32 +01:00
|
|
|
# Generate a C++ Header file for mapping between magic numbers and #defines
|
|
|
|
|
# in the C++ code.
|
2019-10-25 05:36:58 +01:00
|
|
|
ie_generator.generate_type_mapping(
|
|
|
|
|
name: 'ie_result_type_cpp',
|
|
|
|
|
src: 'cpp/iedriver/result_types.txt',
|
|
|
|
|
type: 'cpp',
|
|
|
|
|
out: 'cpp/iedriver/IEReturnTypes.h'
|
2019-09-27 13:58:28 +01:00
|
|
|
)
|
2013-01-11 22:18:32 +01:00
|
|
|
|
2023-12-19 16:36:53 -06:00
|
|
|
desc 'Generate Javadocs'
|
2021-08-03 17:39:24 +03:00
|
|
|
task javadocs: %i[//java/src/org/openqa/selenium/grid:all-javadocs] do
|
2024-06-13 14:27:24 -05:00
|
|
|
FileUtils.rm_rf('build/docs/api/java')
|
|
|
|
|
FileUtils.mkdir_p('build/docs/api/java')
|
2021-10-20 18:18:23 +01:00
|
|
|
out = 'bazel-bin/java/src/org/openqa/selenium/grid/all-javadocs.jar'
|
2019-11-05 13:08:23 +00:00
|
|
|
|
2023-12-19 16:36:53 -06:00
|
|
|
cmd = %(cd build/docs/api/java && jar xf "../../../../#{out}" 2>&1)
|
|
|
|
|
cmd = cmd.tr('/', '\\').tr(':', ';') if SeleniumRake::Checks.windows?
|
2024-06-13 14:27:24 -05:00
|
|
|
raise 'could not unpack javadocs' unless system(cmd)
|
2019-11-05 13:08:23 +00:00
|
|
|
|
2023-12-19 16:36:53 -06:00
|
|
|
File.open('build/docs/api/java/stylesheet.css', 'a') do |file|
|
|
|
|
|
file.write(<<~STYLE
|
2019-11-05 13:08:23 +00:00
|
|
|
/* Custom selenium-specific styling */
|
|
|
|
|
.blink {
|
|
|
|
|
animation: 2s cubic-bezier(0.5, 0, 0.85, 0.85) infinite blink;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@keyframes blink {
|
|
|
|
|
50% {
|
|
|
|
|
opacity: 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-19 16:36:53 -06:00
|
|
|
STYLE
|
|
|
|
|
)
|
|
|
|
|
end
|
2013-01-11 22:18:32 +01:00
|
|
|
end
|
|
|
|
|
|
2019-11-05 13:08:23 +00:00
|
|
|
file 'cpp/iedriver/sizzle.h' => ['//third_party/js/sizzle:sizzle:header'] do
|
|
|
|
|
cp 'build/third_party/js/sizzle/sizzle.h', 'cpp/iedriver/sizzle.h'
|
2013-01-11 22:18:32 +01:00
|
|
|
end
|
2013-02-26 10:40:02 -08:00
|
|
|
|
2019-11-05 13:08:23 +00:00
|
|
|
task sizzle_header: ['cpp/iedriver/sizzle.h']
|
|
|
|
|
|
|
|
|
|
task ios_driver: [
|
|
|
|
|
'//javascript/atoms/fragments:get_visible_text:ios',
|
|
|
|
|
'//javascript/atoms/fragments:click:ios',
|
|
|
|
|
'//javascript/atoms/fragments:back:ios',
|
|
|
|
|
'//javascript/atoms/fragments:forward:ios',
|
|
|
|
|
'//javascript/atoms/fragments:submit:ios',
|
|
|
|
|
'//javascript/atoms/fragments:xpath:ios',
|
|
|
|
|
'//javascript/atoms/fragments:xpaths:ios',
|
|
|
|
|
'//javascript/atoms/fragments:type:ios',
|
|
|
|
|
'//javascript/atoms/fragments:get_attribute:ios',
|
|
|
|
|
'//javascript/atoms/fragments:clear:ios',
|
|
|
|
|
'//javascript/atoms/fragments:is_selected:ios',
|
|
|
|
|
'//javascript/atoms/fragments:is_enabled:ios',
|
|
|
|
|
'//javascript/atoms/fragments:is_shown:ios',
|
|
|
|
|
'//javascript/atoms/fragments:stringify:ios',
|
|
|
|
|
'//javascript/atoms/fragments:link_text:ios',
|
|
|
|
|
'//javascript/atoms/fragments:link_texts:ios',
|
|
|
|
|
'//javascript/atoms/fragments:partial_link_text:ios',
|
|
|
|
|
'//javascript/atoms/fragments:partial_link_texts:ios',
|
|
|
|
|
'//javascript/atoms/fragments:get_interactable_size:ios',
|
|
|
|
|
'//javascript/atoms/fragments:scroll_into_view:ios',
|
|
|
|
|
'//javascript/atoms/fragments:get_effective_style:ios',
|
|
|
|
|
'//javascript/atoms/fragments:get_element_size:ios',
|
|
|
|
|
'//javascript/webdriver/atoms/fragments:get_location_in_view:ios'
|
2013-02-26 10:40:02 -08:00
|
|
|
]
|
|
|
|
|
|
2024-06-11 15:20:36 -05:00
|
|
|
# This task does not allow running RBE, to run stamped with RBE use
|
|
|
|
|
# ./go java:package['--config=release']
|
|
|
|
|
desc 'Create stamped zipped assets for Java for uploading to GitHub'
|
2023-12-19 06:40:07 -06:00
|
|
|
task :'java-release-zip' do
|
2025-03-24 09:12:52 +00:00
|
|
|
Rake::Task['java:package'].invoke('--config=rbe_release')
|
2015-10-16 21:44:54 +03:00
|
|
|
end
|
|
|
|
|
|
2023-12-07 10:07:53 -06:00
|
|
|
task 'release-java': %i[java-release-zip publish-maven]
|
2016-08-24 14:46:22 +01:00
|
|
|
|
2023-06-16 16:03:31 +02:00
|
|
|
def read_m2_user_pass
|
2024-06-17 23:05:50 -05:00
|
|
|
puts 'Maven environment variables not set, inspecting /.m2/settings.xml.'
|
2023-12-20 00:34:26 -06:00
|
|
|
settings = File.read("#{Dir.home}/.m2/settings.xml")
|
2023-06-16 16:03:31 +02:00
|
|
|
found_section = false
|
2019-11-05 13:08:23 +00:00
|
|
|
settings.each_line do |line|
|
|
|
|
|
if !found_section
|
|
|
|
|
found_section = line.include? '<id>sonatype-nexus-staging</id>'
|
2024-06-13 14:27:24 -05:00
|
|
|
elsif line.include?('<username>')
|
2024-06-17 23:05:50 -05:00
|
|
|
ENV['MAVEN_USER'] = line[%r{<username>(.*?)</username>}, 1]
|
2024-06-13 14:27:24 -05:00
|
|
|
elsif line.include?('<password>')
|
2024-06-17 23:05:50 -05:00
|
|
|
ENV['MAVEN_PASSWORD'] = line[%r{<password>(.*?)</password>}, 1]
|
2016-06-20 14:23:19 -07:00
|
|
|
end
|
2024-06-17 23:05:50 -05:00
|
|
|
break if ENV['MAVEN_PASSWORD'] && ENV['MAVEN_USER']
|
2019-11-05 13:08:23 +00:00
|
|
|
end
|
2016-06-20 14:23:19 -07:00
|
|
|
end
|
|
|
|
|
|
2023-12-20 00:34:26 -06:00
|
|
|
desc 'Publish all Java jars to Maven as stable release'
|
2024-06-17 23:05:50 -05:00
|
|
|
task 'publish-maven' do
|
|
|
|
|
Rake::Task['java:release'].invoke
|
2023-12-08 16:20:00 -06:00
|
|
|
end
|
|
|
|
|
|
2023-12-20 00:34:26 -06:00
|
|
|
desc 'Publish all Java jars to Maven as nightly release'
|
2024-06-17 23:05:50 -05:00
|
|
|
task 'publish-maven-snapshot' do
|
|
|
|
|
Rake::Task['java:release'].invoke('nightly')
|
2023-04-28 12:26:08 +02:00
|
|
|
end
|
|
|
|
|
|
2023-12-20 00:34:26 -06:00
|
|
|
desc 'Install jars to local m2 directory'
|
2016-08-02 22:00:50 -07:00
|
|
|
task :'maven-install' do
|
2025-03-16 15:36:06 -07:00
|
|
|
java_release_targets.each do |p|
|
2023-12-20 00:34:26 -06:00
|
|
|
Bazel.execute('run',
|
|
|
|
|
['--stamp',
|
|
|
|
|
'--define',
|
|
|
|
|
"maven_repo=file://#{Dir.home}/.m2/repository",
|
|
|
|
|
'--define',
|
|
|
|
|
'gpg_sign=false'],
|
|
|
|
|
p)
|
2016-06-19 09:45:13 -07:00
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2013-01-11 22:18:32 +01:00
|
|
|
desc 'Build the selenium client jars'
|
2021-08-03 17:39:24 +03:00
|
|
|
task 'selenium-java' => '//java/src/org/openqa/selenium:client-combined'
|
2013-01-11 22:18:32 +01:00
|
|
|
|
2023-12-20 00:34:26 -06:00
|
|
|
desc 'Update AUTHORS file'
|
2013-12-09 14:21:45 +00:00
|
|
|
task :authors do
|
2025-03-21 17:32:35 -07:00
|
|
|
puts 'Updating AUTHORS file'
|
2013-12-09 15:07:14 +00:00
|
|
|
sh "(git log --use-mailmap --format='%aN <%aE>' ; cat .OLD_AUTHORS) | sort -uf > AUTHORS"
|
2025-03-21 17:32:35 -07:00
|
|
|
@git.add('AUTHORS')
|
2013-12-09 14:21:45 +00:00
|
|
|
end
|
|
|
|
|
|
2019-10-01 11:13:58 +02:00
|
|
|
namespace :side do
|
|
|
|
|
task atoms: [
|
2019-11-05 13:08:23 +00:00
|
|
|
'//javascript/atoms/fragments:find-element'
|
2019-10-01 11:13:58 +02:00
|
|
|
] do
|
|
|
|
|
# TODO: move directly to IDE's directory once the repositories are merged
|
2023-12-19 06:19:03 -06:00
|
|
|
mkdir_p 'build/javascript/atoms'
|
2019-10-01 11:13:58 +02:00
|
|
|
|
2023-12-19 06:19:03 -06:00
|
|
|
atom = 'bazel-bin/javascript/atoms/fragments/find-element.js'
|
|
|
|
|
name = File.basename(atom)
|
2019-10-01 11:13:58 +02:00
|
|
|
|
2023-12-19 06:19:03 -06:00
|
|
|
puts "Generating #{atom} as #{name}"
|
|
|
|
|
File.open(File.join(baseDir, name), 'w') do |f|
|
|
|
|
|
f << "// GENERATED CODE - DO NOT EDIT\n"
|
|
|
|
|
f << 'module.exports = '
|
2023-12-20 00:34:26 -06:00
|
|
|
f << File.read(atom).strip
|
2023-12-19 06:19:03 -06:00
|
|
|
f << ";\n"
|
2019-10-01 11:13:58 +02:00
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2023-12-21 17:58:42 -06:00
|
|
|
def node_version
|
2025-03-25 14:28:37 +01:00
|
|
|
File.foreach('javascript/selenium-webdriver/package.json') do |line|
|
2023-12-21 17:58:42 -06:00
|
|
|
return line.split(':').last.strip.tr('",', '') if line.include?('version')
|
|
|
|
|
end
|
|
|
|
|
end
|
2019-10-01 11:13:58 +02:00
|
|
|
namespace :node do
|
2019-11-05 13:08:23 +00:00
|
|
|
atom_list = %w[
|
2020-04-25 21:30:37 +03:00
|
|
|
//javascript/atoms/fragments:find-elements
|
2019-10-01 11:13:58 +02:00
|
|
|
//javascript/atoms/fragments:is-displayed
|
|
|
|
|
//javascript/webdriver/atoms:get-attribute
|
2019-11-05 13:08:23 +00:00
|
|
|
]
|
2019-10-29 13:52:16 +01:00
|
|
|
|
|
|
|
|
task atoms: atom_list do
|
2025-03-25 14:28:37 +01:00
|
|
|
base_dir = 'javascript/selenium-webdriver/lib/atoms'
|
2023-12-19 06:19:03 -06:00
|
|
|
mkdir_p base_dir
|
2019-10-29 13:52:16 +01:00
|
|
|
|
2023-12-19 06:19:03 -06:00
|
|
|
['bazel-bin/javascript/atoms/fragments/is-displayed.js',
|
2023-12-20 00:34:26 -06:00
|
|
|
'bazel-bin/javascript/webdriver/atoms/get-attribute.js',
|
|
|
|
|
'bazel-bin/javascript/atoms/fragments/find-elements.js'].each do |atom|
|
2019-10-01 11:13:58 +02:00
|
|
|
name = File.basename(atom)
|
|
|
|
|
puts "Generating #{atom} as #{name}"
|
2023-12-19 06:19:03 -06:00
|
|
|
File.open(File.join(base_dir, name), 'w') do |f|
|
2019-10-01 11:13:58 +02:00
|
|
|
f << "// GENERATED CODE - DO NOT EDIT\n"
|
|
|
|
|
f << 'module.exports = '
|
2023-12-20 00:34:26 -06:00
|
|
|
f << File.read(atom).strip
|
2019-10-01 11:13:58 +02:00
|
|
|
f << ";\n"
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2023-12-19 06:40:07 -06:00
|
|
|
desc 'Build Node npm package'
|
2024-06-12 13:38:45 -05:00
|
|
|
task :build do |_task, arguments|
|
|
|
|
|
args = arguments.to_a.compact
|
2025-03-25 14:28:37 +01:00
|
|
|
Bazel.execute('build', args, '//javascript/selenium-webdriver')
|
2019-10-01 11:13:58 +02:00
|
|
|
end
|
|
|
|
|
|
2023-12-19 06:40:07 -06:00
|
|
|
task :'dry-run' do
|
2024-06-13 12:19:55 -05:00
|
|
|
Bazel.execute('run', ['--stamp'],
|
2025-03-25 14:28:37 +01:00
|
|
|
'//javascript/selenium-webdriver:selenium-webdriver.publish -- --dry-run=true')
|
2019-10-01 11:13:58 +02:00
|
|
|
end
|
|
|
|
|
|
2023-12-19 06:40:07 -06:00
|
|
|
desc 'Release Node npm package'
|
2025-03-22 12:46:50 -07:00
|
|
|
task :release do |_task, arguments|
|
|
|
|
|
nightly = arguments.to_a.include?('nightly')
|
2025-03-21 14:39:11 -07:00
|
|
|
if nightly
|
2025-03-21 17:32:35 -07:00
|
|
|
puts 'Updating Node version to nightly...'
|
2025-03-21 14:39:11 -07:00
|
|
|
Rake::Task['node:version'].invoke('nightly') if nightly
|
|
|
|
|
end
|
2024-06-11 21:34:24 -05:00
|
|
|
|
2025-03-21 17:32:35 -07:00
|
|
|
puts 'Running Node package release...'
|
2025-03-25 14:28:37 +01:00
|
|
|
Bazel.execute('run', ['--config=release'], '//javascript/selenium-webdriver:selenium-webdriver.publish')
|
2019-10-01 11:13:58 +02:00
|
|
|
end
|
|
|
|
|
|
2023-12-19 06:40:07 -06:00
|
|
|
desc 'Release Node npm package'
|
|
|
|
|
task deploy: :release
|
2023-12-21 17:58:42 -06:00
|
|
|
|
2024-05-18 16:43:25 -07:00
|
|
|
desc 'Generate Node documentation'
|
2025-03-30 15:45:59 +02:00
|
|
|
task :docs do |_task, arguments|
|
2025-05-08 10:38:24 +02:00
|
|
|
if node_version.include?('nightly') && !arguments.to_a.include?('force')
|
|
|
|
|
abort('Aborting documentation update: nightly versions should not update docs.')
|
|
|
|
|
end
|
2025-03-21 12:23:54 -07:00
|
|
|
|
|
|
|
|
puts 'Generating Node documentation'
|
2024-05-18 16:43:25 -07:00
|
|
|
FileUtils.rm_rf('build/docs/api/javascript/')
|
|
|
|
|
begin
|
2025-03-30 15:45:59 +02:00
|
|
|
Dir.chdir('javascript/selenium-webdriver') do
|
|
|
|
|
sh 'pnpm install', verbose: true
|
|
|
|
|
sh 'pnpm run generate-docs', verbose: true
|
|
|
|
|
end
|
2025-03-21 12:23:54 -07:00
|
|
|
rescue StandardError => e
|
|
|
|
|
puts "Node documentation generation contains errors; continuing... #{e.message}"
|
2024-05-18 16:43:25 -07:00
|
|
|
end
|
|
|
|
|
|
2025-03-30 15:45:59 +02:00
|
|
|
update_gh_pages unless arguments.to_a.include?('skip_update')
|
2023-12-27 09:27:08 -05:00
|
|
|
end
|
|
|
|
|
|
2023-12-23 12:57:00 -06:00
|
|
|
desc 'Update JavaScript changelog'
|
|
|
|
|
task :changelog do
|
2025-02-19 21:12:52 +01:00
|
|
|
header = "## #{node_version}\n"
|
2025-03-25 14:28:37 +01:00
|
|
|
update_changelog(node_version, 'javascript', 'javascript/selenium-webdriver/',
|
|
|
|
|
'javascript/selenium-webdriver/CHANGES.md', header)
|
2023-12-23 12:57:00 -06:00
|
|
|
end
|
|
|
|
|
|
2023-12-21 17:58:42 -06:00
|
|
|
desc 'Update Node version'
|
|
|
|
|
task :version, [:version] do |_task, arguments|
|
|
|
|
|
old_version = node_version
|
2024-06-13 12:19:55 -05:00
|
|
|
nightly = "-nightly#{Time.now.strftime('%Y%m%d%H%M')}"
|
2024-06-11 21:18:58 -05:00
|
|
|
new_version = updated_version(old_version, arguments[:version], nightly)
|
2023-12-21 17:58:42 -06:00
|
|
|
|
2025-03-25 14:28:37 +01:00
|
|
|
%w[javascript/selenium-webdriver/package.json javascript/selenium-webdriver/BUILD.bazel].each do |file|
|
2024-01-25 09:49:58 -06:00
|
|
|
text = File.read(file).gsub(old_version, new_version)
|
2024-06-13 12:19:55 -05:00
|
|
|
File.open(file, 'w') { |f| f.puts text }
|
2025-03-21 17:32:35 -07:00
|
|
|
@git.add(file)
|
2024-01-25 09:49:58 -06:00
|
|
|
end
|
2023-12-21 17:58:42 -06:00
|
|
|
end
|
2019-10-01 11:13:58 +02:00
|
|
|
end
|
|
|
|
|
|
2023-12-21 17:58:42 -06:00
|
|
|
def python_version
|
2023-12-19 06:40:07 -06:00
|
|
|
File.foreach('py/BUILD.bazel') do |line|
|
|
|
|
|
return line.split('=').last.strip.tr('"', '') if line.include?('SE_VERSION')
|
|
|
|
|
end
|
|
|
|
|
end
|
2019-10-01 11:13:58 +02:00
|
|
|
namespace :py do
|
2023-12-19 06:40:07 -06:00
|
|
|
desc 'Build Python wheel and sdist with optional arguments'
|
2024-06-12 13:38:45 -05:00
|
|
|
task :build do |_task, arguments|
|
|
|
|
|
args = arguments.to_a.compact
|
2023-12-19 06:40:07 -06:00
|
|
|
Bazel.execute('build', args, '//py:selenium-wheel')
|
|
|
|
|
Bazel.execute('build', args, '//py:selenium-sdist')
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
desc 'Release Python wheel and sdist to pypi'
|
2025-03-22 12:46:50 -07:00
|
|
|
task :release do |_task, arguments|
|
|
|
|
|
nightly = arguments.to_a.include?('nightly')
|
2025-03-21 14:39:11 -07:00
|
|
|
if nightly
|
2025-03-21 17:32:35 -07:00
|
|
|
puts 'Updating Python version to nightly...'
|
2025-03-21 14:39:11 -07:00
|
|
|
Rake::Task['py:version'].invoke('nightly')
|
|
|
|
|
end
|
2024-06-11 21:34:24 -05:00
|
|
|
|
2024-06-17 14:02:03 -05:00
|
|
|
command = nightly ? '//py:selenium-release-nightly' : '//py:selenium-release'
|
2025-03-21 14:39:11 -07:00
|
|
|
puts "Running Python release command: #{command}"
|
2024-08-26 10:04:44 +01:00
|
|
|
Bazel.execute('run', ['--config=release'], command)
|
2023-12-19 06:40:07 -06:00
|
|
|
end
|
|
|
|
|
|
2024-01-22 12:59:03 -06:00
|
|
|
desc 'generate and copy files required for local development'
|
|
|
|
|
task :local_dev do
|
2023-12-19 06:19:03 -06:00
|
|
|
Bazel.execute('build', [], '//py:selenium')
|
2024-01-22 12:59:03 -06:00
|
|
|
Rake::Task['grid'].invoke
|
2019-10-01 11:13:58 +02:00
|
|
|
|
2023-12-21 21:29:43 -06:00
|
|
|
FileUtils.rm_rf('py/selenium/webdriver/common/devtools/')
|
2023-12-19 06:19:03 -06:00
|
|
|
FileUtils.cp_r('bazel-bin/py/selenium/webdriver/.', 'py/selenium/webdriver', remove_destination: true)
|
2019-10-01 11:13:58 +02:00
|
|
|
end
|
|
|
|
|
|
2024-01-17 10:16:52 -06:00
|
|
|
desc 'Update generated Python files for local development'
|
|
|
|
|
task :clean do
|
|
|
|
|
Bazel.execute('build', [], '//py:selenium')
|
|
|
|
|
bazel_bin_path = 'bazel-bin/py/selenium/webdriver'
|
|
|
|
|
lib_path = 'py/selenium/webdriver'
|
|
|
|
|
|
|
|
|
|
dirs = %w[devtools linux mac windows]
|
|
|
|
|
dirs.each { |dir| FileUtils.rm_rf("#{lib_path}/common/#{dir}") }
|
|
|
|
|
|
|
|
|
|
Find.find(bazel_bin_path) do |path|
|
2024-06-13 12:19:55 -05:00
|
|
|
if File.directory?(path) && dirs.any? { |dir| path.include?("common/#{dir}") }
|
2024-01-17 10:16:52 -06:00
|
|
|
Find.prune
|
|
|
|
|
next
|
|
|
|
|
end
|
|
|
|
|
next if File.directory?(path)
|
|
|
|
|
|
2024-06-13 12:19:55 -05:00
|
|
|
target_file = File.join(lib_path, path.sub(%r{^#{bazel_bin_path}/}, ''))
|
2024-01-17 10:16:52 -06:00
|
|
|
if File.exist?(target_file)
|
|
|
|
|
puts "Removing target file: #{target_file}"
|
|
|
|
|
FileUtils.rm(target_file)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2023-12-19 06:40:07 -06:00
|
|
|
desc 'Generate Python documentation'
|
2025-03-30 15:45:59 +02:00
|
|
|
task :docs do |_task, arguments|
|
2025-05-08 10:38:24 +02:00
|
|
|
if python_version.match?(/^\d+\.\d+\.\d+\.\d+$/) && !arguments.to_a.include?('force')
|
2025-03-21 12:23:54 -07:00
|
|
|
abort('Aborting documentation update: nightly versions should not update docs.')
|
|
|
|
|
end
|
|
|
|
|
puts 'Generating Python documentation'
|
|
|
|
|
|
2023-12-21 21:29:43 -06:00
|
|
|
FileUtils.rm_rf('build/docs/api/py/')
|
|
|
|
|
FileUtils.rm_rf('build/docs/doctrees/')
|
2023-12-19 16:36:53 -06:00
|
|
|
begin
|
|
|
|
|
sh 'tox -c py/tox.ini -e docs', verbose: true
|
|
|
|
|
rescue StandardError
|
|
|
|
|
puts 'Ensure that tox is installed on your system'
|
|
|
|
|
raise
|
|
|
|
|
end
|
2023-12-27 09:27:08 -05:00
|
|
|
|
2025-03-30 15:45:59 +02:00
|
|
|
update_gh_pages unless arguments.to_a.include?('skip_update')
|
2019-10-01 11:13:58 +02:00
|
|
|
end
|
|
|
|
|
|
2023-12-19 06:40:07 -06:00
|
|
|
desc 'Install Python wheel locally'
|
2023-12-19 06:19:03 -06:00
|
|
|
task :install do
|
|
|
|
|
Bazel.execute('build', [], '//py:selenium-wheel')
|
2023-12-19 06:40:07 -06:00
|
|
|
begin
|
|
|
|
|
sh 'pip install bazel-bin/py/selenium-*.whl'
|
2023-12-19 16:36:53 -06:00
|
|
|
rescue StandardError
|
2023-12-19 06:40:07 -06:00
|
|
|
puts 'Ensure that Python and pip are installed on your system'
|
|
|
|
|
raise
|
|
|
|
|
end
|
|
|
|
|
end
|
2023-12-21 17:58:42 -06:00
|
|
|
|
2023-12-23 12:57:00 -06:00
|
|
|
desc 'Update Python changelog'
|
|
|
|
|
task :changelog do
|
|
|
|
|
header = "Selenium #{python_version}"
|
2023-12-31 15:16:21 -06:00
|
|
|
update_changelog(python_version, 'py', 'py/selenium/webdriver', 'py/CHANGES', header)
|
2023-12-23 12:57:00 -06:00
|
|
|
end
|
|
|
|
|
|
2023-12-21 17:58:42 -06:00
|
|
|
desc 'Update Python version'
|
|
|
|
|
task :version, [:version] do |_task, arguments|
|
|
|
|
|
old_version = python_version
|
2024-11-20 17:46:34 +07:00
|
|
|
nightly = ".#{Time.now.strftime('%Y%m%d%H%M')}"
|
2024-06-11 21:18:58 -05:00
|
|
|
new_version = updated_version(old_version, arguments[:version], nightly)
|
2023-12-21 17:58:42 -06:00
|
|
|
|
2024-12-05 06:38:53 +05:30
|
|
|
['py/pyproject.toml',
|
2023-12-21 17:58:42 -06:00
|
|
|
'py/BUILD.bazel',
|
|
|
|
|
'py/selenium/__init__.py',
|
|
|
|
|
'py/selenium/webdriver/__init__.py',
|
|
|
|
|
'py/docs/source/conf.py'].each do |file|
|
2024-06-13 12:19:55 -05:00
|
|
|
text = File.read(file).gsub(old_version, new_version)
|
|
|
|
|
File.open(file, 'w') { |f| f.puts text }
|
2025-03-21 17:32:35 -07:00
|
|
|
@git.add(file)
|
2023-12-21 17:58:42 -06:00
|
|
|
end
|
2023-12-23 12:57:00 -06:00
|
|
|
|
2024-01-23 11:14:26 -06:00
|
|
|
old_short_version = old_version.split('.')[0..1].join('.')
|
|
|
|
|
new_short_version = new_version.split('.')[0..1].join('.')
|
|
|
|
|
|
2025-03-21 17:32:35 -07:00
|
|
|
conf = 'py/docs/source/conf.py'
|
|
|
|
|
text = File.read(conf).gsub(old_short_version, new_short_version)
|
|
|
|
|
File.open(conf, 'w') { |f| f.puts text }
|
|
|
|
|
@git.add(conf)
|
2023-12-21 17:58:42 -06:00
|
|
|
end
|
2024-01-07 16:48:28 -06:00
|
|
|
|
2024-01-22 12:59:03 -06:00
|
|
|
namespace :test do
|
|
|
|
|
desc 'Python unit tests'
|
|
|
|
|
task :unit do
|
|
|
|
|
Rake::Task['py:clean'].invoke
|
|
|
|
|
Bazel.execute('test', ['--test_size_filters=small'], '//py/...')
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
%i[chrome edge firefox safari].each do |browser|
|
|
|
|
|
desc "Python #{browser} tests"
|
|
|
|
|
task browser do
|
2024-01-17 10:16:52 -06:00
|
|
|
Rake::Task['py:clean'].invoke
|
2024-06-13 12:19:55 -05:00
|
|
|
Bazel.execute('test', [], "//py:common-#{browser}")
|
|
|
|
|
Bazel.execute('test', [], "//py:test-#{browser}")
|
2024-01-17 10:16:52 -06:00
|
|
|
end
|
2024-01-22 12:59:03 -06:00
|
|
|
end
|
2024-01-17 10:16:52 -06:00
|
|
|
|
2024-06-13 12:19:55 -05:00
|
|
|
desc 'Python Remote tests with Firefox'
|
2024-01-22 12:59:03 -06:00
|
|
|
task :remote do
|
|
|
|
|
Rake::Task['py:clean'].invoke
|
2024-06-13 12:19:55 -05:00
|
|
|
Bazel.execute('test', [], '//py:test-remote')
|
2024-01-17 10:16:52 -06:00
|
|
|
end
|
2024-01-22 12:59:03 -06:00
|
|
|
end
|
2024-04-15 04:23:51 -05:00
|
|
|
|
|
|
|
|
namespace :test do
|
|
|
|
|
desc 'Python unit tests'
|
|
|
|
|
task :unit do
|
|
|
|
|
Rake::Task['py:clean'].invoke
|
|
|
|
|
Bazel.execute('test', ['--test_size_filters=small'], '//py/...')
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
%i[chrome edge firefox safari].each do |browser|
|
|
|
|
|
desc "Python #{browser} tests"
|
|
|
|
|
task browser do
|
|
|
|
|
Rake::Task['py:clean'].invoke
|
2024-06-13 12:19:55 -05:00
|
|
|
Bazel.execute('test', %w[--test_output all], "//py:common-#{browser}")
|
|
|
|
|
Bazel.execute('test', %w[--test_output all], "//py:test-#{browser}")
|
2024-04-15 04:23:51 -05:00
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
2023-12-19 06:40:07 -06:00
|
|
|
end
|
|
|
|
|
|
2023-12-21 17:58:42 -06:00
|
|
|
def ruby_version
|
|
|
|
|
File.foreach('rb/lib/selenium/webdriver/version.rb') do |line|
|
|
|
|
|
return line.split('=').last.strip.tr("'", '') if line.include?('VERSION')
|
|
|
|
|
end
|
|
|
|
|
end
|
2023-12-19 06:40:07 -06:00
|
|
|
namespace :rb do
|
2023-12-21 17:58:42 -06:00
|
|
|
desc 'Generate Ruby gems'
|
2024-06-12 13:38:45 -05:00
|
|
|
task :build do |_task, arguments|
|
|
|
|
|
args = arguments.to_a.compact
|
|
|
|
|
webdriver = args.delete('webdriver')
|
|
|
|
|
devtools = args.delete('devtools')
|
|
|
|
|
|
2024-06-13 12:19:55 -05:00
|
|
|
Bazel.execute('build', args, '//rb:selenium-webdriver') if webdriver || !devtools
|
|
|
|
|
Bazel.execute('build', args, '//rb:selenium-devtools') if devtools || !webdriver
|
2023-12-19 06:40:07 -06:00
|
|
|
end
|
|
|
|
|
|
2025-03-24 10:18:31 +00:00
|
|
|
task :atoms do
|
|
|
|
|
base_dir = 'rb/lib/selenium/webdriver/atoms'
|
|
|
|
|
mkdir_p base_dir
|
|
|
|
|
|
|
|
|
|
{
|
2025-03-24 12:08:39 +00:00
|
|
|
'//javascript/atoms/fragments:find-elements': 'findElements.js',
|
|
|
|
|
'//javascript/atoms/fragments:is-displayed': 'isDisplayed.js',
|
2025-03-24 13:55:35 +00:00
|
|
|
'//javascript/webdriver/atoms:get-attribute': 'getAttribute.js'
|
2025-03-24 10:18:31 +00:00
|
|
|
}.each do |target, name|
|
|
|
|
|
puts "Generating #{target} as #{name}"
|
|
|
|
|
|
|
|
|
|
atom = Bazel.execute('build', [], target.to_s)
|
|
|
|
|
|
|
|
|
|
File.open(File.join(base_dir, name), 'w') do |f|
|
|
|
|
|
f << File.read(atom).strip
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2023-12-19 06:40:07 -06:00
|
|
|
desc 'Update generated Ruby files for local development'
|
2024-01-22 12:59:03 -06:00
|
|
|
task :local_dev do
|
2023-12-19 06:40:07 -06:00
|
|
|
Bazel.execute('build', [], '@bundle//:bundle')
|
|
|
|
|
Rake::Task['rb:build'].invoke
|
|
|
|
|
Rake::Task['grid'].invoke
|
|
|
|
|
end
|
|
|
|
|
|
2023-12-21 17:58:42 -06:00
|
|
|
desc 'Push Ruby gems to rubygems'
|
2025-03-22 12:46:50 -07:00
|
|
|
task :release do |_task, arguments|
|
|
|
|
|
nightly = arguments.to_a.include?('nightly')
|
2024-06-11 21:34:24 -05:00
|
|
|
|
2024-06-16 22:03:59 -05:00
|
|
|
if nightly
|
2025-03-21 17:32:35 -07:00
|
|
|
puts 'Bumping Ruby nightly version...'
|
2024-06-16 22:03:59 -05:00
|
|
|
Bazel.execute('run', [], '//rb:selenium-webdriver-bump-nightly-version')
|
2025-03-21 14:39:11 -07:00
|
|
|
|
2025-03-21 17:32:35 -07:00
|
|
|
puts 'Releasing nightly WebDriver gem...'
|
2024-08-26 10:04:44 +01:00
|
|
|
Bazel.execute('run', ['--config=release'], '//rb:selenium-webdriver-release-nightly')
|
2024-06-16 22:03:59 -05:00
|
|
|
else
|
2025-03-22 17:39:03 -07:00
|
|
|
patch_release = ruby_version.split('.').fetch(2, '0').to_i.positive?
|
2025-03-22 12:46:50 -07:00
|
|
|
|
2025-03-21 17:32:35 -07:00
|
|
|
puts 'Releasing Ruby gems...'
|
2024-08-26 10:04:44 +01:00
|
|
|
Bazel.execute('run', ['--config=release'], '//rb:selenium-webdriver-release')
|
2025-03-22 12:46:50 -07:00
|
|
|
Bazel.execute('run', ['--config=release'], '//rb:selenium-devtools-release') unless patch_release
|
2024-06-16 22:03:59 -05:00
|
|
|
end
|
2023-12-19 06:40:07 -06:00
|
|
|
end
|
2023-12-19 16:36:53 -06:00
|
|
|
|
|
|
|
|
desc 'Generate Ruby documentation'
|
2025-03-30 15:45:59 +02:00
|
|
|
task :docs do |_task, arguments|
|
2025-05-08 10:38:24 +02:00
|
|
|
if ruby_version.include?('nightly') && !arguments.to_a.include?('force')
|
|
|
|
|
abort('Aborting documentation update: nightly versions should not update docs.')
|
|
|
|
|
end
|
2025-03-21 12:23:54 -07:00
|
|
|
puts 'Generating Ruby documentation'
|
|
|
|
|
|
2023-12-21 21:29:43 -06:00
|
|
|
FileUtils.rm_rf('build/docs/api/rb/')
|
2023-12-19 16:36:53 -06:00
|
|
|
Bazel.execute('run', [], '//rb:docs')
|
2024-03-01 07:17:01 -08:00
|
|
|
FileUtils.mkdir_p('build/docs/api')
|
2024-03-29 15:32:59 -07:00
|
|
|
FileUtils.cp_r('bazel-bin/rb/docs.sh.runfiles/_main/docs/api/rb/.', 'build/docs/api/rb')
|
2023-12-27 09:27:08 -05:00
|
|
|
|
2025-03-30 15:45:59 +02:00
|
|
|
update_gh_pages unless arguments.to_a.include?('skip_update')
|
2023-12-19 16:36:53 -06:00
|
|
|
end
|
2023-12-21 17:58:42 -06:00
|
|
|
|
2023-12-23 12:57:00 -06:00
|
|
|
desc 'Update Ruby changelog'
|
|
|
|
|
task :changelog do
|
2024-06-13 12:19:55 -05:00
|
|
|
header = "#{ruby_version} (#{Time.now.strftime('%Y-%m-%d')})\n========================="
|
2023-12-31 15:16:21 -06:00
|
|
|
update_changelog(ruby_version, 'rb', 'rb/lib/', 'rb/CHANGES', header)
|
2023-12-23 12:57:00 -06:00
|
|
|
end
|
|
|
|
|
|
2023-12-21 17:58:42 -06:00
|
|
|
desc 'Update Ruby version'
|
|
|
|
|
task :version, [:version] do |_task, arguments|
|
|
|
|
|
old_version = ruby_version
|
2024-06-11 21:18:58 -05:00
|
|
|
new_version = updated_version(old_version, arguments[:version], '.nightly')
|
2023-12-21 17:58:42 -06:00
|
|
|
|
|
|
|
|
file = 'rb/lib/selenium/webdriver/version.rb'
|
|
|
|
|
text = File.read(file).gsub(old_version, new_version)
|
2024-06-13 12:19:55 -05:00
|
|
|
File.open(file, 'w') { |f| f.puts text }
|
2025-03-21 17:32:35 -07:00
|
|
|
@git.add(file)
|
2023-12-23 12:57:00 -06:00
|
|
|
|
2024-04-24 22:05:03 +02:00
|
|
|
sh 'cd rb && bundle --version && bundle update'
|
2025-03-21 17:32:35 -07:00
|
|
|
@git.add('rb/Gemfile.lock')
|
2023-12-21 17:58:42 -06:00
|
|
|
end
|
2024-01-07 16:48:28 -06:00
|
|
|
|
|
|
|
|
desc 'Update Ruby Syntax'
|
2024-06-12 13:38:45 -05:00
|
|
|
task :lint do |_task, arguments|
|
|
|
|
|
args = arguments.to_a.compact
|
2024-06-11 22:38:09 -05:00
|
|
|
Bazel.execute('run', args, '//rb:lint')
|
2024-01-07 16:48:28 -06:00
|
|
|
end
|
2023-12-19 06:40:07 -06:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def dotnet_version
|
|
|
|
|
File.foreach('dotnet/selenium-dotnet-version.bzl') do |line|
|
|
|
|
|
return line.split('=').last.strip.tr('"', '') if line.include?('SE_VERSION')
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
namespace :dotnet do
|
|
|
|
|
desc 'Build nupkg files'
|
2024-06-12 13:38:45 -05:00
|
|
|
task :build do |_task, arguments|
|
|
|
|
|
args = arguments.to_a.compact
|
2023-12-19 06:40:07 -06:00
|
|
|
Bazel.execute('build', args, '//dotnet:all')
|
|
|
|
|
end
|
|
|
|
|
|
2024-06-11 14:55:55 -05:00
|
|
|
desc 'Package .NET bindings into zipped assets and stage for release'
|
2024-06-12 13:38:45 -05:00
|
|
|
task :package do |_task, arguments|
|
|
|
|
|
args = arguments.to_a.compact.empty? ? ['--stamp'] : arguments.to_a.compact
|
|
|
|
|
Rake::Task['dotnet:build'].invoke(*args)
|
2023-12-19 06:40:07 -06:00
|
|
|
mkdir_p 'build/dist'
|
2024-06-11 14:55:55 -05:00
|
|
|
FileUtils.rm_f(Dir.glob('build/dist/*dotnet*'))
|
2023-12-19 06:40:07 -06:00
|
|
|
|
|
|
|
|
FileUtils.copy('bazel-bin/dotnet/release.zip', "build/dist/selenium-dotnet-#{dotnet_version}.zip")
|
2024-06-13 12:19:55 -05:00
|
|
|
FileUtils.chmod(0o666, "build/dist/selenium-dotnet-#{dotnet_version}.zip")
|
2023-12-19 06:40:07 -06:00
|
|
|
FileUtils.copy('bazel-bin/dotnet/strongnamed.zip', "build/dist/selenium-dotnet-strongnamed-#{dotnet_version}.zip")
|
2024-06-13 12:19:55 -05:00
|
|
|
FileUtils.chmod(0o666, "build/dist/selenium-dotnet-strongnamed-#{dotnet_version}.zip")
|
2023-12-19 06:40:07 -06:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
desc 'Upload nupkg files to Nuget'
|
2025-03-22 12:46:50 -07:00
|
|
|
task :release do |_task, arguments|
|
|
|
|
|
nightly = arguments.to_a.include?('nightly')
|
2025-03-21 14:39:11 -07:00
|
|
|
if nightly
|
2025-03-21 17:32:35 -07:00
|
|
|
puts 'Updating .NET version to nightly...'
|
2025-03-21 14:39:11 -07:00
|
|
|
Rake::Task['dotnet:version'].invoke('nightly')
|
|
|
|
|
end
|
|
|
|
|
|
2025-03-21 17:32:35 -07:00
|
|
|
puts 'Packaging .NET release artifacts...'
|
2024-08-28 15:41:19 +02:00
|
|
|
Rake::Task['dotnet:package'].invoke('--config=release')
|
2023-12-19 06:40:07 -06:00
|
|
|
|
2024-04-18 14:01:43 +02:00
|
|
|
api_key = ENV.fetch('NUGET_API_KEY', nil)
|
|
|
|
|
push_destination = 'https://api.nuget.org/v3/index.json'
|
2025-03-21 14:39:11 -07:00
|
|
|
|
2024-06-17 23:05:50 -05:00
|
|
|
if nightly
|
2025-03-21 17:32:35 -07:00
|
|
|
puts 'Setting up NuGet GitHub source for nightly release...'
|
2024-04-18 14:01:43 +02:00
|
|
|
api_key = ENV.fetch('GITHUB_TOKEN', nil)
|
|
|
|
|
github_push_url = 'https://nuget.pkg.github.com/seleniumhq/index.json'
|
|
|
|
|
push_destination = 'github'
|
2024-06-13 14:27:24 -05:00
|
|
|
flags = ['--username', 'seleniumhq', '--password', api_key, '--store-password-in-clear-text', '--name',
|
|
|
|
|
push_destination, github_push_url]
|
|
|
|
|
sh "dotnet nuget add source #{flags.join(' ')}"
|
2024-04-18 14:01:43 +02:00
|
|
|
end
|
|
|
|
|
|
2025-03-21 17:32:35 -07:00
|
|
|
puts 'Pushing packages to NuGet'
|
2023-12-19 06:40:07 -06:00
|
|
|
["./bazel-bin/dotnet/src/webdriver/Selenium.WebDriver.#{dotnet_version}.nupkg",
|
|
|
|
|
"./bazel-bin/dotnet/src/support/Selenium.Support.#{dotnet_version}.nupkg"].each do |asset|
|
2024-04-18 14:01:43 +02:00
|
|
|
sh "dotnet nuget push #{asset} --api-key #{api_key} --source #{push_destination}"
|
2023-12-19 06:40:07 -06:00
|
|
|
end
|
|
|
|
|
end
|
2023-12-19 16:36:53 -06:00
|
|
|
|
|
|
|
|
desc 'Generate .NET documentation'
|
2025-03-30 15:45:59 +02:00
|
|
|
task :docs do |_task, arguments|
|
2025-05-08 10:38:24 +02:00
|
|
|
if dotnet_version.include?('nightly') && !arguments.to_a.include?('force')
|
2025-03-21 12:23:54 -07:00
|
|
|
abort('Aborting documentation update: nightly versions should not update docs.')
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
puts 'Generating .NET documentation'
|
2023-12-27 09:27:08 -05:00
|
|
|
FileUtils.rm_rf('build/docs/api/dotnet/')
|
2023-12-19 16:36:53 -06:00
|
|
|
begin
|
2025-01-18 18:18:01 +03:00
|
|
|
# Pinning to 2.78.2 to avoid breaking changes in newer versions
|
2024-05-16 04:42:36 -07:00
|
|
|
sh 'dotnet tool uninstall --global docfx || true'
|
2025-01-18 18:18:01 +03:00
|
|
|
sh 'dotnet tool install --global --version 2.78.2 docfx'
|
2024-05-16 04:42:36 -07:00
|
|
|
# sh 'dotnet tool update -g docfx'
|
2023-12-19 16:36:53 -06:00
|
|
|
rescue StandardError
|
|
|
|
|
puts 'Please ensure that .NET SDK is installed.'
|
|
|
|
|
raise
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
begin
|
|
|
|
|
sh 'docfx dotnet/docs/docfx.json'
|
|
|
|
|
rescue StandardError
|
|
|
|
|
case $CHILD_STATUS.exitstatus
|
2025-02-19 21:12:52 +01:00
|
|
|
when 133
|
2023-12-19 16:36:53 -06:00
|
|
|
raise 'Ensure the dotnet/tools directory is added to your PATH environment variable (e.g., `~/.dotnet/tools`)'
|
|
|
|
|
when 255
|
2023-12-27 09:27:08 -05:00
|
|
|
puts '.NET documentation build failed, likely because of DevTools namespacing. This is ok; continuing'
|
2023-12-19 16:36:53 -06:00
|
|
|
else
|
|
|
|
|
raise
|
|
|
|
|
end
|
|
|
|
|
end
|
2023-12-27 09:27:08 -05:00
|
|
|
|
2025-03-30 15:45:59 +02:00
|
|
|
update_gh_pages unless arguments.to_a.include?('skip_update')
|
2023-12-19 16:36:53 -06:00
|
|
|
end
|
2023-12-21 17:58:42 -06:00
|
|
|
|
2023-12-23 12:57:00 -06:00
|
|
|
desc 'Update .NET changelog'
|
|
|
|
|
task :changelog do
|
|
|
|
|
header = "v#{dotnet_version}\n======"
|
2023-12-31 15:16:21 -06:00
|
|
|
update_changelog(dotnet_version, 'dotnet', 'dotnet/src/', 'dotnet/CHANGELOG', header)
|
2023-12-23 12:57:00 -06:00
|
|
|
end
|
|
|
|
|
|
2023-12-21 17:58:42 -06:00
|
|
|
desc 'Update .NET version'
|
|
|
|
|
task :version, [:version] do |_task, arguments|
|
|
|
|
|
old_version = dotnet_version
|
2024-06-13 12:19:55 -05:00
|
|
|
nightly = "-nightly#{Time.now.strftime('%Y%m%d%H%M')}"
|
2024-06-11 21:18:58 -05:00
|
|
|
new_version = updated_version(old_version, arguments[:version], nightly)
|
2023-12-21 17:58:42 -06:00
|
|
|
|
|
|
|
|
file = 'dotnet/selenium-dotnet-version.bzl'
|
|
|
|
|
text = File.read(file).gsub(old_version, new_version)
|
2024-06-13 12:19:55 -05:00
|
|
|
File.open(file, 'w') { |f| f.puts text }
|
2025-03-21 17:32:35 -07:00
|
|
|
@git.add(file)
|
2023-12-21 17:58:42 -06:00
|
|
|
end
|
2023-12-19 06:40:07 -06:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
namespace :java do
|
|
|
|
|
desc 'Build Java Client Jars'
|
2024-06-12 13:38:45 -05:00
|
|
|
task :build do |_task, arguments|
|
|
|
|
|
args = arguments.to_a.compact
|
2025-03-16 15:36:06 -07:00
|
|
|
java_release_targets.each { |target| Bazel.execute('build', args, target) }
|
2023-12-19 06:40:07 -06:00
|
|
|
end
|
|
|
|
|
|
2024-06-17 23:05:50 -05:00
|
|
|
desc 'Build Grid Server'
|
2024-06-12 13:38:45 -05:00
|
|
|
task :grid do |_task, arguments|
|
|
|
|
|
args = arguments.to_a.compact
|
2024-06-17 23:05:50 -05:00
|
|
|
Bazel.execute('build', args, '//java/src/org/openqa/selenium/grid:executable-grid')
|
2023-12-19 06:40:07 -06:00
|
|
|
end
|
|
|
|
|
|
2024-06-11 15:20:36 -05:00
|
|
|
desc 'Package Java bindings and grid into releasable packages and stage for release'
|
2024-06-12 13:38:45 -05:00
|
|
|
task :package do |_task, arguments|
|
2024-08-26 10:04:44 +01:00
|
|
|
args = arguments.to_a.compact.empty? ? ['--config=release'] : arguments.to_a.compact
|
2024-06-11 15:20:36 -05:00
|
|
|
Bazel.execute('build', args, '//java/src/org/openqa/selenium:client-zip')
|
|
|
|
|
Bazel.execute('build', args, '//java/src/org/openqa/selenium/grid:server-zip')
|
|
|
|
|
Bazel.execute('build', args, '//java/src/org/openqa/selenium/grid:executable-grid')
|
|
|
|
|
|
|
|
|
|
mkdir_p 'build/dist'
|
|
|
|
|
Dir.glob('build/dist/*{java,server}*').each { |file| FileUtils.rm_f(file) }
|
|
|
|
|
|
|
|
|
|
FileUtils.copy('bazel-bin/java/src/org/openqa/selenium/grid/server-zip.zip',
|
|
|
|
|
"build/dist/selenium-server-#{java_version}.zip")
|
2024-06-13 12:19:55 -05:00
|
|
|
FileUtils.chmod(0o666, "build/dist/selenium-server-#{java_version}.zip")
|
2024-06-11 15:20:36 -05:00
|
|
|
FileUtils.copy('bazel-bin/java/src/org/openqa/selenium/client-zip.zip',
|
|
|
|
|
"build/dist/selenium-java-#{java_version}.zip")
|
2024-06-13 12:19:55 -05:00
|
|
|
FileUtils.chmod(0o666, "build/dist/selenium-java-#{java_version}.zip")
|
2024-06-11 15:20:36 -05:00
|
|
|
FileUtils.copy('bazel-bin/java/src/org/openqa/selenium/grid/selenium',
|
|
|
|
|
"build/dist/selenium-server-#{java_version}.jar")
|
2024-06-13 12:19:55 -05:00
|
|
|
FileUtils.chmod(0o777, "build/dist/selenium-server-#{java_version}.jar")
|
2023-12-19 06:40:07 -06:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
desc 'Deploy all jars to Maven'
|
2025-03-22 12:46:50 -07:00
|
|
|
task :release do |_task, arguments|
|
|
|
|
|
nightly = arguments.to_a.include?('nightly')
|
2024-06-17 23:05:50 -05:00
|
|
|
|
2024-06-17 23:26:43 -05:00
|
|
|
ENV['MAVEN_USER'] ||= ENV.fetch('SEL_M2_USER', nil)
|
|
|
|
|
ENV['MAVEN_PASSWORD'] ||= ENV.fetch('SEL_M2_PASS', nil)
|
|
|
|
|
read_m2_user_pass unless ENV['MAVEN_PASSWORD'] && ENV['MAVEN_USER']
|
2025-06-20 22:04:13 +02:00
|
|
|
repo_domain = 'central.sonatype.com'
|
2025-06-30 11:15:52 +02:00
|
|
|
repo = nightly ? "#{repo_domain}/repository/maven-snapshots" : "ossrh-staging-api.#{repo_domain}/service/local/staging/deploy/maven2/"
|
2025-06-20 22:04:13 +02:00
|
|
|
ENV['MAVEN_REPO'] = "https://#{repo}"
|
2024-06-17 23:05:50 -05:00
|
|
|
ENV['GPG_SIGN'] = (!nightly).to_s
|
2024-06-16 23:28:25 -05:00
|
|
|
|
2025-03-21 14:39:11 -07:00
|
|
|
if nightly
|
2025-03-21 17:32:35 -07:00
|
|
|
puts 'Updating Java version to nightly...'
|
2025-03-21 14:39:11 -07:00
|
|
|
Rake::Task['java:version'].invoke('nightly')
|
|
|
|
|
end
|
|
|
|
|
|
2025-03-21 17:32:35 -07:00
|
|
|
puts 'Packaging Java artifacts...'
|
2024-08-26 10:04:44 +01:00
|
|
|
Rake::Task['java:package'].invoke('--config=release')
|
|
|
|
|
Rake::Task['java:build'].invoke('--config=release')
|
2025-03-21 14:39:11 -07:00
|
|
|
|
2025-03-21 17:32:35 -07:00
|
|
|
puts "Releasing Java artifacts to Maven repository at '#{ENV.fetch('MAVEN_REPO', nil)}'"
|
2025-03-16 15:36:06 -07:00
|
|
|
java_release_targets.each { |target| Bazel.execute('run', ['--config=release'], target) }
|
2023-12-19 06:40:07 -06:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
desc 'Install jars to local m2 directory'
|
|
|
|
|
task install: :'maven-install'
|
2023-12-19 16:36:53 -06:00
|
|
|
|
|
|
|
|
desc 'Generate Java documentation'
|
2025-03-30 15:45:59 +02:00
|
|
|
task :docs do |_task, arguments|
|
2025-05-08 10:38:24 +02:00
|
|
|
if java_version.include?('SNAPSHOT') && !arguments.to_a.include?('force')
|
2025-03-21 12:23:54 -07:00
|
|
|
abort('Aborting documentation update: snapshot versions should not update docs.')
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
puts 'Generating Java documentation'
|
2023-12-27 09:27:08 -05:00
|
|
|
Rake::Task['javadocs'].invoke
|
|
|
|
|
|
2025-03-30 15:45:59 +02:00
|
|
|
update_gh_pages unless arguments.to_a.include?('skip_update')
|
2023-12-27 09:27:08 -05:00
|
|
|
end
|
2023-12-21 17:58:42 -06:00
|
|
|
|
2023-12-21 17:59:40 -06:00
|
|
|
desc 'Update Maven dependencies'
|
2023-12-22 15:58:03 -06:00
|
|
|
task :update do
|
2023-12-29 11:17:03 -05:00
|
|
|
# Make sure things are in a good state to start with
|
|
|
|
|
args = ['--action_env=RULES_JVM_EXTERNAL_REPIN=1']
|
2025-01-16 00:03:56 +01:00
|
|
|
Bazel.execute('run', args, '@maven//:pin')
|
2023-12-29 11:17:03 -05:00
|
|
|
|
2024-04-24 14:06:29 +02:00
|
|
|
file_path = 'MODULE.bazel'
|
2023-12-21 17:59:40 -06:00
|
|
|
content = File.read(file_path)
|
2025-03-16 14:18:31 -07:00
|
|
|
output = nil
|
|
|
|
|
Bazel.execute('run', [], '@maven//:outdated') do |out|
|
|
|
|
|
output = out
|
2023-12-21 17:59:40 -06:00
|
|
|
end
|
|
|
|
|
|
2023-12-22 15:47:46 -06:00
|
|
|
versions = output.scan(/(\S+) \[\S+ -> (\S+)\]/).to_h
|
|
|
|
|
versions.each do |artifact, version|
|
|
|
|
|
if artifact.match?('graphql')
|
2025-03-16 14:18:31 -07:00
|
|
|
# https://github.com/graphql-java/graphql-java/discussions/3187
|
2024-06-13 12:19:55 -05:00
|
|
|
puts 'WARNING — Cannot automatically update graphql'
|
2023-12-22 15:47:46 -06:00
|
|
|
next
|
|
|
|
|
end
|
2025-03-16 14:18:31 -07:00
|
|
|
content.sub!(/#{Regexp.escape(artifact)}:([\d.-]+(?:[-.]?[A-Za-z0-9]+)*)/, "#{artifact}:#{version}")
|
2023-12-22 15:47:46 -06:00
|
|
|
end
|
2023-12-21 17:59:40 -06:00
|
|
|
File.write(file_path, content)
|
2023-12-22 15:47:46 -06:00
|
|
|
|
|
|
|
|
args = ['--action_env=RULES_JVM_EXTERNAL_REPIN=1']
|
2025-01-16 00:03:56 +01:00
|
|
|
Bazel.execute('run', args, '@maven//:pin')
|
2025-03-21 17:32:35 -07:00
|
|
|
|
|
|
|
|
%w[MODULE.bazel java/maven_install.json].each { |file| @git.add(file) }
|
2023-12-21 17:59:40 -06:00
|
|
|
end
|
|
|
|
|
|
2023-12-23 12:57:00 -06:00
|
|
|
desc 'Update Java changelog'
|
|
|
|
|
task :changelog do
|
|
|
|
|
header = "v#{java_version}\n======"
|
2023-12-31 15:16:21 -06:00
|
|
|
update_changelog(java_version, 'java', 'java/src/org/', 'java/CHANGELOG', header)
|
2023-12-23 12:57:00 -06:00
|
|
|
end
|
|
|
|
|
|
2023-12-21 17:58:42 -06:00
|
|
|
desc 'Update Java version'
|
|
|
|
|
task :version, [:version] do |_task, arguments|
|
|
|
|
|
old_version = java_version
|
2024-06-11 21:18:58 -05:00
|
|
|
new_version = updated_version(old_version, arguments[:version], '-SNAPSHOT')
|
2023-12-21 17:58:42 -06:00
|
|
|
|
|
|
|
|
file = 'java/version.bzl'
|
|
|
|
|
text = File.read(file).gsub(old_version, new_version)
|
2024-06-13 12:19:55 -05:00
|
|
|
File.open(file, 'w') { |f| f.puts text }
|
2025-03-21 17:32:35 -07:00
|
|
|
@git.add(file)
|
2023-12-21 17:58:42 -06:00
|
|
|
end
|
2023-12-19 06:40:07 -06:00
|
|
|
end
|
|
|
|
|
|
2023-12-21 17:58:42 -06:00
|
|
|
def rust_version
|
|
|
|
|
File.foreach('rust/BUILD.bazel') do |line|
|
|
|
|
|
return line.split('=').last.strip.tr('",', '') if line.include?('version =')
|
|
|
|
|
end
|
|
|
|
|
end
|
2023-12-19 06:40:07 -06:00
|
|
|
namespace :rust do
|
|
|
|
|
desc 'Build Selenium Manager'
|
2024-06-12 13:38:45 -05:00
|
|
|
task :build do |_task, arguments|
|
|
|
|
|
args = arguments.to_a.compact
|
2023-12-19 06:40:07 -06:00
|
|
|
Bazel.execute('build', args, '//rust:selenium-manager')
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
desc 'Update the rust lock files'
|
|
|
|
|
task :update do
|
|
|
|
|
sh 'CARGO_BAZEL_REPIN=true bazel sync --only=crates'
|
2019-10-01 11:13:58 +02:00
|
|
|
end
|
2023-12-21 17:58:42 -06:00
|
|
|
|
2023-12-23 12:57:00 -06:00
|
|
|
desc 'Update Rust changelog'
|
|
|
|
|
task :changelog do
|
|
|
|
|
header = "#{rust_version}\n======"
|
|
|
|
|
version = rust_version.split('.').tap(&:shift).join('.')
|
2023-12-31 15:16:21 -06:00
|
|
|
update_changelog(version, 'rust', 'rust/src', 'rust/CHANGELOG.md', header)
|
2023-12-23 12:57:00 -06:00
|
|
|
end
|
|
|
|
|
|
2024-01-25 09:56:16 -06:00
|
|
|
# Rust versioning is currently difficult compared to the others because we are using the 0.4.x pattern
|
|
|
|
|
# until Selenium Manager comes out of beta
|
2023-12-21 17:58:42 -06:00
|
|
|
desc 'Update Rust version'
|
|
|
|
|
task :version, [:version] do |_task, arguments|
|
2023-12-28 01:13:11 -05:00
|
|
|
old_version = rust_version.dup
|
|
|
|
|
equivalent_version = if old_version.include?('nightly')
|
2023-12-28 01:35:07 -05:00
|
|
|
"#{old_version.split(/\.|-/)[0...-1].tap(&:shift).join('.')}.0-nightly"
|
2023-12-28 01:13:11 -05:00
|
|
|
else
|
|
|
|
|
old_version.split('.').tap(&:shift).append('0').join('.')
|
|
|
|
|
end
|
2024-06-11 21:18:58 -05:00
|
|
|
updated = updated_version(equivalent_version, arguments[:version], '-nightly')
|
2024-06-13 12:19:55 -05:00
|
|
|
new_version = updated.split(/\.|-/).tap { |v| v.delete_at(2) }.unshift('0').join('.').gsub('.nightly', '-nightly')
|
2023-12-21 17:58:42 -06:00
|
|
|
|
|
|
|
|
['rust/Cargo.toml', 'rust/BUILD.bazel'].each do |file|
|
|
|
|
|
text = File.read(file).gsub(old_version, new_version)
|
2024-06-13 12:19:55 -05:00
|
|
|
File.open(file, 'w') { |f| f.puts text }
|
2025-03-21 17:32:35 -07:00
|
|
|
@git.add(file)
|
2023-12-21 17:58:42 -06:00
|
|
|
end
|
2023-12-23 12:57:00 -06:00
|
|
|
|
2023-12-28 01:35:07 -05:00
|
|
|
Rake::Task['rust:update'].invoke
|
2025-03-21 17:32:35 -07:00
|
|
|
@git.add('rust/Cargo.Bazel.lock')
|
|
|
|
|
@git.add('rust/Cargo.lock')
|
2023-12-21 17:58:42 -06:00
|
|
|
end
|
2019-10-01 11:13:58 +02:00
|
|
|
end
|
|
|
|
|
|
2023-12-19 16:36:53 -06:00
|
|
|
namespace :all do
|
2025-03-21 17:32:35 -07:00
|
|
|
desc 'Update Chrome DevTools support'
|
|
|
|
|
task :update_cdp, [:channel] do |_task, arguments|
|
|
|
|
|
chrome_channel = arguments[:channel] || 'stable'
|
|
|
|
|
chrome_channel = 'beta' if chrome_channel == 'early-stable'
|
|
|
|
|
args = Array(chrome_channel) ? ['--', "--chrome_channel=#{chrome_channel.capitalize}"] : []
|
|
|
|
|
|
|
|
|
|
puts "Updating Chrome DevTools references to include latest from #{chrome_channel} channel"
|
|
|
|
|
Bazel.execute('run', args, '//scripts:update_cdp')
|
|
|
|
|
|
|
|
|
|
['common/devtools/',
|
|
|
|
|
'dotnet/src/webdriver/DevTools/',
|
2025-06-05 01:22:24 +03:00
|
|
|
'dotnet/src/webdriver/Selenium.WebDriver.csproj',
|
2025-03-21 17:32:35 -07:00
|
|
|
'dotnet/test/common/DevTools/',
|
|
|
|
|
'dotnet/test/common/CustomDriverConfigs/',
|
|
|
|
|
'dotnet/selenium-dotnet-version.bzl',
|
|
|
|
|
'java/src/org/openqa/selenium/devtools/',
|
2025-03-25 14:28:37 +01:00
|
|
|
'javascript/selenium-webdriver/BUILD.bazel',
|
2025-03-21 17:32:35 -07:00
|
|
|
'py/BUILD.bazel',
|
|
|
|
|
'rb/lib/selenium/devtools/',
|
|
|
|
|
'rb/Gemfile.lock',
|
|
|
|
|
'Rakefile'].each { |file| @git.add(file) }
|
|
|
|
|
end
|
|
|
|
|
|
2023-12-19 16:36:53 -06:00
|
|
|
desc 'Update all API Documentation'
|
|
|
|
|
task :docs do
|
2025-04-04 21:55:07 -07:00
|
|
|
Rake::Task['java:docs'].invoke('skip_update')
|
|
|
|
|
Rake::Task['py:docs'].invoke('skip_update')
|
|
|
|
|
Rake::Task['rb:docs'].invoke('skip_update')
|
|
|
|
|
Rake::Task['dotnet:docs'].invoke('skip_update')
|
|
|
|
|
Rake::Task['node:docs'].invoke('skip_update')
|
2023-12-27 09:27:08 -05:00
|
|
|
|
2024-06-21 11:47:28 -05:00
|
|
|
update_gh_pages
|
2023-12-19 16:36:53 -06:00
|
|
|
end
|
2023-12-19 21:58:40 -06:00
|
|
|
|
|
|
|
|
desc 'Build all artifacts for all language bindings'
|
2024-06-12 13:38:45 -05:00
|
|
|
task :build do |_task, arguments|
|
|
|
|
|
args = arguments.to_a.compact
|
|
|
|
|
Rake::Task['java:build'].invoke(*args)
|
|
|
|
|
Rake::Task['py:build'].invoke(*args)
|
|
|
|
|
Rake::Task['rb:build'].invoke(*args)
|
|
|
|
|
Rake::Task['dotnet:build'].invoke(*args)
|
|
|
|
|
Rake::Task['node:build'].invoke(*args)
|
2023-12-19 21:58:40 -06:00
|
|
|
end
|
|
|
|
|
|
2024-06-20 08:17:29 -05:00
|
|
|
desc 'Package or build stamped artifacts for distribution in GitHub Release assets'
|
|
|
|
|
task :package do |_task, arguments|
|
|
|
|
|
args = arguments.to_a.compact
|
|
|
|
|
Rake::Task['java:package'].invoke(*args)
|
|
|
|
|
Rake::Task['dotnet:package'].invoke(*args)
|
|
|
|
|
end
|
|
|
|
|
|
2023-12-19 21:58:40 -06:00
|
|
|
desc 'Release all artifacts for all language bindings'
|
2025-03-22 12:46:50 -07:00
|
|
|
task :release do |_task, arguments|
|
2023-12-19 21:58:40 -06:00
|
|
|
Rake::Task['clean'].invoke
|
2023-12-27 17:23:08 -05:00
|
|
|
|
2025-03-22 12:46:50 -07:00
|
|
|
args = arguments.to_a.include?('nightly') ? ['nightly'] : []
|
|
|
|
|
Rake::Task['java:release'].invoke(*args)
|
|
|
|
|
Rake::Task['py:release'].invoke(*args)
|
|
|
|
|
Rake::Task['rb:release'].invoke(*args)
|
|
|
|
|
Rake::Task['dotnet:release'].invoke(*args)
|
|
|
|
|
Rake::Task['node:release'].invoke(*args)
|
2023-12-19 21:58:40 -06:00
|
|
|
end
|
2023-12-21 16:34:52 -06:00
|
|
|
|
2024-06-20 16:56:40 -05:00
|
|
|
task :lint do
|
|
|
|
|
ext = /mswin|msys|mingw|cygwin|bccwin|wince|emc/.match?(RbConfig::CONFIG['host_os']) ? 'ps1' : 'sh'
|
|
|
|
|
sh "./scripts/format.#{ext}", verbose: true
|
|
|
|
|
end
|
|
|
|
|
|
2025-04-03 15:44:34 -07:00
|
|
|
# Example: `./go all:prepare 4.31.0 early-stable`
|
2024-01-23 10:17:48 -06:00
|
|
|
desc 'Update everything in preparation for a release'
|
2024-06-18 10:16:25 -05:00
|
|
|
task :prepare, [:version, :channel] do |_task, arguments|
|
|
|
|
|
version = arguments[:version]
|
2024-01-25 09:56:16 -06:00
|
|
|
|
2025-03-21 17:32:35 -07:00
|
|
|
Rake::Task['update_browsers'].invoke(arguments[:channel])
|
|
|
|
|
Rake::Task['all:update_cdp'].invoke(arguments[:channel])
|
|
|
|
|
Rake::Task['update_manager'].invoke
|
2024-01-25 08:12:14 -06:00
|
|
|
Rake::Task['java:update'].invoke
|
|
|
|
|
Rake::Task['authors'].invoke
|
2024-06-18 10:16:25 -05:00
|
|
|
Rake::Task['all:version'].invoke(version)
|
2025-03-21 17:32:35 -07:00
|
|
|
Rake::Task['all:changelogs']
|
2024-01-25 08:12:14 -06:00
|
|
|
end
|
2023-12-21 17:58:42 -06:00
|
|
|
|
|
|
|
|
desc 'Update all versions'
|
|
|
|
|
task :version, [:version] do |_task, arguments|
|
2024-06-11 21:18:58 -05:00
|
|
|
version = arguments[:version] || 'nightly'
|
|
|
|
|
|
|
|
|
|
Rake::Task['java:version'].invoke(version)
|
|
|
|
|
Rake::Task['rb:version'].invoke(version)
|
|
|
|
|
Rake::Task['node:version'].invoke(version)
|
|
|
|
|
Rake::Task['py:version'].invoke(version)
|
|
|
|
|
Rake::Task['dotnet:version'].invoke(version)
|
2025-04-03 22:49:17 -07:00
|
|
|
Rake::Task['rust:version'].invoke(version)
|
2025-03-21 17:32:35 -07:00
|
|
|
|
2025-04-02 13:12:11 -07:00
|
|
|
unless version == 'nightly'
|
|
|
|
|
major_minor = arguments[:version][/^\d+\.\d+/]
|
|
|
|
|
file = '.github/ISSUE_TEMPLATE/bug-report.yml'
|
|
|
|
|
old_version_pattern = /The latest released version of Selenium is (\d+\.\d+)/
|
|
|
|
|
|
|
|
|
|
text = File.read(file).gsub(old_version_pattern, "The latest released version of Selenium is #{major_minor}")
|
|
|
|
|
File.write(file, text)
|
|
|
|
|
@git.add(file)
|
|
|
|
|
end
|
2025-03-21 17:32:35 -07:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
desc 'Update all changelogs'
|
|
|
|
|
task :changelogs do |_task, _arguments|
|
|
|
|
|
Rake::Task['java:changelog'].invoke
|
|
|
|
|
Rake::Task['rb:changelog'].invoke
|
|
|
|
|
Rake::Task['node:changelog'].invoke
|
|
|
|
|
Rake::Task['py:changelog'].invoke
|
|
|
|
|
Rake::Task['dotnet:changelog'].invoke
|
2025-04-03 22:49:17 -07:00
|
|
|
Rake::Task['rust:changelog'].invoke
|
2023-12-21 17:58:42 -06:00
|
|
|
end
|
2023-12-19 16:36:53 -06:00
|
|
|
end
|
|
|
|
|
|
2013-01-11 22:18:32 +01:00
|
|
|
at_exit do
|
2025-01-20 20:24:53 +01:00
|
|
|
system 'sh', '.git-fixfiles' if File.exist?('.git') && SeleniumRake::Checks.linux?
|
2025-03-21 17:32:35 -07:00
|
|
|
rescue StandardError => e
|
2025-03-21 16:49:54 -07:00
|
|
|
puts "Do not exit execution when this errors... #{e.inspect}"
|
2013-01-11 22:18:32 +01:00
|
|
|
end
|
2023-12-21 17:58:42 -06:00
|
|
|
|
2024-06-11 21:18:58 -05:00
|
|
|
def updated_version(current, desired = nil, nightly = nil)
|
|
|
|
|
if !desired.nil? && desired != 'nightly'
|
|
|
|
|
# If desired is present, return full 3 digit version
|
2024-06-13 12:19:55 -05:00
|
|
|
desired.split('.').tap { |v| v << 0 while v.size < 3 }.join('.')
|
2024-06-11 21:18:58 -05:00
|
|
|
elsif current.split(/\.|-/).size > 3
|
|
|
|
|
# if current version is already nightly, just need to bump it; this will be noop for some languages
|
2024-11-20 17:46:34 +07:00
|
|
|
pattern = /-?\.?(nightly|SNAPSHOT|dev|\d{12})\d*$/
|
2024-06-11 21:18:58 -05:00
|
|
|
current.gsub(pattern, nightly)
|
|
|
|
|
elsif current.split(/\.|-/).size == 3
|
|
|
|
|
# if current version is not nightly, need to bump the version and make nightly
|
|
|
|
|
"#{current.split(/\.|-/).tap { |i| (i[1] = i[1].to_i + 1) && (i[2] = 0) }.join('.')}#{nightly}"
|
2023-12-21 17:58:42 -06:00
|
|
|
end
|
|
|
|
|
end
|
2023-12-27 09:27:08 -05:00
|
|
|
|
2025-03-21 12:23:54 -07:00
|
|
|
def update_gh_pages(force: true)
|
|
|
|
|
puts 'Switching to gh-pages branch...'
|
|
|
|
|
@git.fetch('https://github.com/seleniumhq/selenium.git', {ref: 'gh-pages'})
|
|
|
|
|
|
|
|
|
|
unless force
|
2025-03-30 15:45:59 +02:00
|
|
|
puts 'Stash changes that are not docs...'
|
|
|
|
|
@git.lib.send(:command, 'stash', ['push', '-m', 'stash wip', '--', ':(exclude)build/docs/api/'])
|
2025-03-21 12:23:54 -07:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@git.checkout('gh-pages', force: force)
|
|
|
|
|
|
|
|
|
|
updated = false
|
2023-12-27 09:27:08 -05:00
|
|
|
|
2024-05-18 16:43:25 -07:00
|
|
|
%w[java rb py dotnet javascript].each do |language|
|
2025-03-21 12:23:54 -07:00
|
|
|
source = "build/docs/api/#{language}"
|
|
|
|
|
destination = "docs/api/#{language}"
|
2024-06-13 12:19:55 -05:00
|
|
|
|
2025-03-21 12:23:54 -07:00
|
|
|
next unless Dir.exist?(source) && !Dir.empty?(source)
|
2023-12-27 09:27:08 -05:00
|
|
|
|
2025-03-21 12:23:54 -07:00
|
|
|
puts "Updating documentation for #{language}..."
|
|
|
|
|
FileUtils.rm_rf(destination)
|
|
|
|
|
FileUtils.mv(source, destination)
|
|
|
|
|
|
|
|
|
|
@git.add(destination)
|
|
|
|
|
updated = true
|
2024-06-21 11:47:28 -05:00
|
|
|
end
|
2023-12-27 09:27:08 -05:00
|
|
|
|
2025-03-21 12:23:54 -07:00
|
|
|
puts(updated ? 'Documentation staged. Ready for commit.' : 'No documentation changes found.')
|
2023-12-27 09:27:08 -05:00
|
|
|
end
|
2023-12-23 12:57:00 -06:00
|
|
|
|
2024-06-13 12:19:55 -05:00
|
|
|
def previous_tag(current_version, language = nil)
|
2023-12-27 16:57:07 -05:00
|
|
|
version = current_version.split(/\.|-/)
|
|
|
|
|
if version.size > 3
|
2024-06-13 12:19:55 -05:00
|
|
|
puts 'WARNING - Changelogs not updated when set to prerelease'
|
2023-12-27 16:57:07 -05:00
|
|
|
elsif version[2].to_i > 1
|
|
|
|
|
# specified as patch release
|
|
|
|
|
patch_version = (version[2].to_i - 1).to_s
|
|
|
|
|
"selenium-#{[[version[0]], version[1], patch_version].join('.')}-#{language}"
|
2024-06-13 12:19:55 -05:00
|
|
|
elsif version[2] == '1'
|
2023-12-27 16:57:07 -05:00
|
|
|
# specified as patch release; special case
|
2024-06-13 12:19:55 -05:00
|
|
|
"selenium-#{[[version[0]], version[1], '0'].join('.')}"
|
2023-12-27 16:57:07 -05:00
|
|
|
else
|
|
|
|
|
minor_version = (version[1].to_i - 1)
|
|
|
|
|
tags = @git.tags.map(&:name)
|
2024-06-22 07:35:56 -05:00
|
|
|
tag = language ? tags.reverse.find { |t| t.match?(/selenium-4\.#{minor_version}.*-#{language}/) } : nil
|
2024-06-13 12:19:55 -05:00
|
|
|
tag || "selenium-#{[[version[0]], minor_version, '0'].join('.')}"
|
2023-12-27 16:57:07 -05:00
|
|
|
end
|
2023-12-23 12:57:00 -06:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def update_changelog(version, language, path, changelog, header)
|
|
|
|
|
tag = previous_tag(version, language)
|
2025-03-19 14:15:01 -07:00
|
|
|
bullet = language == 'javascript' ? '- ' : '* '
|
|
|
|
|
commit_delimiter = '===DELIM==='
|
|
|
|
|
tags_to_remove = /\[(dotnet|rb|py|java|js|rust)\]:?\s?/
|
|
|
|
|
|
|
|
|
|
command = "git --no-pager log #{tag}...HEAD --pretty=format:\"%s%n%b#{commit_delimiter}\" --reverse #{path}"
|
|
|
|
|
puts "Executing git command: #{command}"
|
|
|
|
|
|
|
|
|
|
log = `#{command}`
|
|
|
|
|
|
|
|
|
|
commits = log.split(commit_delimiter).map { |commit|
|
|
|
|
|
lines = commit.gsub(tags_to_remove, '').strip.lines.map(&:chomp)
|
|
|
|
|
subject = "#{bullet}#{lines[0]}"
|
|
|
|
|
|
|
|
|
|
body = lines[1..]
|
|
|
|
|
.reject { |line| line.match?(/^(----|Co-authored|Signed-off)/) || line.empty? }
|
|
|
|
|
.map { |line| " > #{line}" }
|
|
|
|
|
.join("\n")
|
|
|
|
|
body.empty? ? subject : "#{subject}\n#{body}"
|
|
|
|
|
}.join("\n")
|
2023-12-23 12:57:00 -06:00
|
|
|
|
2025-03-21 17:32:35 -07:00
|
|
|
content = File.read(changelog)
|
|
|
|
|
File.write(changelog, "#{header}\n#{commits}\n\n#{content}")
|
|
|
|
|
@git.add(changelog)
|
2023-12-23 12:57:00 -06:00
|
|
|
end
|