An open API service indexing awesome lists of open source software.

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

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