From d52117eb93007def610352081c86447379e96170 Mon Sep 17 00:00:00 2001 From: Tim Gover Date: Mon, 27 Apr 2026 21:52:24 +0100 Subject: [PATCH] tools: Add versions table For convenience, add a versions table detailing the firmware git hash, version (date), build timestamp and current release type for every bootloader file. The table can be regenerated by running tools/update-versions-txt --- firmware-2711/versions.txt | 124 +++++++++++++++++++++++++++++++++++++ firmware-2712/versions.txt | 88 ++++++++++++++++++++++++++ tools/update-versions-txt | 106 +++++++++++++++++++++++++++++++ 3 files changed, 318 insertions(+) create mode 100644 firmware-2711/versions.txt create mode 100644 firmware-2712/versions.txt create mode 100755 tools/update-versions-txt diff --git a/firmware-2711/versions.txt b/firmware-2711/versions.txt new file mode 100644 index 00000000..f52b3e10 --- /dev/null +++ b/firmware-2711/versions.txt @@ -0,0 +1,124 @@ +# firmware-2711 firmware versions +# +# Maps each pieeprom-YYYY-MM-DD.bin to the BUILD_TIMESTAMP +# and source git hash embedded in the binary, plus the +# release (default / latest / old) the file lives in. When +# a binary appears in more than one release the highest- +# precedence one wins: +# default > latest > old (old = archived) +# +# Generated by tools/update-versions-txt. Sorted newest-first. +# +# version build_epoch fw_git_hash release +2026-04-14 1776201421 9cd61c53 latest +2026-02-23 1771858593 85353ce4 latest +2026-02-06 1770387236 8124798b latest +2026-01-09 1767975133 d76c4603 default +2025-12-08 1765221822 2226a853 default +2025-11-27 1764248255 15a40aaa old +2025-11-21 1763732017 b8803387 old +2025-11-05 1762363706 57db150d default +2025-10-14 1760460013 9eb0c93b old +2025-10-08 1759940158 a06c733f old +2025-10-03 1759483221 9a1b610a old +2025-09-23 1758616461 769789e3 old +2025-09-22 1758545484 9652cde4 old +2025-08-27 1756321032 000d3ca2 old +2025-08-20 1755703624 cd866525 old +2025-08-13 1755093990 bb80e517 old +2025-07-17 1752740805 3c628896 old +2025-07-03 1751554605 ab660caa old +2025-05-16 1747391644 91d7b7b2 old +2025-05-08 1746717695 69471177 default +2025-02-24 1740417042 46cf6982 old +2025-02-11 1739293213 75c1e570 old +2024-12-07 1733575168 3858f977 old +2024-10-21 1729520694 951e1cc9 old +2024-10-10 1728553618 0e63dd5e old +2024-09-05 1725562327 7fe8d029 old +2024-07-30 1722344555 5f18ffb6 old +2024-05-17 1715945218 72caf667 old +2024-04-17 1713358296 0b7b6f28 old +2024-04-15 1713186734 e608a69d old +2024-01-22 1705920081 51ed67b0 old +2024-01-18 1705586363 ae876639 old +2023-05-11 1683786363 4fd8f1f3 old +2023-01-11 1673458852 8ba17717 old +2023-01-04 1672828069 22bd34fb old +2022-12-07 1670423055 0fc8fc8e old +2022-11-25 1669373653 850fab5f old +2022-11-04 1667575155 febe323f old +2022-11-02 1667386433 f4b30559 old +2022-10-18 1666090664 23aa699d old +2022-10-12 1665588475 0f63db7b old +2022-10-06 1665061876 a518b112 old +2022-10-03 1664799047 12e1a84f old +2022-09-02 1662127812 0b3f4b5e old +2022-08-02 1659455705 91b6280c old +2022-07-26 1658829273 adb94cfb old +2022-07-22 1658493469 4fde6470 old +2022-07-19 1658241329 253a5190 old +2022-07-14 1657813807 aaa87904 old +2022-05-20 1653034678 0213db9e old +2022-04-26 1650968668 507b2360 old +2022-04-14 1649949890 507b2360 old +2022-03-10 1646913432 778c182c old +2022-02-28 1646054646 969fb9b1 old +2022-02-16 1645048791 2be30cb4 old +2022-02-08 1644341086 f1e0407d old +2022-02-04 1643976188 a26faf97 old +2022-01-25 1643121041 6efe41bd old +2022-01-20 1642680124 6efe41bd old +2021-12-02 1638443283 78ec5746 old +2021-11-22 1637580212 3c912e10 old +2021-10-27 1635349629 ada4d997 old +2021-10-05 1633420437 a6afaeaa old +2021-10-04 1633339740 abb81f88 old +2021-09-27 1632749428 39e76747 old +2021-09-23 1632413480 ae05cfb4 old +2021-07-06 1625568293 c258ef8f old +2021-06-25 1624617942 86aa3d46 old +2021-06-17 1623917100 8f216048 old +2021-06-11 1623418752 37f642ea old +2021-05-19 1621439514 5c860865 old +2021-04-29 1619712685 c2f8c388 old +2021-03-18 1616057651 1b43d5b6 old +2021-03-17 1615980336 05552182 old +2021-03-04 1614783295 0e0a5833 old +2021-02-16 1613481816 d6d82cf9 old +2021-01-16 1610806213 d1be7b5b old +2021-01-11 1610379873 a36abf55 old +2021-01-05 1609862995 e4cda8a7 old +2020-12-11 1607685317 c3f26b60 old +2020-11-24 1606230484 6fdd3d2b old +2020-10-28 1603906360 694e118a old +2020-10-02 1601624657 bfe1c7dd old +2020-09-03 1599135103 c305221a old +2020-09-02 1599135103 c305221a old +2020-08-31 1598864864 5c41dcec old +2020-07-31 1596203019 f8d1dc69 old +2020-07-16 1594912546 45291ce6 old +2020-07-06 1594036095 2139c00d old +2020-06-15 1592228179 c302dea0 old +2020-06-12 1591959344 ef583b73 old +2020-06-03 1591188827 b5de8c32 old +2020-05-28 1590650553 7b40bda4 old +2020-05-27 1590601649 d648db39 old +2020-05-26 1590496449 8387906e old +2020-05-15 1589537152 23a9f59b old +2020-04-16 1587057086 a5e1b95f old +2020-04-09 1586451341 fffd67bc old +2020-03-19 1584628045 940f978d old +2020-03-16 1584365318 929eee15 old +2020-03-04 1583331848 a445ea4f old +2020-01-17 1579282631 5e86aac5 old +2020-01-09 1578594354 df0ff18c old +2019-12-03 1575394593 f0d7269d old +2019-11-18 1574075215 b6a7593d old +2019-10-16 1571245203 18472066 old +2019-10-08 1570546130 26dd3686 old +2019-09-25 1569408005 4d982432 old +2019-09-23 1569234286 c67e8bb3 old +2019-09-10 1568112110 f626c772 old +2019-09-06 1567764559 d8189ed4 old +2019-07-15 1563195595 514670a2 old diff --git a/firmware-2712/versions.txt b/firmware-2712/versions.txt new file mode 100644 index 00000000..3fb53308 --- /dev/null +++ b/firmware-2712/versions.txt @@ -0,0 +1,88 @@ +# firmware-2712 firmware versions +# +# Maps each pieeprom-YYYY-MM-DD.bin to the BUILD_TIMESTAMP +# and source git hash embedded in the binary, plus the +# release (default / latest / old) the file lives in. When +# a binary appears in more than one release the highest- +# precedence one wins: +# default > latest > old (old = archived) +# +# Generated by tools/update-versions-txt. Sorted newest-first. +# +# version build_epoch fw_git_hash release +2026-04-27 1777248418 c2a7b9d3 latest +2026-04-14 1776201624 9cd61c53 latest +2026-02-23 1771840899 85353ce4 latest +2026-02-06 1770388300 8124798b latest +2026-01-21 1769002727 ab8a9dde latest +2026-01-16 1768585427 4aec3e13 latest +2025-12-08 1765222194 2226a853 default +2025-11-27 1764250826 999d0ec9 old +2025-11-21 1763732176 b8803387 old +2025-11-05 1762364238 57db150d default +2025-10-17 1760694517 b66568da old +2025-10-08 1759940358 a06c733f old +2025-09-25 1758829114 f6ca7458 old +2025-09-23 1758625555 02da46a3 old +2025-09-22 1758541389 9652cde4 old +2025-08-27 1756321307 000d3ca2 old +2025-08-20 1755703318 cd866525 old +2025-08-13 1755094299 bb80e517 old +2025-07-17 1752769512 a668b6e6 old +2025-07-03 1751539154 ab660caa old +2025-06-29 1751239011 6672d86c old +2025-06-20 1750421313 960432b6 old +2025-06-13 1749807566 5855b10b old +2025-06-09 1749461452 3a4915a4 old +2025-05-08 1746713597 69471177 default +2025-04-07 1744067807 50beecf0 old +2025-03-27 1743034604 897f94ed old +2025-03-19 1742391686 cec1d3ae old +2025-03-10 1741626637 2bb2ae64 old +2025-03-03 1741014903 9116015f old +2025-02-12 1739357512 f788aab6 old +2025-02-11 1739293519 75c1e570 old +2025-01-27 1737983339 76eda9d7 old +2025-01-22 1737505011 a7753063 old +2025-01-14 1736813808 0451f142 old +2025-01-13 1736727407 fa261b3c old +2025-01-08 1736358768 97facbf4 old +2025-01-07 1736263931 e10f823b old +2025-01-06 1736182835 f49ef7cb old +2024-12-19 1734609433 ccf64a4f old +2024-12-15 1734221810 461827f2 old +2024-12-07 1733575343 3858f977 old +2024-11-27 1732717699 0b72471b old +2024-11-12 1731427844 4b019946 old +2024-11-05 1730810292 3c4fc886 old +2024-10-21 1729520869 951e1cc9 old +2024-10-10 1728517007 0e63dd5e old +2024-09-23 1727096576 26826259 old +2024-09-10 1725975630 5be4f304 old +2024-09-05 1725562503 7fe8d029 old +2024-07-30 1722349546 790da7ef old +2024-07-25 1721921872 622dd3d8 old +2024-06-05 1717602109 6fe0b091 old +2024-06-04 1717489297 503a909a old +2024-05-17 1715945383 72caf667 old +2024-05-13 1715613301 83b5e5e6 old +2024-04-20 1713610410 d1744d21 old +2024-04-18 1713429900 86ccc427 old +2024-04-17 1713358463 0b7b6f28 old +2024-04-05 1712313679 a482d84b old +2024-02-16 1708097321 4c845bd3 old +2024-02-14 1707895062 c1b99e8d old +2024-02-08 1707392087 42e0a50b old +2024-02-05 1707143914 0e79493d old +2024-01-24 1706098561 1aeae380 old +2024-01-22 1705934676 e891ded6 old +2024-01-15 1705345348 f0aa0715 old +2024-01-05 1704470260 30cc5f37 old +2023-12-14 1702572205 0f881224 old +2023-12-06 1701887365 e02d33b3 old +2023-11-20 1700509217 361205c6 old +2023-10-30 1698684310 30de0ba5 old +2023-10-18 1697650217 c2da2ae7 old +2023-09-28 1695896697 b74d18ae old +2023-09-21 1695315523 3094eda5 old +2023-09-13 1694601426 9d494316 old diff --git a/tools/update-versions-txt b/tools/update-versions-txt new file mode 100755 index 00000000..3ca5c1ec --- /dev/null +++ b/tools/update-versions-txt @@ -0,0 +1,106 @@ +#!/bin/sh +# Generate firmware-NNNN/versions.txt mapping the firmware version +# (date from pieeprom-YYYY-MM-DD.bin) to: +# - the BUILD_TIMESTAMP embedded in the binary +# - the source git hash embedded in the binary as "VERSION:" +# - the release (default / latest / old) the file lives in. +# When a binary appears under more than one release the highest- +# precedence one wins: default > latest > old. +# Output is sorted newest-first and is whitespace-columnar so that +# awk can extract fields directly (header lines start with '#'). + +set -eu + +SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) +REPO_ROOT=$(CDPATH= cd -- "${SCRIPT_DIR}/.." && pwd) + +command -v strings >/dev/null 2>&1 || { + echo "strings not found. Install binutils." >&2 + exit 1 +} + +extract_field() { + # extract_field + strings "$1" | sed -n "$2" | head -n 1 +} + +release_for_path() { + rel="$1" + case "${rel}" in + default/*) echo "default" ;; + latest/*) echo "latest" ;; + *) echo "old" ;; + esac +} + +release_priority() { + case "$1" in + default) echo 1 ;; + latest) echo 2 ;; + old) echo 3 ;; + *) echo 9 ;; + esac +} + +write_versions_md() { + family_dir="$1" + out="${family_dir}/versions.txt" + family=$(basename "${family_dir}") + raw=$(mktemp) + rows=$(mktemp) + + find "${family_dir}" -type f -name 'pieeprom-*.bin' | while read -r bin; do + name=$(basename "${bin}" .bin) + version=${name#pieeprom-} + case "${version}" in + [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]) ;; + *) continue ;; + esac + rel=${bin#"${family_dir}/"} + release=$(release_for_path "${rel}") + priority=$(release_priority "${release}") + hash=$(extract_field "${bin}" 's/^VERSION://p') + [ -n "${hash}" ] || hash="(unknown)" + ts=$(extract_field "${bin}" 's/^BUILD_TIMESTAMP=//p') + [ -n "${ts}" ] || ts=0 + printf '%s\t%s\t%s\t%s\t%s\n' \ + "${version}" "${ts}" "${hash}" "${priority}" "${release}" + done > "${raw}" + + # Pick the highest-precedence release per (version, hash), then + # sort newest-first by version (lexicographic on YYYY-MM-DD). + sort -t ' ' -k1,1 -k3,3 -k4,4n "${raw}" | awk -F '\t' ' + { key = $1 "\t" $3 } + !(key in seen) { seen[key] = 1; print } + ' | sort -t ' ' -k1,1r > "${rows}" + + { + printf '# %s firmware versions\n' "${family}" + printf '#\n' + printf '# Maps each pieeprom-YYYY-MM-DD.bin to the BUILD_TIMESTAMP\n' + printf '# and source git hash embedded in the binary, plus the\n' + printf '# release (default / latest / old) the file lives in. When\n' + printf '# a binary appears in more than one release the highest-\n' + printf '# precedence one wins:\n' + printf '# default > latest > old (old = archived)\n' + printf '#\n' + printf '# Generated by tools/%s. Sorted newest-first.\n' "$(basename "$0")" + printf '#\n' + printf '# %-10s %-10s %-10s %s\n' \ + "version" "build_epoch" "fw_git_hash" "release" + while IFS=' ' read -r version ts hash priority release; do + [ "${ts}" -gt 0 ] 2>/dev/null || ts="-" + printf '%-10s %-10s %-10s %s\n' \ + "${version}" "${ts}" "${hash}" "${release}" + done < "${rows}" + } > "${out}" + + rm -f "${raw}" "${rows}" + echo "Wrote ${out}" +} + +for family in firmware-2711 firmware-2712; do + dir="${REPO_ROOT}/${family}" + [ -d "${dir}" ] || continue + write_versions_md "${dir}" +done