- Getting Started
We strongly recommend using metacpan-docker. This will give you a virtual machine already configured and ready to start developing on.
If you prefer not to use Docker, the following commands will get you started:
carton install
npm install
export PATH="$(realpath ./node_modules/.bin):$PATH"npm run buildWithout running this command you may get errors about a missing "asset map".
If you like, you can install carton and cmark via Homebrew:
brew install carton cmarkOn an ARM Mac you may need to install CommonMark in the following way:
LIBRARY_PATH=/opt/homebrew/lib CPATH=/opt/homebrew/include cpm install -g CommonMarkIf your carton install is having issues with SSL-related modules, you may need
to use an OPENSSL_PREFIX. Something like:
OPENSSL_PREFIX="/usr/local/Cellar/openssl@1.1/1.1.1q" carton installYou may need to check /usr/local/Cellar/openssl@1.1 to find the latest
installed path on your system.
You can use the supplied wrapper around prove to run tests:
./bin/prove tTo run the tests in parallel, add -j8 (or however many CPUs you have) to the
prove command.
Run all tests using the test profile:
docker compose --profile test run --rm testRun an arbitrary command:
docker compose --profile test run --rm test prove -lvr t/controller/search.tPlaywright tests live in the e2e/ directory.
docker compose --profile test run --rm playwrightnpm testThis automatically starts a local server on port 5099 (via plackup) before
running the tests. If a server is already running on that port, it will be
reused.
To run the tests against a server you've already started on a different port:
PLAYWRIGHT_PORT=5001 npm testWhen PLAYWRIGHT_PORT is set, Playwright skips starting its own server and
connects to the specified port instead.
docker compose up --watchStart the asset builder and the web server. The site will be served on
port 5001. The --watch flag enables automatic rebuilds when files change.
carton exec plackup -p 5001 -rIf you'd like to use Gazelle rather than the default Plack server:
carton exec plackup -p 5001 -s Gazelle -rThis project uses precious to run linters and tidiers (perltidy, perlcritic, perlimports, eslint, prettier, omegasort).
The test Docker image includes all linting tools. No local installation needed:
docker compose --profile test run --rm test precious lint --git
docker compose --profile test run --rm test precious tidy --gitIf you prefer to run precious locally, install it with:
./bin/install-precious /usr/local/binYou will want to set up the supplied pre-commit Git hook like so:
./git/setup.shwhich causes precious to be run before each commit.
The back end defaults to api.metacpan.org/v1. Running a local API server is
optional and not required to hack on the front end. The address to the API being
used can be changed in the metacpan_web.yaml file. Ideally you would create a
new file called metacpan_web_local.yaml that contains
api: http://127.0.0.1:5000which will be loaded on top of the existing config file.
On Win32 (and possibly also on other platforms) when using Perl < 5.12, the server started with plackup will generate warnings relating to date parsing. These are caused by Plack due to a bug in the gmtime implementation and can be removed by upgrading to Perl 5.12.