# Checks for each PR / push name: QC checks on: push: branches-ignore: - l10* pull_request: branches-ignore: - l10* env: python_version: 3.7 node_version: 16 server_start_sleep: 60 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} INVENTREE_DB_ENGINE: sqlite3 INVENTREE_DB_NAME: inventree INVENTREE_MEDIA_ROOT: ./media INVENTREE_STATIC_ROOT: ./static jobs: pep_style: name: PEP style (python) runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up Python ${{ env.python_version }} uses: actions/setup-python@v2 with: python-version: ${{ env.python_version }} cache: 'pip' - name: Install deps run: | pip install flake8==3.8.3 pip install pep8-naming==0.11.1 - name: flake8 run: | flake8 InvenTree javascript: name: javascript template files needs: pep_style runs-on: ubuntu-latest steps: - name: Checkout Code uses: actions/checkout@v2 - name: Install node.js ${{ env.node_version }} uses: actions/setup-node@v2 with: node-version: ${{ env.node_version }} cache: 'npm' - run: npm install - name: Setup Python uses: actions/setup-python@v2 with: python-version: ${{ env.python_version }} cache: 'pip' - name: Install Dependencies run: | sudo apt-get update sudo apt-get install gettext pip3 install invoke invoke install invoke static - name: Check Templated Files run: | cd ci python check_js_templates.py - name: Lint Javascript Files run: | invoke render-js-files npx eslint js_tmp/*.js html: name: html template files needs: pep_style runs-on: ubuntu-latest steps: - name: Checkout Code uses: actions/checkout@v2 - name: Install node.js ${{ env.node_version }} uses: actions/setup-node@v2 with: node-version: ${{ env.node_version }} cache: 'npm' - run: npm install - name: Setup Python uses: actions/setup-python@v2 with: python-version: ${{ env.python_version }} cache: 'pip' - name: Install Dependencies run: | sudo apt-get update sudo apt-get install gettext pip3 install invoke invoke install invoke static - name: Check HTML Files run: | npx markuplint InvenTree/build/templates/build/*.html npx markuplint InvenTree/company/templates/company/*.html npx markuplint InvenTree/order/templates/order/*.html npx markuplint InvenTree/part/templates/part/*.html npx markuplint InvenTree/stock/templates/stock/*.html npx markuplint InvenTree/templates/*.html npx markuplint InvenTree/templates/InvenTree/*.html npx markuplint InvenTree/templates/InvenTree/settings/*.html python: name: python bindings needs: pep_style runs-on: ubuntu-latest env: wrapper_name: inventree-python steps: - name: Checkout Code uses: actions/checkout@v2 - name: Install InvenTree run: | sudo apt-get update sudo apt-get install python3-dev python3-pip python3-venv pip3 install invoke invoke install invoke migrate - name: Download Python Code run: | git clone --depth 1 https://github.com/inventree/${{ env.wrapper_name }} ./${{ env.wrapper_name }} - name: Start Server run: | invoke import-records -f ./${{ env.wrapper_name }}/test/test_data.json invoke server -a 127.0.0.1:8000 & sleep ${{ env.server_start_sleep }} - name: Run Tests run: | cd ${{ env.wrapper_name }} invoke test coverage: name: Sqlite / coverage needs: ['javascript', 'html'] runs-on: ubuntu-latest env: INVENTREE_DB_NAME: ./inventree.sqlite INVENTREE_DB_ENGINE: sqlite3 steps: - name: Checkout Code uses: actions/checkout@v2 - name: Setup Python ${{ env.python_version }} uses: actions/setup-python@v2 with: python-version: ${{ env.python_version }} cache: 'pip' - name: Install Dependencies run: | sudo apt-get update sudo apt-get install gettext pip3 install invoke invoke install invoke static - name: Coverage Tests run: | invoke coverage - name: Data Import Export run: | invoke migrate invoke import-fixtures invoke export-records -f data.json rm inventree.sqlite invoke migrate invoke import-records -f data.json invoke import-records -f data.json - name: Test Translations run: invoke translate - name: Check Migration Files run: python3 ci/check_migration_files.py - name: Upload Coverage Report run: coveralls postgres: name: Postgres needs: ['javascript', 'html'] runs-on: ubuntu-latest env: 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 INVENTREE_DEBUG: info INVENTREE_CACHE_HOST: localhost services: postgres: image: postgres env: POSTGRES_USER: inventree POSTGRES_PASSWORD: password ports: - 5432:5432 redis: image: redis ports: - 6379:6379 steps: - name: Checkout Code uses: actions/checkout@v2 - name: Setup Python ${{ env.python_version }} uses: actions/setup-python@v2 with: python-version: ${{ env.python_version }} cache: 'pip' - name: Install Dependencies run: | sudo apt-get install libpq-dev pip3 install invoke pip3 install psycopg2 pip3 install django-redis>=5.0.0 invoke install - name: Run Tests run: invoke test - name: Data Import Export run: | invoke migrate python3 ./InvenTree/manage.py flush --noinput invoke import-fixtures invoke export-records -f data.json python3 ./InvenTree/manage.py flush --noinput invoke import-records -f data.json invoke import-records -f data.json mysql: name: MySql needs: ['javascript', 'html'] 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 INVENTREE_DEBUG: info services: mysql: image: mysql:latest env: MYSQL_ALLOW_EMPTY_PASSWORD: yes MYSQL_DATABASE: ${{ env.INVENTREE_DB_NAME }} MYSQL_USER: inventree MYSQL_PASSWORD: password MYSQL_ROOT_PASSWORD: password options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3 ports: - 3306:3306 steps: - name: Checkout Code uses: actions/checkout@v2 - name: Setup Python ${{ env.python_version }} uses: actions/setup-python@v2 with: python-version: ${{ env.python_version }} cache: 'pip' - name: Install Dependencies run: | sudo apt-get install mysql-server libmysqlclient-dev pip3 install invoke pip3 install mysqlclient invoke install - name: Run Tests run: invoke test - name: Data Import Export run: | invoke migrate python3 ./InvenTree/manage.py flush --noinput invoke import-fixtures invoke export-records -f data.json python3 ./InvenTree/manage.py flush --noinput invoke import-records -f data.json invoke import-records -f data.json