Simplification of development docker-compose file (#3429)

* Simplification of development docker-compose file

- Rename .env file
- Remove requirement for variable interpolation within the docker-compose file itself

* Add debug flag to CI test

* Additional quick-start docs (for docker)

* docker-compose update

- Introspection did not work quite as expected
- Set project name inside docker-compose file

* Fixes for "setup_test" task

- Check if directory exists before first deleting it
- Parameterize the "path" variable
- Add option to ignore update step

* Add demo data dir to .gitignore

* Remove debug call

* Update CONTRIBUTING.md
This commit is contained in:
Oliver 2022-07-30 10:34:16 +10:00 committed by GitHub
parent 9ccf211650
commit 3fc9a36d4b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 45 additions and 25 deletions

2
.gitignore vendored
View File

@ -36,6 +36,8 @@ local_settings.py
*.old *.old
# Files used for testing # Files used for testing
inventree-demo-dataset/
inventree-data/
dummy_image.* dummy_image.*
_tmp.csv _tmp.csv
inventree/label.pdf inventree/label.pdf

View File

@ -1,27 +1,38 @@
Hi there, thank you for your intrest in contributing! Hi there, thank you for your intrest in contributing!
Please read the contribution guidelines below, before submitting your first pull request to the InvenTree codebase. Please read the contribution guidelines below, before submitting your first pull request to the InvenTree codebase.
Up an running in 3 LOC: ## Quickstart
The following commands will get you quickly configure and run a development server, complete with a demo dataset to work with:
### Bare Metal
```bash ```bash
git clone https://github.com/inventree/InvenTree.git && cd InvenTree git clone https://github.com/inventree/InvenTree.git && cd InvenTree
python3 -m venv env && source env/bin/activate python3 -m venv env && source env/bin/activate
pip install invoke && invoke
pip install invoke && invoke setup-dev --tests pip install invoke && invoke setup-dev --tests
``` ```
### Docker
## Setup ```bash
git clone https://github.com/inventree/InvenTree.git && cd InvenTree
docker compose run inventree-dev-server invoke setup-test
docker compose up -d
```
Read the [InvenTree setup documentation](https://inventree.readthedocs.io/en/latest/start/intro/) for a complete installation reference guide.
### Setup Devtools
Run the following command to set up all toolsets for development. Run the following command to set up all toolsets for development.
```bash ```bash
invoke setup-dev invoke setup-dev
``` ```
With the flag `tests` the database will additionally be populated with the [offical](https://github.com/inventree/demo-dataset) test dataset. *We recommend you run this command before starting to contribute. This will install and set up `pre-commit` to run some checks before each commit and help reduce the style errors.*
```bash
invoke setup-dev --tests
```
Run either command to set up your development setup before starting to contribute. This will install and set up `pre-commit` to run some checks before each commit and help reduce the style errors.
## Branches and Versioning ## Branches and Versioning

View File

@ -1,5 +1,7 @@
version: "3.8" version: "3.8"
name: "inventree-development"
# Docker compose recipe for InvenTree development server # Docker compose recipe for InvenTree development server
# - Runs PostgreSQL as the database backend # - Runs PostgreSQL as the database backend
# - Uses built-in django webserver # - Uses built-in django webserver
@ -23,12 +25,12 @@ services:
container_name: inventree-dev-db container_name: inventree-dev-db
image: postgres:13 image: postgres:13
expose: expose:
- ${INVENTREE_DB_PORT:-5432}/tcp - 5432/tcp
environment: environment:
- PGDATA=/var/lib/postgresql/data/pgdb - PGDATA=/var/lib/postgresql/data/pgdb
- POSTGRES_USER=${INVENTREE_DB_USER:?You must provide the 'INVENTREE_DB_USER' variable in the .env file} - POSTGRES_USER=pguser
- POSTGRES_PASSWORD=${INVENTREE_DB_PASSWORD:?You must provide the 'INVENTREE_DB_PASSWORD' variable in the .env file} - POSTGRES_PASSWORD=pgpassword
- POSTGRES_DB=${INVENTREE_DB_NAME:?You must provide the 'INVENTREE_DB_NAME' variable in the .env file} - POSTGRES_DB=inventree
volumes: volumes:
# Map 'data' volume such that postgres database is stored externally # Map 'data' volume such that postgres database is stored externally
- ./data:/var/lib/postgresql/data - ./data:/var/lib/postgresql/data
@ -52,7 +54,7 @@ services:
# Mount local source directory to /home/inventree # Mount local source directory to /home/inventree
- ./:/home/inventree - ./:/home/inventree
env_file: env_file:
- .env - docker.dev.env
restart: unless-stopped restart: unless-stopped
# Background worker process handles long-running or periodic tasks # Background worker process handles long-running or periodic tasks
@ -66,5 +68,5 @@ services:
# Mount local source directory to /home/inventree # Mount local source directory to /home/inventree
- ./:/home/inventree - ./:/home/inventree
env_file: env_file:
- .env - docker.dev.env
restart: unless-stopped restart: unless-stopped

View File

@ -16,5 +16,3 @@ INVENTREE_DB_PASSWORD=pgpassword
# Enable plugins? # Enable plugins?
INVENTREE_PLUGINS_ENABLED=True INVENTREE_PLUGINS_ENABLED=True
COMPOSE_PROJECT_NAME=inventree-development

View File

@ -1,5 +1,7 @@
version: "3.8" version: "3.8"
name: "inventree-production"
# Docker compose recipe for a production-ready InvenTree setup, with the following containers: # Docker compose recipe for a production-ready InvenTree setup, with the following containers:
# - PostgreSQL as the database backend # - PostgreSQL as the database backend
# - gunicorn as the InvenTree web server # - gunicorn as the InvenTree web server

View File

@ -518,25 +518,30 @@ def test(c, database=None):
manage(c, 'test', pty=True) manage(c, 'test', pty=True)
@task(pre=[update], help={'dev': 'Set up development enviroment at the end'}) @task(help={'dev': 'Set up development enviroment at the end'})
def setup_test(c, dev=False): def setup_test(c, ignore_update=False, dev=False, path="inventree-demo-dataset"):
"""Setup a testing enviroment.""" """Setup a testing enviroment."""
if not ignore_update:
update(c)
# Remove old data directory # Remove old data directory
print("Removing old data ...") if os.path.exists(path):
c.run('rm inventree-data -r') print("Removing old data ...")
c.run(f'rm {path} -r')
# Get test data # Get test data
print("Starting to clone demo dataset ...") print("Cloning demo dataset ...")
c.run('git clone https://github.com/inventree/demo-dataset inventree-data') c.run(f'git clone https://github.com/inventree/demo-dataset {path} -v')
print("========================================") print("========================================")
# Make sure migrations are done - might have just deleted sqlite database # Make sure migrations are done - might have just deleted sqlite database
print("Running migrations ...") if not ignore_update:
migrate(c) migrate(c)
# Load data # Load data
print("Loading data ...") print("Loading data ...")
import_records(c, filename='inventree-data/inventree_data.json', clear=True) import_records(c, filename=f'{path}/inventree_data.json', clear=True)
print("Done setting up test enviroment...") print("Done setting up test enviroment...")
print("========================================") print("========================================")