Skip to content

Django Extra Checks CI #181

Django Extra Checks CI

Django Extra Checks CI #181

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.0-rc.3"]
django-version:
- "Django>=4.2,<5.0"
- "Django>=5.0a1,<5.1"
# - "https://github.com/django/django/archive/main.tar.gz"
include:
- drf: djangorestframework
python-version: "3.11"
django-version: "Django<5.0,>=4.2" # must be different from django-version
exclude:
- django-version: "Django>=5.0a1,<5.1"
python-version: 3.8
- django-version: "Django>=5.0a1,<5.1"
python-version: 3.9
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
if: "!endsWith(matrix.python-version, '-dev')"
with:
python-version: ${{ matrix.python-version }}
cache: "pip"
cache-dependency-path: "pyproject.toml"
- uses: deadsnakes/[email protected]
if: endsWith(matrix.python-version, '-dev')
with:
python-version: ${{ matrix.python-version }}
- 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@v3
- uses: actions/setup-python@v4
with:
python-version: "3.11"
cache: "pip"
cache-dependency-path: "pyproject.toml"
- uses: actions/cache@v3
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@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: "3.11"
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@v3
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@v3
- 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@v4
with:
python-version: "3.11"
- name: Download dist
uses: actions/download-artifact@v3
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: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_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') }}