Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .codespellrc
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
[codespell]
ignore-words-list = ser
ignore-words-list = ser,lonly
4 changes: 2 additions & 2 deletions src/lob_hlpr/lib_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ class FirmwareID:
# Name group, non-greedy match up to the first space
r"^(?P<name>.+?)\s+"
# Version group, matches a semantic versioning pattern
r"v(?P<version>[0-9]+(?:\.[0-9]+){2}(?:-[\w]+(?:\.[\w]+)*)?(?:-\d+-g[0-9a-f]+)?)"
r"v(?P<version>[0-9]+(?:\.[0-9]+){2}(?:-[\w]+(?:\.[\w]+)*)?(?:-\d+-g[0-9a-f]+)?(?:-dirty|-unknown)*)"
# Optional variant group, matches anything after a '+' until a space or end
r"(?:\+(?P<variant>[^\s]+))?"
# Optional additional group,
Expand All @@ -110,7 +110,7 @@ class FirmwareID:
# Name group, non-greedy match up to the first +
r"^(?P<name>.+?)\+"
# Version group, matches a semantic versioning pattern
r"(?P<version>[0-9]+(?:\.[0-9]+){2}(?:-[\w]+(?:\.[\w]+)*)?(?:-\d+-g[0-9a-f]+)?)"
r"(?P<version>[0-9]+(?:\.[0-9]+){2}(?:-[\w]+(?:\.[\w]+)*)?(?:-\d+-g[0-9a-f]+)?(?:-dirty|-unknown)*)"
# Optional variant group, matches anything after a '+' until a space or end
r"(?:\+(?P<variant>[^\s]+))?"
# Optional additional group,
Expand Down
61 changes: 61 additions & 0 deletions tests/test_firmware_id.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,67 @@ def test_valid_firmware_id_with_rc_version():
assert firmware_id.built == "2026-05-28T12:17:29"


def test_valid_firmware_id_origin_with_rc_commits_and_multi_variant():
"""Regression test for a real firmware id read from a built hex file."""
id_str = (
"app-nrf91-origin+0.14.0-rc.1-89-g04cac05+hw4.lonly TZ3 (Aug 24 2026 16:06:29)"
)
firmware_id = FirmwareID(id_str)
assert firmware_id.name == "app-nrf91-origin"
assert firmware_id.version.version_string == "0.14.0-rc.1-89-g04cac05"
assert firmware_id.version.pre_release == "rc.1"
assert firmware_id.version.commits == 89
assert firmware_id.version.commit == "04cac05"
assert firmware_id.version.dirty is False
assert firmware_id.variants == ["hw4", "lonly"]
assert firmware_id.built == "2026-08-24T16:06:29"


def test_valid_firmware_id_origin_with_dirty():
"""Tests origin-style firmware ID with a dirty suffix after the commit hash."""
id_str = (
"app-nrf91-origin+0.14.0-rc.1-89-g04cac05-dirty+hw4.lonly TZ3 "
"(Aug 24 2026 16:06:29)"
)
firmware_id = FirmwareID(id_str)
assert firmware_id.name == "app-nrf91-origin"
assert firmware_id.version.version_string == "0.14.0-rc.1-89-g04cac05-dirty"
assert firmware_id.version.pre_release == "rc.1"
assert firmware_id.version.commits == 89
assert firmware_id.version.commit == "04cac05"
assert firmware_id.version.dirty is True
assert firmware_id.version.unknown is False
assert firmware_id.variants == ["hw4", "lonly"]
assert firmware_id.built == "2026-08-24T16:06:29"


def test_valid_firmware_id_origin_with_dirty_unknown():
"""Tests origin-style firmware ID with both dirty and unknown suffixes."""
id_str = (
"app-nrf91-origin+0.14.0-89-g04cac05-dirty-unknown+hw4 TZ3 "
"(Aug 24 2026 16:06:29)"
)
firmware_id = FirmwareID(id_str)
assert firmware_id.name == "app-nrf91-origin"
assert firmware_id.version.version_string == "0.14.0-89-g04cac05-dirty-unknown"
assert firmware_id.version.dirty is True
assert firmware_id.version.unknown is True
assert firmware_id.variants == ["hw4"]


def test_valid_firmware_id_with_dirty():
"""Tests standard-style firmware ID with a dirty suffix after the commit hash."""
id_str = "app-nrf9160-wmbus v0.24.1-9-g8ad003f-dirty+hw3 TZ2 (Mar 11 2024 13:57:40)"
firmware_id = FirmwareID(id_str)
assert firmware_id.name == "app-nrf9160-wmbus"
assert firmware_id.version.version_string == "0.24.1-9-g8ad003f-dirty"
assert firmware_id.version.commits == 9
assert firmware_id.version.commit == "8ad003f"
assert firmware_id.version.dirty is True
assert firmware_id.variants == ["hw3"]
assert firmware_id.built == "2024-03-11T13:57:40"


def test_valid_firmware_id_with_rc_version_and_variant():
"""Tests standard-style firmware ID with an rc pre-release version."""
id_str = "app-nrf9160-wmbus v0.5.0-rc.1+hw3.alt_phy TZ2 (Jun 01 2026 08:00:00)"
Expand Down