diff --git a/.gitignore b/.gitignore index e6be241a..c85c06dc 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,10 @@ bundle.js erl_crash.dump ttb_last_config cover + +Makefile.bac +# This isnt a normal Elixir project, so a mix.lock file shouldn't exist. +mix.lock + +# releases generated by the Makefile +/release-* diff --git a/BUILDING.md b/BUILDING.md index f29d36e4..58db39ce 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -57,14 +57,11 @@ mix credo --strict ```bash cd ~/farmbot/os # this should set up the environment needed to build the system -MIX_ENV=prod mix farmbot.system - -# If that gives an error try this: -git clone https://github.com/nerves-project/nerves_system_br deps/nerves_system_br -# then try again. +export NERVES_TARGET= +make create-build-${NERVES_TARGET} # Now that the environment is set up you should change into the new dir it told you too. -cd apps/NERVES_SYSTEM_* +cd apps/NERVES_SYSTEM_${NERVES_TARGET} # from this dir we have a few different things we can configure in buildroot. # To add/remove linux packages. @@ -94,15 +91,12 @@ make # on a core i7, 32 gigs or ram, nvme ssd machine, it takes about 15-20 minutes depending on if ccache is enabled. # when the rootfs build finishes to use said rootfs in building firmware: -cd ~/farmbot/os -MIX_ENV=prod NERVES_SYSTEM=~/farmbot/os/apps/NERVES_SYSTEM_* mix firmware +cd ../farmbot -# this can then be uploaded to the device. (note you need an ip address) -MIX_ENV=prod NERVES_SYSTEM=~/farmbot/os/apps/NERVES_SYSTEM_* mix firmware --upload +mix firmware +# to burn to an sdcard. (this requires sudo) +mix firmware.burn -# or burned -MIX_ENV=prod NERVES_SYSTEM=~/farmbot/os/apps/NERVES_SYSTEM_* mix firmware -MIX_ENV=prod bash scripts/burn.sh ``` ## Porting to a New System diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f09118e..93fe7412 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,11 @@ # 2.1.9 * changed folder structure around * moved farmbot_auth and farmbot_configurator back into an umbrella application -* begin migration to CeleryScript for all the things \ No newline at end of file +* begin migration to CeleryScript for all the things +* Multi Platform support +* `Configurator` looks great. thanks @MrChristofferson && @RickCarlino +* Code base was converted to CeleryScript, so it is much more stable +* bot configuration is now based on a single (json) that is shared across platforms/targets + +# 2.1.10 +* a few minor bug fixes to the previous release. diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..a682255f --- /dev/null +++ b/Makefile @@ -0,0 +1,112 @@ +# THIS FILE WAS GENERATED BY `build_makefile.exs` +# c6fe0cd +# Mon Jan 16 11:01:43 2017 -0800 +# backup.-i-want-to-try-something + +default: rpi3 + +dev_env: + export MIX_ENV=dev + +prod_env: + export MIX_ENV=prod + +clean: + $(info Cleaning) + rm -rf apps/NERVES_SYSTEM_* + rm -rf apps/farmbot/_images + rm -rf deps + rm -rf _build + +test: clean dev_env + scripts/run_tests.sh + +## End default portion. + +## begin rpi portion. + +## rpi env +env-rpi: prod_env + export NERVES_TARGET=rpi + +## rpi build +rpi: env-rpi system-rpi firmware-rpi + $(info Building stuff for rpi) + +## rpi create-build +create-build-rpi: + scripts/clone_system.sh rpi + +## rpi system +system-rpi: create-build-rpi + $(info Building Linux System for rpi) + scripts/build_system.sh rpi + +## rpi firmware +firmware-rpi: + $(info Building Firmware for rpi) + scripts/build_firmware.sh rpi + +release-rpi: rpi + scripts/build_release_images.sh rpi 3.0.0-staging + +## end rpi portion. +## begin rpi3 portion. + +## rpi3 env +env-rpi3: prod_env + export NERVES_TARGET=rpi3 + +## rpi3 build +rpi3: env-rpi3 system-rpi3 firmware-rpi3 + $(info Building stuff for rpi3) + +## rpi3 create-build +create-build-rpi3: + scripts/clone_system.sh rpi3 + +## rpi3 system +system-rpi3: create-build-rpi3 + $(info Building Linux System for rpi3) + scripts/build_system.sh rpi3 + +## rpi3 firmware +firmware-rpi3: + $(info Building Firmware for rpi3) + scripts/build_firmware.sh rpi3 + +release-rpi3: rpi3 + scripts/build_release_images.sh rpi3 3.0.0-staging + +## end rpi3 portion. +## begin rpi2 portion. + +## rpi2 env +env-rpi2: prod_env + export NERVES_TARGET=rpi2 + +## rpi2 build +rpi2: env-rpi2 system-rpi2 firmware-rpi2 + $(info Building stuff for rpi2) + +## rpi2 create-build +create-build-rpi2: + scripts/clone_system.sh rpi2 + +## rpi2 system +system-rpi2: create-build-rpi2 + $(info Building Linux System for rpi2) + scripts/build_system.sh rpi2 + +## rpi2 firmware +firmware-rpi2: + $(info Building Firmware for rpi2) + scripts/build_firmware.sh rpi2 + +release-rpi2: rpi2 + scripts/build_release_images.sh rpi2 3.0.0-staging + +## end rpi2 portion. + +## Release will build all the systems. +release: clean release-rpi release-rpi3 release-rpi2 \ No newline at end of file diff --git a/apps/farmbot/README.md b/apps/farmbot/README.md deleted file mode 100644 index e69de29b..00000000 diff --git a/apps/farmbot/make_images.sh b/apps/farmbot/make_images.sh deleted file mode 100755 index 940639c5..00000000 --- a/apps/farmbot/make_images.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash - -VERSION=`cat VERSION` -echo "MAKING IMAGES!" -echo "VERSION: $VERSION" -echo "NERVES_TARGET: $NERVES_TARGET" -echo "" - -echo "Cleaning previous builds" -rm -rf _images/all/*$NERVES_TARGET-$VERSION* -rm -rf _images/$NERVES_TARGET/* - -echo "Building firmware" -mix firmware - -echo "Copying rootfs..." -cp ../NERVES_SYSTEM_$NERVES_TARGET/nerves_system_$NERVES_TARGET.tar.gz \ -_images/$NERVES_TARGET/farmbot.rootfs-$NERVES_TARGET-$VERSION.tar.gz - -echo "Renaming firmware" -mv _images/$NERVES_TARGET/farmbot.fw _images/$NERVES_TARGET/farmbot-$NERVES_TARGET-$VERSION.fw - -echo "Building firmware image" -fwup -a -t complete -i _images/$NERVES_TARGET/farmbot-$NERVES_TARGET-$VERSION.fw \ --d _images/$NERVES_TARGET/farmbot-$NERVES_TARGET-$VERSION.img - -mkdir -p _images/all - -echo "Copying images" -cp _images/$NERVES_TARGET/*$NERVES_TARGET-$VERSION* _images/all diff --git a/apps/farmbot/mix.exs b/apps/farmbot/mix.exs index 849ed8de..3ca0c7fc 100644 --- a/apps/farmbot/mix.exs +++ b/apps/farmbot/mix.exs @@ -25,8 +25,8 @@ defmodule Farmbot.Mixfile do start_permanent: Mix.env == :prod, build_path: "../../_build/#{target(Mix.env)}", deps_path: "../../deps/#{target(Mix.env)}", - config_path: "../../config/config.exs", - lockfile: "../../mix.lock", + config_path: "../../farmbot_config.exs", + lockfile: "../../mix-#{target(Mix.env())}.lock", aliases: aliases(Mix.env), deps: deps() ++ system(target(Mix.env)), name: "Farmbot", diff --git a/apps/farmbot_auth/mix.exs b/apps/farmbot_auth/mix.exs index ee3745b6..d4bdb01e 100644 --- a/apps/farmbot_auth/mix.exs +++ b/apps/farmbot_auth/mix.exs @@ -2,6 +2,9 @@ defmodule Farmbot.Auth.Mixfile do use Mix.Project @version Path.join([__DIR__, "..", "farmbot", "VERSION"]) |> File.read! |> String.strip + def target(:prod), do: System.get_env("NERVES_TARGET") + def target(_), do: "development" + def project do [app: :farmbot_auth, version: @version, @@ -9,9 +12,9 @@ defmodule Farmbot.Auth.Mixfile do build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, build_path: "../../_build", - config_path: "../../config/config.exs", + config_path: "../../farmbot_config.exs", deps_path: "../../deps", - lockfile: "../../mix.lock", + lockfile: "../../mix-#{target(Mix.env())}.lock", deps: deps()] end @@ -27,6 +30,6 @@ defmodule Farmbot.Auth.Mixfile do {:nerves_lib, github: "nerves-project/nerves_lib"}, {:poison, "~> 3.0"}, {:farmbot_system, in_umbrella: true} - ] + ] end end diff --git a/apps/farmbot_configurator/mix.exs b/apps/farmbot_configurator/mix.exs index 52a5b1df..ccf1d4e3 100644 --- a/apps/farmbot_configurator/mix.exs +++ b/apps/farmbot_configurator/mix.exs @@ -11,9 +11,9 @@ defmodule Farmbot.Configurator.Mixfile do build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, build_path: "../../_build", - config_path: "../../config/config.exs", + config_path: "../../farmbot_config.exs", deps_path: "../../deps", - lockfile: "../../mix.lock", + lockfile: "../../mix-#{target(Mix.env())}.lock", target: target(Mix.env), deps: deps()] end diff --git a/apps/farmbot_system/mix.exs b/apps/farmbot_system/mix.exs index 4e4c1ccb..b53be672 100644 --- a/apps/farmbot_system/mix.exs +++ b/apps/farmbot_system/mix.exs @@ -1,5 +1,6 @@ defmodule Farmbot.System.Mixfile do use Mix.Project + @version Path.join([__DIR__, "..", "farmbot", "VERSION"]) |> File.read! |> String.strip @@ -12,9 +13,9 @@ defmodule Farmbot.System.Mixfile do [app: :farmbot_system, version: @version, build_path: "../../_build", - config_path: "../../config/config.exs", + config_path: "../../farmbot_config.exs", deps_path: "../../deps", - lockfile: "../../mix.lock", + lockfile: "../../mix-#{target(Mix.env())}.lock", elixir: "~> 1.4", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, diff --git a/apps/farmbot_system_development/mix.exs b/apps/farmbot_system_development/mix.exs index 5363a904..6900fa69 100644 --- a/apps/farmbot_system_development/mix.exs +++ b/apps/farmbot_system_development/mix.exs @@ -8,9 +8,9 @@ defmodule Module.concat([Farmbot,System,"development",Mixfile]) do [app: :farmbot_system_development, version: @version, build_path: "../../_build", - config_path: "../../config/config.exs", + config_path: "../../farmbot_config.exs", deps_path: "../../deps", - lockfile: "../../mix.lock", + lockfile: "../../mix-devlopment.lock", elixir: "~> 1.4", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, diff --git a/apps/farmbot_system_nerves_common/mix.exs b/apps/farmbot_system_nerves_common/mix.exs index 274d5b7a..79dc15e8 100644 --- a/apps/farmbot_system_nerves_common/mix.exs +++ b/apps/farmbot_system_nerves_common/mix.exs @@ -4,13 +4,16 @@ defmodule Farmbot.System.NervesCommon.Mixfile do |> File.read! |> String.strip + def target(:prod), do: System.get_env("NERVES_TARGET") + def target(_), do: "development" + def project do [app: :farmbot_system_nerves_common, version: @version, build_path: "../../_build", - config_path: "../../config/config.exs", + config_path: "../../farmbot_config.exs", deps_path: "../../deps", - lockfile: "../../mix.lock", + lockfile: "../../mix-#{target(Mix.env())}.lock", elixir: "~> 1.4", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, diff --git a/apps/farmbot_system_rpi/mix.exs b/apps/farmbot_system_rpi/mix.exs index 38d041dc..a71e87e9 100644 --- a/apps/farmbot_system_rpi/mix.exs +++ b/apps/farmbot_system_rpi/mix.exs @@ -8,9 +8,9 @@ defmodule Module.concat([Farmbot, System, "rpi", Mixfile]) do [app: :farmbot_system_rpi, version: @version, build_path: "../../_build", - config_path: "../../config/config.exs", + config_path: "../../farmbot_config.exs", deps_path: "../../deps", - lockfile: "../../mix.lock", + lockfile: "../../mix-rpi.lock", elixir: "~> 1.4", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, diff --git a/apps/farmbot_system_rpi2/mix.exs b/apps/farmbot_system_rpi2/mix.exs index 8f1cd36d..bdcbab01 100644 --- a/apps/farmbot_system_rpi2/mix.exs +++ b/apps/farmbot_system_rpi2/mix.exs @@ -8,9 +8,9 @@ defmodule Module.concat([Farmbot, System, "rpi2", Mixfile]) do [app: :farmbot_system_rpi2, version: @version, build_path: "../../_build", - config_path: "../../config/config.exs", + config_path: "../../farmbot_config.exs", deps_path: "../../deps", - lockfile: "../../mix.lock", + lockfile: "../../mix-rpi2.lock", elixir: "~> 1.4", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, diff --git a/apps/farmbot_system_rpi3/mix.exs b/apps/farmbot_system_rpi3/mix.exs index 01a89f2e..79c86642 100644 --- a/apps/farmbot_system_rpi3/mix.exs +++ b/apps/farmbot_system_rpi3/mix.exs @@ -8,9 +8,9 @@ defmodule Module.concat([Farmbot, System, "rpi3", Mixfile]) do [app: :farmbot_system_rpi3, version: @version, build_path: "../../_build", - config_path: "../../config/config.exs", + config_path: "../../farmbot_config.exs", deps_path: "../../deps", - lockfile: "../../mix.lock", + lockfile: "../../mix-rpi3.lock", elixir: "~> 1.4", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, diff --git a/apps/nerves_system_rpi3/mix.exs b/apps/nerves_system_rpi3/mix.exs index 9d2d352c..5cbe80f8 100644 --- a/apps/nerves_system_rpi3/mix.exs +++ b/apps/nerves_system_rpi3/mix.exs @@ -9,10 +9,6 @@ defmodule NervesSystemRpi3.Mixfile do [app: :nerves_system_rpi3, version: @version, elixir: "~> 1.2", - build_path: "../../_build", - config_path: "../../config/config.exs", - deps_path: "../../deps", - lockfile: "../../mix.lock", compilers: Mix.compilers ++ [:nerves_package], description: description(), package: package(), diff --git a/farmbot_config.exs b/farmbot_config.exs index 82029c25..f597b407 100644 --- a/farmbot_config.exs +++ b/farmbot_config.exs @@ -1,2 +1,2 @@ use Mix.Config -import_config "../apps/*/config/config.exs" +import_config "apps/farmbot/config/config.exs" diff --git a/generate_makefile.exs b/generate_makefile.exs new file mode 100644 index 00000000..e4011623 --- /dev/null +++ b/generate_makefile.exs @@ -0,0 +1,83 @@ +IO.puts "Backing up old Makefile" +File.cp "Makefile", "Makefile.bac" +version = Path.join(__DIR__, "VERSION") |> File.read! |> String.strip + +{commitish, _} = System.cmd("git", ["log", "--pretty=format:%hQQ%adQQ%f", "-1"]) +thing = String.split(commitish, "QQ") +IO.puts "Building default portions" +initial = "# THIS FILE WAS GENERATED BY `build_makefile.exs` +# #{Enum.join(thing, "\n# ")} + +default: rpi3 + +dev_env: +\texport MIX_ENV=dev + +prod_env: +\texport MIX_ENV=prod + +clean: +\t$(info Cleaning) +\trm -rf apps/NERVES_SYSTEM_* +\trm -rf apps/farmbot/_images +\trm -rf deps +\trm -rf _build + +test: clean dev_env +\tscripts/run_tests.sh + +## End default portion.\n" + +build_system_part = fn(sys) -> +"\n## begin #{sys} portion. + +## #{sys} env +env-#{sys}: prod_env +\texport NERVES_TARGET=#{sys} + +## #{sys} build +#{sys}: env-#{sys} system-#{sys} firmware-#{sys} +\t$(info Building stuff for #{sys}) + +## #{sys} create-build +create-build-#{sys}: +\tscripts/clone_system.sh #{sys} + +## #{sys} system +system-#{sys}: create-build-#{sys} +\t$(info Building Linux System for #{sys}) +\tscripts/build_system.sh #{sys} + +## #{sys} firmware +firmware-#{sys}: +\t$(info Building Firmware for #{sys}) +\tscripts/build_firmware.sh #{sys} + +release-#{sys}: #{sys} +\tscripts/build_release_images.sh #{sys} #{version} + +## end #{sys} portion." +end + +list = File.ls!("apps") +only_systems = Enum.reduce(list, [], fn(d, acc) -> + case d do + # ignore nerves_system_br + "nerves_system_br" -> acc + "nerves_system_"<> sys -> [sys | acc] + _ -> acc + end +end) + +initial_mod = Enum.reduce(only_systems, initial, fn(sys, acc) -> + IO.puts "Defining system: #{sys}" + acc <> build_system_part.(sys) +end) + +IO.puts "Defining release for #{version}" +final = initial_mod <> +"\n\n## Release will build all the systems. +release: clean #{Enum.map(only_systems, fn(a) -> " release-"<>a end)}" + +IO.puts "Writing file." +File.write("Makefile", final) diff --git a/mix-development.lock b/mix-development.lock new file mode 100644 index 00000000..a7082f89 --- /dev/null +++ b/mix-development.lock @@ -0,0 +1,38 @@ +%{"amnesia": {:git, "https://github.com/meh/amnesia.git", "211d98275c085a9e3049ccb8db8d29f76b3ffbfc", []}, + "bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], []}, + "calendar": {:hex, :calendar, "0.17.1", "5c7dfffde2b68011c2d6832ff1a15496292de965a3b57b3fad32405f1176f024", [:mix], [{:tzdata, "~> 0.5.8 or ~> 0.1.201603", [hex: :tzdata, optional: false]}]}, + "certifi": {:hex, :certifi, "0.7.0", "861a57f3808f7eb0c2d1802afeaae0fa5de813b0df0979153cbafcd853ababaf", [:rebar3], []}, + "combine": {:hex, :combine, "0.9.6", "8d1034a127d4cbf6924c8a5010d3534d958085575fa4d9b878f200d79ac78335", [:mix], []}, + "cors_plug": {:hex, :cors_plug, "1.1.4", "b4c2f0de641700cd3168b90223d12dd5a3e9c54804c0c2451abe1b292620b375", [:mix], [{:cowboy, "~> 1.0.0", [hex: :cowboy, optional: false]}, {:plug, "> 0.8.0", [hex: :plug, optional: false]}]}, + "cowboy": {:hex, :cowboy, "1.0.4", "a324a8df9f2316c833a470d918aaf73ae894278b8aa6226ce7a9bf699388f878", [:make, :rebar], [{:cowlib, "~> 1.0.0", [hex: :cowlib, optional: false]}, {:ranch, "~> 1.0", [hex: :ranch, optional: false]}]}, + "cowlib": {:hex, :cowlib, "1.0.2", "9d769a1d062c9c3ac753096f868ca121e2730b9a377de23dec0f7e08b1df84ee", [:make], []}, + "credo": {:hex, :credo, "0.6.0-rc1", "3db898270ba651aa7d8dc8d844f2827e0111526a01474ab088c7f7f677e83778", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, optional: false]}]}, + "distillery": {:hex, :distillery, "1.0.0", "a866a72bf2a3a5f078f5a249017ed951acda88a760d200512f91f585d74db1ec", [:mix], []}, + "earmark": {:hex, :earmark, "1.0.3", "89bdbaf2aca8bbb5c97d8b3b55c5dd0cff517ecc78d417e87f1d0982e514557b", [:mix], []}, + "elixir_make": {:hex, :elixir_make, "0.4.0", "992f38fabe705bb45821a728f20914c554b276838433349d4f2341f7a687cddf", [:mix], []}, + "ex_doc": {:hex, :ex_doc, "0.14.5", "c0433c8117e948404d93ca69411dd575ec6be39b47802e81ca8d91017a0cf83c", [:mix], [{:earmark, "~> 1.0", [hex: :earmark, optional: false]}]}, + "exquisite": {:hex, :exquisite, "0.1.7", "4106503e976f409246731b168cd76eb54262bd04f4facc5cba82c2f53982aaf0", [:mix], []}, + "faker": {:hex, :faker, "0.7.0", "2c42deeac7be717173c78c77fb3edc749fb5d5e460e33d01fe592ae99acc2f0d", [:mix], []}, + "gen_mqtt": {:hex, :gen_mqtt, "0.3.1", "6ce6af7c2bcb125d5b4125c67c5ab1f29bcec2638236509bcc6abf510a6661ed", [:mix], [{:vmq_commons, "1.0.0", [hex: :vmq_commons, optional: false]}]}, + "gen_stage": {:hex, :gen_stage, "0.10.0", "ce1eb93a3f9708f2e215f70b3d3c7f55dea4a4ed7e9615195e28d543c9086656", [:mix], []}, + "gettext": {:hex, :gettext, "0.13.0", "daafbddc5cda12738bb93b01d84105fe75b916a302f1c50ab9fb066b95ec9db4", [:mix], []}, + "hackney": {:hex, :hackney, "1.6.5", "8c025ee397ac94a184b0743c73b33b96465e85f90a02e210e86df6cbafaa5065", [:rebar3], [{:certifi, "0.7.0", [hex: :certifi, optional: false]}, {:idna, "1.2.0", [hex: :idna, optional: false]}, {:metrics, "1.0.1", [hex: :metrics, optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, optional: false]}, {:ssl_verify_fun, "1.1.1", [hex: :ssl_verify_fun, optional: false]}]}, + "httpotion": {:hex, :httpotion, "3.0.2", "525b9bfeb592c914a61a8ee31fdde3871e1861dfe805f8ee5f711f9f11a93483", [:mix], [{:ibrowse, "~> 4.2", [hex: :ibrowse, optional: false]}]}, + "ibrowse": {:hex, :ibrowse, "4.2.2", "b32b5bafcc77b7277eff030ed32e1acc3f610c64e9f6aea19822abcadf681b4b", [:rebar3], []}, + "idna": {:hex, :idna, "1.2.0", "ac62ee99da068f43c50dc69acf700e03a62a348360126260e87f2b54eced86b2", [:rebar3], []}, + "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], []}, + "mime": {:hex, :mime, "1.0.1", "05c393850524767d13a53627df71beeebb016205eb43bfbd92d14d24ec7a1b51", [:mix], []}, + "mimerl": {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", [:rebar3], []}, + "mustache": {:hex, :mustache, "0.0.2", "870fbef411c47d17df06a57b8b3f69e26eb110cba0177c34e273db5d94369d9b", [:mix], []}, + "nerves": {:hex, :nerves, "0.4.5", "1a82415b7b60fef675a50be85ba8c37b13713d45a47acdded64e6e28ea9309a5", [:mix], [{:distillery, "~> 1.0.0", [hex: :distillery, optional: false]}]}, + "nerves_lib": {:git, "https://github.com/nerves-project/nerves_lib.git", "aac351cb3e621831a317f2d2a078257161efa551", []}, + "nerves_uart": {:hex, :nerves_uart, "0.1.1", "32e6186b1a1b1d744631126df0b6c4049ddde5b04bc0303de29ab86a2edf60a2", [:make, :mix], [{:elixir_make, "~> 0.3", [hex: :elixir_make, optional: false]}]}, + "plug": {:hex, :plug, "1.3.0", "6e2b01afc5db3fd011ca4a16efd9cb424528c157c30a44a0186bcc92c7b2e8f3", [:mix], [{:cowboy, "~> 1.0.1 or ~> 1.1", [hex: :cowboy, optional: true]}, {:mime, "~> 1.0", [hex: :mime, optional: false]}]}, + "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], []}, + "quantum": {:hex, :quantum, "1.8.1", "37c9ad0307cf47bd578507ce1ddda98746199b281e8afe91cbe44c21d56af983", [:mix], [{:calendar, "~> 0.16", [hex: :calendar, optional: false]}]}, + "ranch": {:hex, :ranch, "1.2.1", "a6fb992c10f2187b46ffd17ce398ddf8a54f691b81768f9ef5f461ea7e28c762", [:make], []}, + "rsa": {:hex, :rsa, "0.0.1", "a63069f88ce342ffdf8448b7cdef4b39ba7dee3c1510644a39385c7e63ba246f", [:mix], []}, + "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], []}, + "timex": {:hex, :timex, "3.1.7", "71f9c32e13ff4860e86a314303757cc02b3ead5db6e977579a2935225ce9a666", [:mix], [{:combine, "~> 0.7", [hex: :combine, optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, optional: false]}, {:tzdata, "~> 0.1.8 or ~> 0.5", [hex: :tzdata, optional: false]}]}, + "tzdata": {:hex, :tzdata, "0.5.10", "087e8dfe8c0283473115ad8ca6974b898ecb55ca5c725427a142a79593391e90", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, optional: false]}]}, + "vmq_commons": {:hex, :vmq_commons, "1.0.0", "5f5005c12db33f92f40e818a3617fb148972d59adcf99298c9d3808ef3582e34", [:rebar3], []}} diff --git a/mix-rpi.lock b/mix-rpi.lock new file mode 100644 index 00000000..4bf2e343 --- /dev/null +++ b/mix-rpi.lock @@ -0,0 +1,48 @@ +%{"amnesia": {:git, "https://github.com/meh/amnesia.git", "211d98275c085a9e3049ccb8db8d29f76b3ffbfc", []}, + "bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], []}, + "calendar": {:hex, :calendar, "0.17.1", "5c7dfffde2b68011c2d6832ff1a15496292de965a3b57b3fad32405f1176f024", [:mix], [{:tzdata, "~> 0.5.8 or ~> 0.1.201603", [hex: :tzdata, optional: false]}]}, + "certifi": {:hex, :certifi, "0.7.0", "861a57f3808f7eb0c2d1802afeaae0fa5de813b0df0979153cbafcd853ababaf", [:rebar3], []}, + "combine": {:hex, :combine, "0.9.6", "8d1034a127d4cbf6924c8a5010d3534d958085575fa4d9b878f200d79ac78335", [:mix], []}, + "cors_plug": {:hex, :cors_plug, "1.1.4", "b4c2f0de641700cd3168b90223d12dd5a3e9c54804c0c2451abe1b292620b375", [:mix], [{:cowboy, "~> 1.0.0", [hex: :cowboy, optional: false]}, {:plug, "> 0.8.0", [hex: :plug, optional: false]}]}, + "cowboy": {:hex, :cowboy, "1.0.4", "a324a8df9f2316c833a470d918aaf73ae894278b8aa6226ce7a9bf699388f878", [:make, :rebar], [{:cowlib, "~> 1.0.0", [hex: :cowlib, optional: false]}, {:ranch, "~> 1.0", [hex: :ranch, optional: false]}]}, + "cowlib": {:hex, :cowlib, "1.0.2", "9d769a1d062c9c3ac753096f868ca121e2730b9a377de23dec0f7e08b1df84ee", [:make], []}, + "credo": {:hex, :credo, "0.6.0-rc1", "3db898270ba651aa7d8dc8d844f2827e0111526a01474ab088c7f7f677e83778", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, optional: false]}]}, + "distillery": {:hex, :distillery, "1.0.0", "a866a72bf2a3a5f078f5a249017ed951acda88a760d200512f91f585d74db1ec", [:mix], []}, + "earmark": {:hex, :earmark, "1.0.3", "89bdbaf2aca8bbb5c97d8b3b55c5dd0cff517ecc78d417e87f1d0982e514557b", [:mix], []}, + "elixir_make": {:hex, :elixir_make, "0.4.0", "992f38fabe705bb45821a728f20914c554b276838433349d4f2341f7a687cddf", [:mix], []}, + "ex_doc": {:hex, :ex_doc, "0.14.5", "c0433c8117e948404d93ca69411dd575ec6be39b47802e81ca8d91017a0cf83c", [:mix], [{:earmark, "~> 1.0", [hex: :earmark, optional: false]}]}, + "exjsx": {:hex, :exjsx, "3.2.1", "1bc5bf1e4fd249104178f0885030bcd75a4526f4d2a1e976f4b428d347614f0f", [:mix], [{:jsx, "~> 2.8.0", [hex: :jsx, optional: false]}]}, + "exquisite": {:hex, :exquisite, "0.1.7", "4106503e976f409246731b168cd76eb54262bd04f4facc5cba82c2f53982aaf0", [:mix], []}, + "faker": {:hex, :faker, "0.7.0", "2c42deeac7be717173c78c77fb3edc749fb5d5e460e33d01fe592ae99acc2f0d", [:mix], []}, + "gen_mqtt": {:hex, :gen_mqtt, "0.3.1", "6ce6af7c2bcb125d5b4125c67c5ab1f29bcec2638236509bcc6abf510a6661ed", [:mix], [{:vmq_commons, "1.0.0", [hex: :vmq_commons, optional: false]}]}, + "gen_stage": {:hex, :gen_stage, "0.10.0", "ce1eb93a3f9708f2e215f70b3d3c7f55dea4a4ed7e9615195e28d543c9086656", [:mix], []}, + "gettext": {:hex, :gettext, "0.13.0", "daafbddc5cda12738bb93b01d84105fe75b916a302f1c50ab9fb066b95ec9db4", [:mix], []}, + "hackney": {:hex, :hackney, "1.6.5", "8c025ee397ac94a184b0743c73b33b96465e85f90a02e210e86df6cbafaa5065", [:rebar3], [{:certifi, "0.7.0", [hex: :certifi, optional: false]}, {:idna, "1.2.0", [hex: :idna, optional: false]}, {:metrics, "1.0.1", [hex: :metrics, optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, optional: false]}, {:ssl_verify_fun, "1.1.1", [hex: :ssl_verify_fun, optional: false]}]}, + "httpotion": {:hex, :httpotion, "3.0.2", "525b9bfeb592c914a61a8ee31fdde3871e1861dfe805f8ee5f711f9f11a93483", [:mix], [{:ibrowse, "~> 4.2", [hex: :ibrowse, optional: false]}]}, + "ibrowse": {:hex, :ibrowse, "4.2.2", "b32b5bafcc77b7277eff030ed32e1acc3f610c64e9f6aea19822abcadf681b4b", [:rebar3], []}, + "idna": {:hex, :idna, "1.2.0", "ac62ee99da068f43c50dc69acf700e03a62a348360126260e87f2b54eced86b2", [:rebar3], []}, + "jsx": {:hex, :jsx, "2.8.1", "1453b4eb3615acb3e2cd0a105d27e6761e2ed2e501ac0b390f5bbec497669846", [:mix, :rebar3], []}, + "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], []}, + "mime": {:hex, :mime, "1.0.1", "05c393850524767d13a53627df71beeebb016205eb43bfbd92d14d24ec7a1b51", [:mix], []}, + "mimerl": {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", [:rebar3], []}, + "mustache": {:hex, :mustache, "0.0.2", "870fbef411c47d17df06a57b8b3f69e26eb110cba0177c34e273db5d94369d9b", [:mix], []}, + "nerves": {:hex, :nerves, "0.4.5", "1a82415b7b60fef675a50be85ba8c37b13713d45a47acdded64e6e28ea9309a5", [:mix], [{:distillery, "~> 1.0.0", [hex: :distillery, optional: false]}]}, + "nerves_firmware": {:git, "https://github.com/nerves-project/nerves_firmware.git", "241a12694bd3bc2b4df8cbb7e0f0beaeff075b1c", []}, + "nerves_firmware_http": {:git, "https://github.com/nerves-project/nerves_firmware_http.git", "cc2cb110b0587a482d454175916dc597d62c4bfa", []}, + "nerves_interim_wifi": {:git, "https://github.com/nerves-project/nerves_interim_wifi.git", "32e848274571e328ebd7155848cc28d020938429", []}, + "nerves_lib": {:git, "https://github.com/nerves-project/nerves_lib.git", "aac351cb3e621831a317f2d2a078257161efa551", []}, + "nerves_network_interface": {:hex, :nerves_network_interface, "0.3.2", "e7450f7eccd7387ceebee6096a0646bcdc0dd4aa77077e5fa81f6767da9b77af", [:make, :mix], [{:elixir_make, "~> 0.3", [hex: :elixir_make, optional: false]}]}, + "nerves_system_br": {:hex, :nerves_system_br, "0.8.2", "f9917e75b54fb3eadbd67c2123ac1406d0a7fdef24f1960e3577c759d0a6fbc7", [:mix], []}, + "nerves_toolchain_armv6_rpi_linux_gnueabi": {:hex, :nerves_toolchain_armv6_rpi_linux_gnueabi, "0.8.0", "7e46564ce2b8eca7fed4d50a41a5bb7381d817e6d80d198c22e204758f49ff11", [:mix], [{:nerves, "~> 0.4.0", [hex: :nerves, optional: false]}, {:nerves_toolchain_ctng, "~> 0.8.0", [hex: :nerves_toolchain_ctng, optional: false]}]}, + "nerves_toolchain_ctng": {:hex, :nerves_toolchain_ctng, "0.8.0", "6dff7ed51e1711c5f4da3d559bc528a8265e3dd950dda95f4d6832aed9dbe320", [:mix], []}, + "nerves_uart": {:hex, :nerves_uart, "0.1.1", "32e6186b1a1b1d744631126df0b6c4049ddde5b04bc0303de29ab86a2edf60a2", [:make, :mix], [{:elixir_make, "~> 0.3", [hex: :elixir_make, optional: false]}]}, + "nerves_wpa_supplicant": {:hex, :nerves_wpa_supplicant, "0.2.2", "da829baec94a8afa7da3a6beaaf1725b9ca7f5f58779ba50b73568b7d37d3d98", [:make, :mix], [{:elixir_make, "~> 0.3", [hex: :elixir_make, optional: false]}]}, + "plug": {:hex, :plug, "1.3.0", "6e2b01afc5db3fd011ca4a16efd9cb424528c157c30a44a0186bcc92c7b2e8f3", [:mix], [{:cowboy, "~> 1.0.1 or ~> 1.1", [hex: :cowboy, optional: true]}, {:mime, "~> 1.0", [hex: :mime, optional: false]}]}, + "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], []}, + "quantum": {:hex, :quantum, "1.8.1", "37c9ad0307cf47bd578507ce1ddda98746199b281e8afe91cbe44c21d56af983", [:mix], [{:calendar, "~> 0.16", [hex: :calendar, optional: false]}]}, + "ranch": {:hex, :ranch, "1.2.1", "a6fb992c10f2187b46ffd17ce398ddf8a54f691b81768f9ef5f461ea7e28c762", [:make], []}, + "rsa": {:hex, :rsa, "0.0.1", "a63069f88ce342ffdf8448b7cdef4b39ba7dee3c1510644a39385c7e63ba246f", [:mix], []}, + "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], []}, + "timex": {:hex, :timex, "3.1.7", "71f9c32e13ff4860e86a314303757cc02b3ead5db6e977579a2935225ce9a666", [:mix], [{:combine, "~> 0.7", [hex: :combine, optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, optional: false]}, {:tzdata, "~> 0.1.8 or ~> 0.5", [hex: :tzdata, optional: false]}]}, + "tzdata": {:hex, :tzdata, "0.5.10", "087e8dfe8c0283473115ad8ca6974b898ecb55ca5c725427a142a79593391e90", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, optional: false]}]}, + "vmq_commons": {:hex, :vmq_commons, "1.0.0", "5f5005c12db33f92f40e818a3617fb148972d59adcf99298c9d3808ef3582e34", [:rebar3], []}} diff --git a/mix.lock b/mix-rpi2.lock similarity index 74% rename from mix.lock rename to mix-rpi2.lock index 6e75f890..f88a2ccc 100644 --- a/mix.lock +++ b/mix-rpi2.lock @@ -1,28 +1,23 @@ %{"amnesia": {:git, "https://github.com/meh/amnesia.git", "211d98275c085a9e3049ccb8db8d29f76b3ffbfc", []}, "bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], []}, - "calendar": {:hex, :calendar, "0.16.1", "782327ad8bae7c797b887840dc4ddb933f05ce6e333e5b04964d7a5d5f79bde3", [:mix], [{:tzdata, "~> 0.5.8 or ~> 0.1.201603", [hex: :tzdata, optional: false]}]}, + "calendar": {:hex, :calendar, "0.17.1", "5c7dfffde2b68011c2d6832ff1a15496292de965a3b57b3fad32405f1176f024", [:mix], [{:tzdata, "~> 0.5.8 or ~> 0.1.201603", [hex: :tzdata, optional: false]}]}, "certifi": {:hex, :certifi, "0.7.0", "861a57f3808f7eb0c2d1802afeaae0fa5de813b0df0979153cbafcd853ababaf", [:rebar3], []}, - "combine": {:hex, :combine, "0.9.3", "192e609b48b3f2210494e26f85db1712657be1a8f15795656710317ea43fc449", [:mix], []}, - "cors_plug": {:hex, :cors_plug, "1.1.2", "3e7451286996f745c7b629c39d24a6493e59b0c8191f27e67f6ab097f96ffd23", [:mix], [{:cowboy, "~> 1.0.0", [hex: :cowboy, optional: false]}, {:plug, "> 0.8.0", [hex: :plug, optional: false]}]}, + "combine": {:hex, :combine, "0.9.6", "8d1034a127d4cbf6924c8a5010d3534d958085575fa4d9b878f200d79ac78335", [:mix], []}, + "cors_plug": {:hex, :cors_plug, "1.1.4", "b4c2f0de641700cd3168b90223d12dd5a3e9c54804c0c2451abe1b292620b375", [:mix], [{:cowboy, "~> 1.0.0", [hex: :cowboy, optional: false]}, {:plug, "> 0.8.0", [hex: :plug, optional: false]}]}, "cowboy": {:hex, :cowboy, "1.0.4", "a324a8df9f2316c833a470d918aaf73ae894278b8aa6226ce7a9bf699388f878", [:make, :rebar], [{:cowlib, "~> 1.0.0", [hex: :cowlib, optional: false]}, {:ranch, "~> 1.0", [hex: :ranch, optional: false]}]}, "cowlib": {:hex, :cowlib, "1.0.2", "9d769a1d062c9c3ac753096f868ca121e2730b9a377de23dec0f7e08b1df84ee", [:make], []}, "credo": {:hex, :credo, "0.6.0-rc1", "3db898270ba651aa7d8dc8d844f2827e0111526a01474ab088c7f7f677e83778", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, optional: false]}]}, - "dialyxir": {:hex, :dialyxir, "0.4.1", "236056d6acd25f740f336756c0f3b5dd6e2f0156074bc15f3b779aeee15390c8", [:mix], []}, "distillery": {:hex, :distillery, "1.0.0", "a866a72bf2a3a5f078f5a249017ed951acda88a760d200512f91f585d74db1ec", [:mix], []}, "earmark": {:hex, :earmark, "1.0.3", "89bdbaf2aca8bbb5c97d8b3b55c5dd0cff517ecc78d417e87f1d0982e514557b", [:mix], []}, - "elixir_ale": {:hex, :elixir_ale, "0.5.6", "a94c89a17ec39ad4c4a9a90d4f00bd9f33b2f2e98703317fbdf5efceab276b44", [:make, :mix], [{:elixir_make, "~> 0.3", [hex: :elixir_make, optional: false]}]}, "elixir_make": {:hex, :elixir_make, "0.4.0", "992f38fabe705bb45821a728f20914c554b276838433349d4f2341f7a687cddf", [:mix], []}, "ex_doc": {:hex, :ex_doc, "0.14.5", "c0433c8117e948404d93ca69411dd575ec6be39b47802e81ca8d91017a0cf83c", [:mix], [{:earmark, "~> 1.0", [hex: :earmark, optional: false]}]}, - "excoveralls": {:hex, :excoveralls, "0.5.7", "5d26e4a7cdf08294217594a1b0643636accc2ad30e984d62f1d166f70629ff50", [:mix], [{:exjsx, "~> 3.0", [hex: :exjsx, optional: false]}, {:hackney, ">= 0.12.0", [hex: :hackney, optional: false]}]}, "exjsx": {:hex, :exjsx, "3.2.1", "1bc5bf1e4fd249104178f0885030bcd75a4526f4d2a1e976f4b428d347614f0f", [:mix], [{:jsx, "~> 2.8.0", [hex: :jsx, optional: false]}]}, "exquisite": {:hex, :exquisite, "0.1.7", "4106503e976f409246731b168cd76eb54262bd04f4facc5cba82c2f53982aaf0", [:mix], []}, - "fake_nerves": {:git, "https://github.com/ConnorRigby/fake_nerves.git", "47b72e2705cbee080da79d0762031bd0801c5d0d", []}, "faker": {:hex, :faker, "0.7.0", "2c42deeac7be717173c78c77fb3edc749fb5d5e460e33d01fe592ae99acc2f0d", [:mix], []}, "gen_mqtt": {:hex, :gen_mqtt, "0.3.1", "6ce6af7c2bcb125d5b4125c67c5ab1f29bcec2638236509bcc6abf510a6661ed", [:mix], [{:vmq_commons, "1.0.0", [hex: :vmq_commons, optional: false]}]}, "gen_stage": {:hex, :gen_stage, "0.10.0", "ce1eb93a3f9708f2e215f70b3d3c7f55dea4a4ed7e9615195e28d543c9086656", [:mix], []}, "gettext": {:hex, :gettext, "0.13.0", "daafbddc5cda12738bb93b01d84105fe75b916a302f1c50ab9fb066b95ec9db4", [:mix], []}, "hackney": {:hex, :hackney, "1.6.5", "8c025ee397ac94a184b0743c73b33b96465e85f90a02e210e86df6cbafaa5065", [:rebar3], [{:certifi, "0.7.0", [hex: :certifi, optional: false]}, {:idna, "1.2.0", [hex: :idna, optional: false]}, {:metrics, "1.0.1", [hex: :metrics, optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, optional: false]}, {:ssl_verify_fun, "1.1.1", [hex: :ssl_verify_fun, optional: false]}]}, - "httpoison": {:hex, :httpoison, "0.10.0", "4727b3a5e57e9a4ff168a3c2883e20f1208103a41bccc4754f15a9366f49b676", [:mix], [{:hackney, "~> 1.6.3", [hex: :hackney, optional: false]}]}, "httpotion": {:hex, :httpotion, "3.0.2", "525b9bfeb592c914a61a8ee31fdde3871e1861dfe805f8ee5f711f9f11a93483", [:mix], [{:ibrowse, "~> 4.2", [hex: :ibrowse, optional: false]}]}, "ibrowse": {:hex, :ibrowse, "4.2.2", "b32b5bafcc77b7277eff030ed32e1acc3f610c64e9f6aea19822abcadf681b4b", [:rebar3], []}, "idna": {:hex, :idna, "1.2.0", "ac62ee99da068f43c50dc69acf700e03a62a348360126260e87f2b54eced86b2", [:rebar3], []}, @@ -35,22 +30,19 @@ "nerves_firmware": {:git, "https://github.com/nerves-project/nerves_firmware.git", "241a12694bd3bc2b4df8cbb7e0f0beaeff075b1c", []}, "nerves_firmware_http": {:git, "https://github.com/nerves-project/nerves_firmware_http.git", "cc2cb110b0587a482d454175916dc597d62c4bfa", []}, "nerves_interim_wifi": {:git, "https://github.com/nerves-project/nerves_interim_wifi.git", "32e848274571e328ebd7155848cc28d020938429", []}, - "nerves_leds": {:hex, :nerves_leds, "0.7.0", "1d0f6587a9ac27c3ad3767a4dd84098e21e48fa3dc5526d5e11ddde48212e186", [:mix], []}, "nerves_lib": {:git, "https://github.com/nerves-project/nerves_lib.git", "aac351cb3e621831a317f2d2a078257161efa551", []}, "nerves_network_interface": {:hex, :nerves_network_interface, "0.3.2", "e7450f7eccd7387ceebee6096a0646bcdc0dd4aa77077e5fa81f6767da9b77af", [:make, :mix], [{:elixir_make, "~> 0.3", [hex: :elixir_make, optional: false]}]}, - "nerves_system_br": {:hex, :nerves_system_br, "0.8.1", "86889f97719eae6ec243ba0b8f445a25cabc0463d2e9606293cb4033f2c6b9e4", [:mix], []}, + "nerves_system_br": {:hex, :nerves_system_br, "0.8.2", "f9917e75b54fb3eadbd67c2123ac1406d0a7fdef24f1960e3577c759d0a6fbc7", [:mix], []}, "nerves_toolchain_arm_unknown_linux_gnueabihf": {:hex, :nerves_toolchain_arm_unknown_linux_gnueabihf, "0.8.0", "873f8d6f74413c14eda3462b397a88f043a6c3bd65f56ff57db4e2e1eaf48994", [:mix], [{:nerves, "~> 0.4.0", [hex: :nerves, optional: false]}, {:nerves_toolchain_ctng, "~> 0.8.0", [hex: :nerves_toolchain_ctng, optional: false]}]}, - "nerves_toolchain_armv6_rpi_linux_gnueabi": {:hex, :nerves_toolchain_armv6_rpi_linux_gnueabi, "0.8.0", "7e46564ce2b8eca7fed4d50a41a5bb7381d817e6d80d198c22e204758f49ff11", [:mix], [{:nerves, "~> 0.4.0", [hex: :nerves, optional: false]}, {:nerves_toolchain_ctng, "~> 0.8.0", [hex: :nerves_toolchain_ctng, optional: false]}]}, "nerves_toolchain_ctng": {:hex, :nerves_toolchain_ctng, "0.8.0", "6dff7ed51e1711c5f4da3d559bc528a8265e3dd950dda95f4d6832aed9dbe320", [:mix], []}, "nerves_uart": {:hex, :nerves_uart, "0.1.1", "32e6186b1a1b1d744631126df0b6c4049ddde5b04bc0303de29ab86a2edf60a2", [:make, :mix], [{:elixir_make, "~> 0.3", [hex: :elixir_make, optional: false]}]}, "nerves_wpa_supplicant": {:hex, :nerves_wpa_supplicant, "0.2.2", "da829baec94a8afa7da3a6beaaf1725b9ca7f5f58779ba50b73568b7d37d3d98", [:make, :mix], [{:elixir_make, "~> 0.3", [hex: :elixir_make, optional: false]}]}, "plug": {:hex, :plug, "1.3.0", "6e2b01afc5db3fd011ca4a16efd9cb424528c157c30a44a0186bcc92c7b2e8f3", [:mix], [{:cowboy, "~> 1.0.1 or ~> 1.1", [hex: :cowboy, optional: true]}, {:mime, "~> 1.0", [hex: :mime, optional: false]}]}, - "poison": {:hex, :poison, "3.0.0", "625ebd64d33ae2e65201c2c14d6c85c27cc8b68f2d0dd37828fde9c6920dd131", [:mix], []}, + "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], []}, "quantum": {:hex, :quantum, "1.8.1", "37c9ad0307cf47bd578507ce1ddda98746199b281e8afe91cbe44c21d56af983", [:mix], [{:calendar, "~> 0.16", [hex: :calendar, optional: false]}]}, "ranch": {:hex, :ranch, "1.2.1", "a6fb992c10f2187b46ffd17ce398ddf8a54f691b81768f9ef5f461ea7e28c762", [:make], []}, "rsa": {:hex, :rsa, "0.0.1", "a63069f88ce342ffdf8448b7cdef4b39ba7dee3c1510644a39385c7e63ba246f", [:mix], []}, - "socket": {:git, "https://github.com/meh/elixir-socket.git", "cfcc976745687979551bc15fd6e5a63ef08a3c07", []}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], []}, - "timex": {:hex, :timex, "3.1.5", "413d6d8d6f0162a5d47080cb8ca520d790184ac43e097c95191c7563bf25b428", [:mix], [{:combine, "~> 0.7", [hex: :combine, optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, optional: false]}, {:tzdata, "~> 0.1.8 or ~> 0.5", [hex: :tzdata, optional: false]}]}, - "tzdata": {:hex, :tzdata, "0.5.9", "575be217b039057a47e133b72838cbe104fb5329b19906ea4e66857001c37edb", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, optional: false]}]}, + "timex": {:hex, :timex, "3.1.7", "71f9c32e13ff4860e86a314303757cc02b3ead5db6e977579a2935225ce9a666", [:mix], [{:combine, "~> 0.7", [hex: :combine, optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, optional: false]}, {:tzdata, "~> 0.1.8 or ~> 0.5", [hex: :tzdata, optional: false]}]}, + "tzdata": {:hex, :tzdata, "0.5.10", "087e8dfe8c0283473115ad8ca6974b898ecb55ca5c725427a142a79593391e90", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, optional: false]}]}, "vmq_commons": {:hex, :vmq_commons, "1.0.0", "5f5005c12db33f92f40e818a3617fb148972d59adcf99298c9d3808ef3582e34", [:rebar3], []}} diff --git a/mix-rpi3.lock b/mix-rpi3.lock new file mode 100644 index 00000000..f88a2ccc --- /dev/null +++ b/mix-rpi3.lock @@ -0,0 +1,48 @@ +%{"amnesia": {:git, "https://github.com/meh/amnesia.git", "211d98275c085a9e3049ccb8db8d29f76b3ffbfc", []}, + "bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], []}, + "calendar": {:hex, :calendar, "0.17.1", "5c7dfffde2b68011c2d6832ff1a15496292de965a3b57b3fad32405f1176f024", [:mix], [{:tzdata, "~> 0.5.8 or ~> 0.1.201603", [hex: :tzdata, optional: false]}]}, + "certifi": {:hex, :certifi, "0.7.0", "861a57f3808f7eb0c2d1802afeaae0fa5de813b0df0979153cbafcd853ababaf", [:rebar3], []}, + "combine": {:hex, :combine, "0.9.6", "8d1034a127d4cbf6924c8a5010d3534d958085575fa4d9b878f200d79ac78335", [:mix], []}, + "cors_plug": {:hex, :cors_plug, "1.1.4", "b4c2f0de641700cd3168b90223d12dd5a3e9c54804c0c2451abe1b292620b375", [:mix], [{:cowboy, "~> 1.0.0", [hex: :cowboy, optional: false]}, {:plug, "> 0.8.0", [hex: :plug, optional: false]}]}, + "cowboy": {:hex, :cowboy, "1.0.4", "a324a8df9f2316c833a470d918aaf73ae894278b8aa6226ce7a9bf699388f878", [:make, :rebar], [{:cowlib, "~> 1.0.0", [hex: :cowlib, optional: false]}, {:ranch, "~> 1.0", [hex: :ranch, optional: false]}]}, + "cowlib": {:hex, :cowlib, "1.0.2", "9d769a1d062c9c3ac753096f868ca121e2730b9a377de23dec0f7e08b1df84ee", [:make], []}, + "credo": {:hex, :credo, "0.6.0-rc1", "3db898270ba651aa7d8dc8d844f2827e0111526a01474ab088c7f7f677e83778", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, optional: false]}]}, + "distillery": {:hex, :distillery, "1.0.0", "a866a72bf2a3a5f078f5a249017ed951acda88a760d200512f91f585d74db1ec", [:mix], []}, + "earmark": {:hex, :earmark, "1.0.3", "89bdbaf2aca8bbb5c97d8b3b55c5dd0cff517ecc78d417e87f1d0982e514557b", [:mix], []}, + "elixir_make": {:hex, :elixir_make, "0.4.0", "992f38fabe705bb45821a728f20914c554b276838433349d4f2341f7a687cddf", [:mix], []}, + "ex_doc": {:hex, :ex_doc, "0.14.5", "c0433c8117e948404d93ca69411dd575ec6be39b47802e81ca8d91017a0cf83c", [:mix], [{:earmark, "~> 1.0", [hex: :earmark, optional: false]}]}, + "exjsx": {:hex, :exjsx, "3.2.1", "1bc5bf1e4fd249104178f0885030bcd75a4526f4d2a1e976f4b428d347614f0f", [:mix], [{:jsx, "~> 2.8.0", [hex: :jsx, optional: false]}]}, + "exquisite": {:hex, :exquisite, "0.1.7", "4106503e976f409246731b168cd76eb54262bd04f4facc5cba82c2f53982aaf0", [:mix], []}, + "faker": {:hex, :faker, "0.7.0", "2c42deeac7be717173c78c77fb3edc749fb5d5e460e33d01fe592ae99acc2f0d", [:mix], []}, + "gen_mqtt": {:hex, :gen_mqtt, "0.3.1", "6ce6af7c2bcb125d5b4125c67c5ab1f29bcec2638236509bcc6abf510a6661ed", [:mix], [{:vmq_commons, "1.0.0", [hex: :vmq_commons, optional: false]}]}, + "gen_stage": {:hex, :gen_stage, "0.10.0", "ce1eb93a3f9708f2e215f70b3d3c7f55dea4a4ed7e9615195e28d543c9086656", [:mix], []}, + "gettext": {:hex, :gettext, "0.13.0", "daafbddc5cda12738bb93b01d84105fe75b916a302f1c50ab9fb066b95ec9db4", [:mix], []}, + "hackney": {:hex, :hackney, "1.6.5", "8c025ee397ac94a184b0743c73b33b96465e85f90a02e210e86df6cbafaa5065", [:rebar3], [{:certifi, "0.7.0", [hex: :certifi, optional: false]}, {:idna, "1.2.0", [hex: :idna, optional: false]}, {:metrics, "1.0.1", [hex: :metrics, optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, optional: false]}, {:ssl_verify_fun, "1.1.1", [hex: :ssl_verify_fun, optional: false]}]}, + "httpotion": {:hex, :httpotion, "3.0.2", "525b9bfeb592c914a61a8ee31fdde3871e1861dfe805f8ee5f711f9f11a93483", [:mix], [{:ibrowse, "~> 4.2", [hex: :ibrowse, optional: false]}]}, + "ibrowse": {:hex, :ibrowse, "4.2.2", "b32b5bafcc77b7277eff030ed32e1acc3f610c64e9f6aea19822abcadf681b4b", [:rebar3], []}, + "idna": {:hex, :idna, "1.2.0", "ac62ee99da068f43c50dc69acf700e03a62a348360126260e87f2b54eced86b2", [:rebar3], []}, + "jsx": {:hex, :jsx, "2.8.1", "1453b4eb3615acb3e2cd0a105d27e6761e2ed2e501ac0b390f5bbec497669846", [:mix, :rebar3], []}, + "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], []}, + "mime": {:hex, :mime, "1.0.1", "05c393850524767d13a53627df71beeebb016205eb43bfbd92d14d24ec7a1b51", [:mix], []}, + "mimerl": {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", [:rebar3], []}, + "mustache": {:hex, :mustache, "0.0.2", "870fbef411c47d17df06a57b8b3f69e26eb110cba0177c34e273db5d94369d9b", [:mix], []}, + "nerves": {:hex, :nerves, "0.4.5", "1a82415b7b60fef675a50be85ba8c37b13713d45a47acdded64e6e28ea9309a5", [:mix], [{:distillery, "~> 1.0.0", [hex: :distillery, optional: false]}]}, + "nerves_firmware": {:git, "https://github.com/nerves-project/nerves_firmware.git", "241a12694bd3bc2b4df8cbb7e0f0beaeff075b1c", []}, + "nerves_firmware_http": {:git, "https://github.com/nerves-project/nerves_firmware_http.git", "cc2cb110b0587a482d454175916dc597d62c4bfa", []}, + "nerves_interim_wifi": {:git, "https://github.com/nerves-project/nerves_interim_wifi.git", "32e848274571e328ebd7155848cc28d020938429", []}, + "nerves_lib": {:git, "https://github.com/nerves-project/nerves_lib.git", "aac351cb3e621831a317f2d2a078257161efa551", []}, + "nerves_network_interface": {:hex, :nerves_network_interface, "0.3.2", "e7450f7eccd7387ceebee6096a0646bcdc0dd4aa77077e5fa81f6767da9b77af", [:make, :mix], [{:elixir_make, "~> 0.3", [hex: :elixir_make, optional: false]}]}, + "nerves_system_br": {:hex, :nerves_system_br, "0.8.2", "f9917e75b54fb3eadbd67c2123ac1406d0a7fdef24f1960e3577c759d0a6fbc7", [:mix], []}, + "nerves_toolchain_arm_unknown_linux_gnueabihf": {:hex, :nerves_toolchain_arm_unknown_linux_gnueabihf, "0.8.0", "873f8d6f74413c14eda3462b397a88f043a6c3bd65f56ff57db4e2e1eaf48994", [:mix], [{:nerves, "~> 0.4.0", [hex: :nerves, optional: false]}, {:nerves_toolchain_ctng, "~> 0.8.0", [hex: :nerves_toolchain_ctng, optional: false]}]}, + "nerves_toolchain_ctng": {:hex, :nerves_toolchain_ctng, "0.8.0", "6dff7ed51e1711c5f4da3d559bc528a8265e3dd950dda95f4d6832aed9dbe320", [:mix], []}, + "nerves_uart": {:hex, :nerves_uart, "0.1.1", "32e6186b1a1b1d744631126df0b6c4049ddde5b04bc0303de29ab86a2edf60a2", [:make, :mix], [{:elixir_make, "~> 0.3", [hex: :elixir_make, optional: false]}]}, + "nerves_wpa_supplicant": {:hex, :nerves_wpa_supplicant, "0.2.2", "da829baec94a8afa7da3a6beaaf1725b9ca7f5f58779ba50b73568b7d37d3d98", [:make, :mix], [{:elixir_make, "~> 0.3", [hex: :elixir_make, optional: false]}]}, + "plug": {:hex, :plug, "1.3.0", "6e2b01afc5db3fd011ca4a16efd9cb424528c157c30a44a0186bcc92c7b2e8f3", [:mix], [{:cowboy, "~> 1.0.1 or ~> 1.1", [hex: :cowboy, optional: true]}, {:mime, "~> 1.0", [hex: :mime, optional: false]}]}, + "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], []}, + "quantum": {:hex, :quantum, "1.8.1", "37c9ad0307cf47bd578507ce1ddda98746199b281e8afe91cbe44c21d56af983", [:mix], [{:calendar, "~> 0.16", [hex: :calendar, optional: false]}]}, + "ranch": {:hex, :ranch, "1.2.1", "a6fb992c10f2187b46ffd17ce398ddf8a54f691b81768f9ef5f461ea7e28c762", [:make], []}, + "rsa": {:hex, :rsa, "0.0.1", "a63069f88ce342ffdf8448b7cdef4b39ba7dee3c1510644a39385c7e63ba246f", [:mix], []}, + "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], []}, + "timex": {:hex, :timex, "3.1.7", "71f9c32e13ff4860e86a314303757cc02b3ead5db6e977579a2935225ce9a666", [:mix], [{:combine, "~> 0.7", [hex: :combine, optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, optional: false]}, {:tzdata, "~> 0.1.8 or ~> 0.5", [hex: :tzdata, optional: false]}]}, + "tzdata": {:hex, :tzdata, "0.5.10", "087e8dfe8c0283473115ad8ca6974b898ecb55ca5c725427a142a79593391e90", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, optional: false]}]}, + "vmq_commons": {:hex, :vmq_commons, "1.0.0", "5f5005c12db33f92f40e818a3617fb148972d59adcf99298c9d3808ef3582e34", [:rebar3], []}} diff --git a/mix.exs b/mix.exs index 94d64f74..ba6f5f2a 100644 --- a/mix.exs +++ b/mix.exs @@ -5,34 +5,33 @@ defmodule FarmbotOs.Mixfile do def project do [apps_path: "apps", + elixir: "~> 1.4", version: @version, target: target(Mix.env), config_path: "farmbot_config.exs", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, - default_task: "hello", - deps: deps()] + default_task: "warning", + deps: []] end - # Dependencies listed here are available only for this project - # and cannot be accessed from applications inside the apps folder - defp deps(), do: [] - - def target(:prod) do + defp target(:prod) do blah = System.get_env("NERVES_TARGET") || "rpi3" System.put_env("NERVES_TARGET", blah) blah end - def target(_), do: "development" + defp target(_), do: "development" end -defmodule Mix.Tasks.Hello do +defmodule Mix.Tasks.Warning do use Mix.Task def run(_) do - File.cd "apps/farmbot" - t = File.ls! - Mix.shell.info "hello #{inspect t}" + Mix.raise( + """ + Welcome to the Farmbot Build Environment. + You probably meant to be in the "apps/farmbot" directory. + """) end end diff --git a/scripts/build_firmware.sh b/scripts/build_firmware.sh new file mode 100755 index 00000000..dc838208 --- /dev/null +++ b/scripts/build_firmware.sh @@ -0,0 +1,8 @@ +#!/bin/bash +SYSTEM=$1 +export MIX_ENV=prod +export NERVES_TARGET=$SYSTEM +echo "building system on $SYSTEM" +cd apps/farmbot +mix deps.get +mix firmware diff --git a/scripts/build_release_images.sh b/scripts/build_release_images.sh new file mode 100755 index 00000000..d1a1d87d --- /dev/null +++ b/scripts/build_release_images.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# Collects all the various images and archives for constructing a release. +SYSTEM=$1 +VERSION=$2 +export MIX_ENV=prod +export NERVES_TARGET=$SYSTEM +REL_DIR=release-$VERSION +mkdir -p $REL_DIR + +FIRM_FILE=apps/farmbot/_images/$SYSTEM/farmbot.fw # the .fw file generated by `mix firmware` +FIRM_FILE_REL=$REL_DIR/farmbot-$SYSTEM-$VERSION.fw # where we want our formatted system +FIRM_FILE_REL_IMG=$REL_DIR/farmbot-$SYSTEM-$VERSION.img # same as the above file, but a .img file + +SYSTEM_DIR=apps/NERVES_SYSTEM_$SYSTEM # the NERVES_SYSTEM build dir +SYSTEM_TAR=$SYSTEM_DIR/nerves_system_$SYSTEM.tar.gz # the archive generated by `make system` +SYSTEM_TAR_REL=$REL_DIR/farmbot.rootfs-$SYSTEM-$VERSION.tar.gz # where we want our outputted archive to be + +# copy the firmware file to the release file +cp $FIRM_FILE $FIRM_FILE_REL +# build an image from the release firmware +fwup -a -d $FIRM_FILE_REL_IMG -i $FIRM_FILE_REL -t complete +# copy the rootfs archive to the release dir +cp $SYSTEM_TAR $SYSTEM_TAR_REL diff --git a/scripts/build_system.sh b/scripts/build_system.sh new file mode 100755 index 00000000..ae34647a --- /dev/null +++ b/scripts/build_system.sh @@ -0,0 +1,6 @@ +#!/bin/bash +SYSTEM=$1 +echo "building system on $SYSTEM" +cd apps/NERVES_SYSTEM_$SYSTEM +make +make system diff --git a/scripts/clone_system.sh b/scripts/clone_system.sh new file mode 100755 index 00000000..e4dd4825 --- /dev/null +++ b/scripts/clone_system.sh @@ -0,0 +1,13 @@ +#!/bin/bash +SYSTEM=$1 +NERVES_SYSTEM_BR_GIT="https://github.com/nerves-project/nerves_system_br" + +if [ -d "apps/NERVES_SYSTEM_$SYSTEM" ]; then + # Control will enter here if $DIRECTORY exists. + echo "NERVES_SYSTEM_$SYSTEM dir found." +else + echo "NERVES_SYSTEM_$SYSTEM dir not found." + git clone $NERVES_SYSTEM_BR_GIT apps/nerves_system_br +fi + +apps/nerves_system_br/create-build.sh apps/nerves_system_$SYSTEM/nerves_defconfig apps/NERVES_SYSTEM_$SYSTEM diff --git a/scripts/run_tests.sh b/scripts/run_tests.sh new file mode 100755 index 00000000..7af97b47 --- /dev/null +++ b/scripts/run_tests.sh @@ -0,0 +1,5 @@ +#!/bin/bash +cd apps/farmbot +export MIX_ENV=test +mix deps.get +mix test