com-lihaoyi / mill

Your shiny new Java/Scala build tool!
https://mill-build.com/
MIT License
1.99k stars 303 forks source link
build-system build-tool java jvm mill mill-plugin scala scala-js scala-native zinc

= image:docs/logo.svg[Mill Logo] Mill :idprefix: :idseparator: - :link-github: https://github.com/com-lihaoyi/mill :link-gitter: https://gitter.im/lihaoyi/mill :link-current-doc-site: https://mill-build.com :link-mill-moduledefs: https://github.com/com-lihaoyi/mill-moduledefs :example-scala-version: 3.3.4 :toc: :toc-placement: preamble ifndef::env-github[] :icons: font endif::[] ifdef::env-github[] :caution-caption: :fire: :important-caption: :exclamation: :note-caption: :paperclip: :tip-caption: :bulb: :warning-caption: :warning: endif::[]

{link-github}/actions/workflows/actions.yml[image:{link-github}/actions/workflows/actions.yml/badge.svg[Build and Release]] {link-gitter}?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge[image:https://badges.gitter.im/Join%20Chat.svg[Gitter Chat]] https://index.scala-lang.org/com-lihaoyi/mill/mill-main[image:https://index.scala-lang.org/com-lihaoyi/mill/mill-main/latest.svg[Mill]] https://www.patreon.com/lihaoyi[image:https://img.shields.io/badge/patreon-sponsor-ff69b4.svg[Patreon]]

Your shiny new Scala build tool! Confused by SBT? Frustrated by Maven? Perplexed by Gradle? Give Mill a try!

== Documentation

If you want to use Mill in your own projects, check out our documentation:

Here is some quick example, so that you can imagine how it looks:

[source,scala,subs="verbatim,attributes"]

import mill., scalalib.

object foo extends ScalaModule { def scalaVersion = "{example-scala-version}" }

object bar extends ScalaModule { def moduleDeps = Seq(foo) def scalaVersion = "{example-scala-version}" }

If you use Mill and like it, you will probably enjoy the following book by the Author:

The remainder of this readme is developer-documentation targeted at people who wish to work on Mill's own codebase. The developer docs assume you have read through the user-facing documentation linked above. It's also worth spending a few minutes reading the following blog posts to get a sense of Mill's design & motivation:

Mill is profiled using the https://www.ej-technologies.com/products/jprofiler/overview.html[JProfiler Java Profiler], by courtesy of EJ Technologies.

Mill is built using Mill. To begin, you just need a JVM installed, and the ./mill script will be sufficient to bootstrap the project.

== IntelliJ Setup

If you are using IntelliJ IDEA to edit Mill's Scala code, you can create the IntelliJ project files via:

[source,bash]

./mill -j 0 mill.idea.GenIdea/idea

== Manual & Automated Testing

The following table contains the main ways you can test the code in com-lihaoyi/mill, via manual testing or automated tests:

|=== | Config | Automated Testing | Manual Testing | Manual Testing CI | In-Process Tests | main.__.test, scalalib.test, contrib.buildinfo.test, etc. | | | Sub-Process w/o packaging/publishing| example.\\__.local, integration.__.local | dev.run | test-mill-dev.sh | Sub-Process w/ packaging/publishing | example.\\__.server, integration.__.server | dev.assembly | test-mill-release.sh | Bootstrapping: Building Mill with your current checkout of Mill | | installLocal | test-mill-bootstrap.sh |===

=== In-Process Tests

In-process tests live in the .test sub-modules of the various Mill modules. These range from tiny unit tests, to larger integration tests that instantiate a TestUtil.BaseModule in-process and a TestEvaluator to evaluate tasks on it.

Most "core" tests live in main.__test; these should run almost instantly, and cover most of Mill's functionality that is not specific to Scala/Scala.js/etc.. Tests specific to Scala/Scala.js/Scala-Native live in scalalib.test/scalajslib.test/scalanativelib.test respectively, and take a lot longer to run because running them involves actually compiling Scala code.

The various contrib modules also have tests in this style, e.g. contrib.buildinfo.test

Note that the in-memory tests compile the BaseModule together with the test suite, and do not exercise the Mill script-file bootstrapping, transformation, and compilation process.

=== Sub-Process Tests without Packaging/Publishing

example.\\__.local and integration.__.local tests run Mill end-to-end in a subprocess, but without the expensive/slow steps of packaging the core packages into an assembly jar and publishing the remaining packages to ~/.ivy2/local. You can reproduce these tests manually using ./mill dev.run <test-folder-path> <command>.

example tests are written in a single build.sc file, with the test commands written in a comment with a bash-like syntax together with the build code and comments that explain the example. These serve three purposes:

  1. Basic smoke-tests to make sure the functionality works at all, without covering every edge case

  2. User-facing documentation, with the test cases, test commands, and explanatory comments included in the Mill documentation site

  3. Example repositories, that Mill users can download to bootstrap their own projects

The integration tests are similar to example tests and share most of their test infrastructure, but with differences:

  1. integration tests are meant to test features more thoroughly then example tests, covering more and deeper edge cases even at the expense of readability

  2. integration tests are written using a Scala test suite extending IntegrationTestSuite, giving more flexibility at the expense of readability

You can reproduce any of the tests manually using dev.run, e.g.

Automated Test

[source,bash]

./mill "example.basic[1-simple-scala].local"

Manual Test

[source,bash]

./mill dev.run example/basic/1-simple-scala run --text hello

Manual Test using Launcher Script

[source,bash]

./mill dev.launcher && (cd example/basic/1-simple-scala && ../../../out/dev/launcher.dest/run run --text hello)

=== Sub-Process Tests with Packaging/Publishing

example.\\__.server, integration.__.server, example.\\__.fork and integration.__.fork cover the same test cases as the .local tests described above, but they perform packaging of the Mill core modules into an assembly jar, and publish the remaining modules to ~/.ivy2/local. This results in a more realistic test environment, but at the cost of taking tens-of-seconds more to run a test after making a code change.

You can reproduce these tests manually using dev.assembly:

[source,bash]

./mill dev.assembly && (cd example/basic/1-simple-scala && ../../../out/dev/assembly.dest/mill run --text hello)

There are two flavors of these tests:

  1. .server test run the test cases with the default configuration, so consecutive commands run in the same long-lived background server process

  2. .fork test run the test cases with --no-server, meaning each command runs in a newly spawned Mill process

In general you should spend most of your time working with the .local version of the example and integration tests to save time, and only run .fork or .server once .local is passing.

=== Bootstrapping: Building Mill with your current checkout of Mill

To test bootstrapping of Mill's own Mill build using a version of Mill built from your checkout, you can run

[source,bash]

./mill installLocal ci/patch-mill-bootstrap.sh

This creates a standalone assembly at target/mill-release you can use, which references jars published locally in your ~/.ivy2/local cache, and applies any necessary patches to build.sc to deal with changes in Mill between the version specified in .config/mill-version that is normally used to build Mill and the HEAD version your assembly was created from. You can then use this standalone assembly to build & re-build your current Mill checkout without worrying about stomping over compiled code that the assembly is using.

This assembly is design to work on bash, bash-like shells and Windows Cmd. If you have another default shell like zsh or fish, you probably need to invoke it with sh ~/mill-release or prepend the file with a proper shebang.

If you want to install into a different location or a different Ivy repository, you can set its optional parameters.

.Install into /tmp [source,bash]

$ ./mill installLocal --binFile /tmp/mill --ivyRepo /tmp/millRepo ... Published 44 modules and installed /tmp/mill

=== Troubleshooting

In case of troubles with caching and/or incremental compilation, you can always restart from scratch removing the out directory:

[source,bash]

os.remove.all -rf out/

== Project Layout

The Mill project is organized roughly as follows:

=== Core modules that are included in the main assembly

These are general lightweight and dependency-free: mostly configuration & wiring of a Mill build and without the heavy lifting.

Heavy lifting is delegated to the worker modules (described below), which the core modules resolve from Maven Central (or from the local filesystem in dev) and load into isolated classloaders.

=== Worker modules that are resolved from Maven Central

These modules are where the heavy-lifting happens, and include heavy dependencies like the Scala compiler, Scala.js optimizer, etc.. Rather than being bundled in the main assembly & classpath, these are resolved separately from Maven Central (or from the local filesystem in dev) and kept in isolated classloaders.

This allows a single Mill build to use multiple versions of e.g. the Scala.js optimizer without classpath conflicts.

=== Contrib modules

These are modules that help integrate Mill with the wide variety of different tools and utilities available in the JVM ecosystem.

These modules are not as stringently reviewed as the main Mill core/worker codebase, and are primarily maintained by their individual contributors. These are maintained as part of the primary Mill Github repo for easy testing/updating as the core Mill APIs evolve, ensuring that they are always tested and passing against the corresponding version of Mill.

== Compatibility & Stability

Mill maintains backward binary compatibility for each major version (major.minor.point), enforced with Mima, for the following packages:

Other packages like mill.runner, mill.bsp, etc. are on the classpath but offer no compatibility guarantees.

Currently, Mill does not offer compatibility guarantees for mill.contrib packages, although they tend to evolve slowly. This may change over time as these packages mature over time.

== Project Maintenance

=== Pull Requests

=== Commit Messages

// tag::changelog[] == Changelog ifndef::link-github[] :link-github: https://github.com/com-lihaoyi/mill endif::[] :link-compare: {link-github}/compare :link-pr: {link-github}/pull :link-issue: {link-github}/issues :link-milestone: {link-github}/milestone // find-replace-regex: https://github.com/com-lihaoyi/mill/pull/(\d*) -> {link-pr}/$1[#$1]

[#0-11-8] === 0.11.8 - 2024-06-21 :version: 0.11.8 :milestone-name: 0.11.8 :milestone: 93 :prev-version: 0.11.7

Changes since {prev-version}:

New features

Fixes and Improvements

Updates and internal changes

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-11-7] === 0.11.7 - 2024-02-05 :version: 0.11.7 :milestone-name: 0.11.7 :milestone: 91 :prev-version: 0.11.6

Changes since {prev-version}:

New features

Fixes and Improvements

Updates and internal changes

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-11-6] === 0.11.6 - 2023-11-21 :version: 0.11.6 :milestone-name: 0.11.6 :milestone: 90 :prev-version: 0.11.5

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-11-5] === 0.11.5 - 2023-10-04 :version: 0.11.5 :milestone-name: 0.11.5 :milestone: 89 :prev-version: 0.11.4

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-11-4] === 0.11.4 - 2023-09-19 :version: 0.11.4 :milestone-name: 0.11.4 :milestone: 88 :prev-version: 0.11.3

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-11-3] === 0.11.3 - 2023-09-17 :version: 0.11.3 :milestone-name: 0.11.3 :milestone: 87 :prev-version: 0.11.2

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-11-2] === 0.11.2 - 2023-08-28 :version: 0.11.2 :milestone-name: 0.11.2 :milestone: 86 :prev-version: 0.11.1

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-11-1] === 0.11.1 - 2023-06-23 :version: 0.11.1 :milestone-name: 0.11.1 :milestone: 85 :prev-version: 0.11.0

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-11-0] === 0.11.0 - 2023-06-06 :version: 0.11.0 :milestone-name: 0.11.0 :milestone: 84 :prev-version: 0.11.0-M11

This release is binary incompatible to {prev-version}.

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

// end::changelog[]

=== Older releases :leveloffset: +1

// tag::changelogOld[]

[#0-11-0-M11] === 0.11.0-M11 - 2023-06-04 :version: 0.11.0-M11 :milestone-name: 0.11.0-M11 :milestone: 83 :prev-version: 0.11.0-M10

This release is binary incompatible to {prev-version}.

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-11-0-M10] === 0.11.0-M10 - 2023-05-24 :version: 0.11.0-M10 :milestone-name: 0.11.0-M10 :milestone: 82 :prev-version: 0.11.0-M9

This release is binary incompatible to {prev-version}.

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-11-0-M9] === 0.11.0-M9 - 2023-05-18 :version: 0.11.0-M9 :milestone-name: 0.11.0-M9 :milestone: 80 :prev-version: 0.11.0-M8

This release is binary incompatible to {prev-version}.

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-11-0-M8] === 0.11.0-M8 - 2023-04-24 :version: 0.11.0-M8 :milestone-name: 0.11.0-M8 :milestone: 79 :prev-version: 0.11.0-M7

This release is binary incompatible to {prev-version}.

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-11-0-M7] === 0.11.0-M7 - 2023-03-30 :version: 0.11.0-M7 :milestone-name: 0.11.0-M7 :milestone: 78 :prev-version: 0.11.0-M6

This release is binary incompatible to {prev-version}.

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-11-0-M6] === 0.11.0-M6 - 2023-03-09 :version: 0.11.0-M6 :milestone-name: 0.11.0-M6 :milestone: 77 :prev-version: 0.11.0-M5

This release is binary incompatible to {prev-version}.

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-11-0-M5] === 0.11.0-M5 - 2023-03-09 :version: 0.11.0-M5 :milestone-name: 0.11.0-M5 :milestone: 76 :prev-version: 0.11.0-M4

This release is binary incompatible to {prev-version}.

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-11-0-M4] === 0.11.0-M4 - 2023-02-10 :version: 0.11.0-M4 :milestone-name: 0.11.0-M4 :milestone: 74 :prev-version: 0.11.0-M3

This release is binary incompatible to {prev-version}.

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-11-0-M3] === 0.11.0-M3 - 2023-01-23 :version: 0.11.0-M3 :milestone-name: 0.11.0-M3 :milestone: 73 :prev-version: 0.11.0-M2

This release is binary incompatible to {prev-version}.

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-11-0-M2] === 0.11.0-M2 - 2023-01-13 :version: 0.11.0-M2 :milestone-name: 0.11.0-M2 :milestone: 72 :prev-version: 0.11.0-M1

This release is binary incompatible to {prev-version}.

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-11-0-M1] === 0.11.0-M1 - 2022-12-17 :version: 0.11.0-M1 :prev-version: 0.10.10 :milestone: 70 :milestone-name: 0.11.0-M1

This release is binary incompatible to {prev-version}.

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-10-15] === 0.10.15 - 2024-01-07 :version: 0.10.15 :milestone-name: 0.10.15 :milestone: 92 :prev-version: 0.10.13

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-10-13] === 0.10.13 - 2023-11-12 :version: 0.10.13 :milestone-name: 0.10.13 :milestone: 81 :prev-version: 0.10.12

Changes since {prev-version}:

This version especially aids the transition from Mill 0.10 to Mill 0.11.

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-10-12] === 0.10.12 - 2023-03-20 :version: 0.10.12 :milestone-name: 0.10.12 :milestone: 75 :prev-version: 0.10.11

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-10-11] === 0.10.11 - 2023-01-24 :version: 0.10.11 :milestone-name: 0.10.11 :milestone: 71 :prev-version: 0.10.10

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-10-10] === 0.10.10 - 2022-12-06 :version: 0.10.10 :prev-version: 0.10.9 :milestone: 69 :milestone-name: 0.10.10

After this release, the main branch is open for development of the next major version of Mill, which is probably 0.11. Further maintenance work will happen in the 0.10.x branch.

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-10-9] === 0.10.9 - 2022-11-10 :version: 0.10.9 :prev-version: 0.10.8 :milestone: 68 :milestone-name: 0.10.9

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-10-8] === 0.10.8 - 2022-10-10 :version: 0.10.8 :prev-version: 0.10.7 :milestone: 67 :milestone-name: 0.10.8

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-10-7] === 0.10.7 - 2022-08-24 :version: 0.10.7 :prev-version: 0.10.6 :milestone: 66 :milestone-name: 0.10.7

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-10-6] === 0.10.6 - 2022-08-24 :version: 0.10.6 :prev-version: 0.10.5 :milestone: 64 :milestone-name: 0.10.6

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-10-5] === 0.10.5 - 2022-07-01 :version: 0.10.5 :prev-version: 0.10.4 :milestone: 63 :milestone-name: 0.10.5

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-10-4] === 0.10.4 - 2022-05-06 :version: 0.10.4 :prev-version: 0.10.3 :milestone: 62 :milestone-name: 0.10.4

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-10-3] === 0.10.3 - 2022-04-11 :version: 0.10.3 :prev-version: 0.10.2 :milestone: 61 :milestone-name: 0.10.3

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-10-2] === 0.10.2 - 2022-03-18 :version: 0.10.2 :prev-version: 0.10.1 :milestone: 60 :milestone-name: 0.10.2

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-10-1] === 0.10.1 - 2022-03-08 :version: 0.10.1 :prev-version: 0.10.0 :milestone: 59 :milestone-name: 0.10.1

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-10-0] === 0.10.0 - 2022-01-14 :version: 0.10.0 :prev-version: 0.10.0-M5 :milestone: 57 :milestone-name: 0.10.0

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-10-0-M5] === 0.10.0-M5 - 2021-12-18 :version: main :prev-version: 0.10.0-M4 :milestone: 55 :milestone-name: 0.10.0-M5

This release breaks binary compatibility for external plugins.

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-10-0-M4] === 0.10.0-M4 - 2021-11-08 :version: 0.10.0-M4 :prev-version: 0.10.0-M3 :milestone: 54 :milestone-name: 0.10.0-M4

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-1-0-M3] === 0.10.0-M3 - 2021-09-29 :version: 0.10.0-M3 :prev-version: 0.10.0-M2 :milestone: 53 :milestone-name: 0.10.0-M3

This is a milestone release. This release breaks binary compatibility for external plugins build for mill 0.9.x. The API is suspected to change before a 0.10.0 releae.

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-10-0-M2] === 0.10.0-M2 - 2021-09-17 :version: 0.10.0-M2 :prev-version: 0.9.9 :milestone: 51 :milestone-name: 0.10.0-M2

This is a early milestone release. This release breaks binary compatibility for external plugins build for mill 0.9.x. The API is suspected to change before a 0.10.0 releae.

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-9-12] === 0.9.12 - 2022-01-07 :version: 0.9.12 :prev-version: 0.9.11 :milestone: 58 :milestone-name: 0.9.12

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-9-11] === 0.9.11 - 2021-12-15 :version: 0.9.11 :prev-version: 0.9.10 :milestone: 56 :milestone-name: 0.9.11

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-9-10] === 0.9.10 - 2021-11-13 :version: 0.9.10 :prev-version: 0.9.9 :milestone: 52 :milestone-name: 0.9.10

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-9-9] === 0.9.9 - 2021-07-15 :version: 0.9.9 :prev-version: 0.9.8 :milestone: 50 :milestone-name: 0.9.9

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-9-8] === 0.9.8 - 2021-05-27 :version: 0.9.8 :prev-version: 0.9.7 :milestone: 49 :milestone-name: 0.9.8

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-9-7] === 0.9.7 - 2021-05-14 :version: 0.9.7 :prev-version: 0.9.6 :milestone: 48 :milestone-name: 0.9.7

Changes since {prev-version}:

For details refer to {link-milestone}/{milestone}?closed=1[milestone {milestone-name}] and the {link-compare}/{prev-version}...{version}[list of commits].

[#0-9-6] === 0.9.6 - 2021-04-03

The mill project home and repository has been moved to https://github.com/com-lihaoyi/mill.

For details refer to {link-milestone}/47?closed=1[milestone 0.9.6] and the {link-compare}/0.9.5...0.9.6[list of commits].

[#0-9-5] === 0.9.5 - 2021-01-26

For details refer to {link-milestone}/46?closed=1[milestone 0.9.5] and the link:{link-compare}/0.9.4...0.9.5[list of commits].

[#0-9-4] === 0.9.4 - 2020-12-21

For details refer to {link-milestone}/45?closed=1[milestone 0.9.4] and the {link-compare}/0.9.3...0.9.4[list of commits].

[#0-9-3] === 0.9.3 - 2020-11-26

(We also tagged 0.9.0, 0.9.1, and 0.9.2, but due to release difficulties, we ask you not to use them.)

For details refer to {link-milestone}/44?closed=1[milestone 0.9.3] and the {link-compare}/0.8.0...0.9.3[list of commits].

[#0-8-0] === 0.8.0 - 2020-07-20

For details refer to {link-milestone}/43?closed=1[milestone 0.8.0] and the {link-compare}/0.7.4...0.8.0[list of commits].

[#0-7-4] === 0.7.4 - 2020-07-03

For details refer to {link-milestone}/42?closed=1[milestone 0.7.4] and the {link-compare}/0.7.3...0.7.4[list of commits].

[#0-7-3] === 0.7.3

For details refer to {link-milestone}/41?closed=1[milestone 0.7.3] and the {link-compare}/0.7.2...0.7.3[list of commits].

[#0-7-2] === 0.7.2 - 2020-05-19

For details refer to {link-milestone}/40?closed=1[milestone 0.7.2] and the {link-compare}/0.7.1...0.7.2[list of commits].

[#0-7-1] === 0.7.1 - 2020-05-17

For details refer to {link-milestone}/39?closed=1[milestone 0.7.1] and the {link-compare}/0.7.0...0.7.1[list of commits].

[#0-7-0] === 0.7.0 - 2020-05-15

For details refer to {link-milestone}/37?closed=1[milestone 0.7.0] and the {link-compare}/0.6.3...0.7.0[list of commits].

[#0-6-3] === 0.6.3 - 2020-05-10

For details refer to {link-milestone}/38?closed=1[milestone 0.6.3] and the {link-compare}/0.6.2...0.6.3[list of commits].

[#0-6-2] === 0.6.2 - 2020-04-22

For details refer to {link-milestone}/36?closed=1[milestone 0.6.2] and the {link-compare}/0.6.1...0.6.2[list of commits].

[#0-6-1] === 0.6.1 - 2020-02-24

For details refer to {link-milestone}/35?closed=1[milestone 0.6.1] and the {link-compare}/0.6.0...0.6.1[list of commits].

[#0-6-0] === 0.6.0 - 2020-01-20

For details refer to {link-milestone}/34?closed=1[milestone 0.6.0] and the {link-compare}/0.5.9...0.6.0[list of commits].

[#0-5-9] === 0.5.9 - 2020-01-14

For details refer to the {link-compare}/0.5.7...0.5.9[list of commits].

Version 0.5.8 has some binary compatibility issues in requests-scala/geny and should not be used.

=== 0.5.7 - 2019-12-28

For details refer to {link-milestone}/33?closed=1[milestone 0.5.7] and the {link-compare}/0.5.5...0.5.7[list of commits].

[#0-5-6] [#0-5-5] === 0.5.5 / 0.5.6 - 2019-12-20

(we skipped version 0.5.4 as we had some publishing issues)

For details refer to {link-milestone}/32?closed=1[milestone 0.5.5] and the {link-compare}/0.5.3...0.5.5[list of commits].

[#0-5-3] === 0.5.3 - 2019-12-07

For details refer to {link-milestone}/31?closed=1[milestone 0.5.3] and the {link-compare}/0.5.2...0.5.3[list of commits].

[#0-5-2] === 0.5.2 - 2019-10-17

For details refer to {link-milestone}/30?closed=1[milestone 0.5.2] and the {link-compare}/0.5.1...0.5.2[list of commits].

[#0-5-1] === 0.5.1 - 2019-09-05

For details refer to {link-milestone}/29?closed=1[milestone 0.5.1] and the {link-compare}/0.5.0...0.5.1[list of commits].

[#0-5-0] === 0.5.0 - 2019-08-08

[#0-4-2] === 0.4.2 - 2019-06-30

[#0-4-1] === 0.4.1 - 2019-06-13

[#0-4-0] === 0.4.0 - 2019-05-20

[#0-3-6] === 0.3.6 - 2019-01-17

[#0-3-5] === 0.3.5 - 2018-11-18

[#0-3-4] === 0.3.4 - 2018-11-06

[#0-3-3] === 0.3.3 - 2018-11-02

[#0-3-2] === 0.3.2 - 2018-10-19

[#0-3-0] === 0.3.0 - 2018-10-19

[#0-2-8] === 0.2.8 - 2018-09-21

[#0-2-7] === 0.2.7 - 2018-08-27

[#0-2-6] === 0.2.6 - 2018-07-30

[#0-2-5] === 0.2.5 - 2018-07-22

[#0-2-4] === 0.2.4 - 2018-07-07

[#0-2-3] === 0.2.3 - 2018-06-03

[#0-2-2] === 0.2.2 - 2018-05-20

[#0-2-0] === 0.2.0 - 2018-04-10

[#0-1-7] === 0.1.7 - 2018-03-26

[0-1-6] === 0.1.6 - 2018-03-13

[#0-1-5] === 0.1.5 - 2018-03-13

[#0-1-4] === 0.1.4 - 2018-03-04

[#0-1-3] === 0.1.3 - 2018-02-26

[#0-1-2] === 0.1.2 - 2018-02-25

[#0-1-1] === 0.1.1 - 2018-02-19

[#0-1-0] === 0.1.0 - 2018-02-18

// end::changelogOld[]