Packages
nerves
0.9.3
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
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/nerves.artifact.get.ex
defmodule Mix.Tasks.Nerves.Artifact.Get do
use Mix.Task
alias Nerves.Artifact
alias Nerves.Artifact.{Cache, Resolver}
@moduledoc """
Fetch the artifacts from one of the artifact_sites
This task is typically called as part of the
Nerves.Bootstrap aliases during `mix deps.get`
You can also call into this task by calling
`mix nerves.deps.get`
# Example
$ mix nerves.artifact.get
"""
@shortdoc "Nerves get artifacts"
def run(opts) do
Mix.shell.info "Resolving Nerves artifacts..."
Nerves.Env.packages()
|> Enum.each(&get(&1.app, opts))
end
def get(app, _opts) do
case Nerves.Env.package(app) do
%Nerves.Package{type: type} when type in [:toolchain_platform, :system_platform] ->
:noop
%Nerves.Package{} = pkg ->
case Artifact.Cache.get(pkg) do
nil ->
sites = Artifact.expand_sites(pkg)
get_artifact(pkg, sites)
_cache_path ->
Nerves.Utils.Shell.success(" Cached #{app}")
end
_ ->
Nerves.Utils.Shell.warn(" Skipping #{app}")
end
end
defp get_artifact(pkg, []), do:
Nerves.Utils.Shell.warn(" Skipping #{pkg.app} (missing url)")
defp get_artifact(pkg, sites) do
Nerves.Utils.Shell.success(" Resolving #{pkg.app}")
case Resolver.get(pkg, sites) do
{:ok, archive} ->
checksum = Artifact.checksum(pkg)
if checksum == Nerves.Artifact.checksum(pkg) do
Cache.put(pkg, archive)
Nerves.Utils.Shell.success(" => Success")
else
Nerves.Utils.Shell.error(" => Error: Checksums do not match")
end
{:error, reason} ->
Nerves.Utils.Shell.error(" => #{reason}")
end
end
end