Skip to content

Commit 8770941

Browse files
committed
Update docs for the 0.2.0 release
1 parent 4b28b48 commit 8770941

3 files changed

Lines changed: 122 additions & 34 deletions

File tree

CHANGELOG.rst

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,24 @@
11
Changelog
22
=========
33

4+
0.2.0
5+
-----
6+
7+
This is a major maintenance release focused on updating PythonHere for the
8+
current Android and Python runtime stack. It updates the app to Python 3.14,
9+
python-for-android v2026.05.09, and Kivy 2.3.1, and moves Android APK
10+
distribution from Google Play to GitHub Releases.
11+
12+
* Starting with version ``0.2.0``, PythonHere Android APKs are distributed
13+
through GitHub Releases as the central distribution channel and are signed
14+
with the PythonHere Android signing certificate
15+
* Added support for Python 3.10 through 3.14
16+
* Removed support for Python versions older than 3.10
17+
* Updated Android APK builds for current Android versions
18+
* Improved app startup and shutdown handling
19+
* Fixed SSH server exception logging
20+
* Fixed duplicate Kivy exception handlers and duplicate KV loading
21+
422
0.1.5
523
-----
624

README.rst

Lines changed: 31 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -14,41 +14,46 @@ PythonHere
1414
.. image:: https://img.shields.io/pypi/pyversions/pythonhere.svg
1515
:target: https://pypi.python.org/pypi/pythonhere
1616
:alt: Supported Python versions
17-
.. image:: https://github.com/b3b/pythonhere/workflows/ci/badge.svg?branch=master
18-
:target: https://github.com/b3b/pythonhere/actions?workflow=CI
19-
:alt: CI Status
17+
.. image:: https://github.com/b3b/pythonhere/actions/workflows/tests.yml/badge.svg?branch=master
18+
:target: https://github.com/b3b/pythonhere/actions/workflows/tests.yml?query=branch%3Amaster
19+
:alt: CI Status
2020
.. image:: https://codecov.io/github/b3b/pythonhere/coverage.svg?branch=master
2121
:target: https://codecov.io/github/b3b/pythonhere?branch=master
2222
:alt: Code coverage Status
2323
.. end-badges
2424
25-
*Here* is the `Kivy <https://kivy.org>`_ based app to run Python code from the `Jupyter <https://jupyter.org/>`_ magic %there.
25+
*PythonHere* lets you run Python code from a local `Jupyter <https://jupyter.org/>`_
26+
notebook inside a remote `Kivy <https://kivy.org>`_ app.
2627

27-
- *Here* is a server part with the GUI interface. It could be Android, Raspberry Pi, some other remote device that being debugged.
28-
- And *%there* is a client - Jupyter magic command to run code interactively on remote device.
28+
PythonHere has two parts:
2929

30-
This app could serve as a Python Kivy playground, for dynamic code execution from the PC.
30+
* *Here* is the remote/server side. It runs a Python environment with a Kivy GUI,
31+
for example on Android, Raspberry Pi, or another machine.
32+
* *%there* is the local/client side. It is a Jupyter magic command for running
33+
code interactively in the remote PythonHere environment.
3134

32-
Project documentation: https://herethere.me
35+
This makes PythonHere useful as a live Python/Kivy playground, and as a way to
36+
inspect or control a Python app running remotely.
37+
38+
Project documentation: https://herethere.me/pythonhere
3339

3440
.. image:: https://raw.githubusercontent.com/b3b/pythonhere/master/docs/description.png
3541
:alt: Project description
3642

3743

38-
Install on Android
39-
------------------
40-
41-
App is available on `Google Play <https://play.google.com/store/apps/details?id=me.herethere.pythonhere>`_.
42-
43-
Ready-to-use *PythonHere* APKs are available in the `Releases <https://github.com/b3b/pythonhere/releases>`_ section.
44+
Install the Android app
45+
-----------------------
4446

45-
For a list of installed Python packages, see: `buildozer.spec <./buildozer.spec>`_.
47+
Ready-to-use *PythonHere* APKs are available from the `GitHub Releases <https://github.com/b3b/pythonhere/releases>`_ page.
4648

49+
For APK provenance and signing checks, see `Android APK verification <https://github.com/b3b/pythonhere/blob/master/docs/android-apk-verification.rst>`_.
50+
For a list of Python packages included in the Android build, see `buildozer.spec <https://github.com/b3b/pythonhere/blob/master/buildozer.spec>`_.
4751

48-
Quick Start with Docker
49-
-----------------------
52+
Start a local Jupyter environment with Docker
53+
---------------------------------------------
5054

51-
Docker image is based on `Jupyter Docker Stacks <https://jupyter-docker-stacks.readthedocs.io/en/latest/>`_, and includes installed *PythonHere* with usage examples.
55+
The Docker image is based on `Jupyter Docker Stacks <https://jupyter-docker-stacks.readthedocs.io/en/latest/>`_
56+
and includes *PythonHere* with usage examples.
5257

5358
Example command to start the Docker container::
5459

@@ -61,23 +66,17 @@ Example command to start the Docker container::
6166
-v "$(pwd)/work":/home/jovyan/work \
6267
herethere/pythonhere:latest
6368

69+
The command exposes the Jupyter server on host port ``8888``. Jupyter logs are
70+
printed in the terminal and include a URL such as
71+
``http://127.0.0.1:8888/?token=...``. Open this URL in a browser to use the
72+
local Jupyter environment.
6473

65-
Command will expose the Jupyter Notebook server on host port 8888. Jupyter logs appear in the terminal and include an URL to the notebook server: http://127.0.0.1:8888/?token=... . Visiting this URL in a browser loads the Jupyter Notebook dashboard page.
66-
67-
Files from the directory **work** inside container, will be available in the host directory with the same name: **work**.
74+
Files in ``/home/jovyan/work`` inside the container are stored in the local
75+
``work`` directory.
6876

6977

70-
Run with Docker Compose
71-
-----------------------
72-
73-
Commands to run with Docker Compose, in the source directory:::
74-
75-
cp docker-compose.yml.tmpl docker-compose.yml
76-
docker-compose up
77-
78-
79-
Run locally
80-
-----------
78+
Run a local Jupyter environment without Docker
79+
----------------------------------------------
8180

8281
Commands to run locally::
8382

@@ -94,11 +93,9 @@ To build with `Buildozer <https://github.com/kivy/buildozer>`_, run in the sourc
9493
buildozer android debug
9594

9695

97-
9896
Related resources
9997
-----------------
10098

10199
* `Kivy Remote Shell <https://github.com/kivy/kivy-remote-shell>`_ : Remote SSH+Python interactive shell application
102100
* `herethere <https://github.com/b3b/herethere>`_ : Library for interactive code execution, based on AsyncSSH
103101
* `AsyncSSH <https://github.com/ronf/asyncssh>`_ : Asynchronous SSH for Python
104-
* `Buildozer action <https://github.com/ArtemSBulgakov/buildozer-action>`_ : GitHub action that is used to build Android APK with Buildozer

docs/android-apk-verification.rst

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
Android APK verification
2+
========================
3+
4+
Starting with version ``0.2.0``, PythonHere Android APKs are distributed through
5+
GitHub Releases as the central distribution channel and are signed with the
6+
PythonHere Android signing certificate.
7+
8+
PythonHere uses several release verification measures to help users confirm that
9+
a downloaded APK is authentic:
10+
11+
* APKs are built by this repository's GitHub Actions workflow.
12+
* Build provenance is published as GitHub `artifact attestations <https://github.com/b3b/pythonhere/attestations>`_.
13+
* Published releases are protected by GitHub immutable releases.
14+
* APKs are signed with the PythonHere Android signing certificate.
15+
16+
Before installing a downloaded APK, you can verify its provenance, release
17+
integrity, and Android signing certificate using the checks below.
18+
19+
Download the APK
20+
----------------
21+
22+
Download the APK from the PythonHere Releases page:
23+
24+
https://github.com/b3b/pythonhere/releases
25+
26+
In the commands below, replace ``<version>`` with the release tag you
27+
downloaded, for example ``0.2.0``.
28+
29+
Verify GitHub Actions provenance
30+
--------------------------------
31+
32+
Use the GitHub CLI to verify that the downloaded APK was built by this
33+
repository's GitHub Actions workflow::
34+
35+
gh attestation verify pythonhere-*.apk -R b3b/pythonhere
36+
37+
This verifies the APK's build provenance and confirms that the artifact is
38+
associated with the ``b3b/pythonhere`` repository.
39+
40+
Verify the downloaded release asset
41+
-----------------------------------
42+
43+
Verify that the downloaded APK matches the asset published in the GitHub
44+
release::
45+
46+
gh release verify-asset <version> pythonhere-*.apk -R b3b/pythonhere
47+
48+
This confirms that the local APK file matches the release asset recorded by
49+
GitHub.
50+
51+
Verify the immutable GitHub release
52+
-----------------------------------
53+
54+
Verify that GitHub recognizes the release as immutable::
55+
56+
gh release verify <version> -R b3b/pythonhere
57+
58+
This confirms that the published release is protected by GitHub immutable
59+
releases, so its release assets and associated Git tag cannot be changed after
60+
publication.
61+
62+
Verify the Android signing certificate
63+
--------------------------------------
64+
65+
Use Android SDK build-tools ``apksigner`` to verify the APK signature and print
66+
the signing certificate::
67+
68+
apksigner verify --verbose --print-certs pythonhere-*.apk
69+
70+
The printed certificate SHA-256 digest should match the expected PythonHere
71+
Android signing certificate::
72+
73+
3b725f0ca2485c56fac72248f4d42bfb5531e076d03b45c766fafca16de6a451

0 commit comments

Comments
 (0)