millw
millw copied to clipboard
Mill Wrapper Script
= Mill Wrapper Script :version: 0.4.11 :example-mill-version: 0.11.6 :mill-url: https://github.com/com-lihaoyi/mill :toc: :toc-placement: preamble
Small script to automatically fetch and execute {mill-url}[mill build tool].
== Installation
On any platform, you can download the millw (Mac / Linux) or millw.bat / millw.ps1 (Windows) scripts found in this repo, into the root of your project.
You can then use the script file as a drop-in replacement for Mill.
For convenience on Mac and Linux, use your terminal to navigate to the root of your project, then run the following command:
.Shell command to install millw into your project
[source,sh,subs="attributes,verbatim"]
$ curl -L https://raw.githubusercontent.com/lefou/millw/{version}/millw > mill && chmod +x mill
== How it works
millw is a small wrapper script around mill and works almost identical to mill.
It automatically downloads the correct mill version (into ${XDG_CACHE_HOME}/mill/download or ~/.cache/mill/download on Linux/Mac and $Env:LOCALAPPDATA\mill\download on Windows).
I recommend to rename the tool to just mill.
It is designed to be a drop-in replacement for the official mill binary.
The project name and also the script name was primarily chosen to be millw to disambiguate references.
The mill version to be used will be determined by the following steps. The search ends, after the first step that results in a version.
- If the first parameter is
--mill-version, the second parameter will be used as the mill version.
.Example [source,sh,subs="attributes,verbatim"]
sh $ mill --mill-version {example-mill-version} --disable-ticker version {example-mill-version}
- If the environment variable
MILL_VERSIONis defined, its value will be used.
.Example [source,sh,subs="attributes,verbatim"]
sh $ MILL_VERSION={example-mill-version} mill --disable-ticker version {example-mill-version}
- If there is a file
.mill-versionin the working directory, its content will be used as mill version. The file must have only a mill version as content, no additional content or comments are supported.
.Example
[source,sh,subs="attributes,verbatim"]
sh $ echo -n "{example-mill-version}" > .mill-version sh $ mill --disable-ticker version {example-mill-version}
-
If there is a file
.config/mill-version, its content will be used as mill version. -
The latest mill release available from the Github release pages will be used.
-
If the environment variable
DEFAULT_MILL_VERSIONis set, its value will be used. -
The values of the
DEFAULT_MILL_VERSIONvariable inside the script will be used.
== Use cases
=== As mill executable
Istead of installing mill, you can just place the script into you local $HOME/bin directory and rename it to mill.
If you need a special mill version in a project directory, just place a .mill-version file with the best mill version.
.Example: setting mill {example-mill-version} as best local mill version [source,sh,subs="attributes,verbatim"]
sh $ echo -n "{example-mill-version}" > .mill-version
=== As a wrapper script in your project
To make the start for others easier or to always have the correct mill version in your CI environmentfootnote:[Continuous Integration environment],
you can just place a copy of the script as millw (for Windows millw.bat) in your project root directory.
You should change the DEFAULT_MILL_VERSION variable in that script to the correct version you want to use
and add the file under version control.
=== Add a target to update the millw script with mill
[source,scala]
/**
- Update the millw script. */ def millw() = T.command { val target = mill.modules.Util.download("https://raw.githubusercontent.com/lefou/millw/main/millw") val millw = build.millSourcePath / "millw" os.copy.over(target.path, millw) os.perms.set(millw, os.perms(millw) + java.nio.file.attribute.PosixFilePermission.OWNER_EXECUTE) target }
== GitHub release CDN support
In some areas, the network environment makes downloading files from GitHub release very time-consuming. Fortunately,
some CDN services can speed up GitHub release files. You can use the GITHUB_RELEASE_CDN environment variable to add
a CDN url prefix before the original GitHub release file url to speed up your file downloads!
== License
Published under the https://www.apache.org/licenses/LICENSE-2.0[Apache Licencse, Version 2.0].
== Changelog
=== millw 0.4.11 - 2023-12-18
- Fixed BSP mode on Windows, due to incorrect
MILL_MAIN_CLIvariable handling.
=== millw 0.4.10 - 2023-09-29
- Fixed unlimited self-calls when the
millwscript is installed in a location that is also part of thePATHenvironment variable.
=== millw 0.4.9 - 2023-09-27
This version has issues if you use it as system-wide installed mill replacement. Please don't use this version!
- Improved the logic to use a system-wide installed Mill executable
=== millw 0.4.8 - 2023-07-25
- Fixed typo in
millw.bat - Update fallback Mill version to 0.11.1
=== millw 0.4.7 - 2023-06-19
- Download newer Mill versions (
0.11.0+) from Maven Central - Added support for
GITHUB_RELEASE_CDNvariable, to speed up downloads
=== millw 0.4.6 - 2023-01-06
- Fixed a misplaced newline in
millw.bat
=== millw 0.4.5 - 2022-11-15
- Fixed issues with running Mill in
--repl,--no-serveror--bspmode by preserving the first position of those essential Mill options
=== millw 0.4.4 - 2022-11-04
- Feed the currently used mill executable to the Mill process (uses
mill.main.clisystem property) and supportMILL_MAIN_CLIenv variable to override the value
=== millw 0.4.3 - 2022-09-07
- Support reading the version from local
.config/mill-versionfile - Read a
DEFAULT_MILL_VERSIONenv variable before falling back to hardcoded default version
=== millw 0.4.2 - 2022-02-15
- Don't be verbose when system mill version can't detected
=== millw 0.4.1 - 2022-02-15
- Removed bash specifics from shell script
- Cleaned up shell script
- Use system-installed mill version if possible
- Added CI job to run some checks
=== millw 0.4.0 - 2021-12-22
- Use curl with --force options to make millw more robust against download errors
=== millw 0.3.9 - 2021-11-17
- Use 6 digits for mktemp
- Fixed download URL for snapshot releases
=== millw 0.3.8 - 2021-09-17
- Added support for mill milestones (calculate correct download URL), fixes issues with mill 0.10.0-M2
=== millw 0.3.7 - 2021-08-26
- Write messages from the wrapper script to STDERR
=== millw 0.3.6 - 2021-07-22
- millw: Support non-GNU touch command, e.g. on BSD and OSX
=== millw 0.3.5 - 2021-03-01
- Updated mill repository URLs (mill repo has moved)
- millw.bat: script exit does not exit the command shell
- millw.bat: use curl if present, otherwise fall back to bitsadmin
=== millw 0.3.4 - 2020-10-27
- millw.bat: Fixed download URL to support snapshot versions of mill
- millw: Support running/downloading when used with Git Bash under Windows 10
=== millw 0.3.3 - 2020-07-14
- millw: Fixed fetching of latest mill version
=== millw 0.3.2 - 2020-05-09
- millw.bat: Fixed handling and stripping of
--mill-versionparameter before calling mill
=== millw 0.3.1 - 2020-04-10
- millw.bat: Quote mill command to support directories with spaces
=== millw 0.3.0 - 2019-12-06
- Conform to XDG Base Directory Specification (use
~/.cachedir)
=== millw 0.2.0 - 2019-07-10
- Print info message before download
- millw: If no version was given, millw tries to download the latest version
- Support changed download filename scheme since mill 0.5.0
- Respect set version from MILL_VERSION environment variable, if defined
=== millw 0.1.0 - 2019-03-27
- First release