graphql-engine/v3/justfile

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

181 lines
5.8 KiB
Makefile
Raw Normal View History

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 := `find crates -name "Cargo.toml" -type f | xargs dirname | xargs -n 1 basename | 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 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 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:
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 --all-targets --no-deps"
fix:
just docker_with_source_only sh -c "cargo clippy --all-targets --no-deps --fix --allow-no-vcs; cargo fmt"
Run `cargo fmt` in CI (#431) <!-- Thank you for submitting this PR! :) --> ## Description When I run `cargo fmt` on my branches, it makes more diff than I want. This PR fixes that by adding `just format` / `just fmt`, and adding it to a CI job. <!-- Questions to consider answering: 1. What user-facing changes are being made? 2. What are issues related to this PR? (Consider adding `(close #<issue-no>)` to the PR title) 3. What is the conceptual design behind this PR? 4. How can this PR be tested/verified? 5. Does the PR have limitations? 6. Does the PR introduce breaking changes? --> ## Changelog - Add a changelog entry (in the "Changelog entry" section below) if the changes in this PR have any user-facing impact. See [changelog guide](https://github.com/hasura/graphql-engine-mono/wiki/Changelog-Guide). - If no changelog is required ignore/remove this section and add a `no-changelog-required` label to the PR. ### Product _(Select all products this will be available in)_ - [ ] community-edition - [ ] cloud <!-- product : end : DO NOT REMOVE --> ### Type <!-- See changelog structure: https://github.com/hasura/graphql-engine-mono/wiki/Changelog-Guide#structure-of-our-changelog --> _(Select only one. In case of multiple, choose the most appropriate)_ - [ ] highlight - [ ] enhancement - [ ] bugfix - [ ] behaviour-change - [ ] performance-enhancement - [ ] security-fix <!-- type : end : DO NOT REMOVE --> ### Changelog entry <!-- - Add a user understandable changelog entry - Include all details needed to understand the change. Try including links to docs or issues if relevant - For Highlights start with a H4 heading (#### <entry title>) - Get the changelog entry reviewed by your team --> _Replace with changelog entry_ <!-- changelog-entry : end : DO NOT REMOVE --> <!-- changelog : end : DO NOT REMOVE --> V3_GIT_ORIGIN_REV_ID: e31e352f27b9ad0129c3759fead051b1a8d86758
2024-04-02 18:08:38 +03:00
format:
cargo fmt --check
prettier --check .
Use Nix to build and publish Docker images. (#664) ## Description We can use Nix to build Docker images, which gives us a few advantages: 1. the images will be cached a little better 2. aarch64 builds become easy 3. Samir is happy because the Nixification continues ## Changelog - Add a changelog entry (in the "Changelog entry" section below) if the changes in this PR have any user-facing impact. See [changelog guide](https://github.com/hasura/graphql-engine-mono/wiki/Changelog-Guide). - If no changelog is required ignore/remove this section and add a `no-changelog-required` label to the PR. ### Product _(Select all products this will be available in)_ - [x] community-edition - [ ] cloud <!-- product : end : DO NOT REMOVE --> ### Type <!-- See changelog structure: https://github.com/hasura/graphql-engine-mono/wiki/Changelog-Guide#structure-of-our-changelog --> _(Select only one. In case of multiple, choose the most appropriate)_ - [ ] highlight - [x] enhancement - [ ] bugfix - [ ] behaviour-change - [ ] performance-enhancement - [ ] security-fix <!-- type : end : DO NOT REMOVE --> ### Changelog entry <!-- - Add a user understandable changelog entry - Include all details needed to understand the change. Try including links to docs or issues if relevant - For Highlights start with a H4 heading (#### <entry title>) - Get the changelog entry reviewed by your team --> The v3 engine and dev-auth-webhook Docker images are now published for both x86_64 (`amd64`) and aarch64 (`arm64`) architectures. <!-- changelog-entry : end : DO NOT REMOVE --> <!-- changelog : end : DO NOT REMOVE --> Co-Authored-By: Philip Carlsen <philip@hasura.io> Co-Authored-By: Gil Mizrahi <gil@hasura.io> V3_GIT_ORIGIN_REV_ID: ae6fec45dee62a21f03b5258b57d841a16542c72
2024-06-04 17:14:54 +03:00
! command -v nix || nix fmt -- --check .
Run `cargo fmt` in CI (#431) <!-- Thank you for submitting this PR! :) --> ## Description When I run `cargo fmt` on my branches, it makes more diff than I want. This PR fixes that by adding `just format` / `just fmt`, and adding it to a CI job. <!-- Questions to consider answering: 1. What user-facing changes are being made? 2. What are issues related to this PR? (Consider adding `(close #<issue-no>)` to the PR title) 3. What is the conceptual design behind this PR? 4. How can this PR be tested/verified? 5. Does the PR have limitations? 6. Does the PR introduce breaking changes? --> ## Changelog - Add a changelog entry (in the "Changelog entry" section below) if the changes in this PR have any user-facing impact. See [changelog guide](https://github.com/hasura/graphql-engine-mono/wiki/Changelog-Guide). - If no changelog is required ignore/remove this section and add a `no-changelog-required` label to the PR. ### Product _(Select all products this will be available in)_ - [ ] community-edition - [ ] cloud <!-- product : end : DO NOT REMOVE --> ### Type <!-- See changelog structure: https://github.com/hasura/graphql-engine-mono/wiki/Changelog-Guide#structure-of-our-changelog --> _(Select only one. In case of multiple, choose the most appropriate)_ - [ ] highlight - [ ] enhancement - [ ] bugfix - [ ] behaviour-change - [ ] performance-enhancement - [ ] security-fix <!-- type : end : DO NOT REMOVE --> ### Changelog entry <!-- - Add a user understandable changelog entry - Include all details needed to understand the change. Try including links to docs or issues if relevant - For Highlights start with a H4 heading (#### <entry title>) - Get the changelog entry reviewed by your team --> _Replace with changelog entry_ <!-- changelog-entry : end : DO NOT REMOVE --> <!-- changelog : end : DO NOT REMOVE --> V3_GIT_ORIGIN_REV_ID: e31e352f27b9ad0129c3759fead051b1a8d86758
2024-04-02 18:08:38 +03:00
alias fmt := format
fix-local:
cargo clippy --all-targets --no-deps --fix --allow-no-vcs
cargo fmt
just fix-format
Use Nix to build and publish Docker images. (#664) ## Description We can use Nix to build Docker images, which gives us a few advantages: 1. the images will be cached a little better 2. aarch64 builds become easy 3. Samir is happy because the Nixification continues ## Changelog - Add a changelog entry (in the "Changelog entry" section below) if the changes in this PR have any user-facing impact. See [changelog guide](https://github.com/hasura/graphql-engine-mono/wiki/Changelog-Guide). - If no changelog is required ignore/remove this section and add a `no-changelog-required` label to the PR. ### Product _(Select all products this will be available in)_ - [x] community-edition - [ ] cloud <!-- product : end : DO NOT REMOVE --> ### Type <!-- See changelog structure: https://github.com/hasura/graphql-engine-mono/wiki/Changelog-Guide#structure-of-our-changelog --> _(Select only one. In case of multiple, choose the most appropriate)_ - [ ] highlight - [x] enhancement - [ ] bugfix - [ ] behaviour-change - [ ] performance-enhancement - [ ] security-fix <!-- type : end : DO NOT REMOVE --> ### Changelog entry <!-- - Add a user understandable changelog entry - Include all details needed to understand the change. Try including links to docs or issues if relevant - For Highlights start with a H4 heading (#### <entry title>) - Get the changelog entry reviewed by your team --> The v3 engine and dev-auth-webhook Docker images are now published for both x86_64 (`amd64`) and aarch64 (`arm64`) architectures. <!-- changelog-entry : end : DO NOT REMOVE --> <!-- changelog : end : DO NOT REMOVE --> Co-Authored-By: Philip Carlsen <philip@hasura.io> Co-Authored-By: Gil Mizrahi <gil@hasura.io> V3_GIT_ORIGIN_REV_ID: ae6fec45dee62a21f03b5258b57d841a16542c72
2024-06-04 17:14:54 +03:00
! command -v nix || nix fmt
fix-format:
prettier --write .
# tests run by CI
ci-test: docker-refresh
just docker_with_test_env cargo nextest run --archive-file=./bin/nextest.tar.zst --no-fail-fast
test *ARGS:
#!/usr/bin/env bash
COMMAND=(cargo nextest run --archive-file=./bin/nextest.tar.zst --no-fail-fast "$@")
echo "cargo nextest run --no-fail-fast $*"
just docker_with_test_env "${COMMAND[@]}"
update-golden-files: docker-refresh
docker compose -f ci.docker-compose.yaml run --rm -e UPDATE_GOLDENFILES=1 test_setup \
cargo nextest run --archive-file=./bin/nextest.tar.zst --no-fail-fast
just fix-format
# 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 \
-p execute --bench generate_ir
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 *ARGS: start-docker-test-deps
#!/usr/bin/env bash
if command -v cargo-nextest; then
COMMAND=(cargo nextest run)
else
COMMAND=(cargo test)
fi
COMMAND+=(--no-fail-fast "$@")
echo "${COMMAND[*]}"
"${COMMAND[@]}"
# run a watch process that runs the tests locally
watch-local: start-docker-test-deps start-docker-run-deps
RUST_LOG=DEBUG \
cargo watch -i "**/*.snap.new" \
Resolve relationships in type predicates (#536) <!-- Thank you for submitting this PR! :) --> ## Description We have a separate copy of the code for resolving type predicates that we use for object types (when resolving BooleanExpressions), because the previous code was heavily tied to the Model it used. We'd like to unify that code again, so the first step is re-implementing relationships in `resolve_model_predicate_with_type`. <!-- Questions to consider answering: 1. What user-facing changes are being made? 2. What are issues related to this PR? (Consider adding `(close #<issue-no>)` to the PR title) 3. What is the conceptual design behind this PR? 4. How can this PR be tested/verified? 5. Does the PR have limitations? 6. Does the PR introduce breaking changes? --> ## Changelog - Add a changelog entry (in the "Changelog entry" section below) if the changes in this PR have any user-facing impact. See [changelog guide](https://github.com/hasura/graphql-engine-mono/wiki/Changelog-Guide). - If no changelog is required ignore/remove this section and add a `no-changelog-required` label to the PR. ### Product _(Select all products this will be available in)_ - [X] community-edition - [X] cloud <!-- product : end : DO NOT REMOVE --> ### Type <!-- See changelog structure: https://github.com/hasura/graphql-engine-mono/wiki/Changelog-Guide#structure-of-our-changelog --> _(Select only one. In case of multiple, choose the most appropriate)_ - [ ] highlight - [X] enhancement - [ ] bugfix - [ ] behaviour-change - [ ] performance-enhancement - [ ] security-fix <!-- type : end : DO NOT REMOVE --> ### Changelog entry <!-- - Add a user understandable changelog entry - Include all details needed to understand the change. Try including links to docs or issues if relevant - For Highlights start with a H4 heading (#### <entry title>) - Get the changelog entry reviewed by your team --> Allow boolean expressions to use relationships <!-- changelog-entry : end : DO NOT REMOVE --> <!-- changelog : end : DO NOT REMOVE --> V3_GIT_ORIGIN_REV_ID: 6225a4ab752b71df3cdfd0982bf2107ca39f4940
2024-05-07 13:13:38 +03:00
-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 \
--expose-internal-errors'
# check the code is fine
lint-local:
cargo clippy --all-targets --no-deps
Use Nix to build and publish Docker images. (#664) ## Description We can use Nix to build Docker images, which gives us a few advantages: 1. the images will be cached a little better 2. aarch64 builds become easy 3. Samir is happy because the Nixification continues ## Changelog - Add a changelog entry (in the "Changelog entry" section below) if the changes in this PR have any user-facing impact. See [changelog guide](https://github.com/hasura/graphql-engine-mono/wiki/Changelog-Guide). - If no changelog is required ignore/remove this section and add a `no-changelog-required` label to the PR. ### Product _(Select all products this will be available in)_ - [x] community-edition - [ ] cloud <!-- product : end : DO NOT REMOVE --> ### Type <!-- See changelog structure: https://github.com/hasura/graphql-engine-mono/wiki/Changelog-Guide#structure-of-our-changelog --> _(Select only one. In case of multiple, choose the most appropriate)_ - [ ] highlight - [x] enhancement - [ ] bugfix - [ ] behaviour-change - [ ] performance-enhancement - [ ] security-fix <!-- type : end : DO NOT REMOVE --> ### Changelog entry <!-- - Add a user understandable changelog entry - Include all details needed to understand the change. Try including links to docs or issues if relevant - For Highlights start with a H4 heading (#### <entry title>) - Get the changelog entry reviewed by your team --> The v3 engine and dev-auth-webhook Docker images are now published for both x86_64 (`amd64`) and aarch64 (`arm64`) architectures. <!-- changelog-entry : end : DO NOT REMOVE --> <!-- changelog : end : DO NOT REMOVE --> Co-Authored-By: Philip Carlsen <philip@hasura.io> Co-Authored-By: Gil Mizrahi <gil@hasura.io> V3_GIT_ORIGIN_REV_ID: ae6fec45dee62a21f03b5258b57d841a16542c72
2024-06-04 17:14:54 +03:00
! command -v nix || nix flake check
# ensure we don't have unused dependencies:
machete:
cargo machete --with-metadata
# update golden tests
update-golden-files-local: start-docker-test-deps
UPDATE_GOLDENFILES=1 cargo test
just fix-format
# 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 \
--expose-internal-errors
# check the docker build works
build-docker-with-nix binary="engine":
#!/usr/bin/env bash
echo "$(tput bold)nix build .#{{ binary }}-docker | gunzip | docker load$(tput sgr0)"
gunzip < "$(nix build --no-warn-dirty --no-link --print-out-paths '.#{{ binary }}-docker')" | docker load
# check the arm64 docker build works
build-aarch64-docker-with-nix binary="engine":
#!/usr/bin/env bash
echo "$(tput bold)nix build .#{{ binary }}-docker-aarch64-linux | gunzip | docker load$(tput sgr0)"
gunzip < "$(nix build --no-warn-dirty --no-link --print-out-paths --system aarch64-linux '.#{{ binary }}-docker-aarch64-linux')" | docker load