Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/release'
Browse files Browse the repository at this point in the history
  • Loading branch information
Overhang.IO committed Feb 28, 2025
2 parents c3038b1 + cd96a9f commit 4e11796
Show file tree
Hide file tree
Showing 15 changed files with 180 additions and 188 deletions.
9 changes: 3 additions & 6 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,12 @@ jobs:
python-version: 3.9
cache: 'pip'
cache-dependency-path: requirements/dev.txt
- name: Upgrade pip and setuptools
# https://pypi.org/project/pip/
# https://pypi.org/project/setuptools/
# https://pypi.org/project/wheel/
run: python -m pip install --upgrade pip setuptools==65.6.3 wheel
- name: Install Hatch
uses: pypa/hatch@install
- name: Print info about the current python installation
run: make ci-info
- name: Install requirements
run: make bootstrap-dev-plugins
run: make bootstrap-dev

##### Run tests, generate bundle
# - name: Run tests
Expand Down
4 changes: 1 addition & 3 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,8 @@ jobs:
python-version: ${{ matrix.python-version }}
cache: 'pip'
cache-dependency-path: requirements/dev.txt
- name: Upgrade pip
run: python -m pip install --upgrade pip setuptools
- name: Install dependencies
run: pip install -r requirements/dev.txt
run: pip install -e .[dev]
- name: Static code analysis
run: make test-lint
- name: Python unit tests
Expand Down
37 changes: 37 additions & 0 deletions .hatch_build.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# https://hatch.pypa.io/latest/how-to/config/dynamic-metadata/
import os
import typing as t

from hatchling.metadata.plugin.interface import MetadataHookInterface

HERE = os.path.dirname(__file__)


class MetaDataHook(MetadataHookInterface):
def update(self, metadata: dict[str, t.Any]) -> None:
about = load_about()
metadata["version"] = about["__package_version__"]
metadata["dependencies"] = load_requirements("base.in")
metadata["optional-dependencies"] = {
"dev": load_requirements("dev.txt"),
"full": load_requirements("plugins.txt"),
}


def load_about() -> dict[str, str]:
about: dict[str, str] = {}
with open(os.path.join(HERE, "tutor", "__about__.py"), "rt", encoding="utf-8") as f:
exec(f.read(), about) # pylint: disable=exec-used
return about


def load_requirements(filename: str) -> list[str]:
requirements = []
with open(
os.path.join(HERE, "requirements", filename), "rt", encoding="utf-8"
) as f:
for line in f:
line = line.strip()
if line != "" and not line.startswith("#"):
requirements.append(line)
return requirements
5 changes: 0 additions & 5 deletions MANIFEST.in

This file was deleted.

24 changes: 8 additions & 16 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,15 @@ docs: ## Build HTML documentation
$(MAKE) -C docs

compile-requirements: ## Compile requirements files
pip-compile requirements/base.in
pip-compile requirements/dev.in
pip-compile requirements/docs.in
pip-compile ${COMPILE_OPTS} requirements/base.in
pip-compile ${COMPILE_OPTS} requirements/dev.in
pip-compile ${COMPILE_OPTS} requirements/docs.in

upgrade-requirements: ## Upgrade requirements files
pip-compile --upgrade requirements/base.in
pip-compile --upgrade requirements/dev.in
pip-compile --upgrade requirements/docs.in
$(MAKE) compile-requirements COMPILE_OPTS="--upgrade"

build-pythonpackage: build-pythonpackage-tutor ## Build Python packages ready to upload to pypi

build-pythonpackage-tutor: ## Build the "tutor" python package for upload to pypi
python setup.py sdist
build-pythonpackage: ## Build the "tutor" python package for upload to pypi
python -m build --sdist

push-pythonpackage: ## Push python package to pypi
twine upload --skip-existing dist/tutor-$(shell make version).tar.gz
Expand Down Expand Up @@ -82,12 +78,8 @@ coverage-browse-report: coverage-html ## Open the HTML report in the browser
bundle: ## Bundle the tutor package in a single "dist/tutor" executable
pyinstaller tutor.spec

bootstrap-dev: ## Install dev requirements
pip install .
pip install -r requirements/dev.txt

bootstrap-dev-plugins: bootstrap-dev ## Install dev requirements and all supported plugins
pip install -r requirements/plugins.txt
bootstrap-dev: ## Install dev requirements and all supported plugins
pip install .[full,dev]

pull-base-images: # Manually pull base images
docker image pull docker.io/ubuntu:22.04
Expand Down
2 changes: 1 addition & 1 deletion README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ Features

.. _readme_intro_end:

.. image:: ./docs/img/launch.webp
.. image:: https://github.com/overhangio/tutor/raw/master/docs/img/launch.webp
:alt: Tutor local launch
:target: https://www.terminalizer.com/view/3a8d55835686

Expand Down
1 change: 1 addition & 0 deletions changelog.d/20241122_145752_regis_pyproject_toml.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- [Improvement] Migrate packaging from setup.py/setuptools to pyproject.toml/hatch. This should not be a breaking change for most users. (by @regisb)
61 changes: 60 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,2 +1,61 @@
# https://packaging.python.org/en/latest/tutorials/packaging-projects/
# https://hatch.pypa.io/latest/config/build/

[project]
name = "tutor"
license = {text = "AGPL-3.0-only"}
authors = [
{name = "Edly"}, { email = "hello@edly.io"}
]
description = "The Docker-based Open edX distribution designed for peace of mind"
readme = {file = "README.rst", content-type = "text/x-rst"}
requires-python = ">= 3.9"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Affero General Public License v3",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
]
# these fields will be set by hatch_build.py
dynamic = ["version", "dependencies", "optional-dependencies"]

[project.scripts]
tutor = "tutor.commands.cli:main"

# https://packaging.python.org/en/latest/specifications/well-known-project-urls/#well-known-labels
[project.urls]
Homepage = "https://docs.tutor.edly.io/"
Documentation = "https://docs.tutor.edly.io/"
Source = "https://github.com/overhangio/tutor"
Issues = "https://github.com/overhangio/tutor/issues"
Changelog = "https://github.com/overhangio/tutor/blob/master/CHANGELOG.md"
Community = "https://discuss.openedx.org/tag/tutor"

# hatch-specific configuration
[tool.hatch.metadata.hooks.custom]
path = ".hatch_build.py"

[build-system]
requires = ["setuptools", "wheel"]
requires = ["hatchling"]
build-backend = "hatchling.build"

[tool.hatch.build.targets.sdist]
# Disable strict naming, otherwise twine is not able to detect name/version
strict-naming = false
include = [
"/tutor",
"requirements/base.in",
"requirements/plugins.txt",
"requirements/dev.txt",
"LICENSE.txt"
]
exclude = ["tests*"]

[tool.hatch.metadata]
# Allow github dependencies in plugins.txt
allow-direct-references = true
26 changes: 13 additions & 13 deletions requirements/base.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,33 +6,33 @@
#
appdirs==1.4.4
# via -r requirements/base.in
cachetools==5.5.0
cachetools==5.5.2
# via google-auth
certifi==2024.8.30
certifi==2025.1.31
# via
# kubernetes
# requests
charset-normalizer==3.4.0
charset-normalizer==3.4.1
# via requests
click==8.1.7
click==8.1.8
# via -r requirements/base.in
durationpy==0.9
# via kubernetes
google-auth==2.36.0
google-auth==2.38.0
# via kubernetes
idna==3.10
# via requests
importlib-metadata==8.5.0
importlib-metadata==8.6.1
# via -r requirements/base.in
importlib-resources==6.4.5
importlib-resources==6.5.2
# via -r requirements/base.in
jinja2==3.1.4
jinja2==3.1.5
# via -r requirements/base.in
kubernetes==31.0.0
kubernetes==32.0.1
# via -r requirements/base.in
markupsafe==3.0.2
# via jinja2
mypy==1.13.0
mypy==1.15.0
# via -r requirements/base.in
mypy-extensions==1.0.0
# via mypy
Expand Down Expand Up @@ -64,17 +64,17 @@ requests-oauthlib==2.0.0
# via kubernetes
rsa==4.9
# via google-auth
six==1.16.0
six==1.17.0
# via
# kubernetes
# python-dateutil
tomli==2.1.0
tomli==2.2.1
# via mypy
typing-extensions==4.12.2
# via
# -r requirements/base.in
# mypy
urllib3==2.2.3
urllib3==2.3.0
# via
# kubernetes
# requests
Expand Down
1 change: 0 additions & 1 deletion requirements/dev.in
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,3 @@ twine
# Types packages
types-docutils
types-PyYAML
types-setuptools
Loading

0 comments on commit 4e11796

Please sign in to comment.