Files
OpenMQTT-Gateway/.github/workflows/task-build.yml
T
0bbc00cfa0 [SYS] esp32_platform: update to 55.03.39 (#2329)
* esp32_platform: update to 55.03.39

## Summary

- Add support for Python 3.14
- Improve ESP32 platform and framework compatibility.
- Update board support and toolchain integrations.
- Fix stability and hardware-specific issues across supported ESP32 targets.
- Release notes:
    - [55.03.39](https://github.com/pioarduino/platform-espressif32/releases/tag/55.03.39)
    - [55.03.38](https://github.com/pioarduino/platform-espressif32/releases/tag/55.03.38)
    - [55.03.37](https://github.com/pioarduino/platform-espressif32/releases/tag/55.03.37)
    - [55.03.36](https://github.com/pioarduino/platform-espressif32/releases/tag/55.03.36)
    - [55.03.35](https://github.com/pioarduino/platform-espressif32/releases/tag/55.03.35)
    - [55.03.34](https://github.com/pioarduino/platform-espressif32/releases/tag/55.03.34)

* update build to use python 3.14 with platformio 6.1.19

* Update esp32-arduino-lib-builder to v1.5

* [CI] Fix call8 link overflow on large Xtensa builds (IDF 5.5.4)

The 55.03.39 / IDF 5.5.4 bump enlarges the precompiled libs enough that
large Xtensa images (esp32 / esp32s3) overflow the call8 reach and fail to
link with "dangerous relocation: call8: call target out of range".
-mlongcalls (which makes calls linker-relaxable) is injected by
esp32-arduino-libs into the framework compile but NOT into lib_deps
(NimBLE-Arduino, ArduinoJson) or project sources.

Add a project pre: extra_script (scripts/add_mlongcalls.py) that applies
-mlongcalls to CCFLAGS/ASFLAGS, gated on the Xtensa MCUs (RISC-V c3 has no
call8 and rejects the flag). Wired into [env]; the four esp32dev-*pilight*
envs that set their own extra_scripts list it explicitly too, since
PlatformIO replaces rather than merges extra_scripts.

Also bump esp32-arduino-libs 0.1.5 -> 0.1.6, which restores the
framework-side -mdisable-hardware-atomics / -fno-builtin-* flags that 0.1.5
dropped under IDF 5.5.4 (separate from the lib_deps call8 issue).

Verified clean (0 call8): esp32dev-all-test, esp32dev-ble, theengs-bridge,
theengs-plug, esp32dev-pilight (+cc1101); esp32c3 unaffected.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Florian <florian@theengs.io>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 09:38:12 -05:00

121 lines
3.5 KiB
YAML

name: Reusable Build Workflow
on:
workflow_call:
inputs:
python-version:
description: "Python version to use"
required: false
type: string
default: "3.14"
pio-version:
description: "PlatformIO version to use"
required: false
type: string
default: "v6.1.19"
environment-set:
description: 'Which set of environments to build (all, ci)'
required: false
type: string
default: 'all'
enable-dev-ota:
description: "Enable development OTA builds"
required: false
type: boolean
default: false
version-tag:
description: "Optional version tag to pass to ci.sh build (omitted if empty)"
required: false
type: string
default: ""
artifact-retention-days:
description: "Number of days to retain build artifacts"
required: false
type: number
default: 7
jobs:
lint:
name: Lint code format
uses: ./.github/workflows/task-lint.yml
with:
source: "main"
extensions: "h,ino,cpp"
clang-format-version: "9"
security-scan:
name: Security vulnerability scan
uses: ./.github/workflows/task-security-scan.yml
with:
severity: "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL"
exit-code: "1"
upload-to-security-tab: true
load-environments:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- uses: actions/checkout@v4
- id: set-matrix
run: |
ENV_SET="${{ inputs.environment-set }}"
if [ "$ENV_SET" = "ci" ]; then
ENVIRONMENTS=$(jq -c '.environments.ci' .github/workflows/environments.json)
else
ENVIRONMENTS=$(jq -c '.environments.all' .github/workflows/environments.json)
fi
echo "matrix=${ENVIRONMENTS}" >> $GITHUB_OUTPUT
build:
needs: [lint, security-scan, load-environments]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
environments: ${{ fromJson(needs.load-environments.outputs.matrix) }}
name: Build ${{ matrix.environments }}
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ inputs.python-version }}
- name: Install uv
uses: astral-sh/setup-uv@v6
with:
version: "latest"
enable-cache: false
- name: Install PlatformIO dependencies
run: |
uv pip install --system -U https://github.com/pioarduino/platformio-core/archive/refs/tags/${{ inputs.pio-version }}.zip
- name: Build firmware using ci.sh
run: |
BUILD_ARGS="${{ matrix.environments }}"
BUILD_ARGS="$BUILD_ARGS --deploy-ready"
# Optional version tag
if [ -n "${{ inputs.version-tag }}" ]; then
BUILD_ARGS="$BUILD_ARGS --version ${{ inputs.version-tag }}"
fi
# Mode
if [ "${{ inputs.enable-dev-ota }}" = "true" ]; then
BUILD_ARGS="$BUILD_ARGS --mode dev"
else
BUILD_ARGS="$BUILD_ARGS --mode prod"
fi
./scripts/ci.sh build $BUILD_ARGS
- name: Upload firmware artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.environments }}
path: generated/artifacts/
retention-days: ${{ inputs.artifact-retention-days }}