Skip to main content

Hubble Demo Script

This will enable you to flash a pre-determined set of boards and provision them with your credentials.

Testing

Run all commands from python/.

python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest                 # smoke tests only; the e2e test is skipped

End-to-end test (hardware required)

tests/test_e2e.py flashes a connected board, BLE-scans + ingests packets via pyhubblenetwork, then queries the backend by device ID. It is gated behind the integration and ble markers so it never runs by accident.

Set HUBBLE_ORG_ID and HUBBLE_API_TOKEN (in your shell, or copy .env.example to .env in python/ or the repo root — loaded via python-dotenv), pick a board ID from merge/md.json, plug it in, then:

export HUBBLE_TEST_BOARD=nrf52dk
pytest -s -m integration tests/test_e2e.py -v

-s is required because TI generate-hex boards (lp_em_cc2340r5, lp_em_cc2340r53, lp_em_cc2755p10) emit a .hex and the test pauses to ask you to flash it manually before continuing.

Testing a locally-built ELF

To exercise an ELF you just built (instead of the prebuilt one in merge/), point HUBBLE_TEST_ELF_FILE at it. The test forwards this through to hubbledemo flash via the HUBBLE_DEMO_ELF_FILE override:

export HUBBLE_TEST_BOARD=nrf52dk
export HUBBLE_TEST_ELF_FILE=../firmware/zephyr/hubble-demo-app/build/zephyr/zephyr.elf
pytest -s -m integration tests/test_e2e.py -v

Tunables

Env var Default Purpose
HUBBLE_TEST_BOARD — Board ID; test is skipped if unset
HUBBLE_TEST_ELF_FILE — Local ELF path; uses remote merge/<board>.elf if unset
HUBBLE_TEST_SCAN_TIMEOUT 90 Seconds to scan for BLE packets
HUBBLE_TEST_SCAN_COUNT 3 Stop scanning after N packets
HUBBLE_TEST_INGEST_WAIT 45 Seconds to wait for backend propagation before querying
HUBBLE_TEST_DEVICE_NAME auto --name for the registered device

Releasing

Releases are triggered by pushing a vX.Y.Z tag. The .github/workflows/release.yml workflow then runs lint + tests, builds sdist + wheel, creates a GitHub Release using release-notes.md as the body, and publishes to PyPI via OIDC trusted publishing.

One-time setup

  1. PyPI Trusted Publisher — at https://pypi.org/manage/project/pyhubbledemo/settings/publishing/, add a publisher with:
    • Owner: HubbleNetwork
    • Repository: hubble-tldm
    • Workflow filename: release.yml
    • Environment name: pypi
  2. GitHub Environment — in repo Settings → Environments, create an environment named pypi. Optionally add a required-reviewer rule so each publish needs manual approval.

Cutting a release

Run all commands from the repo root.

  1. Bump the version in python/pyproject.toml (project.version). The git tag must exactly match this string with a v prefix.
  2. Update python/release-notes.md — prepend a new section under # Release Notes:
    ## [X.Y.Z] - YYYY-MM-DD
    
    ### Added
    - feat(...): ...
    
    ### Fixed
    - fix(...): ...
    
    The full file is dumped as the GitHub Release body, so keep it readable.
  3. Commit and tag:
    git add python/pyproject.toml python/release-notes.md
    git commit -m "chore: release X.Y.Z"
    git tag vX.Y.Z
    git push origin master
    git push origin vX.Y.Z
    
  4. Approve the publish step — if you enabled the reviewer gate on the pypi environment, the workflow will pause before pushing to PyPI until you approve it in the Actions UI.

Watch progress at https://github.com/HubbleNetwork/hubble-tldm/actions.

Metadata

Release files for pyhubbledemo 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyhubbledemo 0.1.3
File Size Uploaded
pyhubbledemo-0.1.3.tar.gz 20.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pyhubbledemo 0.1.3
File Interpreter ABI Platform
pyhubbledemo-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 38.6 kB

Release files / pyhubbledemo-0.1.3.tar.gz

Download URL pyhubbledemo-0.1.3.tar.gz
Size 20.4 kB
Tags Source
SHA-256 checksum
How to use checksums
5a804515e752672aa9e110d265a83905fe0b646d2eeab5701938ec06284ff60a
BLAKE2b-256 checksum
How to use checksums
80c085eb5157bbc1e4a2c643e98b5a2ca07b9e4e3c1befde7f607ec6e7bf88c9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / pyhubbledemo-0.1.3-py3-none-any.whl

Download URL pyhubbledemo-0.1.3-py3-none-any.whl
Size 18.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
140559f4e30b5399f9479615f196b05f518e06fe5a7abe3dfe2779ec071f1c30
BLAKE2b-256 checksum
How to use checksums
e0df3e2f577e81ec090dd001711f181beb117e2c780b040a8cf19c56186856be
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.3 This release

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page