diff --git a/.github/workflows/publish-jedi.yml b/.github/workflows/publish-jedi.yml index a293fb9..b0604d9 100644 --- a/.github/workflows/publish-jedi.yml +++ b/.github/workflows/publish-jedi.yml @@ -30,11 +30,14 @@ jobs: - name: Set pybricks-jedi version run: poetry version "$VERSION" working-directory: jedi + - name: Set pybricks version and update jedi dependency pin + run: | + poetry version "$VERSION" + sed -i "s/^pybricks = \".*\"/pybricks = \"$VERSION\"/" jedi/pyproject.toml - uses: actions/setup-node@v4 with: node-version: '24' registry-url: 'https://registry.npmjs.org' - - run: ./build.py "$NPM_VERSION" - working-directory: npm/jedi + - run: python jedi/build.py "$NPM_VERSION" - run: npm publish --tag "$NPM_TAG" - working-directory: npm/jedi/build + working-directory: jedi/npm-build diff --git a/.gitignore b/.gitignore index 93232f3..a0999f2 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ build/ build-*/ _build/ +npm-build/ # Tests ###################### diff --git a/CHANGELOG.md b/CHANGELOG.md index c1814a6..b2a30a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,339 +1,13 @@ # Changelog - +See [pybricks-micropython/CHANGELOG.md][changelog] for the changes in each release. -## Unreleased +This repository is frequently updated to stay in sync with the implementation. -## 4.0.0b4 - 2026-05-29 +Major and minor versions are synchronized with `pybricks-micropython`, which +leads. Patch versions and prerelease version numbers may differ, as they may +be bumped for every small change or typo in the docs. -### Changed +The version for this repository is also used for the `@pybricks/jedi` and `@pybricks/ide-docs` npm packages. -- Tag npm prereleases. - -## 4.0.0b4 - 2026-05-29 - -### Changed - -- Bump node version. - -## 4.0.0b3 - 2026-05-29 - -### Changed - -- Fixed NPM publishing permissions. - -## 4.0.0b2 - 2026-05-29 - -### Changed - -- Change NPM publishing to trusted publishers. - - -## 4.0.0b1 - 2026-05-29 - -### Changed - -- Updated API for firmware 4.0.0bx. See upstream changelog for details. -- Updated release pipeline to publish rtd, npm/docs and npm/jedi on tag. - -### Fixed - -- Fixed `DriveBase.angle` reporting an incorrect return type. - -## 3.6.1 - 2025-05-01 - -### Fixed - -- Fixed missing `hub.system.info` method on some hubs. - -## 3.6.0 - 2025-03-11 - -### Changed - -- Update API for firmware 3.6.0. See upstream changelog for details. - -## 3.6.0b5 - 2025-02-26 - -### Changed - -- Update API for firmware 3.6.0b5. See upstream changelog for details. - -## 3.5.0 - 2024-04-11 - -### Changed -- Bump version to 3.5.0 without additional changes. - -## 3.5.0b2 - 2024-04-05 - -### Added - -- Added `pybricks.pupdevices.Remote.disconnect` method. -- Added blocks for `up`, `ready` and `stationary` for IMUs. -- Added `last` and `chr` parameters to `read_input_byte` and add blocks. -- Added block for the `in` operation. -- Add double ternary block. - -## 3.5.0b1 - 2024-03-11 - -### Added - -- Added `XboxController.rumble` method. -- Added block icons for `hub.system.set_stop_button` and `hub.system.shutdown`. -- Added program stop block (`raise SystemExit`). - -## 3.4.1 - 2024-03-11 - -### Fixed - -- Fixed Read The Docs virtual environment workflow. - -## 3.4.0 - 2024-03-11 - -### Changed - -- Update list block screenshots to match implementation. - -## 3.4.0b5 - 2024-03-05 - -### Changed - -- Updates for v3.4.0b3 firmware (out of sync with docs). -- Changed `hub.button` to `hub.buttons` on single button hubs. Access via - `hub.button` will keep working in the firmware for backwards compatibility. - -## 3.4.0b4 - 2024-02-14 - -### Added - -- Added `pybricks.iodevices.XboxController` class. - -### Changed - -- Changed `buttons.pressed` return type to set. - -## 3.4.0b3 - 2024-01-30 - -### Added - -- Added `pybricks.robotics.Car` class. - -### Changed - -- Changed `pybricks.robotics.DriveBase` icon to two wheels instead of steering - wheel, which will be used for the new car class. - -## 3.4.0b2 - 2023-11-28 - -### Changed -- Include first batch of block coding images. - -## 3.3.0 - 2023-11-24 - -### Changed -- Bump beta version to release version with no further changes. - -## 3.3.0c1 - 2023-11-20 - -### Added -- Enabled tilt and orientation config for `MoveHub()`. -- Documented `Motor.close()` - -## Fixed -- Fixed missing awaitable for `Remote.light` and LWP3 writes. - -## 3.3.0b9 - 2023-10-26 - -### Changed -- Changed the beta feature for using the hub's gyro. Gyro control can now be - toggled using `use_gyro` instead of using a separate `GyroDriveBase` class. -- Documentation updates to match firmware 3.3.0b5--3.3.0b9 updates. - -### Added -- Added `set` to `ubuiltins` module. -- Basic multitasking docs. -- Awaitable keyword for awaitable methods and functions. - -## 3.3.0b5 - 2023-05-16 - -### Added -- Documented new `hub.ble` methods. - -## 3.3.0b4 - 2023-04-21 - -### Added -- Documented `integral_deadzone` in `Control.pid()`. -- Documented `Motor.model`. This can be used to view the estimated motor - state and change its settings. -- Added `rotation`, `orientation`, `ready`, `stationary` and `settings` methods - to `IMU` class. -- Added `GyroDriveBase` class to `pybricks.robotics`. - -### Changed -- Change implementation status of `IMU.heading` and `IMU.reset_heading`. They - are now implemented, with some limitations as noted in a note box. -- Moved `Matrix` and `vector` from `pybricks.geometry` to `pybricks.tools`. -- Moved `Axis` from `pybricks.geometry` to `pybricks.parameters`. - -### Removed -- Removed `pybricks.geometry` module. - -## 3.2.0 - 2022-12-20 - -### Changed -- Changed module TOC headings to make it easier to find things. - -## 3.2.0c1 - 2022-12-09 - -### Changed -- Updated "front" side of the Technic Hub to be consistent with - the Prime Hub. - -## 3.2.0b6 - 2022-12-02 - -### Added -- Documented ``Stop.NONE`` and ``Stop.COAST_SMART``. -- Documented ``ujson`` module. -- Added `done` and `stalled` methods for `DriveBase`. - -### Changed -- Changed `PrimeHub.display.image()` to `PrimeHub.display.icon()` and renamed - its kwarg from `image` to `icon`. -- Improved presentation and docstrings of the ``ubuiltins`` and other - MicroPython modules -- Moved the random numbers example for Move Hub to the Move Hub page. -- Moved `done()`, `stalled()`, `load()` from `Control` to `Motor` object. - -## 3.2.0b5 - 2022-11-11 - -### Fixed -- Fixed Jedi code completion for `Color` and `Icon` classes in `pybricks.parameters`. - -## 3.2.0b4 - 2022-10-21 - -### Added -- Code auto-completion for `EssentialHub`. -- Added `System.storage` method. - -### Fixed -- Fixed some type hints in `parameters` submodule. - -## 3.2.0b1-r3 - 2022-06-26 - -### Fixed -- Fixed more type hints and improved compatibility with jedi. - -## 3.2.0b1-r2 - 2022-06-24 - -### Changed -- Moved remaining type hints from `.pyi` files to the python stub modules, and - fixed numerous errors in the type hints throughout. - -## 3.2.0b1-r1 - 2022-06-09 - -### Added -- Added `__init__.py` to `pybricks` package. - -## 3.2.0b1 - 2022-06-02 - -### Added -- Code auto-completion for `hub.charger`, `hub.imu` and `hub.system`. -- Moved typing from several `.pyi` files to the actual python modules. - -### Fixed -- Fixed code completion for `DCMotor` and `Motor` classes in MS Python VS Code extension. -- Fixed missing `DCMotor` type in `ev3devices`. -- Fixed type hint for `Motor.reset_angle()` in `pupdevices`. - -### Changed -- Setter for acceleration can now also be used to set acceleration and - deceleration to different values, using a two-valued tuple. - -## 3.1.0 - 2021-12-16 - -### Added -- Added maximum voltage setter for `DCMotor` and `Motor`. -- Documented `DriveBase.curve()` method. - -### Changed -- Removed `duty` setting from `Control.limits` method. -- Removed `integral_range` setting from `Control.pid` method. - -### Fixed -- Fixed link to Color Light Matrix page. -- Fixed link to Inventor Hub page. - -## 3.1.0rc1 - 2021-11-19 - -### Added -- Added `ColorLightMatrix` class. -- Added `LWP3Device` class. - -**NOTE: version number after this point were from JavaScript package and do -not correspond to Pybricks firmware version numbers.** - -## 1.6.0 - 2021-08-30 - -### Added -- MicroPython module documentation. -- Examples for hub system functions including stop button and shutdown. - -### Changed -- Build IDE docs as main docs with minor changes, instead of a completely - separate build. -- Moved motor control documentation to the motor page. - -## 1.5.0 - 2021-07-01 - -### Added -- Documentation for Powered Up Remote Control. - -## 1.4.0 - 2021-06-23 - -### Added -- Enabled beta content that was hidden for the 3.0 release. -- Added notice about using the latest beta version. - -## 1.3.3 - 2021-05-21 - -### Changed -- Match example snippet styling to IDE. -- Add more examples. - -## 1.3.2 - 2021-04-26 - -### Changed -- Theme style fixes. -- Example code fixes -- Match doc version to firmware version. - -## 1.3.1 - 2021-04-12 - -### Changed -- Upgrade sphinx and rtd-theme to fix style issues. - -## 1.3.0 - 2021-04-12 - -### Removed -- Removed features which not be in the official 3.0 release. These features - are still in beta. They'll come back in future releases once tested. - -## 1.2.0 - 2021-04-09 - -### Changed -- Moved installation guide to external site. - -## 1.1.1 - 2021-02-14 - -### Added -- Added installation guide. -- Various documentation fixes. - -## 1.1.0 - 2021-01-28 - -### Added -- Scrollbar styling. - -## 1.0.0 - 2021-01-25 - -### Added -- Sphinx build output. +[changelog]: https://github.com/pybricks/pybricks-micropython/blob/master/CHANGELOG.md diff --git a/build-all.sh b/build-all.sh index d4ec940..97d9977 100755 --- a/build-all.sh +++ b/build-all.sh @@ -19,20 +19,15 @@ cd "$REPO_ROOT" flake8 doc8 -# pybricks-jedi wheel (from local source) +# pybricks-jedi tests echo "==> Testing pybricks-jedi" cd "$REPO_ROOT/jedi" poetry run pytest -vv -echo "==> Building pybricks-jedi wheel" -cd "$REPO_ROOT/jedi" -rm -rf dist/ -poetry build --format=wheel - # @pybricks/jedi npm package echo "==> Building @pybricks/jedi" -cd "$REPO_ROOT" -python3 npm/jedi/build.py "$NPM_VERSION" +cd "$REPO_ROOT/jedi" +python3 build.py "$NPM_VERSION" # @pybricks/ide-docs npm package echo "==> Building @pybricks/ide-docs" @@ -43,5 +38,5 @@ yarn build echo "" echo "Build complete." -echo " jedi npm package : npm/jedi/build/" +echo " jedi npm package : jedi/npm-build/" echo " ide-docs : npm/ide-docs/html/" diff --git a/npm/jedi/README.md b/jedi/README.md similarity index 100% rename from npm/jedi/README.md rename to jedi/README.md diff --git a/npm/jedi/build.py b/jedi/build.py old mode 100755 new mode 100644 similarity index 75% rename from npm/jedi/build.py rename to jedi/build.py index 99f3274..d0285a1 --- a/npm/jedi/build.py +++ b/jedi/build.py @@ -1,4 +1,5 @@ #!/usr/bin/env python3 +# Builds the @pybricks/jedi npm package into npm-build/. import email.parser import json @@ -6,6 +7,7 @@ import pathlib import shutil import subprocess import sys +import tomllib import zipfile if len(sys.argv) != 2: @@ -15,8 +17,8 @@ if len(sys.argv) != 2: VERSION = sys.argv[1] ROOT_DIR = pathlib.Path(__file__).parent.resolve() -JEDI_SRC_DIR = (ROOT_DIR / ".." / ".." / "jedi").resolve() -BUILD_DIR = (ROOT_DIR / "build").resolve() +REPO_ROOT_DIR = (ROOT_DIR / "..").resolve() +BUILD_DIR = ROOT_DIR / "npm-build" package_json = { "name": "@pybricks/jedi", @@ -25,7 +27,7 @@ package_json = { "repository": { "type": "git", "url": "git+https://github.com/pybricks/pybricks-api.git", - "directory": "npm/jedi", + "directory": "jedi", }, "publishConfig": {"registry": "https://registry.npmjs.org", "access": "public"}, } @@ -38,24 +40,28 @@ whl_map: dict[str, str] = {} shutil.rmtree(BUILD_DIR, True) BUILD_DIR.mkdir() -# build pybricks-jedi wheel from local source -subprocess.check_call(["poetry", "build", "--format=wheel"], cwd=JEDI_SRC_DIR) +# build pybricks api wheel from local source so pip uses it instead of fetching from PyPI +subprocess.check_call(["poetry", "build", "--format=wheel"], cwd=REPO_ROOT_DIR) -# copy locally built wheel to build dir -for whl in (JEDI_SRC_DIR / "dist").glob("pybricks_jedi-*.whl"): +# copy locally built pybricks wheel to build dir +for whl in (REPO_ROOT_DIR / "dist").glob("pybricks-*.whl"): shutil.copy(whl, BUILD_DIR) -# download transitive dependencies from PyPI, using the local wheel to satisfy pybricks-jedi itself +# build pybricks-jedi wheel from local source +subprocess.check_call(["poetry", "build", "--format=wheel"], cwd=ROOT_DIR) + +# copy locally built wheel to build dir +for whl in (ROOT_DIR / "dist").glob("pybricks_jedi-*.whl"): + shutil.copy(whl, BUILD_DIR) + +# download transitive dependencies using versions pinned in poetry.lock +transitive_packages = ["jedi", "parso", "docstring-parser", "typing-extensions"] +with open(ROOT_DIR / "poetry.lock", "rb") as f: + lock = tomllib.load(f) +lock_versions = {pkg["name"]: pkg["version"] for pkg in lock["package"]} +transitive = [f"{pkg}=={lock_versions[pkg]}" for pkg in transitive_packages] subprocess.check_call( - [ - sys.executable, - "-m", - "pip", - "download", - "--only-binary=any", - f"--find-links={BUILD_DIR}", - "pybricks-jedi", - ], + [sys.executable, "-m", "pip", "download", "--only-binary=any"] + transitive, cwd=BUILD_DIR, ) @@ -96,7 +102,7 @@ for whl in BUILD_DIR.glob("*.whl"): license_identifiers.add(license) if whl.name.startswith("pybricks_jedi-"): - with open(JEDI_SRC_DIR / "LICENSE") as lf: + with open(ROOT_DIR / "LICENSE") as lf: license_text[whl.name] = lf.read() else: try: @@ -137,5 +143,4 @@ with open(BUILD_DIR / "LICENSE", "w") as f: # copy additional files -for file in ("README.md",): - shutil.copy(ROOT_DIR / file, BUILD_DIR / file) +shutil.copy(ROOT_DIR / "README.md", BUILD_DIR / "README.md") diff --git a/jedi/pyproject.toml b/jedi/pyproject.toml index 840a9f1..8635aff 100644 --- a/jedi/pyproject.toml +++ b/jedi/pyproject.toml @@ -8,7 +8,8 @@ license = "MIT" [tool.poetry.dependencies] python = ">= 3.10, < 3.12" -pybricks = "3.6.0b5" +# Version is set automatically at build time from the root pyproject.toml. Do not edit. +pybricks = "0.0.0" jedi = "0.18.1" typing-extensions = "4.2.0" docstring-parser = "0.14.1" diff --git a/pyproject.toml b/pyproject.toml index 7419a27..fdc703d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "pybricks" -version = "4.0.0b5" +version = "4.0.0b9" description = "Documentation and user-API stubs for Pybricks MicroPython" authors = ["The Pybricks Authors "] maintainers = ["Laurens Valk ", "David Lechner " ]