mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-15 17:31:56 +03:00
c3afa0fdd7
This installs the ODBC Driver 18 for SQL Server in all our shipped Docker images, and update our tests and documentation accordingly. This version supports arm64, and therefore can run natively (or via Docker) on macOS on aarch64. `msodbcsql17` is still installed in production-targeted Docker images so that users do not _have_ to migrate to the new driver. Nix expressions are packaged for the new driver, as it is not yet available in nixpkgs. In this version, [the default encryption setting was changed from "no" to "yes"](https://techcommunity.microsoft.com/t5/sql-server-blog/odbc-driver-18-0-for-sql-server-released/ba-p/3169228). In addition, "mandatory" and "optional" were added as synonyms for "yes" and "no" respectively. I have therefore modified all connection strings in tests to specify `Encrypt=optional` (and changed some from `Encrypt=no`). I chose "optional" rather than "no" because I feel it's more honest; these connection strings will work with or without an encrypted connection. PR-URL: https://github.com/hasura/graphql-engine-mono/pull/6241 GitOrigin-RevId: 959f88dd1f271ef06a3616bc46b358f364f6cdfd
1006 lines
33 KiB
YAML
1006 lines
33 KiB
YAML
# anchor refs to be used elsewhere
|
|
refs:
|
|
constants:
|
|
- &server_builder_image hasura/graphql-engine-server-builder:bb9d1eea5ba8c194eb940b4a9923a2fd247c16f91699b58c76f5b0fe92d23e0d
|
|
- &mssql_image mcr.microsoft.com/mssql/server:2019-CU18-ubuntu-20.04@sha256:f57d743a99a4003a085d0fd67dbb5ecf98812c08a616697a065082cad68d77ce
|
|
skip_job_on_ciignore: &skip_job_on_ciignore
|
|
run:
|
|
name: checking if job should be terminated or not
|
|
command: |
|
|
check_to_skip_job() {
|
|
SKIP_JOB_FILE="$1"
|
|
if [ -f $SKIP_JOB_FILE ]; then
|
|
echo "halting job due to $SKIP_JOB_FILE"
|
|
circleci-agent step halt
|
|
else
|
|
echo "no skip_job file present, full steam ahead"
|
|
fi
|
|
}
|
|
|
|
# file for figuring out the skipping logic might be
|
|
# present either at `/build` (in case of linux) or `~/build` (in case of macos)
|
|
|
|
check_to_skip_job /build/ciignore/skip_job.txt
|
|
check_to_skip_job ~/build/ciignore/skip_job.txt
|
|
|
|
skip_server_tests: &skip_server_tests
|
|
run:
|
|
name: checking if server tests can be skipped
|
|
command: |
|
|
export CIRCLE_GIT_COMMIT_DESC=$(git log --format=%B -n 1 $CIRCLE_SHA)
|
|
echo "Running from git commit '$CIRCLE_GIT_COMMIT_DESC'"
|
|
if echo $CIRCLE_GIT_COMMIT_DESC | grep "\[force ci\]"; then
|
|
echo "Forcing CI run as requested"
|
|
exit 0
|
|
fi
|
|
|
|
echo "PR number: $CIRCLE_PR_NUMBER"
|
|
if [ -z "$CIRCLE_PR_NUMBER" ]; then
|
|
echo "Not a PR build, continuing test" && exit 0
|
|
fi
|
|
echo "Compare refs: ${CIRCLE_COMPARE_URL##http*/}"
|
|
if git diff --quiet "${CIRCLE_COMPARE_URL##http*/}" -- server; then
|
|
echo "No server changes present, skipping test"
|
|
circleci-agent step halt
|
|
else
|
|
echo "Server changes present, continuing test"
|
|
fi
|
|
wait_for_postgres: &wait_for_postgres
|
|
run:
|
|
name: waiting for postgres to be ready
|
|
command: |
|
|
for i in `seq 1 60`;
|
|
do
|
|
nc -z localhost 5432 && echo Success && exit 0
|
|
echo -n .
|
|
sleep 1
|
|
done
|
|
echo Failed waiting for Postgres && exit 1
|
|
|
|
ensure_postgres_db: &ensure_postgres_db
|
|
run:
|
|
name: ensure postgres databases are present
|
|
environment:
|
|
# sqlalchemy throws warnings with postgres://
|
|
DATABASE_URL: "postgresql://gql_test:gql_test@localhost:5432/gql_test"
|
|
command: |
|
|
psql "$DATABASE_URL" -c \
|
|
"SELECT 1 FROM pg_database WHERE datname = 'gql_test2'" | grep -q -F '(1 row)' || \
|
|
psql "$DATABASE_URL" -c 'CREATE DATABASE gql_test2;'
|
|
psql "$DATABASE_URL" -c \
|
|
"SELECT 1 FROM pg_database WHERE datname = 'pg_source_1'" | grep -q -F '(1 row)' || \
|
|
psql "$DATABASE_URL" -c 'CREATE DATABASE pg_source_1;'
|
|
psql "$DATABASE_URL" -c \
|
|
"SELECT 1 FROM pg_database WHERE datname = 'pg_source_2'" | grep -q -F '(1 row)' || \
|
|
psql "$DATABASE_URL" -c 'CREATE DATABASE pg_source_2;'
|
|
|
|
wait_for_hge: &wait_for_hge
|
|
run:
|
|
name: waiting for graphql-engine to be ready
|
|
command: |
|
|
for i in `seq 1 60`;
|
|
do
|
|
nc -z localhost 8080 && echo Success && exit 0
|
|
echo -n .
|
|
sleep 1
|
|
done
|
|
echo Failed waiting for graphql-engine && exit 1
|
|
|
|
wait_for_mssql: &wait_for_mssql
|
|
run:
|
|
name: wait for mssql container to be ready
|
|
command: |
|
|
for i in `seq 1 60`;
|
|
do
|
|
nc -z localhost 1433 && echo Success && exit 0
|
|
echo -n .
|
|
sleep 1
|
|
done
|
|
echo Failed waiting for SQL Server && exit 1
|
|
|
|
wait_for_citus: &wait_for_citus
|
|
run:
|
|
name: wait for citus to be ready
|
|
command: |
|
|
for i in `seq 1 60`;
|
|
do
|
|
nc -z localhost 5430 && echo Success && exit 0
|
|
echo -n .
|
|
sleep 1
|
|
done
|
|
echo Failed waiting for citus && exit 1
|
|
|
|
ensure_citus_db: &ensure_citus_db
|
|
run:
|
|
name: ensure citus databases are present
|
|
environment:
|
|
DATABASE_URL: "postgres://postgres:hasuraCITUS2@127.0.0.1:5430/postgres"
|
|
command: |
|
|
psql "$DATABASE_URL" -c "SELECT * FROM citus_version();" | grep -q -F '(1 row)' \
|
|
|| (echo "Failed checking Citus DB presence" && exit 1)
|
|
|
|
authenticate_bigquery: &authenticate_bigquery
|
|
run:
|
|
name: authenticate bigquery service account
|
|
working_directory: ~/graphql-engine/server/tests-py
|
|
command: |
|
|
echo "${HASURA_BIGQUERY_SERVICE_KEY}" > "$HASURA_BIGQUERY_SERVICE_ACCOUNT_FILE"
|
|
gcloud auth activate-service-account --key-file="$HASURA_BIGQUERY_SERVICE_ACCOUNT_FILE"
|
|
|
|
ensure_bigquery_db: &ensure_bigquery_db
|
|
run:
|
|
name: ensure the bigquery data source is accessible
|
|
command: |
|
|
for i in `seq 1 60`;
|
|
do
|
|
curl "https://content-bigquery.googleapis.com/bigquery/v2/projects/$HASURA_BIGQUERY_PROJECT_ID/queries?alt=json&key=$HASURA_BIGQUERY_API_KEY" \
|
|
--data-binary '{"query":"select 123"}' \
|
|
-H "Authorization: Bearer $(gcloud auth print-access-token $HASURA_BIGQUERY_IAM_ACCOUNT \
|
|
--project=$HASURA_BIGQUERY_PROJECT_ID)" -H 'content-type: application/json' \
|
|
&& echo Success && exit 0
|
|
echo -n .
|
|
sleep 1
|
|
done
|
|
echo Failed waiting for bigquery && exit 1
|
|
|
|
filter_only_vtags: &filter_only_vtags
|
|
filters:
|
|
tags:
|
|
only: /^v.*/
|
|
filter_only_release_branches: &filter_only_release_branches
|
|
filters:
|
|
branches:
|
|
only: /^release-v.*/
|
|
filter_only_dev_branches: &filter_only_dev_branches
|
|
filters:
|
|
branches:
|
|
only: /^dev.*/
|
|
filter_only_vtags_channel_branches: &filter_only_vtags_channel_branches
|
|
filters:
|
|
tags:
|
|
only: /^v.*/
|
|
branches:
|
|
only: /^(stable|alpha|beta)$/
|
|
filter_ignore_branches: &filter_ignore_branches
|
|
filters:
|
|
branches:
|
|
ignore: /.*/
|
|
filter_ignore_dev_release_branches: &filter_ignore_dev_release_branches
|
|
filters:
|
|
branches:
|
|
ignore: /^(dev|release).*/
|
|
|
|
setup_remote_docker: &setup_remote_docker
|
|
setup_remote_docker:
|
|
version: 19.03.13
|
|
docker_layer_caching: true
|
|
|
|
# ref pg environment for testing
|
|
test_pg_env: &test_pg_env
|
|
environment:
|
|
POSTGRES_USER: gql_test
|
|
POSTGRES_PASSWORD: gql_test
|
|
POSTGRES_DB: gql_test
|
|
PGPORT: 5432
|
|
|
|
# citus environment variables
|
|
test_citus_env: &test_citus_env
|
|
environment:
|
|
POSTGRES_PASSWORD: hasuraCITUS2
|
|
POSTGRES_USER: postgres
|
|
POSTGRES_DB: postgres
|
|
PGPORT: 5430
|
|
|
|
# ref test server job
|
|
test_server: &test_server
|
|
working_directory: ~/graphql-engine
|
|
parallelism: 32
|
|
steps:
|
|
- attach_workspace:
|
|
at: /build
|
|
- *skip_job_on_ciignore
|
|
- checkout
|
|
- *skip_server_tests
|
|
- *wait_for_postgres
|
|
- *ensure_postgres_db
|
|
- run:
|
|
name: Run tests
|
|
environment:
|
|
# Setting default number of threads to 2
|
|
# since circleci allocates 2 cpus per test container
|
|
GHCRTS: -N2
|
|
# Until we can use a real webserver for TestEventFlood, limit concurrency:
|
|
HASURA_GRAPHQL_EVENTS_HTTP_POOL_SIZE: 8
|
|
HASURA_GRAPHQL_DATABASE_URL: postgresql://gql_test:gql_test@localhost:5432/gql_test
|
|
HASURA_GRAPHQL_DATABASE_URL_2: postgresql://gql_test:gql_test@localhost:5432/gql_test2
|
|
HASURA_GRAPHQL_PG_SOURCE_URL_1: postgresql://gql_test:gql_test@localhost:5432/pg_source_1
|
|
HASURA_GRAPHQL_PG_SOURCE_URL_2: postgresql://gql_test:gql_test@localhost:5432/pg_source_2
|
|
GRAPHQL_ENGINE: /build/_server_output/graphql-engine
|
|
GRAPHQL_ENGINE_TESTS: /build/_server_output/graphql-engine-tests
|
|
MIX_FILES_FOLDER: /build/_server_output/mix
|
|
command: |
|
|
cat .circleci/server-test-names.txt | circleci tests split | while read -r server_test; do
|
|
export SERVER_TEST_TO_RUN=$server_test
|
|
OUTPUT_FOLDER="/build/_server_test_output/$PG_VERSION" .circleci/test-server.sh
|
|
done
|
|
- store_artifacts:
|
|
path: /build/_server_test_output
|
|
destination: server_test
|
|
|
|
version: 2
|
|
jobs:
|
|
# check if this should be built or not, fails if
|
|
# changes only contains files in .ciignore
|
|
check_build_worthiness:
|
|
docker:
|
|
- image: hasura/graphql-engine-cli-builder:9657e5303218c015a20cd0d7e252d5600537e6384b172003273b6ebd38c451d8
|
|
working_directory: ~/graphql-engine
|
|
steps:
|
|
- attach_workspace:
|
|
at: /build
|
|
- checkout
|
|
- run:
|
|
name: check build worthiness
|
|
command: .circleci/ciignore.sh
|
|
- persist_to_workspace:
|
|
root: /build
|
|
paths:
|
|
- ciignore
|
|
|
|
build_server:
|
|
docker:
|
|
- image: *server_builder_image
|
|
resource_class: xlarge
|
|
working_directory: ~/graphql-engine
|
|
steps:
|
|
- attach_workspace:
|
|
at: /build
|
|
- *skip_job_on_ciignore
|
|
- checkout
|
|
- restore_cache:
|
|
keys:
|
|
- cabal-store-v3-{{ checksum "cabal.project" }}-{{ checksum "server/graphql-engine.cabal" }}-{{ checksum "cabal.project.freeze" }}
|
|
- cabal-store-v3-{{ checksum "cabal.project" }}-{{ checksum "server/graphql-engine.cabal" }}-
|
|
- cabal-store-v3-{{ checksum "cabal.project" }}-
|
|
- cabal-store-v3-
|
|
- restore_cache:
|
|
keys:
|
|
- cabal-packages-v3-{{ checksum "cabal.project" }}-{{ checksum "server/graphql-engine.cabal" }}-{{ checksum "cabal.project.freeze" }}
|
|
- cabal-packages-v3-{{ checksum "cabal.project" }}-{{ checksum "server/graphql-engine.cabal" }}-
|
|
- cabal-packages-v3-{{ checksum "cabal.project" }}-
|
|
- cabal-packages-v3-
|
|
- run:
|
|
name: Build the binary
|
|
working_directory: ./server
|
|
command: |
|
|
# NOTE: previously we used enable_coverage=true here for
|
|
# non-release builds, but to support our performance regression
|
|
# testing workflow we need all builds to be built with the same
|
|
# options that have performance implications.
|
|
make ci-build
|
|
- save_cache:
|
|
key: cabal-packages-v3-{{ checksum "cabal.project" }}-{{ checksum "server/graphql-engine.cabal" }}-{{ checksum "cabal.project.freeze" }}
|
|
paths:
|
|
- ~/.cabal/packages
|
|
- save_cache:
|
|
key: cabal-store-v3-{{ checksum "cabal.project" }}-{{ checksum "server/graphql-engine.cabal" }}-{{ checksum "cabal.project.freeze" }}
|
|
paths:
|
|
- ~/.cabal/store
|
|
- store_artifacts:
|
|
path: /build/_server_output
|
|
destination: server
|
|
- persist_to_workspace:
|
|
root: /build
|
|
paths: [_server_output]
|
|
|
|
build_image:
|
|
docker:
|
|
- image: *server_builder_image
|
|
working_directory: ~/graphql-engine
|
|
steps:
|
|
- attach_workspace:
|
|
at: /build
|
|
- *skip_job_on_ciignore
|
|
- checkout
|
|
- *setup_remote_docker
|
|
- run:
|
|
name: Build the docker image
|
|
working_directory: ./server
|
|
command: |
|
|
# copy console assets to the rootfs - packaging/build/rootfs
|
|
export ROOTFS=packaging/build/rootfs
|
|
mkdir -p "$ROOTFS/srv"
|
|
cp -r /build/_console_output/assets "$ROOTFS/srv/console-assets"
|
|
|
|
# build and save the image
|
|
make ci-image
|
|
make ci-save-image
|
|
- store_artifacts:
|
|
path: /build/_server_output/image.tar
|
|
destination: server/image.tar
|
|
- persist_to_workspace:
|
|
root: /build
|
|
paths: [_server_output/image.tar]
|
|
|
|
# job to execute when all server tests pass. later we can collect test
|
|
# reports and publish them etc.
|
|
all_server_tests_pass:
|
|
docker:
|
|
- image: alpine:edge
|
|
steps:
|
|
- run:
|
|
name: All server tests passed
|
|
command: echo 'all server tests passed!'
|
|
|
|
# pytest the server with SQL Server ODBC Driver 18
|
|
test_server_mssql_2019:
|
|
docker:
|
|
- image: *server_builder_image
|
|
- image: *mssql_image
|
|
environment:
|
|
ACCEPT_EULA: "Y"
|
|
SA_PASSWORD: "hasuraMSSQL1"
|
|
- image: hasura/postgres-13.0-alpine-postgis3:latest
|
|
<<: *test_pg_env
|
|
environment:
|
|
# Setting default number of threads to 2
|
|
# since circleci allocates 2 cpus per test container
|
|
GHCRTS: -N2
|
|
# Until we can use a real webserver for TestEventFlood, limit concurrency:
|
|
HASURA_GRAPHQL_EVENTS_HTTP_POOL_SIZE: 8
|
|
HASURA_GRAPHQL_DATABASE_URL: postgresql://gql_test:gql_test@localhost:5432/gql_test
|
|
HASURA_GRAPHQL_DATABASE_URL_2: postgresql://gql_test:gql_test@localhost:5432/gql_test2
|
|
HASURA_GRAPHQL_MSSQL_SOURCE_URL: DRIVER={ODBC Driver 18 for SQL Server};SERVER=localhost,1433;Uid=sa;Pwd=hasuraMSSQL1;
|
|
GRAPHQL_ENGINE: /build/_server_output/graphql-engine
|
|
GRAPHQL_ENGINE_TESTS: /build/_server_output/graphql-engine-tests
|
|
MIX_FILES_FOLDER: /build/_server_output/mix
|
|
working_directory: ~/graphql-engine
|
|
steps:
|
|
- attach_workspace:
|
|
at: /build
|
|
- *skip_job_on_ciignore
|
|
- checkout
|
|
- *wait_for_postgres
|
|
- *ensure_postgres_db
|
|
- *wait_for_mssql
|
|
- run:
|
|
name: Run tests
|
|
environment:
|
|
SERVER_TEST_TO_RUN: "backend-mssql"
|
|
OUTPUT_FOLDER: "/build/_server_test_output/mssql"
|
|
command: |
|
|
.circleci/test-server.sh
|
|
- store_artifacts:
|
|
path: /build/_server_test_output
|
|
destination: server_test
|
|
|
|
# pytest the server with Citus
|
|
test_server_citus:
|
|
docker:
|
|
- image: *server_builder_image
|
|
- image: hasura/postgres-13.0-alpine-postgis3:latest
|
|
<<: *test_pg_env
|
|
- image: citusdata/citus
|
|
<<: *test_citus_env
|
|
environment:
|
|
# Setting default number of threads to 2
|
|
# since circleci allocates 2 cpus per test container
|
|
GHCRTS: -N2
|
|
# NOTE: pytests depend on this being set to 8
|
|
HASURA_GRAPHQL_EVENTS_HTTP_POOL_SIZE: 8
|
|
HASURA_GRAPHQL_DATABASE_URL: postgresql://gql_test:gql_test@localhost:5432/gql_test
|
|
HASURA_GRAPHQL_DATABASE_URL_2: postgresql://gql_test:gql_test@localhost:5432/gql_test2
|
|
HASURA_GRAPHQL_CITUS_SOURCE_URL: postgres://postgres:hasuraCITUS2@127.0.0.1:5430/postgres
|
|
GRAPHQL_ENGINE: /build/_server_output/graphql-engine
|
|
GRAPHQL_ENGINE_TESTS: /build/_server_output/graphql-engine-tests
|
|
MIX_FILES_FOLDER: /build/_server_output/mix
|
|
working_directory: ~/graphql-engine
|
|
steps:
|
|
- attach_workspace:
|
|
at: /build
|
|
- *skip_job_on_ciignore
|
|
- checkout
|
|
- *wait_for_postgres
|
|
- *ensure_postgres_db
|
|
- *wait_for_citus
|
|
- *ensure_citus_db
|
|
- run:
|
|
name: Run tests
|
|
environment:
|
|
SERVER_TEST_TO_RUN: "backend-citus"
|
|
OUTPUT_FOLDER: "/build/_server_test_output/citus"
|
|
command: |
|
|
.circleci/test-server.sh
|
|
- store_artifacts:
|
|
path: /build/_server_test_output
|
|
destination: server_test
|
|
|
|
# pytest the server with BigQuery
|
|
test_server_bigquery:
|
|
docker:
|
|
- image: *server_builder_image
|
|
- image: hasura/postgres-13.0-alpine-postgis3:latest
|
|
<<: *test_pg_env
|
|
environment:
|
|
# Setting default number of threads to 2
|
|
# since circleci allocates 2 cpus per test container
|
|
GHCRTS: -N2
|
|
# NOTE: pytests depend on this being set to 8
|
|
HASURA_GRAPHQL_EVENTS_HTTP_POOL_SIZE: 8
|
|
HASURA_GRAPHQL_DATABASE_URL: postgresql://gql_test:gql_test@localhost:5432/gql_test
|
|
HASURA_GRAPHQL_DATABASE_URL_2: postgresql://gql_test:gql_test@localhost:5432/gql_test2
|
|
GRAPHQL_ENGINE: /build/_server_output/graphql-engine
|
|
GRAPHQL_ENGINE_TESTS: /build/_server_output/graphql-engine-tests
|
|
MIX_FILES_FOLDER: /build/_server_output/mix
|
|
HASURA_BIGQUERY_SERVICE_ACCOUNT_FILE: gcloud-service-key.json
|
|
working_directory: ~/graphql-engine
|
|
steps:
|
|
- attach_workspace:
|
|
at: /build
|
|
- *skip_job_on_ciignore
|
|
- checkout
|
|
- *wait_for_postgres
|
|
- *ensure_postgres_db
|
|
- *authenticate_bigquery
|
|
- *ensure_bigquery_db
|
|
- run:
|
|
name: Run tests
|
|
environment:
|
|
SERVER_TEST_TO_RUN: "backend-bigquery"
|
|
OUTPUT_FOLDER: "/build/_server_test_output/bigquery"
|
|
command: |
|
|
.circleci/test-server.sh
|
|
- store_artifacts:
|
|
path: /build/_server_test_output
|
|
destination: server_test
|
|
|
|
# pytest the server with postgres versions >= 9.5
|
|
test_server_pg_13:
|
|
<<: *test_server
|
|
environment:
|
|
PG_VERSION: "13"
|
|
POSTGIS_VERSION: "3.0.0"
|
|
docker:
|
|
- image: *server_builder_image
|
|
- image: hasura/postgres-13.0-alpine-postgis3
|
|
<<: *test_pg_env
|
|
|
|
test_server_pg_12:
|
|
<<: *test_server
|
|
environment:
|
|
PG_VERSION: "12"
|
|
POSTGIS_VERSION: "3.0.0"
|
|
docker:
|
|
- image: *server_builder_image
|
|
- image: hasura/postgres-12.0-alpine-postgis3:6cbd863d47c0
|
|
<<: *test_pg_env
|
|
|
|
test_server_pg_11:
|
|
<<: *test_server
|
|
environment:
|
|
PG_VERSION: "11"
|
|
docker:
|
|
- image: *server_builder_image
|
|
- image: circleci/postgres:11-alpine-postgis
|
|
<<: *test_pg_env
|
|
|
|
test_server_pg_10:
|
|
<<: *test_server
|
|
environment:
|
|
PG_VERSION: "10"
|
|
docker:
|
|
- image: *server_builder_image
|
|
- image: circleci/postgres:10-alpine-postgis
|
|
<<: *test_pg_env
|
|
|
|
test_server_pg_9.6:
|
|
<<: *test_server
|
|
environment:
|
|
PG_VERSION: "9_6"
|
|
docker:
|
|
- image: *server_builder_image
|
|
- image: circleci/postgres:9.6-alpine-postgis
|
|
<<: *test_pg_env
|
|
|
|
test_server_pg_9.5:
|
|
<<: *test_server
|
|
environment:
|
|
PG_VERSION: "9_5"
|
|
docker:
|
|
- image: *server_builder_image
|
|
- image: circleci/postgres:9.5-alpine-postgis
|
|
<<: *test_pg_env
|
|
|
|
server_unit_tests:
|
|
resource_class: large
|
|
docker:
|
|
- image: *server_builder_image
|
|
working_directory: ~/graphql-engine
|
|
steps:
|
|
- attach_workspace:
|
|
at: /build
|
|
- *skip_job_on_ciignore
|
|
- checkout
|
|
- *skip_server_tests
|
|
- run:
|
|
name: Run unit tests
|
|
environment:
|
|
GHCRTS: -N2
|
|
command: /build/_server_output/graphql-engine-tests unit
|
|
|
|
test_cli_with_last_release:
|
|
machine:
|
|
image: ubuntu-2004:202101-01
|
|
working_directory: ~/graphql-engine
|
|
steps:
|
|
- run:
|
|
name: create /build directory
|
|
command: |
|
|
sudo mkdir /build
|
|
sudo chmod 777 /build
|
|
- attach_workspace:
|
|
at: /build
|
|
- *skip_job_on_ciignore
|
|
- checkout
|
|
- run:
|
|
name: install deps
|
|
command: |
|
|
sudo .circleci/install-cli-builder-deps.sh
|
|
- run:
|
|
name: get cli dependencies
|
|
working_directory: cli
|
|
command: make deps
|
|
- run:
|
|
name: test cli
|
|
working_directory: cli
|
|
command: |
|
|
export HASURA_TEST_CLI_HGE_DOCKER_IMAGE="hasura/graphql-engine:$(curl https://releases.hasura.io/graphql-engine | jq -r '.latest')"
|
|
echo "HASURA_TEST_CLI_HGE_DOCKER_IMAGE = $HASURA_TEST_CLI_HGE_DOCKER_IMAGE"
|
|
make integration_tests_config_v2
|
|
HASURA_GRAPHQL_TEST_ADMIN_SECRET="abcd" make integration_tests_config_v2
|
|
- store_artifacts:
|
|
path: /build/_cli_output
|
|
destination: cli
|
|
|
|
# test and build cli extension
|
|
test_and_build_cli_ext:
|
|
machine:
|
|
image: ubuntu-2004:202101-01
|
|
working_directory: ~/graphql-engine
|
|
steps:
|
|
- run:
|
|
name: create /build and /root directory
|
|
command: |
|
|
sudo mkdir /build
|
|
sudo chmod 777 /build
|
|
- attach_workspace:
|
|
at: /build
|
|
- *skip_job_on_ciignore
|
|
- checkout
|
|
- run:
|
|
name: install dependencies
|
|
working_directory: cli-ext
|
|
command: make ci-deps
|
|
- run:
|
|
name: setup cross-compilation tools
|
|
command: |
|
|
sudo apt update
|
|
sudo apt install -y qemu binfmt-support qemu-user-static
|
|
update-binfmts --display
|
|
- run:
|
|
name: build extension cli
|
|
working_directory: ~/graphql-engine
|
|
command: |
|
|
docker run -it --rm -v $(pwd):/graphql-engine -v /build:/build --workdir="/graphql-engine/cli-ext" hasura/graphql-engine-extension-cli-builder:20200225 /bin/bash -c "make build && make ci-copy-assets"
|
|
- store_artifacts:
|
|
path: /build/_cli_ext_output
|
|
destination: cli_ext
|
|
- persist_to_workspace:
|
|
root: /build
|
|
paths:
|
|
- _cli_ext_output
|
|
|
|
sign_macos_cli_ext:
|
|
macos:
|
|
xcode: 11.3.0
|
|
working_directory: ~/graphql-engine
|
|
steps:
|
|
- run:
|
|
name: create ~/build directory
|
|
command: |
|
|
mkdir ~/build
|
|
- attach_workspace:
|
|
at: ~/build
|
|
- *skip_job_on_ciignore
|
|
- run:
|
|
name: sign macos (arm64) cli-ext
|
|
command: |
|
|
codesign --sign - ~/build/_cli_ext_output/cli-ext-hasura-node16-macos-arm64
|
|
- store_artifacts:
|
|
path: ~/build/_cli_ext_output
|
|
destination: cli_ext
|
|
- persist_to_workspace:
|
|
root: ~/build
|
|
paths:
|
|
- _cli_ext_output
|
|
|
|
build_cli:
|
|
docker:
|
|
- image: hasura/graphql-engine-cli-builder:9657e5303218c015a20cd0d7e252d5600537e6384b172003273b6ebd38c451d8
|
|
working_directory: ~/graphql-engine
|
|
steps:
|
|
- attach_workspace:
|
|
at: /build
|
|
- *skip_job_on_ciignore
|
|
- checkout
|
|
- restore_cache:
|
|
keys:
|
|
- cli-gopkg-{{ checksum "cli/go.mod" }}-{{ checksum "cli/go.sum" }}
|
|
- run:
|
|
name: build cli
|
|
working_directory: cli
|
|
command: |
|
|
make lint
|
|
make build
|
|
make compress
|
|
make ci-copy-binary
|
|
- save_cache:
|
|
key: cli-gopkg-{{ checksum "cli/go.mod" }}-{{ checksum "cli/go.sum" }}
|
|
paths:
|
|
- /go/pkg/mod
|
|
- store_artifacts:
|
|
path: /build/_cli_output
|
|
destination: cli
|
|
- persist_to_workspace:
|
|
root: /build
|
|
paths:
|
|
- _cli_output
|
|
|
|
test_cli:
|
|
machine:
|
|
image: ubuntu-2004:202101-01
|
|
working_directory: ~/graphql-engine
|
|
steps:
|
|
- run:
|
|
name: create /build directory
|
|
command: |
|
|
sudo mkdir /build
|
|
sudo chmod 777 /build
|
|
- attach_workspace:
|
|
at: /build
|
|
- *skip_job_on_ciignore
|
|
- checkout
|
|
- run:
|
|
name: install deps
|
|
command: |
|
|
sudo .circleci/install-cli-builder-deps.sh
|
|
- run:
|
|
name: test cli
|
|
working_directory: cli
|
|
command: |
|
|
chmod +x /build/_cli_output/binaries/cli-hasura-linux-amd64
|
|
export SOURCE_IMAGE=$(docker load -i /build/_server_output/image.tar | grep "^Loaded image: " | sed "s/Loaded image: //g")
|
|
echo "SOURCE_IMAGE = $SOURCE_IMAGE"
|
|
export HASURA_TEST_CLI_HGE_DOCKER_IMAGE="$SOURCE_IMAGE"
|
|
echo "HASURA_TEST_CLI_HGE_DOCKER_IMAGE = $HASURA_TEST_CLI_HGE_DOCKER_IMAGE"
|
|
make test-all
|
|
export HASURA_GRAPHQL_TEST_ADMIN_SECRET="abcd"
|
|
export HASURA_GRAPHQL_ADMIN_SECRET="abcd"
|
|
make test-all
|
|
|
|
test_and_build_cli_migrations:
|
|
docker:
|
|
- image: hasura/graphql-engine-cli-migrations-builder:20200415
|
|
working_directory: ~/graphql-engine
|
|
steps:
|
|
- attach_workspace:
|
|
at: /build
|
|
- *skip_job_on_ciignore
|
|
- checkout
|
|
- *setup_remote_docker
|
|
- run:
|
|
name: Install Docker Compose
|
|
command: |
|
|
set -x
|
|
curl -L https://github.com/docker/compose/releases/download/1.25.3/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
|
|
chmod +x /usr/local/bin/docker-compose
|
|
- run:
|
|
name: Build cli-migrations image
|
|
working_directory: scripts/cli-migrations
|
|
command: |
|
|
mkdir -p /build/_cli_migrations_output
|
|
make all
|
|
- store_artifacts:
|
|
path: /build/_cli_migrations_output
|
|
destination: cli-migrations
|
|
- persist_to_workspace:
|
|
root: /build
|
|
paths:
|
|
- _cli_migrations_output
|
|
|
|
# build console assets
|
|
build_console:
|
|
docker:
|
|
- image: hasura/graphql-engine-console-builder:80c71f5dd8f1e33b92d3ec2da7abc1ff8d7936a88d3ee0004fd7ad37aacf3b3a
|
|
working_directory: ~/graphql-engine
|
|
steps:
|
|
- attach_workspace:
|
|
at: /build
|
|
- *skip_job_on_ciignore
|
|
- checkout
|
|
- restore_cache:
|
|
key: console-npm-cache-{{ checksum "console/package.json" }}-{{ checksum "console/package-lock.json" }}
|
|
- run:
|
|
name: install dependencies
|
|
working_directory: console
|
|
command: make ci-deps
|
|
- save_cache:
|
|
key: console-npm-cache-{{ checksum "console/package.json" }}-{{ checksum "console/package-lock.json" }}
|
|
paths:
|
|
- console/node_modules
|
|
- ~/.npm
|
|
- ~/.cache
|
|
- run:
|
|
name: build console
|
|
working_directory: console
|
|
command: |
|
|
make build
|
|
make ci-copy-assets
|
|
- run:
|
|
name: setup assets directory
|
|
command: |
|
|
export ASSETS_PATH=/build/_console_output/assets
|
|
mkdir -p "$ASSETS_PATH"
|
|
gsutil -m cp -r gs://graphql-engine-cdn.hasura.io/console/assets/common "$ASSETS_PATH"
|
|
# gsutil decompresses files automatically, need to compress font-awesome again
|
|
# (see https://github.com/GoogleCloudPlatform/gsutil/issues/515)
|
|
mv "$ASSETS_PATH/common/css/font-awesome.min.css.gz" "$ASSETS_PATH/common/css/font-awesome.min.css"
|
|
gzip "$ASSETS_PATH/common/css/font-awesome.min.css"
|
|
# copy versioned assets and compress them
|
|
mkdir -p "$ASSETS_PATH/versioned"
|
|
cp "$ASSETS_PATH"/../{main.js,main.css,vendor.js} "$ASSETS_PATH/versioned/"
|
|
gzip -r "$ASSETS_PATH/versioned/"
|
|
- store_artifacts:
|
|
path: /build/_console_output
|
|
destination: console
|
|
- persist_to_workspace:
|
|
root: /build
|
|
paths:
|
|
- _console_output
|
|
console_unit_tests:
|
|
docker:
|
|
- image: hasura/graphql-engine-console-builder:80c71f5dd8f1e33b92d3ec2da7abc1ff8d7936a88d3ee0004fd7ad37aacf3b3a
|
|
working_directory: ~/graphql-engine
|
|
steps:
|
|
- attach_workspace:
|
|
at: /build
|
|
- *skip_job_on_ciignore
|
|
- checkout
|
|
- restore_cache:
|
|
key: console-npm-cache-{{ checksum "console/package.json" }}-{{ checksum "console/package-lock.json" }}
|
|
- run:
|
|
name: install dependencies
|
|
working_directory: console
|
|
command: make ci-deps
|
|
- save_cache:
|
|
key: console-npm-cache-{{ checksum "console/package.json" }}-{{ checksum "console/package-lock.json" }}
|
|
paths:
|
|
- console/node_modules
|
|
- ~/.npm
|
|
- ~/.cache
|
|
- run:
|
|
name: unit test console
|
|
working_directory: console
|
|
command: |
|
|
make jest
|
|
# test console
|
|
test_console:
|
|
resource_class: medium+
|
|
docker:
|
|
- image: hasura/graphql-engine-console-builder:80c71f5dd8f1e33b92d3ec2da7abc1ff8d7936a88d3ee0004fd7ad37aacf3b3a
|
|
environment:
|
|
HASURA_GRAPHQL_DATABASE_URL: "postgres://gql_test:gqltest@localhost:5432/gql_test"
|
|
CYPRESS_KEY: 983be0db-0f19-40cc-bfc4-194fcacd85e1
|
|
GHCRTS: -N1
|
|
TEST_MSSQL_DATABASE_URL: "DRIVER={ODBC Driver 18 for SQL Server};SERVER=localhost;DATABASE=master;Uid=SA;Pwd=hasuraMSSQL1;Encrypt=optional"
|
|
- image: circleci/postgres:10-alpine-postgis
|
|
environment:
|
|
POSTGRES_USER: gql_test
|
|
POSTGRES_DB: gql_test
|
|
POSTGRES_PASSWORD: gql_test
|
|
- image: mcr.microsoft.com/mssql/server:2019-CU10-ubuntu-20.04
|
|
environment:
|
|
ACCEPT_EULA: Y
|
|
SA_PASSWORD: hasuraMSSQL1
|
|
working_directory: ~/graphql-engine
|
|
parallelism: 4
|
|
steps:
|
|
- attach_workspace:
|
|
at: /build
|
|
- *skip_job_on_ciignore
|
|
- checkout
|
|
- restore_cache:
|
|
key: console-npm-cache-{{ checksum "console/package.json" }}-{{ checksum "console/package-lock.json" }}
|
|
- run:
|
|
name: install dependencies
|
|
working_directory: console
|
|
command: make ci-deps
|
|
- save_cache:
|
|
key: console-npm-cache-{{ checksum "console/package.json" }}-{{ checksum "console/package-lock.json" }}
|
|
paths:
|
|
- console/node_modules
|
|
- ~/.npm
|
|
- ~/.cache
|
|
- *wait_for_postgres
|
|
- *wait_for_mssql
|
|
- run:
|
|
name: test console
|
|
command: .circleci/test-console.sh
|
|
- store_artifacts:
|
|
path: /build/_console_output/server.log
|
|
|
|
# test server upgrade from last version to current build
|
|
test_server_upgrade:
|
|
docker:
|
|
# Using the image for pytests, since server upgrade tests are now a bunch of pytests
|
|
- image: *server_builder_image
|
|
environment:
|
|
HASURA_GRAPHQL_DATABASE_URL: postgresql://gql_test:gql_test@localhost:5432/gql_test
|
|
- image: circleci/postgres:11-alpine-postgis
|
|
environment:
|
|
POSTGRES_USER: gql_test
|
|
POSTGRES_DB: gql_test
|
|
working_directory: ~/graphql-engine
|
|
steps:
|
|
- attach_workspace:
|
|
at: /build
|
|
- *skip_job_on_ciignore
|
|
- checkout
|
|
- *skip_server_tests
|
|
- run:
|
|
name: upgrade_test
|
|
command: .circleci/server-upgrade-downgrade/run.sh
|
|
environment:
|
|
HASURA_GRAPHQL_DATABASE_URL: postgresql://gql_test:gql_test@localhost:5432/gql_test
|
|
# NOTE: pytests depend on this being set to 8
|
|
HASURA_GRAPHQL_EVENTS_HTTP_POOL_SIZE: 8
|
|
- store_artifacts:
|
|
path: /build/_server_output
|
|
destination: server
|
|
|
|
deploy:
|
|
docker:
|
|
- image: hasura/graphql-engine-deployer:v0.4
|
|
working_directory: ~/graphql-engine
|
|
steps:
|
|
- attach_workspace:
|
|
at: /build
|
|
- *skip_job_on_ciignore
|
|
- *setup_remote_docker
|
|
- checkout
|
|
- run:
|
|
name: deploy
|
|
command: .circleci/deploy.sh
|
|
|
|
workflows:
|
|
version: 2
|
|
workflow_v20200414:
|
|
jobs:
|
|
- check_build_worthiness: *filter_only_vtags
|
|
- test_and_build_cli_ext:
|
|
<<: *filter_only_vtags
|
|
requires:
|
|
- check_build_worthiness
|
|
- build_console:
|
|
<<: *filter_only_vtags
|
|
requires:
|
|
- check_build_worthiness
|
|
- console_unit_tests:
|
|
<<: *filter_only_vtags
|
|
requires:
|
|
- check_build_worthiness
|
|
- build_server:
|
|
<<: *filter_only_vtags
|
|
requires:
|
|
- check_build_worthiness
|
|
- sign_macos_cli_ext:
|
|
<<: *filter_only_vtags
|
|
requires:
|
|
- test_and_build_cli_ext
|
|
- test_cli_with_last_release:
|
|
<<: *filter_only_vtags
|
|
requires:
|
|
- sign_macos_cli_ext
|
|
- check_build_worthiness
|
|
- build_image:
|
|
<<: *filter_only_vtags
|
|
requires:
|
|
- build_server
|
|
- build_console
|
|
- test_server_mssql_2019:
|
|
<<: *filter_only_vtags
|
|
requires:
|
|
- build_server
|
|
- test_server_citus:
|
|
<<: *filter_only_vtags
|
|
requires:
|
|
- build_server
|
|
- test_server_bigquery:
|
|
<<: *filter_only_vtags
|
|
context:
|
|
- pytest-bigquery
|
|
requires:
|
|
- build_server
|
|
- test_server_pg_13:
|
|
<<: *filter_only_vtags
|
|
requires:
|
|
- build_server
|
|
- test_server_pg_12:
|
|
<<: *filter_only_vtags
|
|
requires:
|
|
- build_server
|
|
- test_server_pg_11:
|
|
<<: *filter_only_vtags
|
|
requires:
|
|
- build_server
|
|
- test_server_pg_10:
|
|
<<: *filter_only_vtags
|
|
requires:
|
|
- build_server
|
|
- test_server_pg_9.6:
|
|
<<: *filter_only_vtags
|
|
requires:
|
|
- build_server
|
|
- test_server_pg_9.5:
|
|
<<: *filter_only_vtags
|
|
requires:
|
|
- build_server
|
|
- server_unit_tests:
|
|
<<: *filter_only_vtags
|
|
requires:
|
|
- build_server
|
|
- test_server_upgrade:
|
|
<<: *filter_only_vtags
|
|
requires:
|
|
- build_server
|
|
- all_server_tests_pass:
|
|
<<: *filter_only_vtags
|
|
requires:
|
|
- test_server_pg_13
|
|
- test_server_pg_12
|
|
- test_server_pg_11
|
|
- test_server_pg_10
|
|
- test_server_pg_9.6
|
|
- test_server_pg_9.5
|
|
- server_unit_tests
|
|
- test_server_upgrade
|
|
- build_cli:
|
|
<<: *filter_only_vtags
|
|
requires:
|
|
- sign_macos_cli_ext
|
|
- test_cli:
|
|
<<: *filter_only_vtags
|
|
requires:
|
|
- build_cli
|
|
- build_image
|
|
- test_and_build_cli_migrations:
|
|
<<: *filter_only_vtags
|
|
requires:
|
|
- build_image
|
|
- build_cli
|
|
- test_console:
|
|
<<: *filter_only_vtags
|
|
requires:
|
|
- build_console
|
|
- build_cli
|
|
- build_server
|
|
- test_cli_with_last_release
|
|
- deploy:
|
|
<<: *filter_only_vtags_channel_branches
|
|
requires:
|
|
- console_unit_tests
|
|
- test_console
|
|
- test_cli
|
|
- test_and_build_cli_migrations
|
|
- all_server_tests_pass
|