Skip to content

Commit

Permalink
Test docker-compose in GitHub Actions
Browse files Browse the repository at this point in the history
  • Loading branch information
SebastiaanZ committed Nov 14, 2020
1 parent 04764a7 commit 5ac1f0a
Show file tree
Hide file tree
Showing 4 changed files with 169 additions and 8 deletions.
2 changes: 1 addition & 1 deletion .flake8
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ max-line-length=100
docstring-convention=all
import-order-style=pycharm
application_import_names=pydis_site
exclude=__pycache__, venv, .venv, **/migrations/**
exclude=__pycache__, venv, .venv, **/migrations/**, **/.cache/**
ignore=
B311,W503,E226,S311,T000
# Missing Docstrings
Expand Down
117 changes: 117 additions & 0 deletions .github/workflows/lint-test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
name: Lint & Test

on:
push:
branches:
- sebastiaan/backend/move-ci-to-gha


jobs:
lint-test:
runs-on: ubuntu-latest
env:
# Configure pip to cache dependencies and do a user install
PIP_NO_CACHE_DIR: false
PIP_USER: 1

# Hide the graphical elements from pipenv's output
PIPENV_HIDE_EMOJIS: 1
PIPENV_NOSPIN: 1

# Make sure pipenv does not try reuse an environment it's running in
PIPENV_IGNORE_VIRTUALENVS: 1

# Specify explicit paths for python dependencies and the pre-commit
# environment so we know which directories to cache
PYTHONUSERBASE: ${{ github.workspace }}/.cache/py-user-base
PRE_COMMIT_HOME: ${{ github.workspace }}/.cache/pre-commit-cache

steps:
- name: Add custom PYTHONUSERBASE to PATH
run: echo '${{ env.PYTHONUSERBASE }}/bin/' >> $GITHUB_PATH

# We don't want to persist credentials, as our GitHub Action
# may be run when a PR is made from a fork.
- name: Checkout repository
uses: actions/checkout@v2
with:
persist-credentials: false

- name: Setup python
id: python
uses: actions/setup-python@v2
with:
python-version: '3.9'

# This step caches our Python dependencies. To make sure we
# only restore a cache when the dependencies, the python version,
# the runner operating system, and the dependency location haven't
# changed, we create a cache key that is a composite of those states.
#
# Only when the context is exactly the same, we will restore the cache.
- name: Python Dependency Caching
uses: actions/cache@v2
id: python_cache
with:
path: ${{ env.PYTHONUSERBASE }}
key: "python-0-${{ runner.os }}-${{ env.PYTHONUSERBASE }}-\
${{ steps.python.outputs.python-version }}-\
${{ hashFiles('./Pipfile', './Pipfile.lock') }}"

# Install our dependencies if we did not restore a dependency cache
- name: Install dependencies using pipenv
if: steps.python_cache.outputs.cache-hit != 'true'
run: |
pip install pipenv
pipenv install --dev --deploy --system
# This step caches our pre-commit environment. To make sure we
# do create a new environment when our pre-commit setup changes,
# we create a cache key based on relevant factors.
- name: Pre-commit Environment Caching
uses: actions/cache@v2
with:
path: ${{ env.PRE_COMMIT_HOME }}
key: "precommit-0-${{ runner.os }}-${{ env.PRE_COMMIT_HOME }}-\
${{ steps.python.outputs.python-version }}-\
${{ hashFiles('./.pre-commit-config.yaml') }}"

# We will not run `flake8` here, as we will use a separate flake8
# action. As pre-commit does not support user installs, we set
# PIP_USER=0 to not do a user install.
- name: Run pre-commit hooks
run: export PIP_USER=0; SKIP=flake8 pre-commit run --all-files

# This step requires `pull_request_target`, as adding annotations
# requires "write" permissions to the repo.
- name: Run flake8
uses: julianwachholz/flake8-action@v1
with:
checkName: lint-test
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Run database using docker-compose
run: docker-compose run -d -p 7777:5432 --name pydis_web postgres

- name: Migrations and run tests with coverage.py
run: |
python manage.py makemigrations --check
python manage.py migrate
coverage run manage.py test --no-input
coverage report -m
env:
CI: GHA
DATABASE_URL: postgres://pysite:pysite@localhost:7777/pysite
METRICITY_DB_URL: postgres://pysite:pysite@localhost:7777/metricity

# This step will publish the coverage reports coveralls.io and
# print a "job" link in the output of the GitHub Action
- name: Publish coverage report to coveralls.io
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: coveralls

- name: Tear down docker-compose containers
run: docker-compose stop
if: ${{ always() }}
2 changes: 1 addition & 1 deletion Pipfile
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ flake8-todo = "~=0.7"
mccabe = "~=0.6.1"
pep8-naming = "~=0.9"
pre-commit = "~=2.1"
unittest-xml-reporting = "~=3.0"
coveralls = "~=2.1"

[requires]
python_version = "3.9"
Expand Down
56 changes: 50 additions & 6 deletions Pipfile.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 5ac1f0a

Please sign in to comment.