@@ -545,6 +545,12 @@ namespace :node do
545
545
puts "WARNING — Cannot currently update API Docs for JavaScript bindings"
546
546
end
547
547
548
+ desc 'Update JavaScript changelog'
549
+ task :changelog do
550
+ header = "## #{ node_version } "
551
+ update_changelog ( node_version , 'javascript' , 'javascript/node/selenium-webdriver/' , 'javascript/node/selenium-webdriver/CHANGES.md' , header )
552
+ end
553
+
548
554
desc 'Update Node version'
549
555
task :version , [ :version ] do |_task , arguments |
550
556
old_version = node_version
@@ -553,6 +559,8 @@ namespace :node do
553
559
file = 'javascript/node/selenium-webdriver/package.json'
554
560
text = File . read ( file ) . gsub ( old_version , new_version )
555
561
File . open ( file , "w" ) { |f | f . puts text }
562
+
563
+ Rake ::Task [ 'node:changelog' ] . invoke
556
564
end
557
565
end
558
566
@@ -613,6 +621,12 @@ namespace :py do
613
621
end
614
622
end
615
623
624
+ desc 'Update Python changelog'
625
+ task :changelog do
626
+ header = "Selenium #{ python_version } "
627
+ update_changelog ( python_version , 'py' , 'py/' , 'py/CHANGES' , header )
628
+ end
629
+
616
630
desc 'Update Python version'
617
631
task :version , [ :version ] do |_task , arguments |
618
632
old_version = python_version
@@ -626,6 +640,8 @@ namespace :py do
626
640
text = File . read ( file ) . gsub ( old_version , new_version )
627
641
File . open ( file , "w" ) { |f | f . puts text }
628
642
end
643
+
644
+ Rake ::Task [ 'py:changelog' ] . invoke
629
645
end
630
646
end
631
647
@@ -668,6 +684,12 @@ namespace :rb do
668
684
end
669
685
end
670
686
687
+ desc 'Update Ruby changelog'
688
+ task :changelog do
689
+ header = "#{ ruby_version } (#{ Time . now . strftime ( "%Y-%m-%d" ) } )\n ========================="
690
+ update_changelog ( ruby_version , 'rb' , 'rb/' , 'rb/CHANGES' , header )
691
+ end
692
+
671
693
desc 'Update Ruby version'
672
694
task :version , [ :version ] do |_task , arguments |
673
695
old_version = ruby_version
@@ -677,6 +699,8 @@ namespace :rb do
677
699
file = 'rb/lib/selenium/webdriver/version.rb'
678
700
text = File . read ( file ) . gsub ( old_version , new_version )
679
701
File . open ( file , "w" ) { |f | f . puts text }
702
+
703
+ Rake ::Task [ 'rb:changelog' ] . invoke unless old_version . include? ( 'nightly' )
680
704
end
681
705
end
682
706
@@ -746,6 +770,12 @@ namespace :dotnet do
746
770
end
747
771
end
748
772
773
+ desc 'Update .NET changelog'
774
+ task :changelog do
775
+ header = "v#{ dotnet_version } \n ======"
776
+ update_changelog ( dotnet_version , 'dotnet' , 'dotnet/' , 'dotnet/CHANGELOG' , header )
777
+ end
778
+
749
779
desc 'Update .NET version'
750
780
task :version , [ :version ] do |_task , arguments |
751
781
old_version = dotnet_version
@@ -754,6 +784,8 @@ namespace :dotnet do
754
784
file = 'dotnet/selenium-dotnet-version.bzl'
755
785
text = File . read ( file ) . gsub ( old_version , new_version )
756
786
File . open ( file , "w" ) { |f | f . puts text }
787
+
788
+ Rake ::Task [ 'dotnet:changelog' ] . invoke
757
789
end
758
790
end
759
791
@@ -824,6 +856,12 @@ namespace :java do
824
856
Bazel . execute ( 'run' , args , '@unpinned_maven//:pin' )
825
857
end
826
858
859
+ desc 'Update Java changelog'
860
+ task :changelog do
861
+ header = "v#{ java_version } \n ======"
862
+ update_changelog ( java_version , 'java' , 'java/' , 'java/CHANGELOG' , header )
863
+ end
864
+
827
865
desc 'Update Java version'
828
866
task :version , [ :version ] do |_task , arguments |
829
867
old_version = java_version
@@ -833,6 +871,7 @@ namespace :java do
833
871
file = 'java/version.bzl'
834
872
text = File . read ( file ) . gsub ( old_version , new_version )
835
873
File . open ( file , "w" ) { |f | f . puts text }
874
+ Rake ::Task [ 'java:changelog' ] . invoke unless old_version . include? ( 'SNAPSHOT' )
836
875
end
837
876
end
838
877
@@ -853,16 +892,25 @@ namespace :rust do
853
892
sh 'CARGO_BAZEL_REPIN=true bazel sync --only=crates'
854
893
end
855
894
895
+ desc 'Update Rust changelog'
896
+ task :changelog do
897
+ header = "#{ rust_version } \n ======"
898
+ version = rust_version . split ( '.' ) . tap ( &:shift ) . join ( '.' )
899
+ update_changelog ( version , 'rust' , 'rust/' , 'rust/CHANGELOG.md' , header )
900
+ end
901
+
856
902
desc 'Update Rust version'
857
903
task :version , [ :version ] do |_task , arguments |
858
- old_version = arguments [ :version ] ? arguments [ :version ] : rust_version . split ( '.' ) . tap ( &:shift ) . join ( '.' )
904
+ old_version = arguments [ :version ] ? arguments [ :version ] : rust_version . split ( '.' ) . tap ( &:shift ) . append ( '0' ) . join ( '.' )
859
905
new_version = updated_version ( old_version , arguments [ :version ] )
860
906
new_version = new_version . split ( '.' ) . tap ( &:pop ) . join ( '.' )
861
907
862
908
[ 'rust/Cargo.toml' , 'rust/BUILD.bazel' ] . each do |file |
863
909
text = File . read ( file ) . gsub ( old_version , new_version )
864
910
File . open ( file , "w" ) { |f | f . puts text }
865
911
end
912
+
913
+ Rake ::Task [ 'rust:changelog' ] . invoke
866
914
end
867
915
end
868
916
@@ -1019,3 +1067,47 @@ def restore_git(origin_reference)
1019
1067
@git . checkout ( origin_reference )
1020
1068
false
1021
1069
end
1070
+
1071
+ def previous_version ( version )
1072
+ current = version . split ( /\. |-/ )
1073
+ if current . size > 3
1074
+ current . pop while current . size > 3
1075
+ else
1076
+ current [ 1 ] = ( current [ 1 ] . to_i - 1 ) . to_s
1077
+ current [ 2 ] = '0'
1078
+ end
1079
+ end
1080
+
1081
+ def previous_tag ( current_version , language )
1082
+ version = current_version . split ( /\. |-/ )
1083
+ if version . size > 3
1084
+ puts "Changelogs not updated when set to prerelease"
1085
+ elsif version [ 2 ] . to_i > 1
1086
+ patch_version = ( version [ 2 ] . to_i - 1 ) . to_s
1087
+ "selenium-#{ [ [ version [ 0 ] ] , version [ 1 ] , patch_version ] . join ( '.' ) } -#{ language } "
1088
+ elsif version [ 2 ] == "1"
1089
+ "selenium-#{ [ [ version [ 0 ] ] , version [ 1 ] , "0" ] . join ( '.' ) } "
1090
+ else
1091
+ minor_version = ( version [ 1 ] . to_i - 1 )
1092
+ tags = @git . tags . map ( &:name )
1093
+ tags . select { |tag | tag . match? ( /selenium-4\. #{ minor_version } .*-#{ language } / ) } . last ||
1094
+ "selenium-#{ [ [ version [ 0 ] ] , minor_version , "0" ] . join ( '.' ) } "
1095
+ end
1096
+ end
1097
+
1098
+ def update_changelog ( version , language , path , changelog , header )
1099
+ tag = previous_tag ( version , language )
1100
+ log = `git --no-pager log #{ tag } ...HEAD --pretty=format:">>> %B" --reverse #{ path } `
1101
+ commits = log . split ( ">>>" ) . map { |entry |
1102
+ lines = entry . split ( "\n " )
1103
+ lines . reject! { |line | line . match? ( /^(----|Co-authored|Signed-off)/ ) || line . empty? }
1104
+ lines . join ( "\n " )
1105
+ } . join ( "\n >>>" )
1106
+
1107
+ File . open ( changelog , 'r+' ) do |file |
1108
+ new_content = "#{ header } \n #{ commits } \n \n #{ file . read } "
1109
+ file . rewind
1110
+ file . write ( new_content )
1111
+ file . truncate ( file . pos )
1112
+ end
1113
+ end
0 commit comments