crow is an all-in-one distributed testing platform for student submissions,
focused on compilers.
Students and advisors can collaborate on test cases, submit them to crow
using the website or CLI tool, and test their compilers against them.
crowuses OIDC for loginscrowexecutes tests in parallel inside lightweight, isolated containerscrowoffers a flexible test syntax using arguments, exit codes, as well as in- and outputscrowoffers a GitHub app, syncing test results with GitHub commit statuscrowautomatically installs secrets using the GitHub Appcrowautomatically suggests workflows testing every commit using the GitHub Appcrowlive-streams test results to userscrowoffers a generic "queue this commit" and "what is the test status for commit" for custom integrationscrowoffers a CLI client to mirror tests into a directory, run them or upload new ones
We provide a Nix flake that builds every individual component, as well as docker images.
Build docker images
nix build github:I-Al-Istannen/crow#docker.backendnix build github:I-Al-Istannen/crow#docker.frontendnix build github:I-Al-Istannen/crow#executor*
* The executor usesruncfor sandboxing and can not run inside docker itself.nix build github:I-Al-Istannen/crow#client*
* Running the client is best done locally.
Build binaries
nix build github:I-Al-Istannen/crow#backend- Or
cargo build --release --bin backend-web
- Or
nix build github:I-Al-Istannen/crow#frontendnix build github:I-Al-Istannen/crow#executor- Or
cargo build --release --bin executor
- Or
nix build github:I-Al-Istannen/crow#frontendnix build github:I-Al-Istannen/crow#client- Or
cargo build --release --bin client
- Or
Execute
backend config.tomlsample configexecutor <name> <token> <backend url>You need at least one runner.executor <name> <token> <backend url> --test-tasterYou need at least one dedicated "test-taster" if you enable the feature in the config.client --helpThe client guides you through authentication and functionality in the help output.
- If you touch the database, you want to remove the
SQLX_OFFLINE=truefrom thebackend-web/.envfile - If you need to update the database (or create one for sqlx to use in online
mode), use
cargo sqlx database drop && cargo sqlx database setup - If you made changes to any query, you need to regenerate the sqlx data using
cargo sqlx prepare. This requires a database from e.g. the step before. - The backend and all other rust components can be build by running
cargo build [--release]and run usingcargo run [--release] -- <args> - You can format all code using
cargo fmtin the root directory (or a subproject) - You can lint all code using
cargo clippyin the root directory (or a subproject)
- You need to install dependencies first using
pnpm install - You can start a dev server using
pnpm dev - You can lint all code using
pnpm lint && pnpm build - You can format all code using
pnpm format - You can build the frontend to the
frontend/distfolder usingpnpm build






