Skip to content

Commit 4999a0f

Browse files
authored
Update mill scripts (#3686)
1 parent 0246a55 commit 4999a0f

File tree

2 files changed

+459
-129
lines changed

2 files changed

+459
-129
lines changed

mill.bat

Lines changed: 236 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,121 +1,299 @@
11
@echo off
22

3-
rem This is a wrapper script, that automatically download mill from GitHub release pages
4-
rem You can give the required mill version with --mill-version parameter
5-
rem If no version is given, it falls back to the value of DEFAULT_MILL_VERSION
3+
rem This is a wrapper script, that automatically selects or downloads Mill from Maven Central or GitHub release pages.
64
rem
7-
rem Project page: https://github.com/lefou/millw
8-
rem Script Version: 0.4.3
5+
rem This script determines the Mill version to use by trying these sources
6+
rem - env-variable `MILL_VERSION`
7+
rem - local file `.mill-version`
8+
rem - local file `.config/mill-version`
9+
rem - `mill-version` from YAML fronmatter of current buildfile
10+
rem - if accessible, find the latest stable version available on Maven Central (https://repo1.maven.org/maven2)
11+
rem - env-variable `DEFAULT_MILL_VERSION`
12+
rem
13+
rem If a version has the suffix '-native' a native binary will be used.
14+
rem If a version has the suffix '-jvm' an executable jar file will be used, requiring an already installed Java runtime.
15+
rem If no such suffix is found, the script will pick a default based on version and platform.
16+
rem
17+
rem Once a version was determined, it tries to use either
18+
rem - a system-installed mill, if found and it's version matches
19+
rem - an already downloaded version under %USERPROFILE%\.mill\download
20+
rem
21+
rem If no working mill version was found on the system,
22+
rem this script downloads a binary file from Maven Central or Github Pages (this is version dependent)
23+
rem into a cache location (%USERPROFILE%\.mill\download).
24+
rem
25+
rem Mill Project URL: https://github.com/com-lihaoyi/mill
26+
rem Script Version: 1.0.0-M1-21-7b6fae-DIRTY892b63e8
927
rem
1028
rem If you want to improve this script, please also contribute your changes back!
29+
rem This script was generated from: dist/scripts/src/mill.bat
1130
rem
1231
rem Licensed under the Apache License, Version 2.0
1332

1433
rem setlocal seems to be unavailable on Windows 95/98/ME
1534
rem but I don't think we need to support them in 2019
1635
setlocal enabledelayedexpansion
1736

18-
if [!DEFAULT_MILL_VERSION!]==[] (
19-
set "DEFAULT_MILL_VERSION=0.11.13"
20-
)
37+
if [!DEFAULT_MILL_VERSION!]==[] ( set "DEFAULT_MILL_VERSION=0.11.13" )
38+
39+
if [!MILL_GITHUB_RELEASE_CDN!]==[] ( set "MILL_GITHUB_RELEASE_CDN=" )
40+
41+
if [!MILL_MAIN_CLI!]==[] ( set "MILL_MAIN_CLI=%~f0" )
2142

2243
set "MILL_REPO_URL=https://github.com/com-lihaoyi/mill"
2344

24-
rem %~1% removes surrounding quotes
25-
if [%~1%]==[--mill-version] (
26-
rem shift command doesn't work within parentheses
27-
if not [%~2%]==[] (
28-
set MILL_VERSION=%~2%
29-
set "STRIP_VERSION_PARAMS=true"
45+
SET MILL_BUILD_SCRIPT=
46+
47+
if exist "build.mill" (
48+
set MILL_BUILD_SCRIPT=build.mill
49+
) else (
50+
if exist "build.mill.scala" (
51+
set MILL_BUILD_SCRIPT=build.mill.scala
3052
) else (
31-
echo You specified --mill-version without a version. 1>&2
32-
echo Please provide a version that matches one provided on 1>&2
33-
echo %MILL_REPO_URL%/releases 1>&2
34-
exit /b 1
53+
if exist "build.sc" (
54+
set MILL_BUILD_SCRIPT=build.sc
55+
) else (
56+
rem no-op
57+
)
3558
)
3659
)
3760

3861
if [!MILL_VERSION!]==[] (
3962
if exist .mill-version (
40-
set /p MILL_VERSION=<.mill-version
63+
set /p MILL_VERSION=<.mill-version
4164
) else (
42-
if exist .config\mill-version (
43-
set /p MILL_VERSION=<.config\mill-version
65+
if exist .config\mill-version (
66+
set /p MILL_VERSION=<.config\mill-version
67+
) else (
68+
if not "%MILL_BUILD_SCRIPT%"=="" (
69+
for /f "tokens=1-2*" %%a in ('findstr /C:"//| mill-version:" %MILL_BUILD_SCRIPT%') do (
70+
set "MILL_VERSION=%%c"
71+
)
72+
) else (
73+
rem no-op
4474
)
75+
)
4576
)
4677
)
4778

48-
if [!MILL_VERSION!]==[] (
49-
set MILL_VERSION=%DEFAULT_MILL_VERSION%
50-
)
79+
if [!MILL_VERSION!]==[] set MILL_VERSION=%DEFAULT_MILL_VERSION%
5180

52-
set MILL_DOWNLOAD_PATH=%USERPROFILE%\.mill\download
81+
if [!MILL_DOWNLOAD_PATH!]==[] set MILL_DOWNLOAD_PATH=%USERPROFILE%\.mill\download
5382

5483
rem without bat file extension, cmd doesn't seem to be able to run it
55-
set MILL=%MILL_DOWNLOAD_PATH%\!MILL_VERSION!.bat
84+
85+
set "MILL_NATIVE_SUFFIX=-native"
86+
set "MILL_JVM_SUFFIX=-jvm"
87+
set "FULL_MILL_VERSION=%MILL_VERSION%"
88+
set "MILL_EXT=.bat"
89+
set "ARTIFACT_SUFFIX="
90+
REM Check if MILL_VERSION contains MILL_NATIVE_SUFFIX
91+
echo !MILL_VERSION! | findstr /C:"%MILL_NATIVE_SUFFIX%" >nul
92+
if !errorlevel! equ 0 (
93+
set "MILL_VERSION=%MILL_VERSION:-native=%"
94+
REM -native images compiled with graal do not support windows-arm
95+
REM https://github.com/oracle/graal/issues/9215
96+
IF /I NOT "%PROCESSOR_ARCHITECTURE%"=="ARM64" (
97+
set "ARTIFACT_SUFFIX=-native-windows-amd64"
98+
set "MILL_EXT=.exe"
99+
) else (
100+
rem no-op
101+
)
102+
) else (
103+
echo !MILL_VERSION! | findstr /C:"%MILL_JVM_SUFFIX%" >nul
104+
if !errorlevel! equ 0 (
105+
set "MILL_VERSION=%MILL_VERSION:-jvm=%"
106+
) else (
107+
set "SKIP_VERSION=false"
108+
set "MILL_PREFIX=%MILL_VERSION:~0,4%"
109+
if "!MILL_PREFIX!"=="0.1." set "SKIP_VERSION=true"
110+
if "!MILL_PREFIX!"=="0.2." set "SKIP_VERSION=true"
111+
if "!MILL_PREFIX!"=="0.3." set "SKIP_VERSION=true"
112+
if "!MILL_PREFIX!"=="0.4." set "SKIP_VERSION=true"
113+
if "!MILL_PREFIX!"=="0.5." set "SKIP_VERSION=true"
114+
if "!MILL_PREFIX!"=="0.6." set "SKIP_VERSION=true"
115+
if "!MILL_PREFIX!"=="0.7." set "SKIP_VERSION=true"
116+
if "!MILL_PREFIX!"=="0.8." set "SKIP_VERSION=true"
117+
if "!MILL_PREFIX!"=="0.9." set "SKIP_VERSION=true"
118+
set "MILL_PREFIX=%MILL_VERSION:~0,5%"
119+
if "!MILL_PREFIX!"=="0.10." set "SKIP_VERSION=true"
120+
if "!MILL_PREFIX!"=="0.11." set "SKIP_VERSION=true"
121+
if "!MILL_PREFIX!"=="0.12." set "SKIP_VERSION=true"
122+
123+
if "!SKIP_VERSION!"=="false" (
124+
IF /I NOT "%PROCESSOR_ARCHITECTURE%"=="ARM64" (
125+
set "ARTIFACT_SUFFIX=-native-windows-amd64"
126+
set "MILL_EXT=.exe"
127+
)
128+
) else (
129+
rem no-op
130+
)
131+
)
132+
)
133+
134+
set MILL=%MILL_DOWNLOAD_PATH%\!FULL_MILL_VERSION!!MILL_EXT!
135+
136+
set MILL_RESOLVE_DOWNLOAD=
56137

57138
if not exist "%MILL%" (
58-
set VERSION_PREFIX=%MILL_VERSION:~0,4%
59-
set DOWNLOAD_SUFFIX=-assembly
60-
if [!VERSION_PREFIX!]==[0.0.] set DOWNLOAD_SUFFIX=
61-
if [!VERSION_PREFIX!]==[0.1.] set DOWNLOAD_SUFFIX=
62-
if [!VERSION_PREFIX!]==[0.2.] set DOWNLOAD_SUFFIX=
63-
if [!VERSION_PREFIX!]==[0.3.] set DOWNLOAD_SUFFIX=
64-
if [!VERSION_PREFIX!]==[0.4.] set DOWNLOAD_SUFFIX=
65-
set VERSION_PREFIX=
139+
set MILL_RESOLVE_DOWNLOAD=true
140+
) else (
141+
if defined MILL_TEST_DRY_RUN_LAUNCHER_SCRIPT (
142+
set MILL_RESOLVE_DOWNLOAD=true
143+
) else (
144+
rem no-op
145+
)
146+
)
147+
148+
149+
if [!MILL_RESOLVE_DOWNLOAD!]==[true] (
150+
set MILL_VERSION_PREFIX=%MILL_VERSION:~0,4%
151+
set MILL_SHORT_VERSION_PREFIX=%MILL_VERSION:~0,2%
152+
rem Since 0.5.0
153+
set MILL_DOWNLOAD_SUFFIX=-assembly
154+
rem Since 0.11.0
155+
set MILL_DOWNLOAD_FROM_MAVEN=1
156+
if [!MILL_VERSION_PREFIX!]==[0.0.] (
157+
set MILL_DOWNLOAD_SUFFIX=
158+
set MILL_DOWNLOAD_FROM_MAVEN=0
159+
)
160+
if [!MILL_VERSION_PREFIX!]==[0.1.] (
161+
set MILL_DOWNLOAD_SUFFIX=
162+
set MILL_DOWNLOAD_FROM_MAVEN=0
163+
)
164+
if [!MILL_VERSION_PREFIX!]==[0.2.] (
165+
set MILL_DOWNLOAD_SUFFIX=
166+
set MILL_DOWNLOAD_FROM_MAVEN=0
167+
)
168+
if [!MILL_VERSION_PREFIX!]==[0.3.] (
169+
set MILL_DOWNLOAD_SUFFIX=
170+
set MILL_DOWNLOAD_FROM_MAVEN=0
171+
)
172+
if [!MILL_VERSION_PREFIX!]==[0.4.] (
173+
set MILL_DOWNLOAD_SUFFIX=
174+
set MILL_DOWNLOAD_FROM_MAVEN=0
175+
)
176+
if [!MILL_VERSION_PREFIX!]==[0.5.] set MILL_DOWNLOAD_FROM_MAVEN=0
177+
if [!MILL_VERSION_PREFIX!]==[0.6.] set MILL_DOWNLOAD_FROM_MAVEN=0
178+
if [!MILL_VERSION_PREFIX!]==[0.7.] set MILL_DOWNLOAD_FROM_MAVEN=0
179+
if [!MILL_VERSION_PREFIX!]==[0.8.] set MILL_DOWNLOAD_FROM_MAVEN=0
180+
if [!MILL_VERSION_PREFIX!]==[0.9.] set MILL_DOWNLOAD_FROM_MAVEN=0
181+
182+
set MILL_VERSION_PREFIX=%MILL_VERSION:~0,5%
183+
if [!MILL_VERSION_PREFIX!]==[0.10.] set MILL_DOWNLOAD_FROM_MAVEN=0
184+
185+
set MILL_VERSION_PREFIX=%MILL_VERSION:~0,8%
186+
if [!MILL_VERSION_PREFIX!]==[0.11.0-M] set MILL_DOWNLOAD_FROM_MAVEN=0
187+
188+
set MILL_VERSION_PREFIX=%MILL_VERSION:~0,5%
189+
set DOWNLOAD_EXT=exe
190+
if [!MILL_SHORT_VERSION_PREFIX!]==[0.] set DOWNLOAD_EXT=jar
191+
if [!MILL_VERSION_PREFIX!]==[0.12.] set DOWNLOAD_EXT=exe
192+
if [!MILL_VERSION!]==[0.12.0] set DOWNLOAD_EXT=jar
193+
if [!MILL_VERSION!]==[0.12.1] set DOWNLOAD_EXT=jar
194+
if [!MILL_VERSION!]==[0.12.2] set DOWNLOAD_EXT=jar
195+
if [!MILL_VERSION!]==[0.12.3] set DOWNLOAD_EXT=jar
196+
if [!MILL_VERSION!]==[0.12.4] set DOWNLOAD_EXT=jar
197+
if [!MILL_VERSION!]==[0.12.5] set DOWNLOAD_EXT=jar
198+
if [!MILL_VERSION!]==[0.12.6] set DOWNLOAD_EXT=jar
199+
if [!MILL_VERSION!]==[0.12.7] set DOWNLOAD_EXT=jar
200+
if [!MILL_VERSION!]==[0.12.8] set DOWNLOAD_EXT=jar
201+
if [!MILL_VERSION!]==[0.12.9] set DOWNLOAD_EXT=jar
202+
if [!MILL_VERSION!]==[0.12.10] set DOWNLOAD_EXT=jar
203+
if [!MILL_VERSION!]==[0.12.11] set DOWNLOAD_EXT=jar
204+
205+
set MILL_VERSION_PREFIX=
206+
set MILL_SHORT_VERSION_PREFIX=
66207

67208
for /F "delims=- tokens=1" %%A in ("!MILL_VERSION!") do set MILL_VERSION_BASE=%%A
209+
set MILL_VERSION_MILESTONE=
68210
for /F "delims=- tokens=2" %%A in ("!MILL_VERSION!") do set MILL_VERSION_MILESTONE=%%A
69-
set VERSION_MILESTONE_START=!MILL_VERSION_MILESTONE:~0,1!
70-
if [!VERSION_MILESTONE_START!]==[M] (
71-
set MILL_VERSION_TAG="!MILL_VERSION_BASE!-!MILL_VERSION_MILESTONE!"
211+
set MILL_VERSION_MILESTONE_START=!MILL_VERSION_MILESTONE:~0,1!
212+
if [!MILL_VERSION_MILESTONE_START!]==[M] (
213+
set MILL_VERSION_TAG=!MILL_VERSION_BASE!-!MILL_VERSION_MILESTONE!
72214
) else (
73215
set MILL_VERSION_TAG=!MILL_VERSION_BASE!
74216
)
217+
if [!MILL_DOWNLOAD_FROM_MAVEN!]==[1] (
218+
set MILL_DOWNLOAD_URL=https://repo1.maven.org/maven2/com/lihaoyi/mill-dist!ARTIFACT_SUFFIX!/!MILL_VERSION!/mill-dist!ARTIFACT_SUFFIX!-!MILL_VERSION!.!DOWNLOAD_EXT!
219+
) else (
220+
set MILL_DOWNLOAD_URL=!MILL_GITHUB_RELEASE_CDN!%MILL_REPO_URL%/releases/download/!MILL_VERSION_TAG!/!MILL_VERSION!!MILL_DOWNLOAD_SUFFIX!
221+
)
75222

76-
rem there seems to be no way to generate a unique temporary file path (on native Windows)
77-
set DOWNLOAD_FILE=%MILL%.tmp
223+
if defined MILL_TEST_DRY_RUN_LAUNCHER_SCRIPT (
224+
echo !MILL_DOWNLOAD_URL!
225+
echo !MILL!
226+
exit /b 0
227+
)
78228

79-
set DOWNLOAD_URL=%MILL_REPO_URL%/releases/download/!MILL_VERSION_TAG!/!MILL_VERSION!!DOWNLOAD_SUFFIX!
229+
rem there seems to be no way to generate a unique temporary file path (on native Windows)
230+
set MILL_DOWNLOAD_FILE=%MILL%.tmp
80231

81-
echo Downloading mill %MILL_VERSION% from %MILL_REPO_URL%/releases ... 1>&2
232+
echo Downloading mill !MILL_VERSION! from !MILL_DOWNLOAD_URL! ... 1>&2
82233

83234
if not exist "%MILL_DOWNLOAD_PATH%" mkdir "%MILL_DOWNLOAD_PATH%"
84235
rem curl is bundled with recent Windows 10
85236
rem but I don't think we can expect all the users to have it in 2019
86237
where /Q curl
87-
if %ERRORLEVEL% EQU 0 (
88-
curl -f -L "!DOWNLOAD_URL!" -o "!DOWNLOAD_FILE!"
238+
if !ERRORLEVEL! EQU 0 (
239+
curl -f -L "!MILL_DOWNLOAD_URL!" -o "!MILL_DOWNLOAD_FILE!"
89240
) else (
90241
rem bitsadmin seems to be available on Windows 7
91242
rem without /dynamic, github returns 403
92243
rem bitsadmin is sometimes needlessly slow but it looks better with /priority foreground
93-
bitsadmin /transfer millDownloadJob /dynamic /priority foreground "!DOWNLOAD_URL!" "!DOWNLOAD_FILE!"
244+
bitsadmin /transfer millDownloadJob /dynamic /priority foreground "!MILL_DOWNLOAD_URL!" "!MILL_DOWNLOAD_FILE!"
94245
)
95-
if not exist "!DOWNLOAD_FILE!" (
96-
echo Could not download mill %MILL_VERSION% 1>&2
246+
if not exist "!MILL_DOWNLOAD_FILE!" (
247+
echo Could not download mill !MILL_VERSION! 1>&2
97248
exit /b 1
98249
)
99250

100-
move /y "!DOWNLOAD_FILE!" "%MILL%"
251+
move /y "!MILL_DOWNLOAD_FILE!" "%MILL%"
101252

102-
set DOWNLOAD_FILE=
103-
set DOWNLOAD_SUFFIX=
253+
set MILL_DOWNLOAD_FILE=
254+
set MILL_DOWNLOAD_SUFFIX=
104255
)
105256

106257
set MILL_DOWNLOAD_PATH=
107258
set MILL_VERSION=
108259
set MILL_REPO_URL=
109260

110-
set MILL_PARAMS=%*
111-
112-
if defined STRIP_VERSION_PARAMS (
113-
for /f "tokens=1-2*" %%a in ("%*") do (
114-
rem strip %%a - It's the "--mill-version" option.
115-
rem strip %%b - it's the version number that comes after the option.
116-
rem keep %%c - It's the remaining options.
117-
set MILL_PARAMS=%%c
261+
rem Need to preserve the first position of those listed options
262+
set MILL_FIRST_ARG=
263+
if [%~1%]==[--bsp] (
264+
set MILL_FIRST_ARG=%1%
265+
) else (
266+
if [%~1%]==[-i] (
267+
set MILL_FIRST_ARG=%1%
268+
) else (
269+
if [%~1%]==[--interactive] (
270+
set MILL_FIRST_ARG=%1%
271+
) else (
272+
if [%~1%]==[--no-server] (
273+
set MILL_FIRST_ARG=%1%
274+
) else (
275+
if [%~1%]==[--no-daemon] (
276+
set MILL_FIRST_ARG=%1%
277+
) else (
278+
if [%~1%]==[--repl] (
279+
set MILL_FIRST_ARG=%1%
280+
) else (
281+
if [%~1%]==[--help] (
282+
set MILL_FIRST_ARG=%1%
283+
)
284+
)
285+
)
286+
)
118287
)
288+
)
289+
)
290+
set "MILL_PARAMS=%*%"
291+
292+
if not [!MILL_FIRST_ARG!]==[] (
293+
for /f "tokens=1*" %%a in ("%*") do (
294+
set "MILL_PARAMS=%%b"
295+
)
119296
)
120297

121-
"%MILL%" %MILL_PARAMS%
298+
rem -D mill.main.cli is for compatibility with Mill 0.10.9 - 0.13.0-M2
299+
"%MILL%" %MILL_FIRST_ARG% -D "mill.main.cli=%MILL_MAIN_CLI%" %MILL_PARAMS%

0 commit comments

Comments
 (0)