Skip to content

IDF v5.5 based build #176

IDF v5.5 based build

IDF v5.5 based build #176

name: IDF v5.5 based build
on:
workflow_dispatch: # Manually start a workflow
jobs:
build-libs:
name: Build Libs for ${{ matrix.target }}
runs-on: ubuntu-latest
strategy:
matrix:
target: [esp32, esp32s2, esp32s3, esp32c2, esp32c3, esp32c5, esp32c6, esp32h2, esp32p4]
fail-fast: true
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'
- name: Install dependencies
run: bash ./tools/prepare-ci.sh
- name: Get current branch
run: |
echo "GIT_BRANCH=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_ENV
- name: Build Libs for ${{ matrix.target }}
run: |
bash ./build.sh -e -t ${{ matrix.target }}
mv release-info.txt out/framework-arduinoespressif32
- name: Upload artifacts for ${{ matrix.target }}
uses: actions/upload-artifact@v4
with:
name: artifacts-${{ matrix.target }}
path: out/framework-arduinoespressif32
build-slave_firmware:
name: Build Slave Firmware
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'
- name: Install dependencies
run: bash ./tools/prepare-ci.sh
- name: Build slave firmware
run: bash ./tools/compile_slave.sh
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: slave_firmware
path: ./esp-hosted-mcu/slave/wifi_copro_fw
combine-artifacts:
name: Combine artifacts and create framework
needs: [build-libs, build-slave_firmware]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'
- name: Download build artifacts
uses: actions/download-artifact@v4
with:
path: framework-arduinoespressif32
pattern: artifacts-*
merge-multiple: true
- name: Download slave firmware
uses: actions/download-artifact@v4
with:
name: slave_firmware
path: slave_firmware
- name: Create complete framework
run: |
mkdir -p framework-arduinoespressif32/tools/slave_firmware
mv slave_firmware/* framework-arduinoespressif32/tools/slave_firmware/
mv framework-arduinoespressif32/release-info.txt .
IDF_BRANCH=$(grep 'esp-idf branch' release-info.txt | sed -E 's/.*branch \[([^]]+)\].*/\1/')
IDF_COMMIT=$(grep 'esp-idf branch' release-info.txt | sed -E 's/.*commit \[([^]]+)\].*/\1/')
echo "IDF_BRANCH=$IDF_BRANCH"
echo "IDF_COMMIT=$IDF_COMMIT"
idf_version_string="${IDF_BRANCH//\//_}-$IDF_COMMIT"
# Update sdkconfig files with slave firmware version
if [ -f "framework-arduinoespressif32/tools/slave_firmware/coprocessor_fw_version.txt" ]; then
FIRMWARE_VERSION=$(cat framework-arduinoespressif32/tools/slave_firmware/coprocessor_fw_version.txt)
echo "Found firmware version: $FIRMWARE_VERSION"
# Array of MCU targets that need sdkconfig updates
mcu_targets=("esp32" "esp32s2" "esp32s3" "esp32c2" "esp32c3" "esp32c5" "esp32c6" "esp32h2" "esp32p4")
for mcu in "${mcu_targets[@]}"; do
sdkconfig_path="framework-arduinoespressif32/tools/esp32-arduino-libs/$mcu/sdkconfig"
if [ -f "$sdkconfig_path" ]; then
echo "Updating $sdkconfig_path with firmware version: $FIRMWARE_VERSION"
# Remove existing CONFIG_ESP_HOSTED_IDF_SLAVE_TARGET line and add new one at the beginning
sed -i -e '/^CONFIG_ESP_HOSTED_IDF_SLAVE_TARGET/d' -e "1i CONFIG_ESP_HOSTED_IDF_SLAVE_TARGET=\"$FIRMWARE_VERSION\"" "$sdkconfig_path"
else
echo "Warning: sdkconfig file not found at $sdkconfig_path"
fi
done
else
echo "Warning: coprocessor_fw_version.txt not found"
fi
tar --exclude=.* -Jcf framework-arduinoespressif32-${idf_version_string}.tar.xz framework-arduinoespressif32/
- name: Set tag name
id: set_tag_name
run: |
# Debug: Zeige den Inhalt von release-info.txt
echo "=== Content of release-info.txt ==="
cat release-info.txt
echo "================================="
# Extrahiere IDF Version mit vollständigem Muster
# Erfasst: x.y, x.y.z, x.y_suffix, x.y.z_suffix, etc.
IDF_VERSION=$(grep 'esp-idf branch' release-info.txt | sed -E 's/.*branch \[release\/v([0-9]+\.[0-9]+(\.[0-9]+)?([_.-]?[a-zA-Z0-9]+)*)\].*/\1/' | head -1)
# Fallback: Versuche ohne "release/" Präfix
if [ -z "$IDF_VERSION" ]; then
IDF_VERSION=$(grep 'esp-idf branch' release-info.txt | sed -E 's/.*branch \[v([0-9]+\.[0-9]+(\.[0-9]+)?([_.-]?[a-zA-Z0-9]+)*)\].*/\1/' | head -1)
fi
# Fallback: Extrahiere beliebige Versionsnummer nach "v"
if [ -z "$IDF_VERSION" ]; then
IDF_VERSION=$(grep 'esp-idf branch' release-info.txt | sed -E 's/.*v([0-9]+\.[0-9]+[._-]?[a-zA-Z0-9]*).*/\1/' | head -1)
fi
# Default falls nichts gefunden wird
if [ -z "$IDF_VERSION" ]; then
IDF_VERSION="unknown"
fi
# Datum im europäischen Format (Tag/Monat-Stunde-Minute)
DATE=$(date +"%d%m-%H%M")
# Tag name ohne "v" Präfix
TAG_NAME="${DATE}-${IDF_VERSION}"
echo "IDF_VERSION: $IDF_VERSION"
echo "DATE: $DATE"
echo "TAG_NAME: $TAG_NAME"
# Validiere Tag-Name Format (erlaubt Punkte, Unterstriche, Bindestriche)
if [[ "$TAG_NAME" =~ ^[a-zA-Z0-9._-]+$ ]]; then
echo "tag_name=$TAG_NAME" >> $GITHUB_OUTPUT
else
echo "ERROR: Invalid tag name format: $TAG_NAME"
exit 1
fi
- name: Debug tag name
run: |
echo "Generated tag name: ${{ steps.set_tag_name.outputs.tag_name }}"
if [ -z "${{ steps.set_tag_name.outputs.tag_name }}" ]; then
echo "ERROR: tag_name is empty!"
exit 1
fi
- name: Release framework-arduinoespressif32
uses: jason2866/[email protected]
with:
tag_name: ${{ steps.set_tag_name.outputs.tag_name }}
body_path: release-info.txt
prerelease: true
files: |
framework-arduinoespressif32-*.tar.xz
release-info.txt
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}