Resolving Hex dependencies... Resolution completed in 0.118s Unchanged: acceptor_pool 1.0.1 bandit 1.10.4 circular_buffer 1.0.0 cli_subprocess_core 0.1.0 codex_sdk 0.16.1 ctx 0.6.0 elixir_make 0.9.0 erlexec 2.2.4 external_runtime_transport 0.1.0 finch 0.21.0 gproc 0.9.1 grpcbox 0.17.1 hpack_erl 0.3.0 hpax 1.0.3 interactive_cmd 0.1.4 jason 1.4.4 mime 2.0.7 mint 1.7.1 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 nimble_options 1.1.1 nimble_pool 1.1.0 oauth2 2.1.0 opentelemetry 1.7.0 opentelemetry_api 1.5.0 opentelemetry_exporter 1.10.0 plug 1.19.1 plug_crypto 2.1.1 property_table 0.3.3 req 0.5.17 ring_logger 0.11.5 shoehorn 0.9.3 ssl_verify_fun 1.1.7 tablet 0.3.2 telemetry 1.4.1 tesla 1.17.0 thousand_island 1.4.3 tls_certificate_check 1.32.1 toml 0.7.0 toolshed 0.4.2 ts_chatterbox 0.15.1 typed_struct 0.3.0 uboot_env 1.0.2 websock 0.5.3 websockex 0.5.1 zoi 0.17.4 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_toolchain_ctng Compiling 1 file (.ex) Generated nerves_toolchain_ctng app ==> nerves_system_br Generated nerves_system_br 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 ==> typed_struct Compiling 2 files (.ex) Generated typed_struct app ==> mime Compiling 1 file (.ex) Generated mime app ==> toml Compiling 10 files (.ex) warning: using single-quoted strings to represent charlists is deprecated. Use ~c"" if you indeed want a charlist or use "" instead. You may run "mix format --migrate" to change all single-quoted strings to use the ~c sigil and fix this warning. │ 264 │ defp handle_token(lexer, original, doc, type, skip, _data, lines) when type in '-_' do │ ~ │ └─ lib/decoder.ex:264:82 warning: using single-quoted strings to represent charlists is deprecated. Use ~c"" if you indeed want a charlist or use "" instead. You may run "mix format --migrate" to change all single-quoted strings to use the ~c sigil and fix this warning. │ 371 │ {:ok, {type, _skip, _data, _lines}} when type in '-+' -> │ ~ │ └─ lib/decoder.ex:371:56 warning: using single-quoted strings to represent charlists is deprecated. Use ~c"" if you indeed want a charlist or use "" instead. You may run "mix format --migrate" to change all single-quoted strings to use the ~c sigil and fix this warning. │ 419 │ {:ok, {:alpha, _, <>, _}} when c in 'eE' -> │ ~ │ └─ lib/decoder.ex:419:56 warning: using single-quoted strings to represent charlists is deprecated. Use ~c"" if you indeed want a charlist or use "" instead. You may run "mix format --migrate" to change all single-quoted strings to use the ~c sigil and fix this warning. │ 474 │ {:ok, {:alpha, _, <>, _}} when c in 'eE' -> │ ~ │ └─ lib/decoder.ex:474:52 warning: using single-quoted strings to represent charlists is deprecated. Use ~c"" if you indeed want a charlist or use "" instead. You may run "mix format --migrate" to change all single-quoted strings to use the ~c sigil and fix this warning. │ 514 │ {:ok, {sign, _, _, _}} when sign in '-+' and last == ?e -> │ ~ │ └─ lib/decoder.ex:514:43 warning: using single-quoted strings to represent charlists is deprecated. Use ~c"" if you indeed want a charlist or use "" instead. You may run "mix format --migrate" to change all single-quoted strings to use the ~c sigil and fix this warning. │ 518 │ {:ok, {:alpha, _, <>, _}} when c in 'eE' and signal == ?. -> │ ~ │ └─ lib/decoder.ex:518:52 warning: using single-quoted strings to represent charlists is deprecated. Use ~c"" if you indeed want a charlist or use "" instead. You may run "mix format --migrate" to change all single-quoted strings to use the ~c sigil and fix this warning. │ 522 │ {:ok, {?_, skip, _, lines}} when last not in '_e.' -> │ ~ │ └─ lib/decoder.ex:522:52 warning: using single-quoted strings to represent charlists is deprecated. Use ~c"" if you indeed want a charlist or use "" instead. You may run "mix format --migrate" to change all single-quoted strings to use the ~c sigil and fix this warning. │ 538 │ {:ok, {type, skip, data, lines}} when last in 'e.' -> │ ~ │ └─ lib/decoder.ex:538:53 warning: using single-quoted strings to represent charlists is deprecated. Use ~c"" if you indeed want a charlist or use "" instead. You may run "mix format --migrate" to change all single-quoted strings to use the ~c sigil and fix this warning. │ 542 │ {:ok, {_type, skip, _data, lines} = token} when last not in '_e.' -> │ ~ │ └─ lib/decoder.ex:542:67 warning: using single-quoted strings to represent charlists is deprecated. Use ~c"" if you indeed want a charlist or use "" instead. You may run "mix format --migrate" to change all single-quoted strings to use the ~c sigil and fix this warning. │ 682 │ {:ok, {sign, _, _, _}} when sign in '-+' -> │ ~ │ └─ lib/decoder.ex:682:45 warning: using single-quoted strings to represent charlists is deprecated. Use ~c"" if you indeed want a charlist or use "" instead. You may run "mix format --migrate" to change all single-quoted strings to use the ~c sigil and fix this warning. │ 796 │ {:ok, {sign, _, _, _}} when sign in '-+' -> │ ~ │ └─ lib/decoder.ex:796:43 warning: using single-quoted strings to represent charlists is deprecated. Use ~c"" if you indeed want a charlist or use "" instead. You may run "mix format --migrate" to change all single-quoted strings to use the ~c sigil and fix this warning. │ 916 │ {:ok, {type, skip, _, lines}} when type in '-_' -> │ ~ │ └─ lib/decoder.ex:916:52 warning: using single-quoted strings to represent charlists is deprecated. Use ~c"" if you indeed want a charlist or use "" instead. You may run "mix format --migrate" to change all single-quoted strings to use the ~c sigil and fix this warning. │ 954 │ {:ok, {type, _, _, _}} when type in '-_' -> │ ~ │ └─ lib/decoder.ex:954:51 warning: using single-quoted strings to represent charlists is deprecated. Use ~c"" if you indeed want a charlist or use "" instead. You may run "mix format --migrate" to change all single-quoted strings to use the ~c sigil and fix this warning. │ 969 │ {:ok, {type, _, _, _}} when type in '-_' -> │ ~ │ └─ lib/decoder.ex:969:43 warning: using single-quoted strings to represent charlists is deprecated. Use ~c"" if you indeed want a charlist or use "" instead. You may run "mix format --migrate" to change all single-quoted strings to use the ~c sigil and fix this warning. │ 983 │ {:ok, {type, _, _, _}} when type in '-_' -> │ ~ │ └─ lib/decoder.ex:983:47 Generated toml app ==> circular_buffer Compiling 1 file (.ex) Generated circular_buffer app ==> nimble_options Compiling 3 files (.ex) Generated nimble_options app ==> plug_crypto Compiling 5 files (.ex) Generated plug_crypto app ==> hpax Compiling 4 files (.ex) Generated hpax app ==> mint Compiling 1 file (.erl) Compiling 20 files (.ex) Generated mint app ==> ssl_verify_fun Compiling 7 files (.erl) Generated ssl_verify_fun app ==> nerves_compatibility_test ===> Analyzing applications... ===> Compiling ctx make: Entering directory '/work/proj/deps/erlexec/c_src' make: Nothing to be done for 'all'. make: Leaving directory '/work/proj/deps/erlexec/c_src' ===> Analyzing applications... ===> Compiling erlexec ==> external_runtime_transport Compiling 23 files (.ex) Generated external_runtime_transport app ==> nerves_logging CC kmsg_tailer.o LD kmsg_tailer Compiling 5 files (.ex) Generated nerves_logging app ==> ring_logger Compiling 7 files (.ex) Generated ring_logger app ==> shoehorn Compiling 8 files (.ex) Generated shoehorn app ==> nerves_compatibility_test ===> Analyzing applications... ===> Compiling gproc ===> Analyzing applications... ===> Compiling telemetry ==> websockex Compiling 6 files (.ex) Generated websockex app ==> thousand_island Compiling 18 files (.ex) Generated thousand_island app ==> zoi Compiling 79 files (.ex) Generated zoi app ==> nerves_compatibility_test ===> Analyzing applications... ===> Compiling acceptor_pool ==> cli_subprocess_core Compiling 42 files (.ex) Generated cli_subprocess_core app ==> nerves_compatibility_test ===> Analyzing applications... ===> Compiling hpack ===> Analyzing applications... ===> Compiling tls_certificate_check ==> plug Compiling 1 file (.erl) Compiling 42 files (.ex) Generated plug app ==> uboot_env Compiling 5 files (.ex) Generated uboot_env app ==> nimble_pool Compiling 2 files (.ex) Generated nimble_pool app ==> finch Compiling 14 files (.ex) Generated finch app ==> req Compiling 19 files (.ex) Generated req app ==> tesla Compiling 41 files (.ex) Generated tesla app ==> oauth2 Compiling 13 files (.ex) Generated oauth2 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 chatterbox ===> Analyzing applications... ===> Compiling grpcbox ==> websock Compiling 1 file (.ex) Generated websock app ==> bandit Compiling 54 files (.ex) Generated bandit app ==> opentelemetry_api Compiling 19 files (.erl) Compiling 5 files (.ex) Generated opentelemetry_api app ==> nerves_compatibility_test ===> Analyzing applications... ===> Compiling opentelemetry ===> Analyzing applications... ===> Compiling opentelemetry_exporter ==> codex_sdk Compiling 182 files (.ex) warning: a struct for Codex.OAuth.Session is expected on struct update: %Codex.OAuth.Session{session | token_store: token_store} but got type: dynamic() where "session" was given the type: # type: dynamic() # from: lib/codex/oauth/flows/device_code.ex:217:21 session = Codex.OAuth.TokenStore.Memory.fetch(token_store) when defining the variable "session", you must also pattern match on "%Codex.OAuth.Session{}". 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: │ 218 │ {:ok, %Codex.OAuth.Session{session | token_store: token_store}} │ ~ │ └─ lib/codex/oauth/flows/device_code.ex:218:19: Codex.OAuth.Flows.DeviceCode.persist_session_from_tokens/2 warning: a struct for Codex.OAuth.Session is expected on struct update: %Codex.OAuth.Session{session | token_store: token_store} but got type: dynamic() where "session" was given the type: # type: dynamic() # from: lib/codex/oauth/flows/browser_code.ex:153:21 session = Codex.OAuth.TokenStore.Memory.fetch(token_store) when defining the variable "session", you must also pattern match on "%Codex.OAuth.Session{}". 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: │ 154 │ {:ok, %Session{session | token_store: token_store}} │ ~ │ └─ lib/codex/oauth/flows/browser_code.ex:154:19: Codex.OAuth.Flows.BrowserCode.persist_or_store_session/2 warning: a struct for Codex.OAuth.Session is expected on struct update: %Codex.OAuth.Session{refreshed_session | token_store: token_store} but got type: dynamic() where "refreshed_session" was given the type: # type: dynamic() # from: lib/codex/oauth/app_server_auth.ex:154:29 refreshed_session = Codex.OAuth.TokenStore.Memory.fetch(token_store) when defining the variable "refreshed_session", you must also pattern match on "%Codex.OAuth.Session{}". 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: │ 155 │ {:ok, %Session{refreshed_session | token_store: token_store}} │ ~ │ └─ lib/codex/oauth/app_server_auth.ex:155:17: Codex.OAuth.AppServerAuth.materialize_existing_session/1 Generated codex_sdk 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: shock-bronze (bb216943-b292-54fe-9bca-838a878540c9) 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 codex_sdk ==> nerves ==> nerves_compatibility_test Nerves environment MIX_TARGET: rpi4 MIX_ENV: prod ==> codex_sdk Compiling 182 files (.ex) warning: a struct for Codex.OAuth.Session is expected on struct update: %Codex.OAuth.Session{session | token_store: token_store} but got type: dynamic() where "session" was given the type: # type: dynamic() # from: lib/codex/oauth/flows/device_code.ex:217:21 session = Codex.OAuth.TokenStore.Memory.fetch(token_store) when defining the variable "session", you must also pattern match on "%Codex.OAuth.Session{}". 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: │ 218 │ {:ok, %Codex.OAuth.Session{session | token_store: token_store}} │ ~ │ └─ lib/codex/oauth/flows/device_code.ex:218:19: Codex.OAuth.Flows.DeviceCode.persist_session_from_tokens/2 warning: a struct for Codex.OAuth.Session is expected on struct update: %Codex.OAuth.Session{refreshed_session | token_store: token_store} but got type: dynamic() where "refreshed_session" was given the type: # type: dynamic() # from: lib/codex/oauth/app_server_auth.ex:154:29 refreshed_session = Codex.OAuth.TokenStore.Memory.fetch(token_store) when defining the variable "refreshed_session", you must also pattern match on "%Codex.OAuth.Session{}". 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: │ 155 │ {:ok, %Session{refreshed_session | token_store: token_store}} │ ~ │ └─ lib/codex/oauth/app_server_auth.ex:155:17: Codex.OAuth.AppServerAuth.materialize_existing_session/1 warning: a struct for Codex.OAuth.Session is expected on struct update: %Codex.OAuth.Session{session | token_store: token_store} but got type: dynamic() where "session" was given the type: # type: dynamic() # from: lib/codex/oauth/flows/browser_code.ex:153:21 session = Codex.OAuth.TokenStore.Memory.fetch(token_store) when defining the variable "session", you must also pattern match on "%Codex.OAuth.Session{}". 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: │ 154 │ {:ok, %Session{session | token_store: token_store}} │ ~ │ └─ lib/codex/oauth/flows/browser_code.ex:154:19: Codex.OAuth.Flows.BrowserCode.persist_or_store_session/2 Generated codex_sdk 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: boy-one (28afd895-c118-5842-0a15-a787e09f2cd1) 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`.