From 6e36535664a8e01a0c39f8fa59c44f836368278c Mon Sep 17 00:00:00 2001 From: collerek Date: Tue, 25 Jan 2022 12:57:42 +0100 Subject: [PATCH 1/8] add support for local tests in docker --- .gitignore | 1 + scripts/check | 16 ++++++++++++++- scripts/coverage | 15 +++++++++++++- scripts/docker-compose.yml | 20 +++++++++++++++++++ scripts/lint | 15 +++++++++++++- scripts/test | 40 ++++++++++++++++++++++++++++++++------ tests/test_databases.py | 5 ++++- 7 files changed, 102 insertions(+), 10 deletions(-) create mode 100644 scripts/docker-compose.yml diff --git a/.gitignore b/.gitignore index a0fb5aca..84e5236e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .vscode/ +.idea/ *.pyc test.db .coverage diff --git a/scripts/check b/scripts/check index 81a34881..d8cf03dd 100755 --- a/scripts/check +++ b/scripts/check @@ -1,9 +1,23 @@ #!/bin/sh -e export PREFIX="" -if [ -d 'venv' ] ; then +UNAME=$(uname) +case "$UNAME" in +"Linux") export SYSTEM="Linux" ;; +"Darwin") export SYSTEM="Linux" ;; +CYGWIN*) export SYSTEM="Windows" ;; +MINGW*) export SYSTEM="Windows" ;; +*) export SYSTEM="Linux" ;; +esac + +if [ -d 'venv' ]; then + if [ $SYSTEM = "Linux" ] ; then export PREFIX="venv/bin/" + else + export PREFIX="venv/Scripts/" + fi fi + export SOURCE_FILES="databases tests" set -x diff --git a/scripts/coverage b/scripts/coverage index e871360d..38f4a9a0 100755 --- a/scripts/coverage +++ b/scripts/coverage @@ -1,8 +1,21 @@ #!/bin/sh -e export PREFIX="" -if [ -d 'venv' ] ; then +UNAME=$(uname) +case "$UNAME" in +"Linux") export SYSTEM="Linux" ;; +"Darwin") export SYSTEM="Linux" ;; +CYGWIN*) export SYSTEM="Windows" ;; +MINGW*) export SYSTEM="Windows" ;; +*) export SYSTEM="Linux" ;; +esac + +if [ -d 'venv' ]; then + if [ $SYSTEM = "Linux" ] ; then export PREFIX="venv/bin/" + else + export PREFIX="venv/Scripts/" + fi fi set -x diff --git a/scripts/docker-compose.yml b/scripts/docker-compose.yml new file mode 100644 index 00000000..c6ad36ec --- /dev/null +++ b/scripts/docker-compose.yml @@ -0,0 +1,20 @@ +version: '2.1' +services: + postgres: + image: postgres:10.8 + environment: + POSTGRES_USER: username + POSTGRES_PASSWORD: password + POSTGRES_DB: testsuite + ports: + - 5432:5432 + + mysql: + image: mysql:5.7 + environment: + MYSQL_USER: username + MYSQL_PASSWORD: password + MYSQL_ROOT_PASSWORD: password + MYSQL_DATABASE: testsuite + ports: + - 3306:3306 \ No newline at end of file diff --git a/scripts/lint b/scripts/lint index 9c70a074..c9c8ecb5 100755 --- a/scripts/lint +++ b/scripts/lint @@ -1,8 +1,21 @@ #!/bin/sh -e export PREFIX="" -if [ -d 'venv' ] ; then +UNAME=$(uname) +case "$UNAME" in +"Linux") export SYSTEM="Linux" ;; +"Darwin") export SYSTEM="Linux" ;; +CYGWIN*) export SYSTEM="Windows" ;; +MINGW*) export SYSTEM="Windows" ;; +*) export SYSTEM="Linux" ;; +esac + +if [ -d 'venv' ]; then + if [ $SYSTEM = "Linux" ]; then export PREFIX="venv/bin/" + else + export PREFIX="venv/Scripts/" + fi fi set -x diff --git a/scripts/test b/scripts/test index 4fccd64b..ec5ba2bf 100755 --- a/scripts/test +++ b/scripts/test @@ -1,23 +1,51 @@ #!/bin/sh export PREFIX="" -if [ -d 'venv' ] ; then +UNAME=$(uname) +case "$UNAME" in +"Linux") export SYSTEM="Linux" ;; +"Darwin") export SYSTEM="Linux" ;; +CYGWIN*) export SYSTEM="Windows" ;; +MINGW*) export SYSTEM="Windows" ;; +*) export SYSTEM="Linux" ;; +esac + +if [ -d 'venv' ]; then + if [ $SYSTEM = "Linux" ]; then export PREFIX="venv/bin/" + else + export PREFIX="venv/Scripts/" + fi +fi + +if [ -z "$TEST_DATABASE_URLS" ]; then + echo "Variable TEST_DATABASE_URLS must be set." + exit 1 fi -if [ -z "$TEST_DATABASE_URLS" ] ; then - echo "Variable TEST_DATABASE_URLS must be set." - exit 1 +if [ -n "${TEST_IN_DOCKER+x}" ]; then + docker-compose -f ./scripts/docker-compose.yml up -d + export TEST_DATABASE_URLS="sqlite:///test.db, + sqlite+aiosqlite:///test.db, + mysql+aiomysql://username:password@localhost:3306/testsuite, + mysql+asyncmy://username:password@localhost:3306/testsuite, + postgresql+aiopg://username:password@127.0.0.1:5432/testsuite, + postgresql+asyncpg://username:password@localhost:5432/testsuite + " fi set -ex if [ -z $GITHUB_ACTIONS ]; then - scripts/check + scripts/check fi ${PREFIX}coverage run -m pytest $@ if [ -z $GITHUB_ACTIONS ]; then - scripts/coverage + scripts/coverage +fi + +if [ -n "${TEST_IN_DOCKER+x}" ]; then + docker-compose -f ./scripts/docker-compose.yml down fi diff --git a/tests/test_databases.py b/tests/test_databases.py index 5f91aa37..5cc84716 100644 --- a/tests/test_databases.py +++ b/tests/test_databases.py @@ -12,6 +12,9 @@ from databases import Database, DatabaseURL +if sys.version_info >= (3, 8) and sys.platform.lower().startswith("win"): + asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) + assert "TEST_DATABASE_URLS" in os.environ, "TEST_DATABASE_URLS is not set." DATABASE_URLS = [url.strip() for url in os.environ["TEST_DATABASE_URLS"].split(",")] @@ -23,7 +26,7 @@ def mysql_versions(wrapped_func): """ @functools.wraps(wrapped_func) - def check(*args, **kwargs): + def check(*args, **kwargs): # pragma: no cover url = DatabaseURL(kwargs["database_url"]) if url.scheme in ["mysql", "mysql+aiomysql"] and sys.version_info >= (3, 10): pytest.skip("aiomysql supports python 3.9 and lower") From 002e579dae556c048479f3105d9841750ec6a076 Mon Sep 17 00:00:00 2001 From: rdrazkiewicz Date: Tue, 25 Jan 2022 15:42:23 +0100 Subject: [PATCH 2/8] update docs --- docs/contributing.md | 83 +++++++++++++++++++++++++++++++++++++++++ mkdocs.yml | 1 + scripts/docs | 15 +++++++- scripts/test | 4 +- tests/test_databases.py | 4 +- 5 files changed, 103 insertions(+), 4 deletions(-) create mode 100644 docs/contributing.md diff --git a/docs/contributing.md b/docs/contributing.md new file mode 100644 index 00000000..6f143cad --- /dev/null +++ b/docs/contributing.md @@ -0,0 +1,83 @@ +# Contibuting + +All contributions to *databases* are welcomed! + +## Issues + +To make it as simple as possible for us to help you, please include the following: + +* OS +* python version +* databases version +* database backend (mysql, sqlite or postgresql) +* database driver (aiopg, aiomysql etc.) + +Please try to always include the above unless you're unable to install *databases* or **know** it's not relevant +to your question or feature request. + +## Pull Requests + +It should be quite straight forward to get started and create a Pull Request. + +!!! note + Unless your change is trivial (typo, docs tweak etc.), please create an issue to discuss the change before + creating a pull request. + +To make contributing as easy and fast as possible, you'll want to run tests and linting locally. + +You'll need to have **python >= 3.6 (recommended 3.7+)** and **git** installed. + +## Getting started + +1. Clone your fork and cd into the repo directory +```bash +git clone git@github.com:/databases.git +cd databases +``` + +2. Create and activate virtual env +```bash +virtualenv -p `which python3.6` env +source env/bin/activate +``` + +3. Install databases, dependencies and test dependencies +```bash +pip install -r requirements.txt +``` + +4. Checkout a new branch and make your changes +```bash +git checkout -b my-new-feature-branch +``` + +## Make your changes... + +## Contribute + +1. Formatting and linting - databases uses black for formatting, autoflake for linting and mypy for type hints check +run all of those with lint script +```bash +./scripts/lint +``` + +2. Prepare tests (basic) + 1. Set-up `TEST_DATABASE_URLS` env variable where you can comma separate urls for several backends + 2. The simples one is for sqlite alone: `sqlite:///test.db` + +3. Prepare tests (all backends) + 1. In order to run all backends you need a docker instalation on your system [from here](https://docs.docker.com/get-docker/) + 2. You need to set-up `TEST_IN_DOCKER` env variable (to any non-null value `YES` or `1`) + +4. Run tests +```bash +./scripts/test +``` + +5. Build documentation + 1. If you have changed the documentation make sure it runs successfully +```bash +./scripts/test +``` + +6. Commit, push, and create your pull request diff --git a/mkdocs.yml b/mkdocs.yml index f7e7815b..2dbabde8 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -13,6 +13,7 @@ nav: - Database Queries: 'database_queries.md' - Connections & Transactions: 'connections_and_transactions.md' - Tests & Migrations: 'tests_and_migrations.md' + - Contributing: 'contributing.md' markdown_extensions: - mkautodoc diff --git a/scripts/docs b/scripts/docs index 4ac3beb7..ab35242e 100755 --- a/scripts/docs +++ b/scripts/docs @@ -1,8 +1,21 @@ #!/bin/sh -e export PREFIX="" -if [ -d 'venv' ] ; then +UNAME=$(uname) +case "$UNAME" in +"Linux") export SYSTEM="Linux" ;; +"Darwin") export SYSTEM="Linux" ;; +CYGWIN*) export SYSTEM="Windows" ;; +MINGW*) export SYSTEM="Windows" ;; +*) export SYSTEM="Linux" ;; +esac + +if [ -d 'venv' ]; then + if [ $SYSTEM = "Linux" ] ; then export PREFIX="venv/bin/" + else + export PREFIX="venv/Scripts/" + fi fi set -x diff --git a/scripts/test b/scripts/test index ec5ba2bf..b2c8a49d 100755 --- a/scripts/test +++ b/scripts/test @@ -18,8 +18,8 @@ if [ -d 'venv' ]; then fi fi -if [ -z "$TEST_DATABASE_URLS" ]; then - echo "Variable TEST_DATABASE_URLS must be set." +if [ -z "$TEST_DATABASE_URLS" ] && [ -z "${TEST_IN_DOCKER+x}" ]; then + echo "Variable TEST_DATABASE_URLS or TEST_IN_DOCKER must be set." exit 1 fi diff --git a/tests/test_databases.py b/tests/test_databases.py index 5cc84716..6b828876 100644 --- a/tests/test_databases.py +++ b/tests/test_databases.py @@ -12,7 +12,9 @@ from databases import Database, DatabaseURL -if sys.version_info >= (3, 8) and sys.platform.lower().startswith("win"): +if sys.version_info >= (3, 8) and sys.platform.lower().startswith( + "win" +): # pragma: no cover asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) assert "TEST_DATABASE_URLS" in os.environ, "TEST_DATABASE_URLS is not set." From 94fab6e6f3e308402ec0824ce03d8cec8d201459 Mon Sep 17 00:00:00 2001 From: collerek Date: Tue, 25 Jan 2022 18:32:13 +0100 Subject: [PATCH 3/8] move win support to separate PR --- scripts/check | 15 +-------------- scripts/coverage | 15 +-------------- scripts/docs | 15 +-------------- scripts/lint | 15 +-------------- scripts/test | 15 +-------------- tests/test_databases.py | 5 ----- 6 files changed, 5 insertions(+), 75 deletions(-) diff --git a/scripts/check b/scripts/check index d8cf03dd..c5887373 100755 --- a/scripts/check +++ b/scripts/check @@ -1,21 +1,8 @@ #!/bin/sh -e export PREFIX="" -UNAME=$(uname) -case "$UNAME" in -"Linux") export SYSTEM="Linux" ;; -"Darwin") export SYSTEM="Linux" ;; -CYGWIN*) export SYSTEM="Windows" ;; -MINGW*) export SYSTEM="Windows" ;; -*) export SYSTEM="Linux" ;; -esac - -if [ -d 'venv' ]; then - if [ $SYSTEM = "Linux" ] ; then +if [ -d 'venv' ] ; then export PREFIX="venv/bin/" - else - export PREFIX="venv/Scripts/" - fi fi export SOURCE_FILES="databases tests" diff --git a/scripts/coverage b/scripts/coverage index 38f4a9a0..e871360d 100755 --- a/scripts/coverage +++ b/scripts/coverage @@ -1,21 +1,8 @@ #!/bin/sh -e export PREFIX="" -UNAME=$(uname) -case "$UNAME" in -"Linux") export SYSTEM="Linux" ;; -"Darwin") export SYSTEM="Linux" ;; -CYGWIN*) export SYSTEM="Windows" ;; -MINGW*) export SYSTEM="Windows" ;; -*) export SYSTEM="Linux" ;; -esac - -if [ -d 'venv' ]; then - if [ $SYSTEM = "Linux" ] ; then +if [ -d 'venv' ] ; then export PREFIX="venv/bin/" - else - export PREFIX="venv/Scripts/" - fi fi set -x diff --git a/scripts/docs b/scripts/docs index ab35242e..4ac3beb7 100755 --- a/scripts/docs +++ b/scripts/docs @@ -1,21 +1,8 @@ #!/bin/sh -e export PREFIX="" -UNAME=$(uname) -case "$UNAME" in -"Linux") export SYSTEM="Linux" ;; -"Darwin") export SYSTEM="Linux" ;; -CYGWIN*) export SYSTEM="Windows" ;; -MINGW*) export SYSTEM="Windows" ;; -*) export SYSTEM="Linux" ;; -esac - -if [ -d 'venv' ]; then - if [ $SYSTEM = "Linux" ] ; then +if [ -d 'venv' ] ; then export PREFIX="venv/bin/" - else - export PREFIX="venv/Scripts/" - fi fi set -x diff --git a/scripts/lint b/scripts/lint index c9c8ecb5..9c70a074 100755 --- a/scripts/lint +++ b/scripts/lint @@ -1,21 +1,8 @@ #!/bin/sh -e export PREFIX="" -UNAME=$(uname) -case "$UNAME" in -"Linux") export SYSTEM="Linux" ;; -"Darwin") export SYSTEM="Linux" ;; -CYGWIN*) export SYSTEM="Windows" ;; -MINGW*) export SYSTEM="Windows" ;; -*) export SYSTEM="Linux" ;; -esac - -if [ -d 'venv' ]; then - if [ $SYSTEM = "Linux" ]; then +if [ -d 'venv' ] ; then export PREFIX="venv/bin/" - else - export PREFIX="venv/Scripts/" - fi fi set -x diff --git a/scripts/test b/scripts/test index b2c8a49d..df929df9 100755 --- a/scripts/test +++ b/scripts/test @@ -1,21 +1,8 @@ #!/bin/sh export PREFIX="" -UNAME=$(uname) -case "$UNAME" in -"Linux") export SYSTEM="Linux" ;; -"Darwin") export SYSTEM="Linux" ;; -CYGWIN*) export SYSTEM="Windows" ;; -MINGW*) export SYSTEM="Windows" ;; -*) export SYSTEM="Linux" ;; -esac - -if [ -d 'venv' ]; then - if [ $SYSTEM = "Linux" ]; then +if [ -d 'venv' ] ; then export PREFIX="venv/bin/" - else - export PREFIX="venv/Scripts/" - fi fi if [ -z "$TEST_DATABASE_URLS" ] && [ -z "${TEST_IN_DOCKER+x}" ]; then diff --git a/tests/test_databases.py b/tests/test_databases.py index 6b828876..e35e28b9 100644 --- a/tests/test_databases.py +++ b/tests/test_databases.py @@ -12,11 +12,6 @@ from databases import Database, DatabaseURL -if sys.version_info >= (3, 8) and sys.platform.lower().startswith( - "win" -): # pragma: no cover - asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) - assert "TEST_DATABASE_URLS" in os.environ, "TEST_DATABASE_URLS is not set." DATABASE_URLS = [url.strip() for url in os.environ["TEST_DATABASE_URLS"].split(",")] From c5e006822d4349f3420e5345a817a65cecd52313 Mon Sep 17 00:00:00 2001 From: collerek Date: Thu, 10 Feb 2022 10:11:59 +0100 Subject: [PATCH 4/8] remove docker file, update contributing docs --- docs/contributing.md | 36 ++++++++++++++++++++++++++++++++++-- scripts/docker-compose.yml | 20 -------------------- scripts/test | 11 ----------- 3 files changed, 34 insertions(+), 33 deletions(-) delete mode 100644 scripts/docker-compose.yml diff --git a/docs/contributing.md b/docs/contributing.md index 6f143cad..f0609026 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -66,8 +66,40 @@ run all of those with lint script 2. The simples one is for sqlite alone: `sqlite:///test.db` 3. Prepare tests (all backends) - 1. In order to run all backends you need a docker instalation on your system [from here](https://docs.docker.com/get-docker/) - 2. You need to set-up `TEST_IN_DOCKER` env variable (to any non-null value `YES` or `1`) + 1. In order to run all backends you need either a docker installation on your system or all supported backends servers installed on your local machine. + 2. A sample docker configuration that reflects the CI/CD workflow of databases might be: + + ```dockerfile + version: '2.1' + services: + postgres: + image: postgres:10.8 + environment: + POSTGRES_USER: username + POSTGRES_PASSWORD: password + POSTGRES_DB: testsuite + ports: + - 5432:5432 + + mysql: + image: mysql:5.7 + environment: + MYSQL_USER: username + MYSQL_PASSWORD: password + MYSQL_ROOT_PASSWORD: password + MYSQL_DATABASE: testsuite + ports: + - 3306:3306 + ``` + 3. To test all backends, the test urls need to consist of all possible drivers too, so a sample might look like following: + ```text + sqlite:///test.db, + sqlite+aiosqlite:///test.db, + mysql+aiomysql://username:password@localhost:3306/testsuite, + mysql+asyncmy://username:password@localhost:3306/testsuite, + postgresql+aiopg://username:password@127.0.0.1:5432/testsuite, + postgresql+asyncpg://username:password@localhost:5432/testsuite + ``` 4. Run tests ```bash diff --git a/scripts/docker-compose.yml b/scripts/docker-compose.yml deleted file mode 100644 index c6ad36ec..00000000 --- a/scripts/docker-compose.yml +++ /dev/null @@ -1,20 +0,0 @@ -version: '2.1' -services: - postgres: - image: postgres:10.8 - environment: - POSTGRES_USER: username - POSTGRES_PASSWORD: password - POSTGRES_DB: testsuite - ports: - - 5432:5432 - - mysql: - image: mysql:5.7 - environment: - MYSQL_USER: username - MYSQL_PASSWORD: password - MYSQL_ROOT_PASSWORD: password - MYSQL_DATABASE: testsuite - ports: - - 3306:3306 \ No newline at end of file diff --git a/scripts/test b/scripts/test index df929df9..77582054 100755 --- a/scripts/test +++ b/scripts/test @@ -10,17 +10,6 @@ if [ -z "$TEST_DATABASE_URLS" ] && [ -z "${TEST_IN_DOCKER+x}" ]; then exit 1 fi -if [ -n "${TEST_IN_DOCKER+x}" ]; then - docker-compose -f ./scripts/docker-compose.yml up -d - export TEST_DATABASE_URLS="sqlite:///test.db, - sqlite+aiosqlite:///test.db, - mysql+aiomysql://username:password@localhost:3306/testsuite, - mysql+asyncmy://username:password@localhost:3306/testsuite, - postgresql+aiopg://username:password@127.0.0.1:5432/testsuite, - postgresql+asyncpg://username:password@localhost:5432/testsuite - " -fi - set -ex if [ -z $GITHUB_ACTIONS ]; then From 0c012b6b1d43a0acbcf8e24ed89c6d74987fce72 Mon Sep 17 00:00:00 2001 From: collerek Date: Thu, 10 Feb 2022 10:15:44 +0100 Subject: [PATCH 5/8] clean scripts --- scripts/check | 1 - scripts/test | 7 ++----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/scripts/check b/scripts/check index c5887373..81a34881 100755 --- a/scripts/check +++ b/scripts/check @@ -4,7 +4,6 @@ export PREFIX="" if [ -d 'venv' ] ; then export PREFIX="venv/bin/" fi - export SOURCE_FILES="databases tests" set -x diff --git a/scripts/test b/scripts/test index 77582054..943d48a3 100755 --- a/scripts/test +++ b/scripts/test @@ -5,8 +5,8 @@ if [ -d 'venv' ] ; then export PREFIX="venv/bin/" fi -if [ -z "$TEST_DATABASE_URLS" ] && [ -z "${TEST_IN_DOCKER+x}" ]; then - echo "Variable TEST_DATABASE_URLS or TEST_IN_DOCKER must be set." +if [ -z "$TEST_DATABASE_URLS" ]; then + echo "Variable TEST_DATABASE_URLS must be set." exit 1 fi @@ -22,6 +22,3 @@ if [ -z $GITHUB_ACTIONS ]; then scripts/coverage fi -if [ -n "${TEST_IN_DOCKER+x}" ]; then - docker-compose -f ./scripts/docker-compose.yml down -fi From f8bff8f4f4197d12dcd7489c15c55a7e5a62ab2e Mon Sep 17 00:00:00 2001 From: collerek Date: Thu, 10 Feb 2022 10:50:31 +0100 Subject: [PATCH 6/8] Update docs/contributing.md Co-authored-by: Eric Jolibois --- docs/contributing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contributing.md b/docs/contributing.md index f0609026..8817ed06 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -1,6 +1,6 @@ # Contibuting -All contributions to *databases* are welcomed! +All contributions to *databases* are welcome! ## Issues From 5ad5eb309e8d271f041637f8f56a31b7eaa2ac32 Mon Sep 17 00:00:00 2001 From: collerek Date: Thu, 10 Feb 2022 11:21:14 +0100 Subject: [PATCH 7/8] Update docs/contributing.md Co-authored-by: Eric Jolibois --- docs/contributing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contributing.md b/docs/contributing.md index 8817ed06..3be057f1 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -109,7 +109,7 @@ run all of those with lint script 5. Build documentation 1. If you have changed the documentation make sure it runs successfully ```bash -./scripts/test +./scripts/docs ``` 6. Commit, push, and create your pull request From 3900cd1f7262d3ea064bfc3ba5a6d8051643e252 Mon Sep 17 00:00:00 2001 From: collerek Date: Thu, 10 Feb 2022 11:29:59 +0100 Subject: [PATCH 8/8] remove python version from venv, clarify that docs serve the live docs --- docs/contributing.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/contributing.md b/docs/contributing.md index 3be057f1..92ab3b3c 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -37,7 +37,7 @@ cd databases 2. Create and activate virtual env ```bash -virtualenv -p `which python3.6` env +virtualenv env source env/bin/activate ``` @@ -107,7 +107,8 @@ run all of those with lint script ``` 5. Build documentation - 1. If you have changed the documentation make sure it runs successfully + 1. If you have changed the documentation make sure it runs successfully. + You can preview the live documentation by running the following command: ```bash ./scripts/docs ```