@@ -86,8 +86,7 @@ describe('toolchains tests', () => {
8686
8787 await toolchains . createToolchainsSettings ( {
8888 jdkInfo,
89- settingsDirectory : altHome ,
90- overwriteSettings : true
89+ settingsDirectory : altHome
9190 } ) ;
9291
9392 expect ( fs . existsSync ( m2Dir ) ) . toBe ( false ) ;
@@ -135,8 +134,7 @@ describe('toolchains tests', () => {
135134
136135 await toolchains . createToolchainsSettings ( {
137136 jdkInfo,
138- settingsDirectory : m2Dir ,
139- overwriteSettings : true
137+ settingsDirectory : m2Dir
140138 } ) ;
141139
142140 expect ( fs . existsSync ( m2Dir ) ) . toBe ( true ) ;
@@ -217,8 +215,7 @@ describe('toolchains tests', () => {
217215
218216 await toolchains . createToolchainsSettings ( {
219217 jdkInfo,
220- settingsDirectory : m2Dir ,
221- overwriteSettings : true
218+ settingsDirectory : m2Dir
222219 } ) ;
223220
224221 expect ( fs . existsSync ( m2Dir ) ) . toBe ( true ) ;
@@ -303,8 +300,7 @@ describe('toolchains tests', () => {
303300
304301 await toolchains . createToolchainsSettings ( {
305302 jdkInfo,
306- settingsDirectory : m2Dir ,
307- overwriteSettings : true
303+ settingsDirectory : m2Dir
308304 } ) ;
309305
310306 expect ( fs . existsSync ( m2Dir ) ) . toBe ( true ) ;
@@ -381,8 +377,7 @@ describe('toolchains tests', () => {
381377
382378 await toolchains . createToolchainsSettings ( {
383379 jdkInfo,
384- settingsDirectory : m2Dir ,
385- overwriteSettings : true
380+ settingsDirectory : m2Dir
386381 } ) ;
387382
388383 expect ( fs . existsSync ( m2Dir ) ) . toBe ( true ) ;
@@ -452,8 +447,7 @@ describe('toolchains tests', () => {
452447
453448 await toolchains . createToolchainsSettings ( {
454449 jdkInfo,
455- settingsDirectory : m2Dir ,
456- overwriteSettings : true
450+ settingsDirectory : m2Dir
457451 } ) ;
458452
459453 expect ( fs . existsSync ( m2Dir ) ) . toBe ( true ) ;
@@ -545,8 +539,7 @@ describe('toolchains tests', () => {
545539
546540 await toolchains . createToolchainsSettings ( {
547541 jdkInfo,
548- settingsDirectory : m2Dir ,
549- overwriteSettings : true
542+ settingsDirectory : m2Dir
550543 } ) ;
551544
552545 expect ( fs . existsSync ( m2Dir ) ) . toBe ( true ) ;
@@ -605,8 +598,7 @@ describe('toolchains tests', () => {
605598
606599 await toolchains . createToolchainsSettings ( {
607600 jdkInfo,
608- settingsDirectory : m2Dir ,
609- overwriteSettings : true
601+ settingsDirectory : m2Dir
610602 } ) ;
611603
612604 expect ( fs . existsSync ( m2Dir ) ) . toBe ( true ) ;
@@ -664,8 +656,7 @@ describe('toolchains tests', () => {
664656
665657 await toolchains . createToolchainsSettings ( {
666658 jdkInfo,
667- settingsDirectory : m2Dir ,
668- overwriteSettings : true
659+ settingsDirectory : m2Dir
669660 } ) ;
670661
671662 expect ( fs . existsSync ( m2Dir ) ) . toBe ( true ) ;
@@ -748,8 +739,7 @@ describe('toolchains tests', () => {
748739
749740 await toolchains . createToolchainsSettings ( {
750741 jdkInfo,
751- settingsDirectory : m2Dir ,
752- overwriteSettings : true
742+ settingsDirectory : m2Dir
753743 } ) ;
754744
755745 expect ( fs . existsSync ( m2Dir ) ) . toBe ( true ) ;
@@ -828,8 +818,7 @@ describe('toolchains tests', () => {
828818
829819 await toolchains . createToolchainsSettings ( {
830820 jdkInfo,
831- settingsDirectory : m2Dir ,
832- overwriteSettings : true
821+ settingsDirectory : m2Dir
833822 } ) ;
834823
835824 expect ( fs . existsSync ( m2Dir ) ) . toBe ( true ) ;
@@ -854,7 +843,7 @@ describe('toolchains tests', () => {
854843 ) . toEqual ( result ) ;
855844 } , 100000 ) ;
856845
857- it ( 'does not overwrite existing toolchains.xml files' , async ( ) => {
846+ it ( 'extends existing toolchains.xml files instead of overwriting them ' , async ( ) => {
858847 const jdkInfo = {
859848 version : '17' ,
860849 vendor : 'Eclipse Temurin' ,
@@ -883,13 +872,20 @@ describe('toolchains tests', () => {
883872
884873 await toolchains . createToolchainsSettings ( {
885874 jdkInfo,
886- settingsDirectory : m2Dir ,
887- overwriteSettings : false
875+ settingsDirectory : m2Dir
888876 } ) ;
889877
890878 expect ( fs . existsSync ( m2Dir ) ) . toBe ( true ) ;
891879 expect ( fs . existsSync ( toolchainsFile ) ) . toBe ( true ) ;
892- expect ( fs . readFileSync ( toolchainsFile , 'utf-8' ) ) . toEqual ( originalFile ) ;
880+
881+ const updated = fs . readFileSync ( toolchainsFile , 'utf-8' ) ;
882+ // The pre-existing (Sun 1.6) toolchain must be preserved ...
883+ expect ( updated ) . toContain ( '<id>sun_1.6</id>' ) ;
884+ expect ( updated ) . toContain ( '<jdkHome>/opt/jdk/sun/1.6</jdkHome>' ) ;
885+ // ... and the newly installed JDK must be appended.
886+ expect ( updated ) . toContain ( '<id>temurin_17</id>' ) ;
887+ expect ( updated ) . toContain ( '<vendor>Eclipse Temurin</vendor>' ) ;
888+ expect ( updated ) . toContain ( `<jdkHome>${ jdkInfo . jdkHome } </jdkHome>` ) ;
893889 } , 100000 ) ;
894890
895891 it ( 'generates valid toolchains.xml with minimal configuration' , ( ) => {
@@ -959,4 +955,55 @@ describe('toolchains tests', () => {
959955 )
960956 ) ;
961957 } , 100000 ) ;
958+
959+ it ( 'preserves toolchains from previous executions across multiple setup-java runs' , async ( ) => {
960+ // Regression test for https://github.com/actions/setup-java/issues/1099
961+ // Running setup-java several times in the same job (e.g. multiple steps / multiple
962+ // java-version entries) must accumulate every JDK in toolchains.xml rather
963+ // than replacing previously registered entries.
964+ ( core . getInput as jest . Mock < any > ) . mockImplementation ( ( name : string ) => {
965+ if ( name === 'settings-path' ) return m2Dir ;
966+ return '' ;
967+ } ) ;
968+
969+ const runs = [
970+ {
971+ version : '8' ,
972+ distributionName : 'temurin' ,
973+ id : 'temurin_8' ,
974+ jdkHome : '/opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/8.0.1-12/x64'
975+ } ,
976+ {
977+ version : '11' ,
978+ distributionName : 'temurin' ,
979+ id : 'temurin_11' ,
980+ jdkHome : '/opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/11.0.1-12/x64'
981+ } ,
982+ {
983+ version : '17' ,
984+ distributionName : 'temurin' ,
985+ id : 'temurin_17' ,
986+ jdkHome : '/opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.1-12/x64'
987+ }
988+ ] ;
989+
990+ for ( const run of runs ) {
991+ await toolchains . configureToolchains (
992+ run . version ,
993+ run . distributionName ,
994+ run . jdkHome ,
995+ undefined
996+ ) ;
997+ }
998+
999+ expect ( fs . existsSync ( toolchainsFile ) ) . toBe ( true ) ;
1000+ const contents = fs . readFileSync ( toolchainsFile , 'utf-8' ) ;
1001+
1002+ for ( const run of runs ) {
1003+ expect ( contents ) . toContain ( `<id>${ run . id } </id>` ) ;
1004+ expect ( contents ) . toContain ( `<jdkHome>${ run . jdkHome } </jdkHome>` ) ;
1005+ }
1006+ // Exactly one <toolchain> entry per run – no duplicates, none dropped.
1007+ expect ( ( contents . match ( / < t o o l c h a i n > / g) || [ ] ) . length ) . toBe ( runs . length ) ;
1008+ } , 100000 ) ;
9621009} ) ;
0 commit comments