Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OTP-28 readiness #2936

Open
10 tasks
ferd opened this issue Feb 13, 2025 · 1 comment
Open
10 tasks

OTP-28 readiness #2936

ferd opened this issue Feb 13, 2025 · 1 comment

Comments

@ferd
Copy link
Collaborator

ferd commented Feb 13, 2025

Good news: the compiler works and all CT tests pass
Bad news: we got some Dialyzer fixing to do.

Here's the error log from running on OTP-28-rc1:

λ [vps] rebar3 → main → ./rebar3 ct                                                                                                                                                                                  ===> Verifying dependencies...                                                                                                                                                                                       ===> Analyzing applications...                                                                                                                                                                                       ===> Compiling meck                                                                                                                                                                                                  ===> Analyzing applications...                                                                                                                                                                                       ===> Compiling cth_readable                                                                                                                                                                                          ===> Compiling bbmustache                                                                                                                                                                                            ===> Compiling cf
===> Compiling erlware_commons
===> Compiling getopt
===> Compiling providers
===> Compiling eunit_formatters
===> Compiling ssl_verify_fun
===> Compiling relx
===> Compiling certifi
===> Compiling rebar
===> Running Common Test suites...
%%% rebar_alias_SUITE: .........
%%% rebar_as_SUITE: ...........
%%% rebar_compile_SUITE: ...................................................................................
%%% rebar_compile_SUITE ==> always_recompile_when_erl_compiler_options_set: SKIPPED                                                                                                                                  %%% rebar_compile_SUITE ==> {tc_user_skip,"compile:env_compiler_options/0 available"}
.....
%%% rebar_compiler_dag_SUITE: ...........
%%% rebar_compiler_epp_SUITE: ......
%%% rebar_compiler_format_SUITE: ..                                                                                                                                                                                  %%% rebar_completion_SUITE: ...
%%% rebar_cover_SUITE: .............
%%% rebar_ct_SUITE: .........................................................
%%% rebar_deps_SUITE: ..............................
%%% rebar_dialyzer_SUITE: ..............
%%% rebar_dir_SUITE: .......................
%%% rebar_disable_app_SUITE: .
%%% rebar_discover_SUITE: ....
%%% rebar_dist_utils_SUITE: ....
%%% rebar_edoc_SUITE: ...
%%% rebar_escriptize_SUITE: .....
%%% rebar_eunit_SUITE: .........................................
%%% rebar_file_utils_SUITE: ......................
%%% rebar_hooks_SUITE: .............
%%% rebar_install_deps_SUITE: .......................................
%%% rebar_lock_SUITE: ....
%%% rebar_manifest_SUITE: .....
%%% rebar_namespace_SUITE: ...............
%%% rebar_new_SUITE: .......
%%% rebar_opts_parser_SUITE: ..
%%% rebar_parallel_SUITE: ....
%%% rebar_paths_SUITE: ....
%%% rebar_pkg_SUITE: ...........
%%% rebar_pkg_alias_SUITE: ....
%%% rebar_pkg_repos_SUITE: ..............
%%% rebar_plugins_SUITE: .............
%%% rebar_profiles_SUITE: .........................
%%% rebar_release_SUITE: ............
%%% rebar_resource_SUITE: ...
%%% rebar_src_dirs_SUITE: ............
%%% rebar_templater_SUITE: ..
%%% rebar_unlock_SUITE: ....
%%% rebar_upgrade_SUITE: ..............................................................
%%% rebar_uri_SUITE: ..
%%% rebar_utils_SUITE: .............................
%%% rebar_xref_SUITE: ....
Skipped 1 (1, 0) tests. Passed 637 tests.
λ [vps] rebar3 → main → rm -rf _build
λ [vps] rebar3 → main → rebar3 as dialyze dialyzer
===> No entry for profile dialyze in config.
===> Verifying dependencies...
===> Analyzing applications...
===> Compiling bbmustache
===> Compiling cf
===> Compiling erlware_commons
===> Compiling cth_readable
===> Compiling getopt
===> Compiling providers
===> Compiling eunit_formatters
===> Compiling ssl_verify_fun
===> Compiling relx
===> Compiling certifi
===> Compiling rebar
===> Dialyzer starting, this may take a while...
===> Add debug_info to compiler options (erl_opts) if Dialyzer fails to load Core Erlang.
===> Updating plt...
===> Resolving project files...
===> Updating base plt...
===> Resolving base files...
===> Building with 221 files in /home/ferd/.cache/rebar3/rebar3_28.0-rc1_plt...
===> Copying /home/ferd/.cache/rebar3/rebar3_28.0-rc1_plt to /home/ferd/code/self/rebar3/_build/dialyze/rebar3_28.0-rc1_plt...
===> Checking 221 files in _build/dialyze/rebar3_28.0-rc1_plt...
===> Adding 455 files to _build/dialyze/rebar3_28.0-rc1_plt...
===> Doing success typing analysis...
===> Resolving project warning files...
===> Analyzing 173 files with _build/dialyze/rebar3_28.0-rc1_plt...

apps/rebar/src/rebar_compiler_xrl.erl
Line 38 Column 10: Unknown function leex:file/2
apps/rebar/src/rebar_compiler_yrl.erl
Line 45 Column 10: Unknown function yecc:file/2
/home/ferd/code/self/rebar3/apps/rebar/src/rebar_prv_common_test.erl:458:9: Body yields the type
          {'error', {'rebar_prv_common_test', {_, _}}} which violates the opacity of the other clauses.

/home/ferd/code/self/rebar3/apps/rebar/src/rebar_prv_common_test.erl:459:9: Body yields the type
          {'error', {'rebar_prv_common_test', {_, _}}} | dict:dict(_, _) which violates the opacity of the other clauses.

/home/ferd/code/self/rebar3/apps/rebar/src/rebar_prv_common_test.erl:467:9: Body yields the type
          {'error', {'rebar_prv_common_test', {_, _}}} which violates the opacity of the other clauses.

/home/ferd/code/self/rebar3/apps/rebar/src/rebar_prv_common_test.erl:468:9: Body yields the type
          {'error', {'rebar_prv_common_test', {_, _}}} | dict:dict(_, _) which violates the opacity of the other clauses.

/home/ferd/code/self/rebar3/apps/rebar/src/rebar_prv_common_test.erl:478:9: Body yields the type
          {'error', {'rebar_prv_common_test', {_, _}}} which violates the opacity of the other clauses.

/home/ferd/code/self/rebar3/apps/rebar/src/rebar_prv_common_test.erl:479:9: Body yields the opaque type
          dict:dict(_, _) whose opacity is broken by the other clauses.

/home/ferd/code/self/rebar3/apps/rebar/src/rebar_prv_eunit.erl:286:9: Body yields the type
          {'error', {'rebar_prv_eunit', {_, _}}} which violates the opacity of the other clauses.

/home/ferd/code/self/rebar3/apps/rebar/src/rebar_prv_eunit.erl:287:9: Body yields the type
          {'error', {'rebar_prv_eunit', {_, _}}} | dict:dict(_, _) which violates the opacity of the other clauses.

/home/ferd/code/self/rebar3/apps/rebar/src/rebar_prv_eunit.erl:295:9: Body yields the type
          {'error', {'rebar_prv_eunit', {_, _}}} which violates the opacity of the other clauses.

/home/ferd/code/self/rebar3/apps/rebar/src/rebar_prv_eunit.erl:296:9: Body yields the opaque type
          dict:dict(_, _) whose opacity is broken by the other clauses.


vendor/cth_readable/src/cth_readable_compact_shell.erl
Line 114 Column 50: The pattern "OK" can never match the type [65 | 68 | 69 | 70 | 73 | 76,...]
Line 117 Column 50: The pattern "OK" can never match the type [65 | 68 | 69 | 70 | 73 | 76,...]

vendor/cth_readable/src/cth_readable_failonly.erl
Line 90 Column 24: The created fun has no local return
Line 112 Column 53: The call logger:add_handler('cth_readable_failonly', 'cth_readable_failonly', #{'max_events':=_, 'sasl':='true', _=>_}) breaks the contract (HandlerId, Module, Config) -> 'ok' | {'error',term()} when HandlerId :: logger_handler:id(), Module :: module(), Config :: logger_handler:config()
Line 116 Column 53: The call logger:add_handler('cth_readable_failonly', 'cth_readable_failonly', #{'max_events':=_, 'sasl':='false', _=>_}) breaks the contract (HandlerId, Module, Config) -> 'ok' | {'error',term()} when HandlerId :: logger_handler:id(), Module :: module(), Config :: logger_handler:config()
Line 344 Column 17: The pattern {'ok', {_, Cfg}} can never match the type {'error',{'not_found',_}} | {'ok',#{'config'=>_, 'filter_default'=>'log' | 'stop', 'filters'=>[{atom(),{fun((#{'level':='alert' | 'critical' | 'debug' | 'emergency' | 'error' | 'info' | 'notice' | 'warning', 'meta':=#{'domain'=>[atom()], 'file'=>string(), 'gl'=>pid(), 'line'=>non_neg_integer(), 'mfa'=>{atom(),atom(),non_neg_integer()}, 'pid'=>pid(),'report_cb'=>fun((...) -> binary() | maybe_improper_list(binary() | maybe_improper_list(any(),binary() | []) | char(),binary() | []) | {atom() | binary() | string(),[any()]}), 'time'=>integer(), atom()=>_}, 'msg':={atom() | binary() | string(),binary() | maybe_improper_list(any(),binary() | []) | map()}},_) -> 'ignore' | 'stop' | #{'level':='alert' | 'critical' | 'debug' | 'emergency' | 'error' | 'info' | 'notice' | 'warning', 'meta':=#{'domain'=>[atom()], 'file'=>string(), 'gl'=>pid(), 'line'=>non_neg_integer(), 'mfa'=>{atom(),atom(),non_neg_integer()}, 'pid'=>pid(), 'report_cb'=>fun((...) -> binary() | maybe_improper_list(binary() | maybe_improper_list(any(),binary() | []) | char(),binary() | []) | {atom() | binary() | string(),[any()]}), 'time'=>integer(), atom()=>_}, 'msg':={atom() | binary() | string(),binary() | maybe_improper_list(any(),binary() | []) | map()}}),_}}], 'formatter'=>{atom(),#{atom()=>_}}, 'id'=>atom(), 'level'=>'alert' | 'all' | 'critical' | 'debug' | 'emergency' | 'error' | 'info' | 'none' | 'notice' | 'warning', 'module'=>atom()}}
Line 446 Column 5: Unknown function lager_app:start_handler/3

vendor/cth_readable/src/cth_readable_lager_backend.erl
Line 56 Column 9: Unknown function lager_util:config_to_mask/1
Line 89 Column 8: Unknown function lager_util:config_to_mask/1
Line 102 Column 10: Unknown function lager_util:is_loggable/3

vendor/erlware_commons/src/ec_cmd_log.erl
Line 248 Column 1: The pattern <State, Color, 'true', Msg> can never match the type <_,99 | 103 | 109 | 114,'false',_>
Line 253 Column 1: The pattern <State, Color, 'true', Msg> can never match the type <_,99 | 103 | 109 | 114,'false',_>

vendor/relx/src/relx.erl
Line 130 Column 2: Invalid type specification for function relx:build_relup/4. The success typing is (_,_,_,_) -> none() but the spec is (rlx_release:name(),rlx_release:vsn(),rlx_release:vsn(),rlx_config:t() | rlx_state:t()) -> {'ok',rlx_state:t()} | {'error',term()}
Line 132 Column 1: Function build_relup/4 has no local return

vendor/relx/src/rlx_relup.erl
Line 9 Column 2: Invalid type specification for function rlx_relup:do/4. The success typing is (_,_,_,_) -> none() but the spec is (atom(),string(),string() | 'undefined',rlx_state:t()) -> {'ok',rlx_state:t()} | relx:error()
Line 10 Column 1: Function do/4 has no local return
Line 37 Column 1: Function make_upfrom_script/4 has no local return
===> Warnings written to _build/dialyze/28.0-rc1.dialyzer_warnings
===> Warnings occurred running dialyzer: 29

So far our list of items to fix:

  • Dialyzer in rebar3 xrl
  • Dialyzer in rebar3 yrl
  • Dialyzer in rebar3 CT
  • Dialyzer in rebar3 Eunit
  • Dialyzer in cth_readable
    • cth_readable needs a new release and to be updated
  • Dialyzer in erlware_commons
    • erlware_commons needs a new release and to be updated
  • Dialyzer in relx
    • relx needs a new release and to be updated
@ferd
Copy link
Collaborator Author

ferd commented Feb 13, 2025

I also checked the changelog stating new compiler errors are emitted with suggestions on how to fix things, and they compose nicely with our recent richer output:


===> Compiling apps/rebar/src/rebar_compiler_xrl.erl failed
    ┌─ apps/rebar/src/rebar_compiler_xrl.erl:
    │
 42 │              rebar_compiler:ok_tuple(Source, Ws, Config, Opts);
    │                                              ╰── variable 'Ws' is unbound, did you mean 'W'?


    ┌─ apps/rebar/src/rebar_compiler_xrl.erl:
    │
 41 │          {ok, _Mod, W} ->
    │                     ╰── variable 'W' is unused

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant