graphql-engine/v3/justfile
Daniel Harvey 797aa43080 run clippy in watch command (#346)
V3_GIT_ORIGIN_REV_ID: 2cf4796a45aa1acc0846ebd6293ccf218356b5bf
2024-03-13 11:14:54 +00:00

125 lines
4.1 KiB
Makefile

set positional-arguments
CLIPPY_ARGS := "-A clippy::result_large_err -D clippy::complexity -A clippy::too_many_arguments -D clippy::style"
CLIPPY_FIX_ARGS := "-A clippy::result_large_err -A clippy::too_many_arguments"
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 --build --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 --build --rm test_setup "$@"
exit_code=$?
docker compose -f ci.docker-compose.yaml down
exit $exit_code
# build used by CI
ci-build:
# see https://github.com/rust-lang/cargo/issues/4463 for why we build each
# package explictly instead of cargo build --workspace --all-targets
just docker_with_source_only cargo build -p lang-graphql \
-p engine \
-p open-dds \
-p tracing-util \
-p hasura-authn-core \
-p hasura-authn-webhook \
--release --all-targets
# linting run by CI
ci-lint:
just docker_with_source_only sh -c \
"cargo clippy --no-deps -- {{ CLIPPY_ARGS }}"
fix:
just docker_with_source_only sh -c "cargo clippy --no-deps --fix --allow-no-vcs -- {{ CLIPPY_FIX_ARGS }}; cargo fmt"
fix-local:
cargo clippy --no-deps --fix --allow-no-vcs -- {{ CLIPPY_FIX_ARGS }}; cargo fmt
# tests run by CI
ci-test:
just docker_with_test_env cargo nextest run
test *TESTNAME:
if [ -z {{TESTNAME}} ]; then \
just docker_with_test_env cargo nextest run -E 'all()'; \
else \
just docker_with_test_env cargo nextest run -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_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 docker compose -f ci.docker-compose.yaml run --build --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 (not engine)
start-docker:
# start connectors and wait for health
docker compose -f ci.docker-compose.yaml \
up --wait postgres custom_connector
# start everything else (don't wait for postgres connector, it doesn't seem
# to work)
docker compose -f ci.docker-compose.yaml \
up -d
# stop all the docker deps
stop-docker:
docker compose -f ci.docker-compose.yaml 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
cargo test
# run a watch process that runs the tests locally
watch-local: start-docker
cargo watch \
-x test \
-x 'clippy --no-deps -- {{ CLIPPY_ARGS }}'
# check the code is fine
lint-local:
cargo clippy --no-deps -- {{ CLIPPY_ARGS }} && cargo fmt --check