Resolving Hex dependencies... Resolution completed in 0.065s Unchanged: circular_buffer 1.0.0 cowboy 2.14.2 cowboy_telemetry 0.4.0 cowlib 2.16.0 elixir_make 0.9.0 inet_cidr 1.0.9 interactive_cmd 0.1.4 iptrie 0.10.0 jason 1.4.4 mime 2.0.7 mix_audit 2.1.5 nerves 1.14.1 nerves_discovery 0.1.2 nerves_logging 0.2.4 nerves_runtime 0.13.12 nerves_system_bbb 2.29.3 nerves_system_br 1.33.5 nerves_system_grisp2 0.17.3 nerves_system_mangopi_mq_pro 0.15.3 nerves_system_osd32mp1 0.24.3 nerves_system_qemu_aarch64 0.3.3 nerves_system_rpi 2.0.2 nerves_system_rpi0 2.0.2 nerves_system_rpi0_2 2.0.2 nerves_system_rpi2 2.0.2 nerves_system_rpi3 2.0.2 nerves_system_rpi4 2.0.2 nerves_system_rpi5 2.0.2 nerves_system_x86_64 1.33.3 nerves_toolchain_aarch64_nerves_linux_gnu 13.2.0 nerves_toolchain_armv6_nerves_linux_gnueabihf 13.2.0 nerves_toolchain_armv7_nerves_linux_gnueabihf 13.2.0 nerves_toolchain_ctng 1.10.0 nerves_toolchain_riscv64_nerves_linux_gnu 13.2.0 nerves_toolchain_x86_64_nerves_linux_musl 13.2.0 nerves_uevent 0.1.5 paraxial 2.9.0 pfx 0.14.2 plug 1.19.1 plug_cowboy 2.8.0 plug_crypto 2.1.1 property_table 0.3.3 radix 0.5.0 ranch 2.2.0 recon 2.5.6 ring_logger 0.11.5 shoehorn 0.9.3 sobelow 0.14.1 tablet 0.3.2 telemetry 1.4.1 toolshed 0.4.2 uboot_env 1.0.2 yamerl 0.10.0 yaml_elixir 2.12.1 All dependencies have been fetched ==> jason Compiling 10 files (.ex) Generated jason app ==> tablet Compiling 2 files (.ex) Generated tablet app ==> elixir_make Compiling 8 files (.ex) Generated elixir_make app ==> nerves_discovery Compiling 5 files (.ex) Generated nerves_discovery app ==> interactive_cmd Compiling 1 file (.ex) Generated interactive_cmd app ==> nerves HOST_CC port.o HOST_LD port Compiling 50 files (.ex) Generated nerves app ==> nerves_compatibility_test Nerves environment MIX_TARGET: rpi4 MIX_ENV: prod Checking for prebuilt Nerves artifacts... Found nerves_toolchain_aarch64_nerves_linux_gnu in cache /home/nerves/.nerves/artifacts/nerves_toolchain_aarch64_nerves_linux_gnu-linux_aarch64-13.2.0 Found nerves_system_rpi4 in cache /home/nerves/.nerves/artifacts/nerves_system_rpi4-portable-2.0.2 ==> nerves ==> nerves_system_br Generated nerves_system_br app ==> nerves_toolchain_ctng Compiling 1 file (.ex) Generated nerves_toolchain_ctng app ==> nerves_toolchain_aarch64_nerves_linux_gnu Generated nerves_toolchain_aarch64_nerves_linux_gnu app ==> nerves_system_rpi4 Generated nerves_system_rpi4 app ==> nerves_compatibility_test Nerves environment MIX_TARGET: rpi4 MIX_ENV: prod ==> mime Compiling 1 file (.ex) Generated mime app ==> circular_buffer Compiling 1 file (.ex) Generated circular_buffer app ==> recon Compiling 6 files (.erl) Generated recon app ==> plug_crypto Compiling 5 files (.ex) Generated plug_crypto app ==> nerves_compatibility_test ===> Analyzing applications... ===> Compiling yamerl ===> Analyzing applications... ===> Compiling ranch ==> pfx Compiling 2 files (.ex) warning: a struct for Pfx is expected on struct update: %Pfx{pfx | bits: <>} but got type: dynamic() where "pfx" was given the type: # type: dynamic() # from: lib/pfx.ex:500:12 pfx when defining the variable "pfx", you must also pattern match on "%Pfx{}". hint: given pattern matching is enough to catch typing errors, you may optionally convert the struct update into a map update. For example, instead of: user = some_function() %User{user | name: "John Doe"} it is enough to write: %User{} = user = some_function() %{user | name: "John Doe"} typing violation found at: │ 507 │ %Pfx{pfx | bits: <>} │ ~ │ └─ lib/pfx.ex:507:5: Pfx.bnot/1 warning: a struct for Pfx is expected on struct update: %Pfx{pfx1 | bits: truncate(<>, bit_size(pfx1.bits))} but got type: dynamic() where "pfx1" was given the type: # type: dynamic() # from: lib/pfx.ex:559:12 pfx1 when defining the variable "pfx1", you must also pattern match on "%Pfx{}". hint: given pattern matching is enough to catch typing errors, you may optionally convert the struct update into a map update. For example, instead of: user = some_function() %User{user | name: "John Doe"} it is enough to write: %User{} = user = some_function() %{user | name: "John Doe"} typing violation found at: │ 564 │ %Pfx{pfx1 | bits: truncate(<>, bit_size(pfx1.bits))} │ ~ │ └─ lib/pfx.ex:564:5: Pfx.band/2 warning: a struct for Pfx is expected on struct update: %Pfx{pfx1 | bits: truncate(<>, bit_size(pfx1.bits))} but got type: dynamic() where "pfx1" was given the type: # type: dynamic() # from: lib/pfx.ex:611:11 pfx1 when defining the variable "pfx1", you must also pattern match on "%Pfx{}". hint: given pattern matching is enough to catch typing errors, you may optionally convert the struct update into a map update. For example, instead of: user = some_function() %User{user | name: "John Doe"} it is enough to write: %User{} = user = some_function() %{user | name: "John Doe"} typing violation found at: │ 616 │ %Pfx{pfx1 | bits: truncate(<>, bit_size(pfx1.bits))} │ ~ │ └─ lib/pfx.ex:616:5: Pfx.bor/2 warning: a struct for Pfx is expected on struct update: %Pfx{pfx1 | bits: truncate(<>, bit_size(pfx1.bits))} but got type: dynamic() where "pfx1" was given the type: # type: dynamic() # from: lib/pfx.ex:658:12 pfx1 when defining the variable "pfx1", you must also pattern match on "%Pfx{}". hint: given pattern matching is enough to catch typing errors, you may optionally convert the struct update into a map update. For example, instead of: user = some_function() %User{user | name: "John Doe"} it is enough to write: %User{} = user = some_function() %{user | name: "John Doe"} typing violation found at: │ 663 │ %Pfx{pfx1 | bits: truncate(<>, bit_size(pfx1.bits))} │ ~ │ └─ lib/pfx.ex:663:5: Pfx.bxor/2 warning: a struct for Pfx is expected on struct update: %Pfx{pfx | bits: <>} but got type: dynamic() where "pfx" was given the type: # type: dynamic() # from: lib/pfx.ex:716:12 pfx when defining the variable "pfx", you must also pattern match on "%Pfx{}". hint: given pattern matching is enough to catch typing errors, you may optionally convert the struct update into a map update. For example, instead of: user = some_function() %User{user | name: "John Doe"} it is enough to write: %User{} = user = some_function() %{user | name: "John Doe"} typing violation found at: │ 724 │ %Pfx{pfx | bits: <>} │ ~ │ └─ lib/pfx.ex:724:5: Pfx.brot/2 warning: a struct for Pfx is expected on struct update: %Pfx{pfx | bits: <>} but got type: dynamic() where "pfx" was given the type: # type: dynamic() # from: lib/pfx.ex:810:11 pfx when defining the variable "pfx", you must also pattern match on "%Pfx{}". hint: given pattern matching is enough to catch typing errors, you may optionally convert the struct update into a map update. For example, instead of: user = some_function() %User{user | name: "John Doe"} it is enough to write: %User{} = user = some_function() %{user | name: "John Doe"} typing violation found at: │ 817 │ %Pfx{pfx | bits: <>} │ ~ │ └─ lib/pfx.ex:817:5: Pfx.bsl/2 warning: a struct for Pfx is expected on struct update: %Pfx{pfx | bits: <>} but got type: dynamic() where "pfx" was given the type: # type: dynamic() # from: lib/pfx.ex:858:11 pfx when defining the variable "pfx", you must also pattern match on "%Pfx{}". hint: given pattern matching is enough to catch typing errors, you may optionally convert the struct update into a map update. For example, instead of: user = some_function() %User{user | name: "John Doe"} it is enough to write: %User{} = user = some_function() %{user | name: "John Doe"} typing violation found at: │ 865 │ %Pfx{pfx | bits: <>} │ ~ │ └─ lib/pfx.ex:865:5: Pfx.bsr/2 warning: a struct for Pfx is expected on struct update: %Pfx{pfx | bits: <>} but got type: dynamic() where "pfx" was given the type: # type: dynamic() # from: lib/pfx.ex:2855:12 pfx when defining the variable "pfx", you must also pattern match on "%Pfx{}". hint: given pattern matching is enough to catch typing errors, you may optionally convert the struct update into a map update. For example, instead of: user = some_function() %User{user | name: "John Doe"} it is enough to write: %User{} = user = some_function() %{user | name: "John Doe"} typing violation found at: │ 2862 │ %Pfx{pfx | bits: <>} │ ~ │ └─ lib/pfx.ex:2862:5: Pfx.padl/3 warning: a struct for Pfx is expected on struct update: %Pfx{pfx | bits: <>} but got type: dynamic() where "pfx" was given the type: # type: dynamic() # from: lib/pfx.ex:2973:12 pfx when defining the variable "pfx", you must also pattern match on "%Pfx{}". hint: given pattern matching is enough to catch typing errors, you may optionally convert the struct update into a map update. For example, instead of: user = some_function() %User{user | name: "John Doe"} it is enough to write: %User{} = user = some_function() %{user | name: "John Doe"} typing violation found at: │ 2981 │ %Pfx{pfx | bits: <>} │ ~ │ └─ lib/pfx.ex:2981:5: Pfx.padr/3 warning: a struct for Pfx is expected on struct update: %Pfx{pfx | bits: <>} but got type: dynamic() where "pfx" was given the type: # type: dynamic() # from: lib/pfx.ex:3095:17 pfx when defining the variable "pfx", you must also pattern match on "%Pfx{}". hint: given pattern matching is enough to catch typing errors, you may optionally convert the struct update into a map update. For example, instead of: user = some_function() %User{user | name: "John Doe"} it is enough to write: %User{} = user = some_function() %{user | name: "John Doe"} typing violation found at: │ 3101 │ %Pfx{pfx | bits: <>} │ ~ │ └─ lib/pfx.ex:3101:7: Pfx.partition/2 warning: a struct for Pfx is expected on struct update: %Pfx{pfx | bits: <>} but got type: dynamic() where "pfx" was given the type: # type: dynamic() # from: lib/pfx.ex:3491:15 pfx when defining the variable "pfx", you must also pattern match on "%Pfx{}". hint: given pattern matching is enough to catch typing errors, you may optionally convert the struct update into a map update. For example, instead of: user = some_function() %User{user | name: "John Doe"} it is enough to write: %User{} = user = some_function() %{user | name: "John Doe"} typing violation found at: │ 3496 │ %Pfx{pfx | bits: <>} │ ~ │ └─ lib/pfx.ex:3496:5: Pfx.sibling/2 Generated pfx app ==> nerves_logging CC kmsg_tailer.o LD kmsg_tailer Compiling 5 files (.ex) Generated nerves_logging app ==> nerves_compatibility_test ===> Analyzing applications... ===> Compiling cowlib ==> radix Compiling 1 file (.ex) Generated radix app ==> iptrie Compiling 2 files (.ex) Generated iptrie app ==> ring_logger Compiling 7 files (.ex) Generated ring_logger app ==> sobelow Compiling 51 files (.ex) Generated sobelow app ==> shoehorn Compiling 8 files (.ex) Generated shoehorn app ==> yaml_elixir Compiling 6 files (.ex) Generated yaml_elixir app ==> mix_audit Compiling 16 files (.ex) Generated mix_audit app ==> nerves_compatibility_test ===> Analyzing applications... ===> Compiling telemetry ===> Analyzing applications... ===> Compiling cowboy ==> plug Compiling 1 file (.erl) Compiling 42 files (.ex) Generated plug app ==> uboot_env Compiling 5 files (.ex) Generated uboot_env app ==> property_table Compiling 8 files (.ex) Generated property_table app ==> nerves_uevent CC uevent.o LD uevent Compiling 5 files (.ex) Generated nerves_uevent app ==> nerves_runtime Compiling 14 files (.ex) Generated nerves_runtime app ==> toolshed Compiling 5 files (.ex) Generated toolshed app ==> nerves_compatibility_test ===> Analyzing applications... ===> Compiling cowboy_telemetry ==> plug_cowboy Compiling 5 files (.ex) Generated plug_cowboy app ==> inet_cidr Compiling 1 file (.ex) Generated inet_cidr app ==> paraxial Compiling 27 files (.ex) 07:44:09.514 [info] [Paraxial] only/except must be set at compile time, only: nil, except: nil Generated paraxial app ==> nerves_compatibility_test Compiling 2 files (.ex) Generated nerves_compatibility_test app |nerves| Building OTP Release... * [Nerves] validating vm.args * skipping runtime configuration (config/runtime.exs not found) * creating _build/rpi4/rel/nerves_compatibility_test/releases/0.1.0/vm.args Updating base firmware image with Erlang release... Copying rootfs_overlay: /work/proj/_build/rpi4/nerves/rootfs_overlay Copying rootfs_overlay: /work/proj/rootfs_overlay Building /work/proj/_build/rpi4/nerves/images/nerves_compatibility_test.fw... Firmware UUID: head-assume (5b122dba-ce46-5b4b-08f4-090ca39e3bb3) Firmware built successfully! 🎉 Now you may install it to a MicroSD card using `mix burn` or upload it to a device with `mix upload` or `mix firmware.gen.script`+`./upload.sh`. * Cleaning paraxial ==> nerves ==> nerves_compatibility_test Nerves environment MIX_TARGET: rpi4 MIX_ENV: prod ==> paraxial Compiling 27 files (.ex) 07:44:25.707 [info] [Paraxial] only/except must be set at compile time, only: nil, except: nil Generated paraxial app ==> nerves_compatibility_test Generated nerves_compatibility_test app |nerves| Building OTP Release... * [Nerves] validating vm.args * skipping runtime configuration (config/runtime.exs not found) * creating _build/rpi4/rel/nerves_compatibility_test/releases/0.1.0/vm.args Updating base firmware image with Erlang release... Copying rootfs_overlay: /work/proj/_build/rpi4/nerves/rootfs_overlay Copying rootfs_overlay: /work/proj/rootfs_overlay Building /work/proj/_build/rpi4/nerves/images/nerves_compatibility_test.fw... Firmware UUID: finger-utility (62f4e521-eb1f-5a96-e5c4-03f1216af384) Firmware built successfully! 🎉 Now you may install it to a MicroSD card using `mix burn` or upload it to a device with `mix upload` or `mix firmware.gen.script`+`./upload.sh`.