# cpanfile — Perl dependency manifest for the Lacuna game server. # # This replaces the inline `cpanm --notest ` list that used to live in # docker/build-server/Dockerfile. Regenerate the lockfile after any change: # # carton install # resolves deps, writes cpanfile.snapshot # # and commit both cpanfile and cpanfile.snapshot together. The Docker build # installs strictly from the snapshot (`carton install --deployment`). # # Perl 5.40. Core `given`/`when`/`default` and the `~~` smartmatch operator have # been removed from this codebase (un-silenceable deprecation warnings on 5.40; # gone entirely in 5.42). `given`/`when`/`default` and an explicit `smartmatch()` # now come from Switch::Right (see `requires 'Switch::Right'` below). # --- Version pins (deliberate — keep the comment explaining why) ------------ # Written against the 4.x API and old MySQL servers (dev 5.7 / deployed 5.5). # DBD::mysql 5.x flipped SSL/auth defaults; revisit as separate work. requires 'DBD::mysql', '== 4.052'; # Pre-existing pin carried over from the old Dockerfile. requires 'MailTools', '== 2.21'; # --- Runtime: core framework ---------------------------------------------- requires 'Moose'; requires 'MooseX::NonMoose'; requires 'MooseX::Singleton'; requires 'MooseX::App'; requires 'namespace::autoclean'; requires 'Module::Find'; requires 'rlib'; requires 'PerlX::Maybe'; requires 'Try::Tiny'; requires 'Class::Load'; requires 'Guard'; requires 'Clone'; requires 'Path::Class'; requires 'Exception::Class'; requires 'Tie::IxHash'; # --- Runtime: web / PSGI stack ------------------------------------------------ requires 'Plack'; requires 'Starman'; requires 'Server::Starter'; requires 'Net::Server::SS::PreFork'; requires 'Plack::Handler::Twiggy'; requires 'Plack::App::WebSocket::Connection'; requires 'Plack::Middleware::CrossOrigin'; requires 'Plack::Middleware::Headers'; requires 'Plack::Middleware::SizeLimit'; requires 'Plack::Middleware::LightProfile'; requires 'JSON::RPC::Dispatcher'; requires 'JSON::RPC::Dispatcher::App'; # --- Runtime: DB / ORM ----------------------------------------------------- requires 'DBI'; requires 'DBIx::Class'; requires 'DBIx::Class::Schema'; requires 'DBIx::Class::DeploymentHandler'; requires 'DBIx::Class::DynamicSubclass'; requires 'DBIx::Class::EasyFixture'; requires 'DBIx::Class::InflateColumn::Serializer'; requires 'DBIx::Class::TimeStamp'; requires 'App::DH'; # --- Runtime: caching / queue ---------------------------------------------- # Compiles a bundled libmemcached from source. Pinned so the Dockerfile's # pre-install step (needed to give it a longer build timeout — carton wipes # PERL_CPANM_OPT) stays in lockstep with the snapshot. requires 'Memcached::libmemcached', '== 1.001801'; requires 'AnyEvent'; requires 'EV'; requires 'AnyEvent::Beanstalk'; requires 'Beanstalk::Client'; requires 'AnyEvent::WebSocket::Client'; requires 'AnyEvent::WebSocket::Server'; # --- Runtime: JSON / serialization --------------------------------------------- requires 'JSON'; requires 'JSON::Any'; requires 'JSON::XS'; requires 'JSON::WebToken'; # --- Runtime: dates ------------------------------------------------------------ requires 'DateTime'; requires 'DateTime::Format::Duration'; requires 'DateTime::Format::MySQL'; requires 'DateTime::Format::Strptime'; requires 'Time::HiRes'; requires 'Time::Warp'; # --- Runtime: crypto / digests ---------------------------------------------- requires 'Crypt::SaltedHash'; requires 'Digest::MD5'; requires 'Digest::MD4'; requires 'Digest::HMAC_SHA1'; requires 'String::Random'; requires 'UUID::Tiny'; # --- Runtime: HTTP clients / TLS / external services ------------------------ requires 'LWP::UserAgent'; requires 'LWP::Protocol::https'; requires 'IO::Socket::IP'; requires 'IO::Socket::SSL'; requires 'SOAP::Lite'; # --- Runtime: email --------------------------------------------------------- requires 'Email::Valid'; requires 'Data::Validate::Email'; # --- Runtime: images (captcha) -------------------------------------------------- requires 'GD'; requires 'GD::SecurityImage'; # --- Runtime: text / parsing / misc --------------------------------------------- requires 'Encode'; requires 'Text::CSV_XS'; requires 'Text::Trim'; requires 'Text::WagnerFischer'; requires 'Text::Xslate'; requires 'Regexp::Common'; requires 'URI::Encode'; # Modern replacement for core given/when/default + the ~~ smartmatch operator # (both removed from this codebase — see the header comment). Needs Perl v5.36+. requires 'Switch::Right'; requires 'List::Util'; requires 'List::MoreUtils'; requires 'List::Util::WeightedChoice'; requires 'Bad::Words'; requires 'XML::Parser'; requires 'XML::Hash::LX'; requires 'XML::FeedPP'; requires 'Config::JSON'; requires 'Config::YAML'; requires 'Pod::Simple::HTML'; # --- Runtime: logging ----------------------------------------------------------- requires 'Log::Log4perl'; requires 'Log::Any::Adapter'; requires 'Log::Any::Adapter::Log4perl'; # --- Runtime: process / daemon / CLI (schedulers + bin/ scripts) --------------- requires 'App::Daemon'; requires 'File::Pid'; requires 'File::Copy'; requires 'File::Path'; requires 'Sysadm::Install'; requires 'Term::ReadKey'; requires 'Term::ProgressBar'; requires 'Term::ProgressBar::Quiet'; requires 'Term::ProgressBar::Simple'; requires 'Module::Build'; # --- Test-only ------------------------------------------------------------------ on 'test' => sub { requires 'Test::Most'; requires 'Test::Harness'; requires 'Test::Deep'; requires 'Test::Differences'; requires 'Test::Exception'; requires 'Test::Number::Delta'; requires 'Test::Trap'; requires 'Test::Warn'; requires 'Test::Compile'; requires 'Test::Pod::Coverage'; requires 'Test::Class::Moose'; requires 'Test::Mock::Class'; };