CI pipeline for Django Project

My Workflow

Have Django project setup and test cases written to be used to check continuous integration and checking code against flake8.

With this in mind follow these steps:

  • Create you Django project as usual django-admin startproject <project_name> .

  • Run your project with python manage.py runserver .

  • Initiate git in your project if not have it yet with git init .

  • Configure sensitive data like SECRET_KEYS and DEBUG_VALUE as environment variable in github repository.

  • Now our project is all setup and running, we will take care of CI on each commit PUSH on github repository.

Submission Category:

Wacky Wildcards

Yaml File or Link to Code

Add the .yml file as follows .github/workflows/name.yml in the project. For more information refer to the official docs

name: Django CI
on:
  push:
    branches:
      - '*'
      - '*/*'

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      max-parallel: 4
      matrix:
        python-version: [3.7, 3.8, 3.9]

    steps:
    - uses: actions/checkout@v2
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python-version }}
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
    - name: Run Tests
      env: # environment variable
        SECRET_kEY: ${{ secrets.SECRET_KEY }}
        DEBUG_VALUE: ${{ secrets.DEBUG_VALUE }}

      run: |
        python manage.py test
    - name: Lint with flake8
      run: |
        pip install flake8 
        # stop the build if there are Python syntax errors or undefined names
        flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
        # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
        flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
  • We can run CI for various python versions.
  • We can access secret variables as ${{secrets.<VARIABLE_NAME>}} .

Additional Resources / Info

Github repository

Collaborators

Happy coding, happy hacking ^^

18