-module(go_over). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([main/0]). -file("/home/bwireman/src/go-over/src/go_over.gleam", 24). -spec get_vulnerable_packages( list(go_over@packages:package()), go_over@config:config() ) -> list(go_over@warning:warning()). get_vulnerable_packages(Pkgs, Conf) -> _pipe = go_over@advisories@advisories:check_for_advisories( Pkgs, erlang:element(5, Conf), erlang:element(8, Conf), erlang:element(9, Conf) ), _pipe@1 = gleam@list:map( _pipe, fun(P) -> gxyz@gxyz_tuple:map2_1( P, fun(_capture) -> go_over@config:filter_advisory_ids(Conf, _capture) end ) end ), _pipe@2 = gleam@list:filter( _pipe@1, fun(P@1) -> gxyz@gxyz_tuple:at2_1(P@1) =:= [] end ), gleam@list:flat_map( _pipe@2, fun(_capture@1) -> gxyz@gxyz_tuple:apply_from2( _capture@1, fun go_over@warning:adv_to_warning/2 ) end ). -file("/home/bwireman/src/go-over/src/go_over.gleam", 33). -spec get_retired_packages( list(go_over@packages:package()), go_over@config:config() ) -> list(go_over@warning:warning()). get_retired_packages(Pkgs, Conf) -> _pipe = Pkgs, _pipe@2 = gleam@list:map( _pipe, fun(Pkg) -> _pipe@1 = go_over@retired@retired:check_retired( Pkg, erlang:element(5, Conf), erlang:element(8, Conf), erlang:element(9, Conf) ), gleam@option:map(_pipe@1, fun(Ret) -> {Pkg, Ret} end) end ), _pipe@3 = gleam@option:values(_pipe@2), gleam@list:map( _pipe@3, fun(_capture) -> gxyz@gxyz_tuple:apply_from2( _capture, fun go_over@warning:retired_to_warning/2 ) end ). -file("/home/bwireman/src/go-over/src/go_over.gleam", 43). -spec get_outdated_packages( list(go_over@packages:package()), go_over@config:config() ) -> list(go_over@warning:warning()). get_outdated_packages(Pkgs, Conf) -> _pipe = Pkgs, _pipe@1 = gleam@list:map( _pipe, fun(Pkg) -> case go_over@retired@outdated:check_outdated( Pkg, erlang:element(5, Conf), erlang:element(8, Conf), erlang:element(9, Conf) ) of {some, Ret} -> {some, {Pkg, Ret}}; none -> none end end ), _pipe@2 = gleam@option:values(_pipe@1), gleam@list:map( _pipe@2, fun(_capture) -> gxyz@gxyz_tuple:apply_from2( _capture, fun go_over@warning:outdated_to_warning/2 ) end ). -file("/home/bwireman/src/go-over/src/go_over.gleam", 55). -spec print_warnings_count(list(go_over@warning:warning())) -> nil. print_warnings_count(Vulns) -> _pipe = (<<<<<<"⛔ "/utf8, (erlang:integer_to_binary(erlang:length(Vulns)))/binary>>/binary, " WARNING(s) FOUND!"/utf8>>/binary, (<<"\n-----------------------------------------------\n"/utf8>>)/binary>>), gleam_stdlib:print_error(_pipe). -file("/home/bwireman/src/go-over/src/go_over.gleam", 65). -spec print_warnings(list(go_over@warning:warning()), go_over@config:config()) -> nil. print_warnings(Vulns, Conf) -> case erlang:element(7, Conf) of minimal -> _pipe = Vulns, _pipe@1 = gleam@function:tap(_pipe, fun print_warnings_count/1), _pipe@2 = gleam@list:map( _pipe@1, fun go_over@warning:format_as_string_minimal/1 ), _pipe@3 = gleam@string:join(_pipe@2, <<""/utf8>>), gleam_stdlib:print_error(_pipe@3); json -> _pipe@4 = Vulns, _pipe@5 = gleam@list:map( _pipe@4, fun go_over@warning:format_as_json/1 ), _pipe@6 = gleam@json:preprocessed_array(_pipe@5), _pipe@7 = gleam@json:to_string(_pipe@6), gleam_stdlib:print_error(_pipe@7); _ -> _pipe@8 = Vulns, _pipe@9 = gleam@function:tap(_pipe@8, fun print_warnings_count/1), _pipe@10 = gleam@list:map( _pipe@9, fun go_over@warning:format_as_string/1 ), _pipe@11 = gleam@string:join( _pipe@10, <<"\n-----------------------------------------------\n"/utf8>> ), gleam_stdlib:print_error(_pipe@11) end, shellout_ffi:os_exit(1). -file("/home/bwireman/src/go-over/src/go_over.gleam", 91). -spec main() -> nil. main() -> Conf@1 = case go_over@config:spin_up( go_over@config:read_config(<<"gleam.toml"/utf8>>), shellout_ffi:start_arguments() ) of {error, E} -> gleam_stdlib:println_error(E), shellout_ffi:os_exit(0), erlang:error(#{gleam_error => panic, message => <<"Unreachable, please create an issue in https://github.com/bwireman/go-over if you see this"/utf8>>, module => <<"go_over"/utf8>>, function => <<"main"/utf8>>, line => 98}); {ok, Conf} -> Conf end, Spinner = go_over@util@spinner:new_spinner( <<"Let's do this!"/utf8>>, erlang:element(8, Conf@1) ), gxyz@gxyz_function:ignore_result( erlang:element(5, Conf@1), gxyz@gxyz_function:freeze1( fun simplifile_erl:delete/1, go_over@util@constants:go_over_path(erlang:element(9, Conf@1)) ) ), go_over@util@spinner:set_text_spinner( Spinner, <<"Reading manifest"/utf8>>, erlang:element(8, Conf@1) ), Pkgs = begin _pipe = go_over@packages:read_manifest(<<"manifest.toml"/utf8>>), _pipe@1 = go_over@config:filter_dev_dependencies(Conf@1, _pipe), _pipe@2 = go_over@config:filter_packages(Conf@1, _pipe@1), go_over@config:filter_indirect(Conf@1, _pipe@2) end, go_over@util@spinner:set_text_spinner( Spinner, <<"Checking packages: "/utf8, (go_over@util@print:raw(<<"vulnerable"/utf8>>, <<"red"/utf8>>))/binary>>, erlang:element(8, Conf@1) ), Vulnerable_packages = get_vulnerable_packages(Pkgs, Conf@1), go_over@util@spinner:set_text_spinner( Spinner, <<"Checking packages: "/utf8, (go_over@util@print:raw(<<"retired"/utf8>>, <<"yellow"/utf8>>))/binary>>, erlang:element(8, Conf@1) ), Retired_packages = get_retired_packages(Pkgs, Conf@1), go_over@util@spinner:set_text_spinner( Spinner, <<"Checking packages: "/utf8, (go_over@util@print:raw( <<"outdated"/utf8>>, <<"brightmagenta"/utf8>> ))/binary>>, erlang:element(8, Conf@1) ), Outdated_packages = gxyz@gxyz_function:iff( erlang:element(3, Conf@1), gxyz@gxyz_function:freeze2(fun get_outdated_packages/2, Pkgs, Conf@1), [] ), gxyz@gxyz_function:iff_nil( erlang:element(6, Conf@1), gxyz@gxyz_function:freeze2( fun print_warnings/2, [{warning, none, <<"fake"/utf8>>, <<"x.y.z"/utf8>>, <<"Retired"/utf8>>, vulnerable, <<"Critical"/utf8>>, direct}, {warning, none, <<"another_fake"/utf8>>, <<"1.2.3"/utf8>>, <<"Vulnerable"/utf8>>, vulnerable, <<"High"/utf8>>, direct}, {warning, none, <<"and_another"/utf8>>, <<"4.5.6"/utf8>>, <<"Vulnerable"/utf8>>, vulnerable, <<"Moderate"/utf8>>, direct}, {warning, none, <<"one_more"/utf8>>, <<"7.8.9"/utf8>>, <<"Vulnerable"/utf8>>, vulnerable, <<"LOW"/utf8>>, indirect}, {warning, none, <<"this_one_was_retired"/utf8>>, <<"10.11.12"/utf8>>, <<"Retired"/utf8>>, retired, <<"Package Retired"/utf8>>, indirect}], Conf@1 ) ), go_over@util@spinner:set_text_spinner( Spinner, <<"Filtering warnings"/utf8>>, erlang:element(8, Conf@1) ), Warnings = begin _pipe@3 = lists:append(Retired_packages, Vulnerable_packages), _pipe@4 = lists:append(_pipe@3, Outdated_packages), go_over@config:filter_severity(Conf@1, _pipe@4) end, go_over@util@spinner:stop_spinner(Spinner), case Warnings of [] -> go_over@util@print:success(<<"✅ No warnings found!"/utf8>>); Vulns -> print_warnings(Vulns, Conf@1) end.