Packages
nerves
1.7.14
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 - Causes gcc compiler errors when using TARGET_GCC_FLAGS feature
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 false
@impl true
def run(opts) do
Mix.shell().info("Checking for prebuilt Nerves artifacts...")
Nerves.Env.packages()
|> Enum.each(&get(&1.app, opts))
end
@doc false
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 ->
# Check to see if the package path is set in the environment
if Nerves.Artifact.env_var?(pkg) do
path = System.get_env(Nerves.Artifact.env_var(pkg))
Nerves.Utils.Shell.success(" Env #{app}")
Nerves.Utils.Shell.success(" #{path}")
else
# Check the cache
case Artifact.Cache.get(pkg) do
nil ->
get_artifact(pkg)
cache_path ->
Nerves.Utils.Shell.success(" Found #{app} in cache")
Nerves.Utils.Shell.info(" #{cache_path}")
end
end
_ ->
Nerves.Utils.Shell.warn(" Skipping #{app}")
end
end
defp get_artifact(pkg) do
archive = Artifact.download_path(pkg)
Nerves.Utils.Shell.success(" Checking #{pkg.app}...")
with true <- File.exists?(archive),
:ok <- Nerves.Utils.File.validate(archive) do
Nerves.Utils.Shell.info(" => Trying #{archive}")
put_cache(pkg, archive)
else
_error ->
File.rm(archive)
resolvers = Artifact.expand_sites(pkg)
get_artifact(pkg, resolvers)
end
end
defp get_artifact(pkg, []), do: Nerves.Utils.Shell.warn(" Skipping #{pkg.app}")
defp get_artifact(pkg, resolvers) do
case Resolver.get(resolvers, pkg) do
{:ok, archive} ->
put_cache(pkg, archive)
{:error, reason} ->
Nerves.Utils.Shell.error(" => Prebuilt #{pkg.app} not found (#{reason})")
end
end
defp put_cache(pkg, archive) do
checksum = Artifact.checksum(pkg)
if checksum == Nerves.Artifact.checksum(pkg) do
Cache.put(pkg, archive)
Nerves.Utils.Shell.success(" => Success")
:ok
else
Nerves.Utils.Shell.error(" => Error: Checksums do not match")
:error
end
end
end