diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
index 30af24bd2..f546d4cfd 100644
--- a/.devcontainer/Dockerfile
+++ b/.devcontainer/Dockerfile
@@ -1,7 +1,7 @@
# trunk-ignore-all(terrascan/AC_DOCKER_0002): Known terrascan issue
# trunk-ignore-all(hadolint/DL3008): Do not pin apt package versions
# trunk-ignore-all(hadolint/DL3013): Do not pin pip package versions
-FROM mcr.microsoft.com/devcontainers/cpp:1-debian-12
+FROM mcr.microsoft.com/devcontainers/cpp:2-debian-13
USER root
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index bf1c50982..e3f076ce0 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -8,7 +8,7 @@
"features": {
"ghcr.io/devcontainers/features/python:1": {
"installTools": true,
- "version": "latest"
+ "version": "3.14"
}
},
"customizations": {
diff --git a/.github/actions/build-variant/action.yml b/.github/actions/build-variant/action.yml
index f611908ee..a71ddfc4d 100644
--- a/.github/actions/build-variant/action.yml
+++ b/.github/actions/build-variant/action.yml
@@ -100,7 +100,7 @@ runs:
id: version
- name: Store binaries as an artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
with:
name: firmware-${{ inputs.arch }}-${{ inputs.board }}-${{ steps.version.outputs.long }}.zip
overwrite: true
diff --git a/.github/actions/setup-base/action.yml b/.github/actions/setup-base/action.yml
index f6c1fd80c..80f5c6855 100644
--- a/.github/actions/setup-base/action.yml
+++ b/.github/actions/setup-base/action.yml
@@ -5,7 +5,7 @@ runs:
using: composite
steps:
- name: Checkout code
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
submodules: recursive
ref: ${{github.event.pull_request.head.ref}}
diff --git a/.github/workflows/build_debian_src.yml b/.github/workflows/build_debian_src.yml
index 7f3f8b672..d7d26f0e8 100644
--- a/.github/workflows/build_debian_src.yml
+++ b/.github/workflows/build_debian_src.yml
@@ -24,7 +24,7 @@ jobs:
runs-on: ubuntu-24.04
steps:
- name: Checkout code
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
submodules: recursive
path: meshtasticd
@@ -64,7 +64,7 @@ jobs:
PKG_VERSION: ${{ steps.version.outputs.deb }}
- name: Store binaries as an artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
with:
name: firmware-debian-${{ steps.version.outputs.deb }}~${{ inputs.series }}-src
overwrite: true
diff --git a/.github/workflows/build_firmware.yml b/.github/workflows/build_firmware.yml
index b62729332..9ac84c23e 100644
--- a/.github/workflows/build_firmware.yml
+++ b/.github/workflows/build_firmware.yml
@@ -22,7 +22,7 @@ jobs:
outputs:
artifact-id: ${{ steps.upload.outputs.artifact-id }}
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
submodules: recursive
ref: ${{github.event.pull_request.head.ref}}
@@ -56,7 +56,7 @@ jobs:
ota_firmware_target: ${{ steps.ota_dir.outputs.tgt || '' }}
- name: Store binaries as an artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
id: upload
with:
name: firmware-${{ inputs.platform }}-${{ inputs.pio_env }}-${{ inputs.version }}.zip
diff --git a/.github/workflows/build_one_arch.yml b/.github/workflows/build_one_arch.yml
index 6d9134941..5673f8cb6 100644
--- a/.github/workflows/build_one_arch.yml
+++ b/.github/workflows/build_one_arch.yml
@@ -26,7 +26,7 @@ jobs:
setup:
runs-on: ubuntu-24.04
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: 3.x
@@ -44,7 +44,7 @@ jobs:
version:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
- name: Get release version string
run: |
echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
@@ -88,62 +88,6 @@ jobs:
if: ${{ !contains(github.ref_name, 'event/') && github.event_name != 'workflow_dispatch' || !contains(github.ref_name, 'event/') && inputs.arch == 'native' }}
uses: ./.github/workflows/test_native.yml
- docker-deb-amd64:
- if: ${{ github.event_name != 'workflow_dispatch' || inputs.arch == 'native' }}
- uses: ./.github/workflows/docker_build.yml
- with:
- distro: debian
- platform: linux/amd64
- runs-on: ubuntu-24.04
- push: false
-
- docker-deb-amd64-tft:
- if: ${{ github.event_name != 'workflow_dispatch' || inputs.arch == 'native' }}
- uses: ./.github/workflows/docker_build.yml
- with:
- distro: debian
- platform: linux/amd64
- runs-on: ubuntu-24.04
- push: false
- pio_env: native-tft
-
- docker-alp-amd64:
- if: ${{ github.event_name != 'workflow_dispatch' || inputs.arch == 'native' }}
- uses: ./.github/workflows/docker_build.yml
- with:
- distro: alpine
- platform: linux/amd64
- runs-on: ubuntu-24.04
- push: false
-
- docker-alp-amd64-tft:
- if: ${{ github.event_name != 'workflow_dispatch' || inputs.arch == 'native' }}
- uses: ./.github/workflows/docker_build.yml
- with:
- distro: alpine
- platform: linux/amd64
- runs-on: ubuntu-24.04
- push: false
- pio_env: native-tft
-
- docker-deb-arm64:
- if: ${{ github.event_name != 'workflow_dispatch' || inputs.arch == 'native' }}
- uses: ./.github/workflows/docker_build.yml
- with:
- distro: debian
- platform: linux/arm64
- runs-on: ubuntu-24.04-arm
- push: false
-
- docker-deb-armv7:
- if: ${{ github.event_name != 'workflow_dispatch' || inputs.arch == 'native' }}
- uses: ./.github/workflows/docker_build.yml
- with:
- distro: debian
- platform: linux/arm/v7
- runs-on: ubuntu-24.04-arm
- push: false
-
gather-artifacts:
permissions:
contents: write
@@ -164,12 +108,12 @@ jobs:
needs: [version, build]
steps:
- name: Checkout code
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{github.event.pull_request.head.ref}}
repository: ${{github.event.pull_request.head.repo.full_name}}
- - uses: actions/download-artifact@v5
+ - uses: actions/download-artifact@v6
with:
path: ./
pattern: firmware-${{inputs.arch}}-*
@@ -182,7 +126,7 @@ jobs:
run: mv -b -t ./ ./bin/device-*.sh ./bin/device-*.bat
- name: Repackage in single firmware zip
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
with:
name: firmware-${{inputs.arch}}-${{ needs.version.outputs.long }}
overwrite: true
@@ -198,7 +142,7 @@ jobs:
./Meshtastic_nRF52_factory_erase*.uf2
retention-days: 30
- - uses: actions/download-artifact@v5
+ - uses: actions/download-artifact@v6
with:
name: firmware-${{inputs.arch}}-${{ needs.version.outputs.long }}
merge-multiple: true
@@ -217,7 +161,7 @@ jobs:
run: zip -j -9 -r ./firmware-${{inputs.arch}}-${{ needs.version.outputs.long }}.zip ./output
- name: Repackage in single elfs zip
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
with:
name: debug-elfs-${{inputs.arch}}-${{ needs.version.outputs.long }}.zip
overwrite: true
diff --git a/.github/workflows/build_one_target.yml b/.github/workflows/build_one_target.yml
index ba1d5080f..343e5be64 100644
--- a/.github/workflows/build_one_target.yml
+++ b/.github/workflows/build_one_target.yml
@@ -45,7 +45,7 @@ jobs:
runs-on: ubuntu-24.04
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: 3.x
@@ -66,7 +66,7 @@ jobs:
if: ${{ inputs.target != '' }}
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
- name: Get release version string
run: |
echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
@@ -106,62 +106,6 @@ jobs:
if: ${{ !contains(github.ref_name, 'event/') && github.event_name != 'workflow_dispatch' || !contains(github.ref_name, 'event/') && inputs.arch == 'native' && inputs.target != '' }}
uses: ./.github/workflows/test_native.yml
- docker-deb-amd64:
- if: ${{ inputs.target != '' && inputs.arch == 'native' }}
- uses: ./.github/workflows/docker_build.yml
- with:
- distro: debian
- platform: linux/amd64
- runs-on: ubuntu-24.04
- push: false
-
- docker-deb-amd64-tft:
- if: ${{ inputs.target != '' && inputs.arch == 'native' }}
- uses: ./.github/workflows/docker_build.yml
- with:
- distro: debian
- platform: linux/amd64
- runs-on: ubuntu-24.04
- push: false
- pio_env: native-tft
-
- docker-alp-amd64:
- if: ${{ inputs.target != '' && inputs.arch == 'native' }}
- uses: ./.github/workflows/docker_build.yml
- with:
- distro: alpine
- platform: linux/amd64
- runs-on: ubuntu-24.04
- push: false
-
- docker-alp-amd64-tft:
- if: ${{ inputs.target != '' && inputs.arch == 'native' }}
- uses: ./.github/workflows/docker_build.yml
- with:
- distro: alpine
- platform: linux/amd64
- runs-on: ubuntu-24.04
- push: false
- pio_env: native-tft
-
- docker-deb-arm64:
- if: ${{ inputs.target != '' && inputs.arch == 'native' }}
- uses: ./.github/workflows/docker_build.yml
- with:
- distro: debian
- platform: linux/arm64
- runs-on: ubuntu-24.04-arm
- push: false
-
- docker-deb-armv7:
- if: ${{ inputs.target != '' && inputs.arch == 'native' }}
- uses: ./.github/workflows/docker_build.yml
- with:
- distro: debian
- platform: linux/arm/v7
- runs-on: ubuntu-24.04-arm
- push: false
-
gather-artifacts:
permissions:
contents: write
@@ -170,12 +114,12 @@ jobs:
needs: [version, build]
steps:
- name: Checkout code
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{github.event.pull_request.head.ref}}
repository: ${{github.event.pull_request.head.repo.full_name}}
- - uses: actions/download-artifact@v5
+ - uses: actions/download-artifact@v6
with:
path: ./
pattern: firmware-*-*
@@ -188,7 +132,7 @@ jobs:
run: mv -b -t ./ ./bin/device-*.sh ./bin/device-*.bat
- name: Repackage in single firmware zip
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
with:
name: firmware-${{inputs.target}}-${{ needs.version.outputs.long }}
overwrite: true
@@ -204,7 +148,7 @@ jobs:
./Meshtastic_nRF52_factory_erase*.uf2
retention-days: 30
- - uses: actions/download-artifact@v5
+ - uses: actions/download-artifact@v6
with:
pattern: firmware-*-${{ needs.version.outputs.long }}
merge-multiple: true
@@ -223,7 +167,7 @@ jobs:
run: zip -j -9 -r ./firmware-${{inputs.target}}-${{ needs.version.outputs.long }}.zip ./output
- name: Repackage in single elfs zip
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
with:
name: debug-elfs-${{inputs.target}}-${{ needs.version.outputs.long }}.zip
overwrite: true
diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml
index 26a9cff18..8d19af894 100644
--- a/.github/workflows/docker_build.yml
+++ b/.github/workflows/docker_build.yml
@@ -47,7 +47,7 @@ jobs:
runs-on: ${{ inputs.runs-on }}
steps:
- name: Checkout code
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
submodules: recursive
ref: ${{github.event.pull_request.head.ref}}
diff --git a/.github/workflows/docker_manifest.yml b/.github/workflows/docker_manifest.yml
index 20b9ceee6..396ddb68e 100644
--- a/.github/workflows/docker_manifest.yml
+++ b/.github/workflows/docker_manifest.yml
@@ -83,7 +83,7 @@ jobs:
runs-on: ubuntu-24.04
steps:
- name: Checkout code
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
submodules: recursive
ref: ${{github.event.pull_request.head.ref}}
diff --git a/.github/workflows/hook_copr.yml b/.github/workflows/hook_copr.yml
index 2204cc02c..eb4ebc57b 100644
--- a/.github/workflows/hook_copr.yml
+++ b/.github/workflows/hook_copr.yml
@@ -19,7 +19,7 @@ jobs:
runs-on: ubuntu-24.04
steps:
- name: Checkout code
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
submodules: recursive
ref: ${{ github.ref }}
diff --git a/.github/workflows/main_matrix.yml b/.github/workflows/main_matrix.yml
index 812990eca..38373a2fc 100644
--- a/.github/workflows/main_matrix.yml
+++ b/.github/workflows/main_matrix.yml
@@ -27,7 +27,6 @@ on:
jobs:
setup:
- if: github.repository == 'meshtastic/firmware'
strategy:
fail-fast: true
matrix:
@@ -36,16 +35,12 @@ jobs:
- check
runs-on: ubuntu-24.04
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: 3.x
cache: pip
- run: pip install -U platformio
- - name: Uncomment build epoch
- shell: bash
- run: |
- sed -i 's/#-DBUILD_EPOCH=$UNIX_TIME/-DBUILD_EPOCH=$UNIX_TIME/' platformio.ini
- name: Generate matrix
id: jsonStep
run: |
@@ -62,10 +57,9 @@ jobs:
check: ${{ steps.jsonStep.outputs.check }}
version:
- if: github.repository == 'meshtastic/firmware'
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
- name: Get release version string
run: |
echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
@@ -87,7 +81,7 @@ jobs:
runs-on: ubuntu-latest
if: ${{ github.event_name != 'workflow_dispatch' && github.repository == 'meshtastic/firmware' }}
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
- name: Build base
id: base
uses: ./.github/actions/setup-base
@@ -125,60 +119,26 @@ jobs:
if: ${{ !contains(github.ref_name, 'event/') && github.repository == 'meshtastic/firmware' }}
uses: ./.github/workflows/test_native.yml
- docker-deb-amd64:
- if: github.repository == 'meshtastic/firmware'
+ docker:
+ strategy:
+ fail-fast: false
+ matrix:
+ distro: [debian, alpine]
+ platform: [linux/amd64, linux/arm64, linux/arm/v7]
+ pio_env: [native, native-tft]
+ exclude:
+ - distro: alpine
+ platform: linux/arm/v7
+ - pio_env: native-tft
+ platform: linux/arm64
+ - pio_env: native-tft
+ platform: linux/arm/v7
uses: ./.github/workflows/docker_build.yml
with:
- distro: debian
- platform: linux/amd64
- runs-on: ubuntu-24.04
- push: false
-
- docker-deb-amd64-tft:
- if: github.repository == 'meshtastic/firmware'
- uses: ./.github/workflows/docker_build.yml
- with:
- distro: debian
- platform: linux/amd64
- runs-on: ubuntu-24.04
- push: false
- pio_env: native-tft
-
- docker-alp-amd64:
- if: github.repository == 'meshtastic/firmware'
- uses: ./.github/workflows/docker_build.yml
- with:
- distro: alpine
- platform: linux/amd64
- runs-on: ubuntu-24.04
- push: false
-
- docker-alp-amd64-tft:
- if: github.repository == 'meshtastic/firmware'
- uses: ./.github/workflows/docker_build.yml
- with:
- distro: alpine
- platform: linux/amd64
- runs-on: ubuntu-24.04
- push: false
- pio_env: native-tft
-
- docker-deb-arm64:
- if: github.repository == 'meshtastic/firmware'
- uses: ./.github/workflows/docker_build.yml
- with:
- distro: debian
- platform: linux/arm64
- runs-on: ubuntu-24.04-arm
- push: false
-
- docker-deb-armv7:
- if: github.repository == 'meshtastic/firmware'
- uses: ./.github/workflows/docker_build.yml
- with:
- distro: debian
- platform: linux/arm/v7
- runs-on: ubuntu-24.04-arm
+ distro: ${{ matrix.distro }}
+ platform: ${{ matrix.platform }}
+ runs-on: ${{ contains(matrix.platform, 'arm') && 'ubuntu-24.04-arm' || 'ubuntu-24.04' }}
+ pio_env: ${{ matrix.pio_env }}
push: false
gather-artifacts:
@@ -203,12 +163,12 @@ jobs:
needs: [version, build]
steps:
- name: Checkout code
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{github.event.pull_request.head.ref}}
repository: ${{github.event.pull_request.head.repo.full_name}}
- - uses: actions/download-artifact@v5
+ - uses: actions/download-artifact@v6
with:
path: ./
pattern: firmware-${{matrix.arch}}-*
@@ -221,7 +181,7 @@ jobs:
run: mv -b -t ./ ./bin/device-*.sh ./bin/device-*.bat
- name: Repackage in single firmware zip
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
with:
name: firmware-${{matrix.arch}}-${{ needs.version.outputs.long }}
overwrite: true
@@ -237,7 +197,7 @@ jobs:
./Meshtastic_nRF52_factory_erase*.uf2
retention-days: 30
- - uses: actions/download-artifact@v5
+ - uses: actions/download-artifact@v6
with:
name: firmware-${{matrix.arch}}-${{ needs.version.outputs.long }}
merge-multiple: true
@@ -256,7 +216,7 @@ jobs:
run: zip -j -9 -r ./firmware-${{matrix.arch}}-${{ needs.version.outputs.long }}.zip ./output
- name: Repackage in single elfs zip
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
with:
name: debug-elfs-${{matrix.arch}}-${{ needs.version.outputs.long }}.zip
overwrite: true
@@ -282,7 +242,7 @@ jobs:
- package-pio-deps-native-tft
steps:
- name: Checkout
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- name: Setup Python
uses: actions/setup-python@v6
@@ -301,14 +261,14 @@ jobs:
Autogenerated by github action, developer should edit as required before publishing...
- name: Download source deb
- uses: actions/download-artifact@v5
+ uses: actions/download-artifact@v6
with:
pattern: firmware-debian-${{ needs.version.outputs.deb }}~UNRELEASED-src
merge-multiple: true
path: ./output/debian-src
- name: Download `native-tft` pio deps
- uses: actions/download-artifact@v5
+ uses: actions/download-artifact@v6
with:
pattern: platformio-deps-native-tft-${{ needs.version.outputs.long }}
merge-multiple: true
@@ -351,14 +311,14 @@ jobs:
needs: [release-artifacts, version]
steps:
- name: Checkout
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: 3.x
- - uses: actions/download-artifact@v5
+ - uses: actions/download-artifact@v6
with:
pattern: firmware-${{matrix.arch}}-${{ needs.version.outputs.long }}
merge-multiple: true
@@ -375,7 +335,7 @@ jobs:
- name: Zip firmware
run: zip -j -9 -r ./firmware-${{matrix.arch}}-${{ needs.version.outputs.long }}.zip ./output
- - uses: actions/download-artifact@v5
+ - uses: actions/download-artifact@v6
with:
name: debug-elfs-${{matrix.arch}}-${{ needs.version.outputs.long }}.zip
merge-multiple: true
@@ -406,14 +366,14 @@ jobs:
esp32,esp32s3,esp32c3,esp32c6,nrf52840,rp2040,rp2350,stm32
steps:
- name: Checkout
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: 3.x
- - uses: actions/download-artifact@v5
+ - uses: actions/download-artifact@v6
with:
pattern: firmware-{${{ env.targets }}}-${{ needs.version.outputs.long }}
merge-multiple: true
diff --git a/.github/workflows/merge_queue.yml b/.github/workflows/merge_queue.yml
index 79e8b0803..154b230c7 100644
--- a/.github/workflows/merge_queue.yml
+++ b/.github/workflows/merge_queue.yml
@@ -17,7 +17,7 @@ jobs:
- check
runs-on: ubuntu-24.04
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: 3.x
@@ -40,7 +40,7 @@ jobs:
version:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
- name: Get release version string
run: |
echo "long=$(./bin/buildinfo.py long)" >> $GITHUB_OUTPUT
@@ -62,7 +62,7 @@ jobs:
runs-on: ubuntu-latest
if: ${{ github.event_name != 'workflow_dispatch' }}
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
- name: Build base
id: base
uses: ./.github/actions/setup-base
@@ -99,54 +99,26 @@ jobs:
if: ${{ !contains(github.ref_name, 'event/') }}
uses: ./.github/workflows/test_native.yml
- docker-deb-amd64:
+ docker:
+ strategy:
+ fail-fast: false
+ matrix:
+ distro: [debian, alpine]
+ platform: [linux/amd64, linux/arm64, linux/arm/v7]
+ pio_env: [native, native-tft]
+ exclude:
+ - distro: alpine
+ platform: linux/arm/v7
+ - pio_env: native-tft
+ platform: linux/arm64
+ - pio_env: native-tft
+ platform: linux/arm/v7
uses: ./.github/workflows/docker_build.yml
with:
- distro: debian
- platform: linux/amd64
- runs-on: ubuntu-24.04
- push: false
-
- docker-deb-amd64-tft:
- uses: ./.github/workflows/docker_build.yml
- with:
- distro: debian
- platform: linux/amd64
- runs-on: ubuntu-24.04
- push: false
- pio_env: native-tft
-
- docker-alp-amd64:
- uses: ./.github/workflows/docker_build.yml
- with:
- distro: alpine
- platform: linux/amd64
- runs-on: ubuntu-24.04
- push: false
-
- docker-alp-amd64-tft:
- uses: ./.github/workflows/docker_build.yml
- with:
- distro: alpine
- platform: linux/amd64
- runs-on: ubuntu-24.04
- push: false
- pio_env: native-tft
-
- docker-deb-arm64:
- uses: ./.github/workflows/docker_build.yml
- with:
- distro: debian
- platform: linux/arm64
- runs-on: ubuntu-24.04-arm
- push: false
-
- docker-deb-armv7:
- uses: ./.github/workflows/docker_build.yml
- with:
- distro: debian
- platform: linux/arm/v7
- runs-on: ubuntu-24.04-arm
+ distro: ${{ matrix.distro }}
+ platform: ${{ matrix.platform }}
+ runs-on: ${{ contains(matrix.platform, 'arm') && 'ubuntu-24.04-arm' || 'ubuntu-24.04' }}
+ pio_env: ${{ matrix.pio_env }}
push: false
gather-artifacts:
@@ -170,12 +142,12 @@ jobs:
needs: [version, build]
steps:
- name: Checkout code
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{github.event.pull_request.head.ref}}
repository: ${{github.event.pull_request.head.repo.full_name}}
- - uses: actions/download-artifact@v5
+ - uses: actions/download-artifact@v6
with:
path: ./
pattern: firmware-${{matrix.arch}}-*
@@ -188,7 +160,7 @@ jobs:
run: mv -b -t ./ ./bin/device-*.sh ./bin/device-*.bat
- name: Repackage in single firmware zip
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
with:
name: firmware-${{matrix.arch}}-${{ needs.version.outputs.long }}
overwrite: true
@@ -204,7 +176,7 @@ jobs:
./Meshtastic_nRF52_factory_erase*.uf2
retention-days: 30
- - uses: actions/download-artifact@v5
+ - uses: actions/download-artifact@v6
with:
name: firmware-${{matrix.arch}}-${{ needs.version.outputs.long }}
merge-multiple: true
@@ -223,7 +195,7 @@ jobs:
run: zip -j -9 -r ./firmware-${{matrix.arch}}-${{ needs.version.outputs.long }}.zip ./output
- name: Repackage in single elfs zip
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
with:
name: debug-elfs-${{matrix.arch}}-${{ needs.version.outputs.long }}.zip
overwrite: true
@@ -249,7 +221,7 @@ jobs:
- package-pio-deps-native-tft
steps:
- name: Checkout
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- name: Setup Python
uses: actions/setup-python@v6
@@ -268,14 +240,14 @@ jobs:
Autogenerated by github action, developer should edit as required before publishing...
- name: Download source deb
- uses: actions/download-artifact@v5
+ uses: actions/download-artifact@v6
with:
pattern: firmware-debian-${{ needs.version.outputs.deb }}~UNRELEASED-src
merge-multiple: true
path: ./output/debian-src
- name: Download `native-tft` pio deps
- uses: actions/download-artifact@v5
+ uses: actions/download-artifact@v6
with:
pattern: platformio-deps-native-tft-${{ needs.version.outputs.long }}
merge-multiple: true
@@ -318,14 +290,14 @@ jobs:
needs: [release-artifacts, version]
steps:
- name: Checkout
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: 3.x
- - uses: actions/download-artifact@v5
+ - uses: actions/download-artifact@v6
with:
pattern: firmware-${{matrix.arch}}-${{ needs.version.outputs.long }}
merge-multiple: true
@@ -342,7 +314,7 @@ jobs:
- name: Zip firmware
run: zip -j -9 -r ./firmware-${{matrix.arch}}-${{ needs.version.outputs.long }}.zip ./output
- - uses: actions/download-artifact@v5
+ - uses: actions/download-artifact@v6
with:
name: debug-elfs-${{matrix.arch}}-${{ needs.version.outputs.long }}.zip
merge-multiple: true
@@ -373,14 +345,14 @@ jobs:
esp32,esp32s3,esp32c3,esp32c6,nrf52840,rp2040,rp2350,stm32
steps:
- name: Checkout
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: 3.x
- - uses: actions/download-artifact@v5
+ - uses: actions/download-artifact@v6
with:
pattern: firmware-{${{ env.targets }}}-${{ needs.version.outputs.long }}
merge-multiple: true
diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml
index f26073ec4..045e94895 100644
--- a/.github/workflows/nightly.yml
+++ b/.github/workflows/nightly.yml
@@ -14,7 +14,7 @@ jobs:
steps:
- name: Checkout
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- name: Trunk Check
uses: trunk-io/trunk-action@v1
@@ -31,7 +31,7 @@ jobs:
pull-requests: write # For trunk to create PRs
steps:
- name: Checkout
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- name: Trunk Upgrade
uses: trunk-io/trunk-action/upgrade@v1
diff --git a/.github/workflows/package_obs.yml b/.github/workflows/package_obs.yml
index 4c547eadc..2b202ed95 100644
--- a/.github/workflows/package_obs.yml
+++ b/.github/workflows/package_obs.yml
@@ -34,7 +34,7 @@ jobs:
needs: build-debian-src
steps:
- name: Checkout code
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
submodules: recursive
path: meshtasticd
@@ -58,7 +58,7 @@ jobs:
id: version
- name: Download artifacts
- uses: actions/download-artifact@v5
+ uses: actions/download-artifact@v6
with:
name: firmware-debian-${{ steps.version.outputs.deb }}~${{ inputs.series }}-src
merge-multiple: true
diff --git a/.github/workflows/package_pio_deps.yml b/.github/workflows/package_pio_deps.yml
index d8ff6e631..cb10a79f3 100644
--- a/.github/workflows/package_pio_deps.yml
+++ b/.github/workflows/package_pio_deps.yml
@@ -24,7 +24,7 @@ jobs:
runs-on: ubuntu-24.04
steps:
- name: Checkout code
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
submodules: recursive
ref: ${{github.event.pull_request.head.ref}}
@@ -56,7 +56,7 @@ jobs:
PLATFORMIO_CORE_DIR: pio/core
- name: Store binaries as an artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
with:
name: platformio-deps-${{ inputs.pio_env }}-${{ steps.version.outputs.long }}
overwrite: true
diff --git a/.github/workflows/package_ppa.yml b/.github/workflows/package_ppa.yml
index aece730a0..2e3278041 100644
--- a/.github/workflows/package_ppa.yml
+++ b/.github/workflows/package_ppa.yml
@@ -32,7 +32,7 @@ jobs:
needs: build-debian-src
steps:
- name: Checkout code
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
submodules: recursive
path: meshtasticd
@@ -60,7 +60,7 @@ jobs:
id: version
- name: Download artifacts
- uses: actions/download-artifact@v5
+ uses: actions/download-artifact@v6
with:
name: firmware-debian-${{ steps.version.outputs.deb }}~${{ inputs.series }}-src
merge-multiple: true
diff --git a/.github/workflows/pr_enforce_labels.yml b/.github/workflows/pr_enforce_labels.yml
index 543e23558..d60c9c8ca 100644
--- a/.github/workflows/pr_enforce_labels.yml
+++ b/.github/workflows/pr_enforce_labels.yml
@@ -17,7 +17,7 @@ jobs:
with:
script: |
const labels = context.payload.pull_request.labels.map(label => label.name);
- const requiredLabels = ['bugfix', 'enhancement', 'hardware-support', 'dependencies', 'submodules', 'github_actions', 'trunk'];
+ const requiredLabels = ['bugfix', 'enhancement', 'hardware-support', 'dependencies', 'submodules', 'github_actions', 'trunk', 'cleanup'];
const hasRequiredLabel = labels.some(label => requiredLabels.includes(label));
if (!hasRequiredLabel) {
core.setFailed(`PR must have at least one of the following labels before it can be merged: ${requiredLabels.join(', ')}.`);
diff --git a/.github/workflows/pr_tests.yml b/.github/workflows/pr_tests.yml
index 4e285852d..048186538 100644
--- a/.github/workflows/pr_tests.yml
+++ b/.github/workflows/pr_tests.yml
@@ -40,7 +40,7 @@ jobs:
checks: write
pull-requests: write
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
submodules: recursive
@@ -50,7 +50,7 @@ jobs:
- name: Download test artifacts
if: needs.native-tests.result != 'skipped'
- uses: actions/download-artifact@v5
+ uses: actions/download-artifact@v6
with:
name: platformio-test-report-${{ steps.version.outputs.long }}.zip
merge-multiple: true
diff --git a/.github/workflows/release_channels.yml b/.github/workflows/release_channels.yml
index d5d642db4..f21b13ee1 100644
--- a/.github/workflows/release_channels.yml
+++ b/.github/workflows/release_channels.yml
@@ -60,7 +60,10 @@ jobs:
shell: bash
steps:
- name: Checkout
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
+ with:
+ # Always use master branch for version bumps
+ ref: master
- name: Setup Python
uses: actions/setup-python@v6
diff --git a/.github/workflows/sec_sast_semgrep_cron.yml b/.github/workflows/sec_sast_semgrep_cron.yml
index 2059fde2c..d044f9038 100644
--- a/.github/workflows/sec_sast_semgrep_cron.yml
+++ b/.github/workflows/sec_sast_semgrep_cron.yml
@@ -21,7 +21,7 @@ jobs:
steps:
# step 1
- name: clone application source code
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
# step 2
- name: full scan
@@ -33,7 +33,7 @@ jobs:
# step 3
- name: save report as pipeline artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
with:
name: report.sarif
overwrite: true
diff --git a/.github/workflows/sec_sast_semgrep_pull.yml b/.github/workflows/sec_sast_semgrep_pull.yml
index e93b2ae8b..e9b4108a1 100644
--- a/.github/workflows/sec_sast_semgrep_pull.yml
+++ b/.github/workflows/sec_sast_semgrep_pull.yml
@@ -13,7 +13,7 @@ jobs:
steps:
# step 1
- name: clone application source code
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
fetch-depth: 0
diff --git a/.github/workflows/stale_bot.yml b/.github/workflows/stale_bot.yml
index a80619e90..fc0702bd8 100644
--- a/.github/workflows/stale_bot.yml
+++ b/.github/workflows/stale_bot.yml
@@ -17,8 +17,10 @@ jobs:
steps:
- name: Stale PR+Issues
- uses: actions/stale@v10.1.0
+ uses: actions/stale@v10.1.1
with:
days-before-stale: 45
- exempt-issue-labels: pinned,3.0
- exempt-pr-labels: pinned,3.0
+ stale-issue-message: This issue has not had any comment or update in the last month. If it is still relevant, please post update comments. If no comments are made, this issue will be closed automagically in 7 days.
+ close-issue-message: This issue has not had any comment since the last notice. It has been closed automatically. If this is incorrect, or the issue becomes relevant again, please request that it is reopened.
+ exempt-issue-labels: pinned,3.0,triaged,backlog
+ exempt-pr-labels: pinned,3.0,triaged,backlog
diff --git a/.github/workflows/test_native.yml b/.github/workflows/test_native.yml
index 9cf1c9e53..decd23954 100644
--- a/.github/workflows/test_native.yml
+++ b/.github/workflows/test_native.yml
@@ -14,7 +14,7 @@ jobs:
name: Native Simulator Tests
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
ref: ${{github.event.pull_request.head.ref}}
repository: ${{github.event.pull_request.head.repo.full_name}}
@@ -59,7 +59,7 @@ jobs:
id: version
- name: Save coverage information
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
if: always() # run this step even if previous step failed
with:
name: lcov-coverage-info-native-simulator-test-${{ steps.version.outputs.long }}.zip
@@ -70,7 +70,7 @@ jobs:
name: Native PlatformIO Tests
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
ref: ${{github.event.pull_request.head.ref}}
repository: ${{github.event.pull_request.head.repo.full_name}}
@@ -94,7 +94,7 @@ jobs:
- name: Save test results
if: always() # run this step even if previous step failed
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
with:
name: platformio-test-report-${{ steps.version.outputs.long }}.zip
overwrite: true
@@ -108,7 +108,7 @@ jobs:
sed -i -e "s#${PWD}#.#" coverage_tests.info # Make paths relative.
- name: Save coverage information
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
if: always() # run this step even if previous step failed
with:
name: lcov-coverage-info-native-platformio-tests-${{ steps.version.outputs.long }}.zip
@@ -127,7 +127,7 @@ jobs:
- platformio-tests
if: always()
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
ref: ${{github.event.pull_request.head.ref}}
repository: ${{github.event.pull_request.head.repo.full_name}}
@@ -137,20 +137,20 @@ jobs:
id: version
- name: Download test artifacts
- uses: actions/download-artifact@v5
+ uses: actions/download-artifact@v6
with:
name: platformio-test-report-${{ steps.version.outputs.long }}.zip
merge-multiple: true
- name: Test Report
- uses: dorny/test-reporter@v2.1.1
+ uses: dorny/test-reporter@v2.3.0
with:
name: PlatformIO Tests
path: testreport.xml
reporter: java-junit
- name: Download coverage artifacts
- uses: actions/download-artifact@v5
+ uses: actions/download-artifact@v6
with:
pattern: lcov-coverage-info-native-*-${{ steps.version.outputs.long }}.zip
path: code-coverage-report
@@ -163,7 +163,7 @@ jobs:
genhtml --quiet --legend --prefix "${PWD}" code-coverage-report/coverage_src.info --output-directory code-coverage-report
- name: Save Code Coverage Report
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
with:
name: code-coverage-report-${{ steps.version.outputs.long }}.zip
path: code-coverage-report
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 942659348..4a97853e2 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -20,7 +20,7 @@ jobs:
runs-on: test-runner
steps:
- name: Checkout code
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
# - uses: actions/setup-python@v5
# with:
@@ -47,9 +47,9 @@ jobs:
pio upgrade
- name: Setup Node
- uses: actions/setup-node@v5
+ uses: actions/setup-node@v6
with:
- node-version: 22
+ node-version: 24
- name: Setup pnpm
uses: pnpm/action-setup@v4
diff --git a/.github/workflows/trunk_annotate_pr.yml b/.github/workflows/trunk_annotate_pr.yml
index 23dcf8d09..59ab25c28 100644
--- a/.github/workflows/trunk_annotate_pr.yml
+++ b/.github/workflows/trunk_annotate_pr.yml
@@ -18,7 +18,7 @@ jobs:
steps:
- name: Checkout
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- name: Trunk Check
uses: trunk-io/trunk-action@v1
diff --git a/.github/workflows/trunk_check.yml b/.github/workflows/trunk_check.yml
index 41731d491..874374fe0 100644
--- a/.github/workflows/trunk_check.yml
+++ b/.github/workflows/trunk_check.yml
@@ -16,7 +16,7 @@ jobs:
steps:
- name: Checkout
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
- name: Trunk Check
uses: trunk-io/trunk-action@v1
diff --git a/.github/workflows/trunk_format_pr.yml b/.github/workflows/trunk_format_pr.yml
index 51082fc5f..8fa0cc1eb 100644
--- a/.github/workflows/trunk_format_pr.yml
+++ b/.github/workflows/trunk_format_pr.yml
@@ -15,7 +15,7 @@ jobs:
pull-requests: write
steps:
- name: Checkout repository
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
ref: ${{github.event.pull_request.head.ref}}
repository: ${{github.event.pull_request.head.repo.full_name}}
diff --git a/.github/workflows/update_protobufs.yml b/.github/workflows/update_protobufs.yml
index c06e06b0a..af0557fda 100644
--- a/.github/workflows/update_protobufs.yml
+++ b/.github/workflows/update_protobufs.yml
@@ -11,7 +11,7 @@ jobs:
pull-requests: write
steps:
- name: Checkout code
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
submodules: true
diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml
index 8c981850d..95e5b0dd2 100644
--- a/.trunk/trunk.yaml
+++ b/.trunk/trunk.yaml
@@ -4,31 +4,31 @@ cli:
plugins:
sources:
- id: trunk
- ref: v1.7.2
+ ref: v1.7.4
uri: https://github.com/trunk-io/plugins
lint:
enabled:
- - checkov@3.2.473
- - renovate@41.132.5
- - prettier@3.6.2
- - trufflehog@3.90.8
+ - checkov@3.2.495
+ - renovate@42.30.4
+ - prettier@3.7.4
+ - trufflehog@3.91.2
- yamllint@1.37.1
- - bandit@1.8.6
- - trivy@0.67.0
+ - bandit@1.9.2
+ - trivy@0.67.2
- taplo@0.10.0
- - ruff@0.13.3
- - isort@6.1.0
- - markdownlint@0.45.0
+ - ruff@0.14.7
+ - isort@7.0.0
+ - markdownlint@0.46.0
- oxipng@9.1.5
- svgo@4.0.0
- - actionlint@1.7.7
+ - actionlint@1.7.9
- flake8@7.3.0
- hadolint@2.14.0
- shfmt@3.6.0
- shellcheck@0.11.0
- - black@25.9.0
+ - black@25.11.0
- git-diff-check
- - gitleaks@8.28.0
+ - gitleaks@8.30.0
- clang-format@16.0.3
ignore:
- linters: [ALL]
diff --git a/README.md b/README.md
index a53fe9646..f34bf1839 100644
--- a/README.md
+++ b/README.md
@@ -37,4 +37,3 @@ Join our community and help improve Meshtastic! 🚀
## Stats

-
diff --git a/alpine.Dockerfile b/alpine.Dockerfile
index 0469874e4..b3b384101 100644
--- a/alpine.Dockerfile
+++ b/alpine.Dockerfile
@@ -8,7 +8,8 @@ ARG PIO_ENV=native
ENV PIP_ROOT_USER_ACTION=ignore
RUN apk --no-cache add \
- bash g++ libstdc++-dev linux-headers zip git ca-certificates libgpiod-dev yaml-cpp-dev bluez-dev \
+ bash g++ libstdc++-dev linux-headers zip git ca-certificates libbsd-dev \
+ libgpiod-dev yaml-cpp-dev bluez-dev \
libusb-dev i2c-tools-dev libuv-dev openssl-dev pkgconf argp-standalone \
libx11-dev libinput-dev libxkbcommon-dev \
&& rm -rf /var/cache/apk/* \
@@ -27,7 +28,7 @@ RUN bash ./bin/build-native.sh "$PIO_ENV" && \
# ##### PRODUCTION BUILD #############
-FROM alpine:3.22
+FROM alpine:3.23
LABEL org.opencontainers.image.title="Meshtastic" \
org.opencontainers.image.description="Alpine Meshtastic daemon" \
org.opencontainers.image.url="https://meshtastic.org" \
@@ -40,8 +41,8 @@ LABEL org.opencontainers.image.title="Meshtastic" \
USER root
RUN apk --no-cache add \
- shadow libstdc++ libgpiod yaml-cpp libusb i2c-tools libuv \
- libx11 libinput libxkbcommon \
+ shadow libstdc++ libbsd libgpiod yaml-cpp libusb \
+ i2c-tools libuv libx11 libinput libxkbcommon \
&& rm -rf /var/cache/apk/* \
&& mkdir -p /var/lib/meshtasticd \
&& mkdir -p /etc/meshtasticd/config.d \
diff --git a/arch/esp32/esp32.ini b/arch/esp32/esp32.ini
index 810c9780e..08a547ca6 100644
--- a/arch/esp32/esp32.ini
+++ b/arch/esp32/esp32.ini
@@ -57,7 +57,7 @@ lib_deps =
# renovate: datasource=git-refs depName=libpax packageName=https://github.com/dbinfrago/libpax gitBranch=master
https://github.com/dbinfrago/libpax/archive/3cdc0371c375676a97967547f4065607d4c53fd1.zip
# renovate: datasource=github-tags depName=XPowersLib packageName=lewisxhe/XPowersLib
- https://github.com/lewisxhe/XPowersLib/archive/v0.3.1.zip
+ https://github.com/lewisxhe/XPowersLib/archive/v0.3.2.zip
# renovate: datasource=git-refs depName=meshtastic-ESP32_Codec2 packageName=https://github.com/meshtastic/ESP32_Codec2 gitBranch=master
https://github.com/meshtastic/ESP32_Codec2/archive/633326c78ac251c059ab3a8c430fcdf25b41672f.zip
# renovate: datasource=custom.pio depName=rweather/Crypto packageName=rweather/library/Crypto
diff --git a/arch/esp32/esp32c6.ini b/arch/esp32/esp32c6.ini
index 7b06f4cd8..b07a2dcd4 100644
--- a/arch/esp32/esp32c6.ini
+++ b/arch/esp32/esp32c6.ini
@@ -28,7 +28,7 @@ lib_deps =
${environmental_extra.lib_deps}
${radiolib_base.lib_deps}
# renovate: datasource=custom.pio depName=XPowersLib packageName=lewisxhe/library/XPowersLib
- lewisxhe/XPowersLib@0.3.1
+ lewisxhe/XPowersLib@0.3.2
# renovate: datasource=git-refs depName=meshtastic-ESP32_Codec2 packageName=https://github.com/meshtastic/ESP32_Codec2 gitBranch=master
https://github.com/meshtastic/ESP32_Codec2/archive/633326c78ac251c059ab3a8c430fcdf25b41672f.zip
# renovate: datasource=custom.pio depName=rweather/Crypto packageName=rweather/library/Crypto
diff --git a/arch/nrf52/nrf52.ini b/arch/nrf52/nrf52.ini
index 36effe017..e60d47ce7 100644
--- a/arch/nrf52/nrf52.ini
+++ b/arch/nrf52/nrf52.ini
@@ -7,7 +7,7 @@ extends = arduino_base
platform_packages =
; our custom Git version until they merge our PR
# TODO renovate
- platformio/framework-arduinoadafruitnrf52 @ https://github.com/meshtastic/Adafruit_nRF52_Arduino#e13f5820002a4fb2a5e6754b42ace185277e5adf
+ platformio/framework-arduinoadafruitnrf52 @ https://github.com/meshtastic/Adafruit_nRF52_Arduino#c770c8a16a351b55b86e347a3d9d7b74ad0bbf39
; Don't renovate toolchain-gccarmnoneeabi
platformio/toolchain-gccarmnoneeabi@~1.90301.0
diff --git a/arch/nrf52/nrf52840.ini b/arch/nrf52/nrf52840.ini
index 5e846b3b7..e13443152 100644
--- a/arch/nrf52/nrf52840.ini
+++ b/arch/nrf52/nrf52840.ini
@@ -8,7 +8,7 @@ lib_deps =
${environmental_base.lib_deps}
${environmental_extra.lib_deps}
# renovate: datasource=git-refs depName=Kongduino-Adafruit_nRFCrypto packageName=https://github.com/Kongduino/Adafruit_nRFCrypto gitBranch=master
- https://github.com/Kongduino/Adafruit_nRFCrypto/archive/5f838d2709461a2c981f642917aa50254a25c14c.zip
+ https://github.com/Kongduino/Adafruit_nRFCrypto/archive/8cde7189b5ead9dcd49f72601b43b969c0bbc06e.zip
; Common NRF52 debugging settings follow. See the Meshtastic developer docs for how to connect SWD debugging probes to your board.
diff --git a/arch/portduino/portduino.ini b/arch/portduino/portduino.ini
index f3fd00de7..bce06f907 100644
--- a/arch/portduino/portduino.ini
+++ b/arch/portduino/portduino.ini
@@ -2,7 +2,7 @@
[portduino_base]
platform =
# renovate: datasource=git-refs depName=platform-native packageName=https://github.com/meshtastic/platform-native gitBranch=develop
- https://github.com/meshtastic/platform-native/archive/d3f6e339534233c7217818867368767590ce549e.zip
+ https://github.com/meshtastic/platform-native/archive/f566d364204416cdbf298e349213f7d551f793d9.zip
framework = arduino
build_src_filter =
diff --git a/arch/stm32/stm32.ini b/arch/stm32/stm32.ini
index 8b7d256b3..1a9fd10ce 100644
--- a/arch/stm32/stm32.ini
+++ b/arch/stm32/stm32.ini
@@ -2,7 +2,7 @@
extends = arduino_base
platform =
# renovate: datasource=custom.pio depName=platformio/ststm32 packageName=platformio/platform/ststm32
- platformio/ststm32@19.3.0
+ platformio/ststm32@19.4.0
platform_packages =
# TODO renovate
platformio/framework-arduinoststm32@https://github.com/stm32duino/Arduino_Core_STM32/archive/2.10.1.zip
@@ -37,6 +37,9 @@ build_flags =
-DRADIOLIB_EXCLUDE_LR11X0=1
-DHAL_DAC_MODULE_ONLY
-DHAL_RNG_MODULE_ENABLED
+ -Wl,--wrap=__assert_func
+ -Wl,--wrap=strerror
+ -Wl,--wrap=_tzset_unlocked_r
build_src_filter =
${arduino_base.build_src_filter} - - - - - - - - - - - - - -
diff --git a/bin/analyze_map.py b/bin/analyze_map.py
new file mode 100644
index 000000000..99997c703
--- /dev/null
+++ b/bin/analyze_map.py
@@ -0,0 +1,165 @@
+#!/usr/bin/env python3
+"""Summarise linker map output to highlight heavy object files and libraries.
+
+Usage:
+ python bin/analyze_map.py --map .pio/build/rak4631/output.map --top 20
+
+The script parses GNU ld map files and aggregates section sizes per object file
+and per archive/library, then prints sortable tables that make it easy to spot
+modules worth trimming or hiding behind feature flags.
+"""
+from __future__ import annotations
+
+import argparse
+import collections
+import os
+import re
+import sys
+from typing import DefaultDict, Dict, Tuple
+
+
+SECTION_LINE_RE = re.compile(r"^\s+(?P\S+)\s+0x[0-9A-Fa-f]+\s+0x(?P[0-9A-Fa-f]+)\s+(?P