name: GitHub Release on: workflow_call: jobs: create-release: runs-on: ubuntu-latest permissions: contents: write steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.x' - name: Install PlatformIO run: | python -m pip install --upgrade pip pip install --upgrade platformio esptool - name: Build Firmware run: | pio run -e esp32dev_ota -t buildfs # Build SPIFFS pio run -e esp32dev_ota # Build firmware cp .pio/build/esp32dev_ota/firmware.bin .pio/build/esp32dev_ota/filaman.bin cp .pio/build/esp32dev_ota/spiffs.bin .pio/build/esp32dev_ota/filaman_spiffs.bin - name: Prepare binaries run: | cd .pio/build/esp32dev_ota # Create OTA binary (already has correct magic byte) cp firmware.bin filaman_ota.bin # Create a magic byte prepended binary for the bootloader echo -ne '\xE9' > bootloader_with_magic.bin cat bootloader.bin >> bootloader_with_magic.bin echo "Creating full binary with magic byte..." esptool.py --chip esp32 merge_bin \ --fill-flash-size 4MB \ --flash_mode dio \ --flash_freq 40m \ --flash_size 4MB \ -o filaman_full.bin \ 0x0000 bootloader_with_magic.bin \ 0x8000 partitions.bin \ 0x10000 firmware.bin \ 0x3D0000 spiffs.bin # Verify magic bytes echo "Checking magic bytes:" echo "OTA binary first bytes:" hexdump -C -n 16 filaman_ota.bin echo "Full binary first bytes:" hexdump -C -n 16 filaman_full.bin # Verify file sizes echo "File sizes:" ls -lh *.bin - name: Get version from tag id: get_version run: | echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT - name: Read CHANGELOG.md id: changelog run: | VERSION=${{ steps.get_version.outputs.VERSION }} CHANGELOG=$(awk "/## \\[$VERSION\\]/{p=1;print;next} /## \\[/{p=0} p" CHANGELOG.md) echo "CHANGES<> $GITHUB_OUTPUT echo "$CHANGELOG" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT - name: Create GitHub Release env: GH_TOKEN: ${{ github.token }} run: | gh release create "${{ github.ref_name }}" \ --title "Release ${{ steps.get_version.outputs.VERSION }}" \ --notes "${{ steps.changelog.outputs.CHANGES }}" \ .pio/build/esp32dev_ota/filaman_full.bin \ .pio/build/esp32dev_ota/filaman_ota.bin \ .pio/build/esp32dev_ota/filaman.bin \ .pio/build/esp32dev_ota/filaman_spiffs.bin