mirror of
https://github.com/cookiecutter/cookiecutter-django.git
synced 2024-12-02 06:24:06 +03:00
6237573637
In order to run pytest we can constrain the build command to only build the images related to the django service. This mainly prevents the docs image from being built unnecessarily. This cuts run time of the Github Actions workflow from approx. 4min 30s to below 3min.
101 lines
2.5 KiB
YAML
101 lines
2.5 KiB
YAML
name: CI
|
|
|
|
# Enable Buildkit and let compose use it to speed up image building
|
|
env:
|
|
DOCKER_BUILDKIT: 1
|
|
COMPOSE_DOCKER_CLI_BUILD: 1
|
|
|
|
on:
|
|
pull_request:
|
|
branches: ['master', 'main']
|
|
paths-ignore: ['docs/**']
|
|
|
|
push:
|
|
branches: ['master', 'main']
|
|
paths-ignore: ['docs/**']
|
|
|
|
concurrency:
|
|
group: {% raw %}${{ github.head_ref || github.run_id }}{% endraw %}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
linter:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout Code Repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: '3.11'
|
|
|
|
{%- if cookiecutter.open_source_license != 'Not open source' %}
|
|
# Consider using pre-commit.ci for open source project
|
|
{%- endif %}
|
|
- name: Run pre-commit
|
|
uses: pre-commit/action@v3.0.0
|
|
|
|
# With no caching at all the entire ci process takes 3m to complete!
|
|
pytest:
|
|
runs-on: ubuntu-latest
|
|
{%- if cookiecutter.use_docker == 'n' %}
|
|
|
|
services:
|
|
{%- if cookiecutter.use_celery == 'y' %}
|
|
redis:
|
|
image: redis:6
|
|
ports:
|
|
- 6379:6379
|
|
{%- endif %}
|
|
postgres:
|
|
image: postgres:{{ cookiecutter.postgresql_version }}
|
|
ports:
|
|
- 5432:5432
|
|
env:
|
|
POSTGRES_PASSWORD: postgres
|
|
|
|
env:
|
|
{%- if cookiecutter.use_celery == 'y' %}
|
|
CELERY_BROKER_URL: 'redis://localhost:6379/0'
|
|
{%- endif %}
|
|
# postgres://user:password@host:port/database
|
|
DATABASE_URL: 'postgres://postgres:postgres@localhost:5432/postgres'
|
|
{%- endif %}
|
|
|
|
steps:
|
|
- name: Checkout Code Repository
|
|
uses: actions/checkout@v4
|
|
{%- if cookiecutter.use_docker == 'y' %}
|
|
|
|
- name: Build the Stack
|
|
run: docker compose -f local.yml build django
|
|
|
|
- name: Run DB Migrations
|
|
run: docker compose -f local.yml run --rm django python manage.py migrate
|
|
|
|
- name: Run Django Tests
|
|
run: docker compose -f local.yml run django pytest
|
|
|
|
- name: Tear down the Stack
|
|
run: docker compose -f local.yml down
|
|
{%- else %}
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: '3.11'
|
|
cache: pip
|
|
cache-dependency-path: |
|
|
requirements/base.txt
|
|
requirements/local.txt
|
|
|
|
- name: Install Dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install -r requirements/local.txt
|
|
|
|
- name: Test with pytest
|
|
run: pytest
|
|
{%- endif %}
|