CHANGELOG.md

# Changelog

## 1.10.4

* New project generator updates
  * Update dependency versions to latest

## 1.10.3

* New project generator updates
  * Update dependency versions to latest
  * Add NervesMOTD to the `iex.exs`
  * Add more comments to commonly edited locations in the `mix.exs`

## 1.10.2

* New project generator updates
  * Strip everything but docs with `MIX_ENV=dev`

    Since most users don't use debug symbols, strip them out of the beams
    even for dev builds. This keeps docs, though. Here's are some firmware
    sizes to see the effect:

    circuits_quickstart_unstripped.fw 43597619
    circuits_quickstart_docs.fw 33595640
    circuits_quickstart_stripped.fw 33016963

    As you can see, this saves ~10 MB and retains docs.

## 1.10.1

* New project generator updates
  * Add `config/host.exs` so that there's a more obvious location for host-only
    configuration
  * Add `rootfs_overlay/etc/iex.exs` to the list of files to format with `mix
    format`

## 1.10.0

* New project generator updates
  * Added `osd32mp1` to default targets in new project generator.
    See [nerves_system_osd32mp1](https://github.com/nerves-project/nerves_system_osd32mp1) for system information.
  * Update formatting to more closely match Elixir 1.11's new project generator
  * Simplify the Nerves/Mix integration (now only an update to `config.exs`)
  * Bump Nerves to `~> 1.7.0`
  * Bump Shoehorn to `~> 0.7.0`
  * Disable busy waiting in the BEAM by default.

## 1.9.0

* New project generator updates
  * Bump [NervesPack to 0.4](https://hexdocs.pm/nerves_pack/changelog.html#v0-4-0)
    which drops `:nerves_firwmare_ssh` in favor of `:nerves_ssh` and
    `:ssh_subsystem_fwup` for access and updates.
  * Bump Nerves to `~> 1.6.3`
  * Bump NervesRuntime to `~> 0.11.3`
  * Bump RingLogger to `~> 0.8.1`

## 1.8.1

* New project generator updates
  * Update systems to latest versions.
  * Add an example for overriding erlinit options using Mix config.

## 1.8.0

* New project generator updates
  * Bump Nerves to 1.6 and update systems.
  * Default to use `--nerves-pack`.
  * Remove options for `--init-gadget`.

## 1.7.1

* Enhancements
  * Updated Elixir 1.10 deprecated function calls.

## 1.7.0

* Enhancements
  * Improved support for reproducible builds in new projects by setting
    `source_date_epoch`. Existing projects can add this to the `:nerves` config.

    For example:

    ```elixir
    config :nerves, source_date_epoch: "1577467691"
    ```

  * Added support for generating new projects using `nerves_pack` instead
    of `nerves_init_gadget`. See [nerves_pack](https://github.com/nerves-project/nerves_pack) for more information.

    For example:

    ```bash
    mix nerves.new my_app --nerves-pack
    ```

## 1.6.3

* Enhancements
  * Don't allow projects to be named `nerves`. Those won't work anyway.

## 1.6.2

* Enhancements
  * Synchronize new project files to better match the versions from `mix new`

## 1.6.1

* Enhancements
  * Added `rpi4` to default targets in new project generator.
    See [nerves_system_rpi4](https://github.com/nerves-project/nerves_system_rpi4) for system information.
  * Update release config to only strip beams for `:prod` firmware.

* Bug fixes
  * Fix `--cookie` in new project generator for overriding the cookie.

## 1.6.0

* Enhancements
  * Updated new project generator to use Elixir ~> 1.9

## 1.5.3

* Bug fixes
  * Change distillery to ~> 2.0 in the new project generator.

## 1.5.2

* Bug fixes
  * Add distillery ~> 2.1 to the new project generator.
  * Lock down the `nerves` dependency to ~> 1.4.5 in new projects.

## 1.5.1

* Bug fixes
  * Compile distillery before nerves when included as an optional dependency.

## 1.5.0

* Enhancements
  * New projects include [nerves_init_gadget](https://hex.pm/packages/nerves_init_gadget) by default.
    If you want a minimal project that does not include `nerves_init_gadget`,
    pass `--no-init-gadget`.

## 1.4.3

* Enhancements
  * Create mix.exs files with `build_embedded: true` so that build products
    aren't stored in the source tree. This helps fix a source of confusion when
    switching targets and C/C++ build products don't get rebuilt.
  * Improve the missing ssh key error message in config.exs

## 1.4.2

* Enhancements
  * Added rpi3a to default supported targets list. See [nerves_system_rpi3a](https://github.com/nerves-project/nerves_system_rpi3a).
  * Bumped the minimum versions from 1.5 to 1.6.
  * Improved error message when trying to create new projects that support
    Elixir ~> 1.8 while running a version that is < 1.8.
  * Set required bootstrap archive version to ~> major.minor of the version of
    `nerves_bootstrap` that generated the new project.

## 1.4.1

* Bug fixes
  * Configure nerves_bootstrap to support Elixir ~> 1.7.
    Use ~> 1.8 for new projects.

## 1.4.0

Version v1.4.0 adds support for Elixir 1.8's new built-in support for mix
targets. In Nerves, the `MIX_TARGET` was used to select the appropriate set of
dependencies for a device. This lets you switch between building for different
boards and your host. Elixir 1.8 pulls this support into `mix` and lets you
annotate dependencies for which targets they should be used.

See the [project update guide](https://hexdocs.pm/nerves/updating-projects.html#updating-from-v1-3-x-to-v1-4-x) to learn how to migrate your project.

* Enhancements
  * New projects are generated for Elixir 1.8.
  * Support non-RSA SSH keys in new projects.

## 1.3.4

* New project generator fixes
  * Enable `multi_time_warp` mode by default. This fixes an issue where the
    Erlang system clock wouldn't get updated after the clock was set.

## 1.3.3

* New project generator enhancements
  * Update `ring_logger` to `~> 0.6`.
  * Add `toolshed` `~> 0.2` and update `rootfs_overlay/etc/iex.exs`
  * Enable Erlang Distribution when `Mix.env() != :prod`
  * Remove `ev3` from default supported target list
  * Update `bbb` system version requirement to `~> 2.0`
  * Update all other system version requirements to `~> 1.5`

## 1.3.2

* Enhancements
  * Updated docs for `mix nerves.new`.

* Bug fixes
  * Invoke Nerves environment when calling `deps.compile`.
  * Display warning instead of raising when calling `mix run`.

## 1.3.1

* Enhancements
  * Use `:dhcpd` instead of `:linklocal` for `nerves_init_gadget` defaults.

## 1.3.0

* New features
  * Enable `heart` in the new project generator. This engages both a
    software-based watchdog (Erlang's `heart` feature) and a hardware-based one
    on systems that support it. If the Erlang VM becomes unresponsive, one of
    the watchdogs will reboot the processor. See the Erlang `heart`
    documentation for changing timeouts and adding callbacks to your
    application.
  * Enable `build_embedded`. This ensures that C build products are separated
    based on target and prevents many causes of x86 build products ending up
    on ARM targets unintentionally.

## 1.2.1

* Bug fixes
  * Add RingLogger to all deps in new project generator.
    This fixes an issue that causes new projects generated with `--init-gadget`
    to crash on boot running on the host.

## 1.2.0

Add support for generating new projects with `nerves_init_gadget`.
To generate a new project with `nerves_init_gadget` included,
pass `--init-gadget` to `mix nerves.new`

For example:

  mix nerves.new my_app --init-gadget

## 1.1.0

This release updates the new project generator to create projects that will work
with Elixir 1.7 and Distillery 2.0.

* Enhancements
  * Update new project generator to support `shoehorn` v0.4.
  * Bump minimum deps to latest versions.

## v1.0.1

* Enhancements
  * Update new project generator to target 1.0 systems

## v1.0.0

* Bug Fixes
  * Rename `provider` to `build_runner`. Fixes issues with running
    `mix nerves.system.shell` and `mix nerves.env --info`

## v1.0.0-rc.4

* Updates
  * New project generator no longer conditionally defines `application/0` in
    `mix.exs` depending on target. It is recommended to conditionally choose
    the main supervisors children instead.
  * New project generator moves the dependency `shoehorn` to be included for
    both `host` and `target` environments.

## v1.0.0-rc.3

* Updates
  * Various new project generator code format updates. Include `:runtime_tools`
    in `:extra_applications`.
* Bug fixes
  * Only display Nerves environment helper text when the Nerves environment
    is loaded. Fixes issues with running mix commands like `mix format -` that
    require the I/O to remain clean.

## v1.0.0-rc.2

* Updates
  * Remove `build_embedded` from the mix.exs since it was unnecessary
  * Fix update check in `mix local.nerves`
  * Various changes to align new project generator with the one in Elixir 1.6.
  * Add rootfs_overlay directory and populate it with an iex.exs to load the
    nerves_runtime IEX helpers. This replaces a common manual process of doing
    this or something similar afterwards.
  * Add a commented out reference for enabling Erlang's heartbeat monitor

## v1.0.0-rc.1

* Bug fixes
  * Various `mix format` updates to the template
  * Update template so that projects use v1.0.0-rc system releases so that they
    compile
  * Fix archive update check logic

## v1.0.0-rc.0

Nerves no longer automatically compiles any `nerves_package` that is missing
it's pre-compiled artifact. This turned out to rarely be desired and caused
unexpectedly long compilation times when things like the Linux kernel or gcc
got compiled.

When a pre-compiled artifact is missing, Nerves will now tell you what your
options are to resolve this. It could be retrying `mix deps.get` to download it
again. If you want to force compilation to happen, add a `:nerves` option for
the desired package in your top level project:

```elixir
  {:nerves_system_rpi0, "~> 1.0-rc", nerves: [compile: true]}
```

## v0.8.1

* Bug Fixes
  * `deps.get` and `deps.update` aliases should always be added to the
    project regardless of target.

## v0.8.0

The v0.7.x and earlier releases only required two aliases in your `mix.exs` to
pull in the Nerves enhancements to `mix.exs`. This releases adds more aliases.
Rather than requiring your `mix.exs` file to be updated if the Nerves alias
hooks change in the future, we recommend updating your `mix.exs` as follows:

```elixir
  # mix.exs

  def project do
    [
      # ...
      aliases: ["loadconfig": [&bootstrap/1]],
    ]
  end

  # Starting nerves_bootstrap pulls in the Nerves hooks to mix, but only
  # if the MIX_TARGET environment variable is set.
  defp bootstrap(args) do
    Application.start(:nerves_bootstrap)
    Mix.Task.run("loadconfig", args)
  end
```

This release has the following changes:

* Enhancements
  * `precompile` will compile all Nerves packages instead of only the system and
    its children.
  * Calling `run` while `MIX_TARGET` is set will raise an exception for trying
    to run cross compiled code on the host.
  * `Application.start(:nerves_bootstrap)` will attempt to add aliases to the
    mix project on the top of the stack if `MIX_TARGET` is set.

## v0.7.1

* Enhancements
  * Added alias for `deps.update` to append `nerves.deps.get` to fetch
    artifacts.

## v0.7.0

* Enhancements
  * Added Mix task `nerves.deps.get`
  * `nerves_bootstrap` will check for updates when `nerves.deps.get` is called.
  * Added `Nerves.Bootstrap.add_aliases/1`
    This helper function ensures that your project has the required Nerves
    mix aliases defined and in the correct execution order. The function takes
    the existing aliases as a keyword list and injects the required Nerves aliases.
    You will need to update your `mix.exs` target aliases to use this version of
    `nerves_bootstrap` like this:

    ```elixir
    defp aliases(_target) do
      [
        # Add custom mix aliases here
      ]
      |> Nerves.Bootstrap.add_aliases()
    end
    ```

    You should also update your required dependency for nerves to
    `{:nerves, "~> 0.9", runtime: false}`
* Bug Fixes
  * disable precompiler when calling `mix nerves.clean` to prevent having to
    build the package so we can clean it.
  * Fixes issue where project dependencies that contain calls to `System.get_env`
    in their config or mix file or rebar deps that have `rebar-config.script`
    overrides that make `os:getenv` calls were not being configured for the
    cross compile environment.

## v0.6.4

* Enhancements
  * Changed update location from Github to hex.pm
  * Fixed compiler warning
  * Synchronize new project template with Elixir 1.6 updates (includes formatter)

## v0.6.3

* Enhancements
  * Removed unsupported systems from default targets and added x86_64.
  * Moved to independent hex package.

## v0.6.2

* Enhancements
  * [mix nerves.new] Use the new `rootfs_overlay` option
    rather than the deprecated `rootfs_additions` option and also recommend
    placing the relevant files in a top-level `rootfs_overlay` directory in the
    project root rather than in `config/rootfs_additions`.
  * [mix nerves.new] system dependencies are appended as a list so there is a
    clear location for where system specific dependencies are added.
  * [mix nerves.new] moved the config for bootloader above so that it is
    configured before importing target specific configuration.

## v0.6.1

* Enhancements
  * Improved error messages in `nerves.system.shell` Mix task. In particular,
    it now reminds you to set `MIX_TARGET`.
* Bug Fixes
  * The `nerves.env` Mix task (used internally by Nerves) now checks that your
    deps have been fetched before trying to load.
  * Fix extraneous whitespace in `mix.exs` generated by `mix nerves.new`

## v0.6.0

* Enhancements
  * New `nerves.system.shell` Mix task, which provides a consistent way to
    configure a Buildroot-based Nerves system on both OSX and Linux. This
    replaces the `nerves.shell` Mix task that was provided by the `nerves`
    dependency, which had not been fully implemented.
  * Add an optional `--disabled` flag to the `nerves.env` Mix task, which allows
    the Nerves environment to be compiled and loaded in a disabled state so that
    it doesn't try to actually cross-compile all the dependencies at load time.
    This is primarily used so that Mix tasks like `nerves.system.shell` can run
    on the host without having to wait for dependencies to compile when they
    won't even be used.
  * Related to the previous change, the `nerves.precompile` task does not try to
    compile the toolchain and system when `Nerves.Env` is loaded in a disabled
    state.

## v0.5.1

* Bug Fixes
  * System dependencies were not being built in order when system is the parent project

## v0.5.0

* Enhancements
  * Pass +Bc in vm.args to avoid accidental CTRL+C
  * Update deps and loosen version requirements
  * Include `bootloader` in new projects
* Bug Fixes
  * Choose the right compiler when parent project is a Nerves system package

## v0.4.0

* Enhancements
  * nerves.new
    * lock files are split by target
    * Target dependencies are explicitly broken out in mix.exs through passing
      `--target` to the generator. Defaults to declaring all officially supported
      Nerves Targets.
    * A default cookie is generated and placed in the vm.args. the cookie can
      be set by passing `--cookie`

## v0.3.1

* Bug Fixes
  * Added support for OTP 20: Fixes issue with RegEx producing false positives.

## v0.3.0

* Enhancements
  * nerves.new
    * defaults to Host target env
    * includes nerves_runtime
    * prompt to install deps and run nerves.release.init
    * unset MIX_TARGET when generating a new project
* Bug Fixes
  * removed rel/.gitignore from new project generator

## v0.2.2

* Enhancements
  * Added `mix local.nerves` for updating the bootstrap archive

## v0.2.1

* Bug Fixes
  * update nerves dep in new project generator to 0.4.0
* Enhancements
  * Additional debug output when setting `NERVES_DEBUG=1`
  * Ability to output information about the loaded Nerves env via `mix nerves.env --info`

## v0.2.0

* Enhancements
  * Support for nerves_package compiler

## v0.1.4

* Bug Fixes
  * Do not warn on import Supervisor.Spec
  * Silence alias location messages unless NERVES_DEBUG=1
* Enhancements
  * Support for Elixir 1.3.2

## v0.1.3

* Enhancements
  * Support for elixir ~> 1.3.0-rc.0