1
1
@ echo off
2
2
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.
6
4
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
9
27
rem
10
28
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
11
30
rem
12
31
rem Licensed under the Apache License, Version 2.0
13
32
14
33
rem setlocal seems to be unavailable on Windows 95/98/ME
15
34
rem but I don't think we need to support them in 2019
16
35
setlocal enabledelayedexpansion
17
36
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 " )
21
42
22
43
set " MILL_REPO_URL = https://github.com/com-lihaoyi/mill"
23
44
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
30
52
) 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
+ )
35
58
)
36
59
)
37
60
38
61
if [!MILL_VERSION! ]== [] (
39
62
if exist .mill-version (
40
- set /p MILL_VERSION = < .mill-version
63
+ set /p MILL_VERSION = < .mill-version
41
64
) 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
44
74
)
75
+ )
45
76
)
46
77
)
47
78
48
- if [!MILL_VERSION! ]== [] (
49
- set MILL_VERSION = %DEFAULT_MILL_VERSION%
50
- )
79
+ if [!MILL_VERSION! ]== [] set MILL_VERSION = %DEFAULT_MILL_VERSION%
51
80
52
- set MILL_DOWNLOAD_PATH = %USERPROFILE% \.mill\download
81
+ if [ !MILL_DOWNLOAD_PATH! ] == [] set MILL_DOWNLOAD_PATH = %USERPROFILE% \.mill\download
53
82
54
83
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 =
56
137
57
138
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 =
66
207
67
208
for /F " delims=- tokens=1" %%A in (" !MILL_VERSION! " ) do set MILL_VERSION_BASE = %%A
209
+ set MILL_VERSION_MILESTONE =
68
210
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!
72
214
) else (
73
215
set MILL_VERSION_TAG = !MILL_VERSION_BASE!
74
216
)
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
+ )
75
222
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
+ )
78
228
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
80
231
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
82
233
83
234
if not exist " %MILL_DOWNLOAD_PATH% " mkdir " %MILL_DOWNLOAD_PATH% "
84
235
rem curl is bundled with recent Windows 10
85
236
rem but I don't think we can expect all the users to have it in 2019
86
237
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 ! "
89
240
) else (
90
241
rem bitsadmin seems to be available on Windows 7
91
242
rem without /dynamic, github returns 403
92
243
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 ! "
94
245
)
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
97
248
exit /b 1
98
249
)
99
250
100
- move /y " !DOWNLOAD_FILE ! " " %MILL% "
251
+ move /y " !MILL_DOWNLOAD_FILE ! " " %MILL% "
101
252
102
- set DOWNLOAD_FILE =
103
- set DOWNLOAD_SUFFIX =
253
+ set MILL_DOWNLOAD_FILE =
254
+ set MILL_DOWNLOAD_SUFFIX =
104
255
)
105
256
106
257
set MILL_DOWNLOAD_PATH =
107
258
set MILL_VERSION =
108
259
set MILL_REPO_URL =
109
260
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
+ )
118
287
)
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
+ )
119
296
)
120
297
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