Skip to content

Commit

Permalink
tools/mpremote: Use hatch to build mpremote package.
Browse files Browse the repository at this point in the history
This allows the entire configuration to be defined in a single file,
including the logic for including pyboard.py and automatically versioning
based on the git tag.

Building the package works both via `python -m build` as well as
`hatch build`.  `python -m build ` has the advantage of automatically
fetching all dependencies, you don't need to manually install any hatch
packages.

In order to make the versioning work, and also keep things simpler for end
users, mpremote releases will now be the same as MicroPython releases and
use the same tag.  The version strings for mpremote will look like:
- X.Y.Z -- clean build at the tag
- X.Y.Z.postN+gHASH -- clean build, N revisions from the most recent tag
- X.Y.Z.postN+gHASH.dYYYYMMDD -- dirty build, N revisions from out

This commit extends on the idea from #8404.

Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
  • Loading branch information
jimmo authored and dpgeorge committed Feb 24, 2023
1 parent 8d9a7fd commit ce9f7cd
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 29 deletions.
1 change: 1 addition & 0 deletions tools/mpremote/.gitignore
@@ -0,0 +1 @@
dist/
13 changes: 12 additions & 1 deletion tools/mpremote/mpremote/__init__.py
@@ -1 +1,12 @@
__version__ = "0.4.0"
try:
from importlib.metadata import version, PackageNotFoundError

try:
__version__ = version("mpremote")
except PackageNotFoundError:
# Error loading package version (e.g. running from source).
__version__ = "0.0.0-local"
except ImportError:
# importlib.metadata not available (e.g. CPython <3.8 without
# importlib_metadata compatibility package installed).
__version__ = "0.0.0-unknown"
54 changes: 51 additions & 3 deletions tools/mpremote/pyproject.toml
@@ -1,6 +1,54 @@
[build-system]
requires = [
"setuptools>=42",
"wheel"
"hatchling",
"hatch-requirements-txt",
"hatch-vcs",
]
build-backend = "setuptools.build_meta"
build-backend = "hatchling.build"

[project]
name = "mpremote"
description = "Tool for interacting remotely with MicroPython devices"
readme = "README.md"
authors = [
{name = "Damien George", email = "damien@micropython.org"},
]
urls = {Homepage = "https://github.com/micropython/micropython"}
keywords = [
"hardware",
"micropython",
]
license = {text = "MIT"}
classifiers = [
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Topic :: Software Development :: Embedded Systems",
"Topic :: System :: Hardware",
]
requires-python = ">=3.4"
dynamic = ["dependencies", "version"]

[project.scripts]
mpremote = "mpremote.main:main"

[tool.hatch.metadata.hooks.requirements_txt]
files = ["requirements.txt"]

[tool.hatch.version]
source = "vcs"
tag-pattern = "(?P<version>v(\\d+).(\\d+).(\\d+))"
raw-options = { root = "../..", version_scheme = "post-release" }

[tool.hatch.build]
packages = ["mpremote"]

# Also grab pyboard.py from /tools and add it to the package for both wheel and sdist.
[tool.hatch.build.force-include]
"../pyboard.py" = "mpremote/pyboard.py"

# Workaround to allow `python -m build` to work.
[tool.hatch.build.targets.sdist.force-include]
"../pyboard.py" = "mpremote/pyboard.py"
"requirements.txt" = "requirements.txt"
2 changes: 2 additions & 0 deletions tools/mpremote/requirements.txt
@@ -0,0 +1,2 @@
pyserial >= 3.3
importlib_metadata >= 1.4
25 changes: 0 additions & 25 deletions tools/mpremote/setup.cfg

This file was deleted.

0 comments on commit ce9f7cd

Please sign in to comment.