name: CI
on: [push, pull_request]
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: [3.7, 3.8, 3.9]
        node-version: [14.x]
    services:
      redis:
        image: redis
        ports:
          - 6379:6379
      postgres:
        image: postgres
        env:
          POSTGRES_USER: netbox
          POSTGRES_PASSWORD: netbox
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
        ports:
          - 5432:5432

    steps:
    - name: Check out repo
      uses: actions/checkout@v2

    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python-version }}

    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v2
      with:
        node-version: ${{ matrix.node-version }}

    - name: Install dependencies & set up configuration
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
        pip install pycodestyle coverage
        ln -s configuration.testing.py netbox/netbox/configuration.py
        yarn --cwd netbox/project-static

    - name: Build documentation
      run: mkdocs build

    - name: Collect static files
      run: python netbox/manage.py collectstatic --no-input

    - name: Check PEP8 compliance
      run: pycodestyle --ignore=W504,E501 --exclude=node_modules netbox/

    - name: Check UI ESLint, TypeScript, and Prettier Compliance
      run: yarn --cwd netbox/project-static validate
    
    - name: Validate Static Asset Integrity
      run: scripts/verify-bundles.sh

    - name: Run tests
      run: coverage run --source="netbox/" netbox/manage.py test netbox/

    - name: Show coverage report
      run: coverage report --skip-covered --omit *migrations*
