Packages
nerves
1.9.2
1.15.0
1.14.3
1.14.2
1.14.1
1.14.0
1.13.2
1.13.1
1.13.0
1.12.0
1.11.3
1.11.2
1.11.1
1.11.0
1.10.5
1.10.4
1.10.3
1.10.2
1.10.1
1.10.0
1.9.3
1.9.2
retired
1.9.1
1.9.0
1.8.0
1.7.17
1.7.16
1.7.15
1.7.14
retired
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
retired
1.7.1
retired
1.7.0
retired
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.1
1.2.0
1.1.1
1.1.0
1.0.1
1.0.0
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.11.0
0.10.1
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.3
0.8.2
0.8.1
0.8.0
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.4.0-rc.0
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
Craft and deploy bulletproof embedded software
Retired package: Release invalid - Artifact downloads fail. Upgrade to v1.9.3
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/firmware.metadata.ex
defmodule Mix.Tasks.Firmware.Metadata do
@shortdoc "Print out metadata for the current firmware"
@moduledoc """
This task calls `fwup` to report the firmware stored in the currently built
firmware bundle. No firmware is built, so this task will fail if the firmware
bundle doesn't exist.
Note: Rebuilding firmware will almost certainly change the UUID if the build
is not [reproducible](https://reproducible-builds.org/).
## Command line options
* `--firmware <name>` - (Optional) The path to the fw file to use.
Defaults to `<image_path>/<otp_app>.fw`
## Examples
```
$ mix firmware.metadata
meta-product="my_firmware"
meta-description="A description"
meta-version="1.0.0"
meta-author="me"
meta-platform="rpi"
meta-architecture="arm"
meta-creation-date="2020-01-31T21:15:25Z"
meta-uuid="62f80587-ce82-59c4-4200-9c92df9849fd"
```
"""
use Mix.Task
import Mix.Nerves.Utils
alias Mix.Nerves.Preflight
@switches [firmware: :string]
@aliases [i: :firmware]
@impl Mix.Task
def run(argv) do
Preflight.check!()
debug_info("Nerves Metadata")
{opts, _argv, _} = OptionParser.parse(argv, switches: @switches, aliases: @aliases)
target = mix_target()
_ = check_nerves_system_is_set!()
_ = check_nerves_toolchain_is_set!()
fw = firmware_file(opts)
unless File.exists?(fw) do
Mix.raise("Firmware for target #{target} not found at #{fw} run `mix firmware` to build")
end
shell("fwup", ["-m", "-i", fw])
end
@spec firmware_file(keyword()) :: String.t()
def firmware_file(opts) do
with {:ok, fw} <- Keyword.fetch(opts, :firmware),
fw <- Path.expand(fw),
true <- File.exists?(fw) do
fw
else
false ->
fw = Keyword.get(opts, :firmware)
Mix.raise("The firmware file #{fw} does not exist")
_ ->
Nerves.Env.firmware_path()
end
end
end