Skip to content

Commit 5d0639b

Browse files
jenkins: improve x64 node.exe caching for arm64 (#3842)
Fixes: #3504 Refs: #3315 Refs: #3514 Refs: #3533
1 parent d9c4ea9 commit 5d0639b

File tree

1 file changed

+57
-8
lines changed

1 file changed

+57
-8
lines changed

jenkins/scripts/windows/compile.cmd

Lines changed: 57 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ if not defined DISABLE_CLCACHE if exist C:\clcache\dist\clcache_main\clcache_mai
1717
C:\clcache\dist\clcache_main\clcache_main.exe -s
1818
)
1919

20+
SETLOCAL EnableDelayedExpansion
21+
2022
:: Call vcbuild
2123
if "%nodes:~-6%" == "-arm64" (
2224
:: Building MSI is not yet supported for ARM64 with WiX 3.
@@ -35,21 +37,68 @@ if "%nodes:~-6%" == "-arm64" (
3537
:: thus failing the build after timing out (1-2% runs).
3638
:: Downloading it from here and updating it weekly should
3739
:: decrease, if not remove, these types of CI failures.
38-
:: Download and cache x64 node.exe.
39-
mkdir C:\node_exe_cache
40-
forfiles /p "C:\node_exe_cache" /m "node.exe" /d -7 /c "cmd /c del @path"
41-
if not exist C:\node_exe_cache\node.exe (
42-
curl -L https://nodejs.org/dist/latest/win-x64/node.exe -o C:\node_exe_cache\node.exe
40+
:: 1. Make node_exe_cache directory if it doesn't exist.
41+
if not exist C:\node_exe_cache (
42+
mkdir C:\node_exe_cache
43+
)
44+
:: 2. Check if node.exe exists and if it's older then 7 days.
45+
set NODE_CACHED=False
46+
set CACHE_INVALID=False
47+
if exist C:\node_exe_cache\node.exe (
48+
set NODE_CACHED=True
49+
forfiles /p "C:\node_exe_cache" /m "node.exe" /d -7 && set CACHE_INVALID=True
50+
)
51+
:: 3. If node.exe didn't exist, or was older then 7 days, download the new one and check it's validity.
52+
set SHOULD_DOWNLOAD=False
53+
if !NODE_CACHED! == False set SHOULD_DOWNLOAD=True
54+
if !CACHE_INVALID! == True set SHOULD_DOWNLOAD=True
55+
set VALID_SHASUM=
56+
set DOWNLOAD_SHASUM=
57+
if !SHOULD_DOWNLOAD! == True (
58+
:: 3.1. Download SHASUMS and find value for "win-x64/node.exe".
59+
ver > nul
60+
curl -L https://nodejs.org/dist/latest/SHASUMS256.txt -o C:\node_exe_cache\SHASUMS256.txt
61+
if not !errorlevel! == 0 goto download_cleanup
62+
for /f %%a in ('findstr win-x64/node.exe C:\node_exe_cache\SHASUMS256.txt') do set VALID_SHASUM=%%a
63+
if [!VALID_SHASUM!] == [] goto download_cleanup
64+
:: 3.2. Download win-x64/node.exe and calculate its SHASUM.
65+
ver > nul
66+
curl -L https://nodejs.org/dist/latest/win-x64/node.exe -o C:\node_exe_cache\node_new.exe
67+
if not !errorlevel! == 0 goto download_cleanup
68+
for /f %%a in ('certutil -hashfile C:\node_exe_cache\node_new.exe SHA256 ^| find /v ":"') do set DOWNLOAD_SHASUM=%%a
69+
if [!DOWNLOAD_SHASUM!] == [] goto download_cleanup
70+
:: 3.3. Check if downloaded file is valid. If yes, delete old one. If not, delete new one.
71+
if !VALID_SHASUM! == !DOWNLOAD_SHASUM! (
72+
if exist C:\node_exe_cache\node.exe (
73+
del C:\node_exe_cache\node.exe
74+
)
75+
ren C:\node_exe_cache\node_new.exe node.exe
76+
)
77+
:: 3.4. Clean up all of the temporary files.
78+
:download_cleanup
79+
if exist C:\node_exe_cache\SHASUMS256.txt (
80+
del C:\node_exe_cache\SHASUMS256.txt
81+
)
82+
if exist C:\node_exe_cache\node_new.exe (
83+
del C:\node_exe_cache\node_new.exe
84+
)
85+
)
86+
:: 4. Copy the latest valid node, if any, to where vcbuild expects it to be
87+
if exist C:\node_exe_cache\node.exe (
88+
if not exist temp-vcbuild (
89+
mkdir temp-vcbuild
90+
)
91+
copy C:\node_exe_cache\node.exe temp-vcbuild\node-x64-cross-compiling.exe
4392
)
44-
:: Copy it to where vcbuild expects.
45-
mkdir temp-vcbuild
46-
copy C:\node_exe_cache\node.exe temp-vcbuild\node-x64-cross-compiling.exe
4793
)
4894
) else if "%nodes:~-4%" == "-x86" (
4995
set "VCBUILD_EXTRA_ARGS=x86 %VCBUILD_EXTRA_ARGS%"
5096
) else (
5197
set "VCBUILD_EXTRA_ARGS=x64 %VCBUILD_EXTRA_ARGS%"
5298
)
99+
100+
ENDLOCAL
101+
53102
set DEBUG_HELPER=1
54103
call vcbuild.bat %VCBUILD_EXTRA_ARGS%
55104
if errorlevel 1 exit /b

0 commit comments

Comments
 (0)