CI pipeline for Django Project
Tags: actionshackathon21, github, django, python
Published: 2021-12-06 07:32:37

[Instructions]: # (To submit to the GitHub Actions x DEV Hackathon 2021, please fill out all sections.)


### 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.

![secret variables setup in github repository](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vmbsocd5roo7ubb5xlsp.png)

- Now our project is all setup and running, we will take care of CI on each commit PUSH on github repository.
[Note]: # (Please make sure the project links to the appropriate GitHub Actions repository, and includes [an open source license](https://choosealicense.com/) and README.)


### Submission Category: 
Wacky Wildcards
[Note]: # (Maintainer Must-Haves, DIY Deployments, Interesting IoT, Phone Friendly, or 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](https://docs.github.com/en/actions/learn-github-actions#creating-a-workflow-file)

```
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>}}` .

[Note]: # (Our markdown editor supports pretty embeds. Try this syntax: `{% github link_to_your_repo %}` to share a GitHub repository)


### Additional Resources / Info
Github [repository](https://github.com/techonerd/API_Bank)

under [MIT license](https://github.com/techonerd/API_Bank/blob/main/LICENSE)


#### Collaborators
@dkaiamit [@kido-kit-kat](https://github.com/kido-kit-kat)
[Note]: # (Be sure to include the DEV usernames of your collaborators, if any. )

Happy coding, happy hacking ^^