Skip to content

Django Extra Checks CI #232

Django Extra Checks CI

Django Extra Checks CI #232

Workflow file for this run

name: Django Extra Checks CI
on:
push:
branches:
- master
tags:
- v*
pull_request:
schedule:
- cron: "30 16 1 * *"
jobs:
tests:
runs-on: ubuntu-latest
timeout-minutes: 10
env:
PYTHONPATH: "src"
strategy:
matrix:
# https://github.com/actions/python-versions/blob/main/versions-manifest.json
python-version: [3.8, 3.9, "3.10", "3.11", "3.12", "3.13"]
django-version:
- "Django>=4.2,<5.0"
- "Django>=5.0,<5.1"
- "Django>=5.1,<5.2"
# - "https://github.com/django/django/archive/main.tar.gz"
include:
- drf: djangorestframework
python-version: "3.12"
django-version: "Django<5.2,>=5.0" # must be different from django-version
exclude:
- django-version: "Django>=5.0,<5.1"
python-version: 3.8
- django-version: "Django>=5.0,<5.1"
python-version: 3.9
- django-version: "Django>=5.1,<5.2"
python-version: 3.8
- django-version: "Django>=5.1,<5.2"
python-version: 3.9
# - django-version: "https://github.com/django/django/archive/main.tar.gz"
# python-version: 3.8
# - django-version: "https://github.com/django/django/archive/main.tar.gz"
# python-version: 3.9
#
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
if: "!endsWith(matrix.python-version, '-dev')"
with:
python-version: ${{ matrix.python-version }}
cache: "pip"
cache-dependency-path: "pyproject.toml"
- name: Install deps
run: |
python -m pip install -e .[test]
python -m pip install "${{ matrix.django-version }}" ${{ matrix.drf }}
- run: pytest
lint:
runs-on: ubuntu-latest
timeout-minutes: 10
env:
PYTHONPATH: "src"
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: "pip"
cache-dependency-path: "pyproject.toml"
- uses: actions/cache@v4
with:
path: ~/.cache/pre-commit
key: pre-commit|${{ env.pythonLocation }}|${{ hashFiles('.pre-commit-config.yaml') }}
- run: python -m pip install -e .[dev]
- run: pre-commit run --show-diff-on-failure --color=always --all-files
package:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: "pip"
cache-dependency-path: "pyproject.toml"
- name: Install dependencies
run: |
python -m pip install hatch
- name: Package
run: python -m hatch build
- name: Upload dist
uses: actions/upload-artifact@v4
with:
name: dist
path: dist
publish:
runs-on: ubuntu-latest
needs: [package, tests, lint]
if: startsWith(github.ref, 'refs/tags/v')
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
- name: Set release env
id: release_output
run: |
VERSION="${GITHUB_REF:11}"
BODY=$(awk -v RS='### ' '/'$VERSION'.*/ {print $0}' CHANGELOG.md)
if [[ -z "$BODY" ]]; then
echo "No changelog record for version $VERSION."
fi
BODY="${BODY//'%'/'%25'}"
BODY="${BODY//$'\n'/'%0A'}"
BODY="${BODY//$'\r'/'%0D'}"
echo "::set-output name=VERSION::${VERSION}"
echo "::set-output name=BODY::${BODY}"
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Download dist
uses: actions/download-artifact@v4
with:
name: dist
path: dist
- name: Install dependencies
run: |
python -m pip install twine
- name: Publish
env:
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
run: |
twine upload dist/*
- name: Create Release
id: create_release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.ref }}
name: Release ${{ steps.release_output.outputs.VERSION }}
body: ${{ steps.release_output.outputs.BODY }}
draft: false
prerelease: ${{ contains(steps.release_output.outputs.VERSION, 'rc') || contains(steps.release_output.outputs.VERSION, 'b') || contains(steps.release_output.outputs.VERSION, 'a') }}