set positional-arguments # This produces "-p engine -p lang-graphql -p ...". # See https://github.com/rust-lang/cargo/issues/4463 for why we build each # package explicitly instead of `cargo build --workspace --all-targets`. PACKAGE_SELECTOR := `ls crates | sed 's/^/-p /' | xargs echo` default: just --list # run commands in a rust docker environment with source code only without starting any dependencies. docker_with_source_only +args: #!/usr/bin/env sh DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 docker compose -f ci.docker-compose.yaml run --rm source_only "$@" exit_code=$? docker compose -f ci.docker-compose.yaml down exit $exit_code # run commands in a rust docker environment including test dependencies and then removes the container dependencies # while emiting the exit code of the docker command docker_with_test_env +args: #!/usr/bin/env sh DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 docker compose -f ci.docker-compose.yaml run --rm test_setup "$@" exit_code=$? docker compose -f ci.docker-compose.yaml down exit $exit_code # build used by CI ci-build: just docker_with_source_only \ cargo build {{ PACKAGE_SELECTOR }} --release --all-targets build-local: cargo build {{ PACKAGE_SELECTOR }} --release --all-targets # linting run by CI ci-lint: just docker_with_source_only sh -c \ "RUSTFLAGS='-D warnings' cargo clippy --no-deps" fix: just docker_with_source_only sh -c "cargo clippy --no-deps --fix --allow-no-vcs; cargo fmt" format: cargo fmt --check alias fmt := format fix-local: cargo clippy --no-deps --fix --allow-no-vcs cargo fmt # tests run by CI ci-test: docker-refresh just docker_with_test_env cargo nextest run --no-fail-fast test TESTNAME='': #!/usr/bin/env bash if [[ -z '{{TESTNAME}}' ]]; then echo 'cargo nextest run --no-fail-fast' just docker_with_test_env cargo nextest run --no-fail-fast else echo "cargo nextest run --no-fail-fast -E 'test(={{TESTNAME}})'" just docker_with_test_env cargo nextest run --no-fail-fast -E 'test(={{TESTNAME}})' fi # tests using cargo test and not nextest. # The nextest binary pulled in the docker image only works on linux hosts. cargo-test *args: just docker_with_test_env cargo test {{args}} update-golden-files: docker-refresh DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 docker compose -f ci.docker-compose.yaml run --rm -e REGENERATE_GOLDENFILES=1 test_setup cargo test # Benchmarks run by CI ci-bench: # Only bench what is required just docker_with_test_env cargo bench \ -p lang-graphql --bench validation --bench parser \ -p engine --bench generate_ir --bench execute drill: just docker_with_test_env drill --benchmark drill.yml -s -q # optional argument to show coverage only for files matched by {{filterexp}} i.e. grep -E filterexp coverage *filterexp: just docker_with_source_only bash coverage.sh '{{filterexp}}' generate-benchmarks gh-issue gh-token: just docker_with_test_env bash benchmark.sh {{gh-issue}} {{gh-token}} dev: docker compose run --build --rm dev_setup bash docker compose down # start all the docker deps for running tests (not engine) start-docker-test-deps: # start connectors and wait for health docker compose -f ci.docker-compose.yaml up --wait postgres postgres_connector custom_connector # start all the docker run time deps for the engine start-docker-run-deps: # start auth_hook and jaeger docker compose up --wait auth_hook jaeger # pull / build all docker deps docker-refresh: docker compose -f ci.docker-compose.yaml pull postgres_connector docker compose -f ci.docker-compose.yaml build custom_connector # stop all the docker deps stop-docker: docker compose -f ci.docker-compose.yaml down -v docker compose down -v # local development commands # these work by running tests locally rather than in Docker # to make them work, add the following lines to your `/etc/hosts` file # (without the '#' at the start): # 127.0.0.1 postgres_connector # 127.0.0.1 custom_connector # run the tests using local engine (once) test-local: start-docker-test-deps cargo test # run a watch process that runs the tests locally watch-local: start-docker-test-deps start-docker-run-deps RUST_LOG=DEBUG \ cargo watch \ -x test \ -x 'clippy --no-deps' \ -x 'run --bin engine -- \ --otlp-endpoint http://localhost:4317 \ --authn-config-path auth_config.json \ --metadata-path crates/engine/tests/schema.json' # check the code is fine lint-local: cargo clippy --no-deps # ensure we don't have unused dependencies: machete: cargo machete --with-metadata # update golden tests update-golden-files-local: start-docker-test-deps REGENERATE_GOLDENFILES=1 cargo test # run the engine using schema from tests run-local: start-docker-test-deps start-docker-run-deps RUST_LOG=DEBUG cargo run --bin engine -- \ --otlp-endpoint http://localhost:4317 \ --authn-config-path auth_config.json \ --metadata-path crates/engine/tests/schema.json