@@ -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
2123if " %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+
53102set DEBUG_HELPER = 1
54103call vcbuild.bat %VCBUILD_EXTRA_ARGS%
55104if errorlevel 1 exit /b
0 commit comments