2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-04-28 11:36:44 +00:00

Use env variables rather than custom ci scripts

This commit is contained in:
Oliver Walters 2021-03-31 20:39:22 +11:00
parent 608f47837f
commit c846e2e65a
7 changed files with 78 additions and 104 deletions

View File

@ -1,6 +1,6 @@
# Perform CI checks, and calculate code coverage # Perform CI checks, and calculate code coverage
name: Code Coverage name: SQLite
on: ["push", "pull_request"] on: ["push", "pull_request"]
@ -10,10 +10,11 @@ jobs:
# These tests are used for code coverage analysis # These tests are used for code coverage analysis
coverage: coverage:
runs-on: ubuntu-latest runs-on: ubuntu-latest
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
INVENTREE_DB_NAME: './test_db.sqlite' INVENTREE_DB_NAME: './test_db.sqlite'
INVENTREE_DB_ENGINE: sqlite3 INVENTREE_DB_ENGINE: django.db.backends.sqlite3
steps: steps:
- name: Checkout Code - name: Checkout Code

View File

@ -7,6 +7,15 @@ jobs:
test: test:
runs-on: ubuntu-latest runs-on: ubuntu-latest
env:
# Database backend configuration
INVENTREE_DB_ENGINE: django.db.backends.mysql
INVENTREE_DB_USER: root
INVENTREE_DB_PASSWORD: password
INVENTREE_DB_HOST: '127.0.0.1'
INVENTREE_DB_PORT: 3306
services: services:
mariadb: mariadb:
image: mariadb:latest image: mariadb:latest
@ -32,6 +41,6 @@ jobs:
pip3 install mysqlclient pip3 install mysqlclient
invoke install invoke install
- name: Run Tests - name: Run Tests
run: | run: |
cd InvenTree cd InvenTree
python3 manage.py test --settings=InvenTree.ci_mysql python3 manage.py test --settings=InvenTree.ci_mysql

View File

@ -9,6 +9,14 @@ jobs:
test: test:
runs-on: ubuntu-latest runs-on: ubuntu-latest
env:
# Database backend configuration
INVENTREE_DB_ENGINE: django.db.backends.mysql
INVENTREE_DB_USER: root
INVENTREE_DB_PASSWORD: password
INVENTREE_DB_HOST: '127.0.0.1'
INVENTREE_DB_PORT: 3306
services: services:
mysql: mysql:
image: mysql:latest image: mysql:latest

View File

@ -9,6 +9,15 @@ jobs:
test: test:
runs-on: ubuntu-latest runs-on: ubuntu-latest
env:
# Database backend configuration
INVENTREE_DB_ENGINE: django.db.backends.postgresql
INVENTREE_DB_USER: inventree
INVENTREE_DB_PASSWORD: password
INVENTREE_DB_HOST: '127.0.0.1'
INVENTREE_DB_PORT: 5432
services: services:
postgres: postgres:
image: postgres image: postgres

View File

@ -1,19 +0,0 @@
"""
Configuration file for running tests against a MySQL database.
"""
from InvenTree.settings import *
# Override the 'test' database
if 'test' in sys.argv:
print('InvenTree: Running tests - Using MySQL test database')
DATABASES['default'] = {
# Ensure mysql backend is being used
'ENGINE': 'django.db.backends.mysql',
'NAME': 'inventree',
'USER': 'root',
'PASSWORD': 'password',
'HOST': '127.0.0.1',
'PORT': '3306',
}

View File

@ -1,19 +0,0 @@
"""
Configuration file for running tests against a MySQL database.
"""
from InvenTree.settings import *
# Override the 'test' database
if 'test' in sys.argv:
print('InvenTree: Running tests - Using PostGreSQL test database')
DATABASES['default'] = {
# Ensure postgresql backend is being used
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'inventree_test_db',
'USER': 'inventree',
'PASSWORD': 'password',
'HOST': '127.0.0.1',
'PORT': '5432'
}

View File

@ -319,83 +319,68 @@ MARKDOWNIFY_BLEACH = False
DATABASES = {} DATABASES = {}
""" """
When running unit tests, enforce usage of sqlite3 database, Configure the database backend based on the user-specified values.
so that the tests can be run in RAM without any setup requirements
- Primarily this configuration happens in the config.yaml file
- However there may be reason to configure the DB via environmental variables
- The following code lets the user "mix and match" database configuration
""" """
if 'test' in sys.argv:
logger.info('InvenTree: Running tests - Using sqlite3 memory database')
DATABASES['default'] = {
# Ensure sqlite3 backend is being used
'ENGINE': 'django.db.backends.sqlite3',
# Doesn't matter what the database is called, it is executed in RAM
'NAME': 'ram_test_db.sqlite3',
}
# Database backend selection logger.info("Configuring database backend:")
else:
"""
Configure the database backend based on the user-specified values.
- Primarily this configuration happens in the config.yaml file # Extract database configuration from the config.yaml file
- However there may be reason to configure the DB via environmental variables db_config = CONFIG.get('database', {})
- The following code lets the user "mix and match" database configuration
"""
logger.info("Configuring database backend:") # If a particular database option is not specified in the config file,
# look for it in the environmental variables
# e.g. INVENTREE_DB_NAME / INVENTREE_DB_USER / etc
# Extract database configuration from the config.yaml file db_keys = ['ENGINE', 'NAME', 'USER', 'PASSWORD', 'HOST', 'PORT']
db_config = CONFIG.get('database', {})
# If a particular database option is not specified in the config file, for key in db_keys:
# look for it in the environmental variables if key not in db_config:
# e.g. INVENTREE_DB_NAME / INVENTREE_DB_USER / etc logger.debug(f" - Missing {key} value: Looking for environment variable INVENTREE_DB_{key}")
env_key = f'INVENTREE_DB_{key}'
env_var = os.environ.get(env_key, None)
db_keys = ['ENGINE', 'NAME', 'USER', 'PASSWORD', 'HOST', 'PORT'] if env_var is not None:
logger.info(f'Using environment variable INVENTREE_DB_{key}')
db_config[key] = env_var
else:
logger.debug(f' INVENTREE_DB_{key} not found in environment variables')
for key in db_keys: # Check that required database configuration options are specified
if key not in db_config: reqiured_keys = ['ENGINE', 'NAME']
logger.debug(f" - Missing {key} value: Looking for environment variable INVENTREE_DB_{key}")
env_key = f'INVENTREE_DB_{key}'
env_var = os.environ.get(env_key, None)
if env_var is not None: for key in reqiured_keys:
logger.info(f'Using environment variable INVENTREE_DB_{key}') if key not in db_config:
db_config[key] = env_var error_msg = f'Missing required database configuration value {key} in config.yaml'
else: logger.error(error_msg)
logger.debug(f' INVENTREE_DB_{key} not found in environment variables')
# Check that required database configuration options are specified print('Error: ' + error_msg)
reqiured_keys = ['ENGINE', 'NAME'] sys.exit(-1)
for key in reqiured_keys: """
if key not in db_config: Special considerations for the database 'ENGINE' setting.
error_msg = f'Missing required database configuration value {key} in config.yaml' It can be specified in config.yaml (or envvar) as either (for example):
logger.error(error_msg) - sqlite3
- django.db.backends.sqlite3
- django.db.backends.postgresql
"""
print('Error: ' + error_msg) db_engine = db_config['ENGINE']
sys.exit(-1)
""" if db_engine.lower() in ['sqlite3', 'postgresql', 'mysql']:
Special considerations for the database 'ENGINE' setting. # Prepend the required python module string
It can be specified in config.yaml (or envvar) as either (for example): db_engine = f'django.db.backends.{db_engine.lower()}'
- sqlite3 db_config['ENGINE'] = db_engine
- django.db.backends.sqlite3
- django.db.backends.postgresql
"""
db_engine = db_config['ENGINE'] db_name = db_config['NAME']
if db_engine.lower() in ['sqlite3', 'postgresql', 'mysql']: logger.info(f"Database ENGINE: '{db_engine}'")
# Prepend the required python module string logger.info(f"Database NAME: '{db_name}'")
db_engine = f'django.db.backends.{db_engine.lower()}'
db_config['ENGINE'] = db_engine
db_name = db_config['NAME'] DATABASES['default'] = db_config
logger.info(f"Database ENGINE: '{db_engine}'")
logger.info(f"Database NAME: '{db_name}'")
DATABASES['default'] = db_config
CACHES = { CACHES = {
'default': { 'default': {