https://github.com/lefou/millw
Mill Wrapper Script
https://github.com/lefou/millw
build-tool mill millw
Last synced: 12 months ago
JSON representation
Mill Wrapper Script
- Host: GitHub
- URL: https://github.com/lefou/millw
- Owner: lefou
- License: apache-2.0
- Archived: true
- Created: 2019-02-26T21:10:03.000Z (over 7 years ago)
- Default Branch: main
- Last Pushed: 2024-12-08T17:18:21.000Z (over 1 year ago)
- Last Synced: 2025-03-29T01:15:54.988Z (about 1 year ago)
- Topics: build-tool, mill, millw
- Language: Shell
- Size: 115 KB
- Stars: 64
- Watchers: 4
- Forks: 16
- Open Issues: 0
-
Metadata Files:
- Readme: README.adoc
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
= Mill Wrapper Script
:version: 0.4.12
:example-mill-version: 0.11.6
:mill-url: https://github.com/com-lihaoyi/mill
:toc:
:toc-placement: preamble
:important-caption: :heavy_exclamation_mark:
IMPORTANT: `millw` is now merged into the {mill-url}[official Mill repository].
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_VERSION` is 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-version` in 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_VERSION` is set, its value will be used.
* The values of the `DEFAULT_MILL_VERSION` variable 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.12 - 2024-06-25
* Introduce a new PowerShell wrapper script.
=== millw 0.4.11 - 2023-12-18
* Fixed BSP mode on Windows, due to incorrect `MILL_MAIN_CLI` variable handling.
=== millw 0.4.10 - 2023-09-29
* Fixed unlimited self-calls when the `millw` script is installed in a location that is also part of the `PATH` environment 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_CDN` variable, 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-server` or `--bsp` mode 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.cli` system property) and support `MILL_MAIN_CLI` env variable to override the value
=== millw 0.4.3 - 2022-09-07
* Support reading the version from local `.config/mill-version` file
* Read a `DEFAULT_MILL_VERSION` env 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-version` parameter 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 `~/.cache` dir)
=== 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