Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update package structure, add Python 3,12 and Django 5.0 #538

Merged
merged 5 commits into from
Dec 24, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 65 additions & 43 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,68 +6,90 @@ concurrency:
group: test-${{ github.head_ref }}
cancel-in-progress: true

env:
PYTHONUNBUFFERED: "1"
FORCE_COLOR: "1"

jobs:

static_tests:
name: Static Tests
ruff:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.11"
- name: Install latest pip and Hatch
run: pip install --upgrade pip hatch
- name: Lint
run: hatch run lint:all
- name: Docs
run: hatch run docs:build
- name: Build
run: hatch build
- uses: chartboost/ruff-action@v1

tests_matrix:
name: Python ${{ matrix.python-version }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ['3.8', '3.9', '3.10', '3.11']
python-version: [3.8, 3.9, "3.10", 3.11, 3.12]
django-version: [3.2, 4.1, 4.2, 5.0, "main"]
exclude:
# Django 3.2
- python-version: "3.10"
django-version: 3.2
- python-version: 3.11
django-version: 3.2
- python-version: 3.12
django-version: 3.2

steps:
- uses: actions/checkout@v4

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
# Django 4.1
- python-version: 3.12
django-version: 4.1

- name: Install GDAL binaries
run: sudo apt-get install binutils libproj-dev gdal-bin
# Django 4.2
- python-version: 3.12
django-version: 4.2

- name: Install latest pip, Hatch and coveralls
run: pip install --upgrade pip hatch coveralls
# Django 5.0
- python-version: 3.8
django-version: 5.0
- python-version: 3.9
django-version: 5.0

- name: Run tests
run: hatch run test-cov
# Django main
- python-version: 3.8
django-version: "main"
- python-version: 3.9
django-version: "main"

- name: Coverage combine
run: coverage combine
steps:
- uses: actions/checkout@v4
- name: Install GDAL binaries
run: sudo apt-get install binutils libproj-dev gdal-bin
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
cache-dependency-path: requirements-test.txt
- run: python -m pip install -r requirements-test.txt
- run: python -m pip install -U Django==${{ matrix.django-version }}
if: matrix.django-version != 'main'
- run: python -m pip install -U https://github.com/django/django/archive/master.tar.gz
if: matrix.django-version == 'main'
- run: python -m pip install -e .
- run: coverage run manage.py test
- run: python -m pip install -U coveralls
- name: Upload coveralls (parallel)
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
COVERALLS_PARALLEL: true
run: coveralls --service=github

- name: Upload coveralls (parallel)
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
COVERALLS_PARALLEL: true
run: coveralls --service=github
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
cache: 'pip'
cache-dependency-path: docs/requirements.txt
- name: Install and build
run: |
python -m pip install -r docs/requirements.txt
make docs

tests:
if: always()
runs-on: ubuntu-latest
needs: [ static_tests, tests_matrix ]
needs: [ tests_matrix, ruff, docs ]
steps:
- name: Check tests matrix status
if: needs.tests_matrix.result != 'success'
Expand Down
5 changes: 3 additions & 2 deletions .readthedocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ build:
tools:
python: "3.11"
commands:
- pip install -U pip hatch
- hatch run docs:build
- pip install -U pip
- pip install -U -r docs/requirements.txt
- make docs
- mv docs/_build $READTHEDOCS_OUTPUT
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
- Drop support for Python 3.7 in test matrix (#533).
- Fix support for Django 4.2 in test matrix (#533).
- Pass "horizontal_field_offset_class" to child renderers (#391, #521).
- Add support for Django 5.0 (#538).
- Add support for Python 3.12 (#538).
- Revert packaging tools to setuptools, build, tox and twine (#538).

## 23.3 (2023-06-03)

Expand Down
4 changes: 1 addition & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,6 @@ Ready to contribute? Here\'s how to set up `django-bootstrap5` for local develop

You will need some knowledge of git, github, and Python/Django development. Using a Python virtual environment is advised.

This project uses [Hatch](https://github.com/pypa/hatch) for environments and builds.

### Local installation

This section assumes you know about local Python versions and virtual environments.
Expand All @@ -56,7 +54,7 @@ To clone the repository and install the requirements for local development:
```console
git clone git://github.com/zostera/django-bootstrap5.git
cd django-bootstrap5
pip install -U pip hatch
pip install -U pip -r requirements-dev.txt
pip install -e .
```

Expand Down
36 changes: 23 additions & 13 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,35 +1,37 @@
VERSION := $(shell hatch version)
VERSION := $(shell sed -n 's/^ *version.*=.*"\([^"]*\)".*/\1/p' pyproject.toml)

.PHONY: test
test:
hatch run test
coverage run manage.py test
coverage report

.PHONY: tests
tests:
hatch run all:test
tox

.PHONY: reformat
reformat:
hatch run lint:fmt
ruff format .
ruff --fix .

.PHONY: lint
lint:
hatch run lint:style
ruff .

.PHONY: docs
docs:
hatch run docs:build
docs: clean
cd docs && sphinx-build -b html -d _build/doctrees . _build/html

.PHONY: example
example:
hatch run example:runserver
cd example && python manage.py runserver

.PHONY: porcelain
porcelain:
ifeq ($(shell git status --porcelain),)
@echo "Working directory is clean."
else
@echo "Error - working directory is dirty. Commit those changes!";
@echo "Error - working directory is dirty. Commit your changes.";
@exit 1;
endif

Expand All @@ -38,17 +40,25 @@ branch:
ifeq ($(shell git rev-parse --abbrev-ref HEAD),main)
@echo "On branch main."
else
@echo "Error - Not on branch main!"
@echo "Error - Not on branch main."
@exit 1;
endif

.PHONY: build
build: docs
rm -rf build dist src/*.egg-info
hatch build
python -m build

.PHONY: publish
publish: porcelain branch build
hatch publish
twine check dist/*
twine upload dist/*
git tag -a v${VERSION} -m "Release ${VERSION}"
git push origin --tags

.PHONY: clean
clean: docs
rm -rf build dist src/*.egg-info .coverage*

.PHONY: version
version:
@echo ${VERSION}
11 changes: 1 addition & 10 deletions docs/conf.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import importlib
from datetime import datetime

import tomllib
Expand All @@ -7,15 +6,7 @@
pyproject = tomllib.load(f)

project = pyproject["project"]["name"]
conf = {"module": project.replace("-", "_")}

try:
conf.update(pyproject["tool"]["sphinx"]["x-conf"])
except KeyError:
pass

module = importlib.import_module(conf["module"])
release = module.__version__
release = pyproject["project"]["version"]
version = ".".join(release.split(".")[:2])
author = ", ".join(author["name"] for author in pyproject["project"]["authors"])
year = datetime.now().year
Expand Down
3 changes: 3 additions & 0 deletions docs/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
sphinx>=7.2.6
sphinx-mdinclude>=0.5.3
furo>=2023.05.20
Loading