Skip to content

Update CHANGELOG.md #31

Update CHANGELOG.md

Update CHANGELOG.md #31

name: Build PwnPower
on:
push:
branches: [main, master]
paths:
- 'Pwn-Power/**'
pull_request:
branches: [main, master]
paths:
- 'Pwn-Power/**'
workflow_dispatch:
inputs:
buildType:
description: "Select the build type"
required: true
type: choice
options:
- "prerelease"
- "all"
default: "prerelease"
releaseVersion:
description: "Release tag (e.g. v1.7.2). leave empty to auto-generate"
required: false
type: string
default: ""
releaseName:
description: "Release name (e.g. 'Bug Fix Release'). leave empty for auto-generated"
required: false
type: string
default: ""
permissions:
contents: write
jobs:
build:
name: Build for ${{ matrix.target.name }}
runs-on: ubuntu-latest
defaults:
run:
working-directory: Pwn-Power
strategy:
matrix:
target:
- { name: "esp32c3", idf_target: "esp32c3", sdkconfig_file: "configs/sdkconfig.esp32c3", zip_name: "pwnpower-esp32c3.zip" }
- { name: "esp32c5", idf_target: "esp32c5", sdkconfig_file: "configs/sdkconfig.esp32c5", zip_name: "pwnpower-esp32c5.zip" }
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- uses: actions/cache@v4
id: cache-idf
with:
path: |
~/esp-idf
~/.espressif
key: esp-idf-v5.5.1-${{ runner.os }}-${{ matrix.target.idf_target }}-${{ hashFiles('Pwn-Power/**') }}
restore-keys: |
esp-idf-v5.5.1-${{ runner.os }}-${{ matrix.target.idf_target }}-
- name: Install ESP-IDF Dependencies
if: steps.cache-idf.outputs.cache-hit != 'true'
working-directory: .
run: |
sudo apt-get update
sudo apt-get install -y git wget flex bison gperf python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
- name: Install ESP-IDF
if: steps.cache-idf.outputs.cache-hit != 'true'
working-directory: .
run: |
rm -rf ~/esp-idf
git clone -b v5.5.1 --depth 1 --recursive https://github.com/espressif/esp-idf.git ~/esp-idf
~/esp-idf/install.sh ${{ matrix.target.idf_target }}
- name: Apply Custom SDK Config
run: |
cp "${{ matrix.target.sdkconfig_file }}" sdkconfig
cp "${{ matrix.target.sdkconfig_file }}" sdkconfig.defaults
- name: Build Project
run: |
. ~/esp-idf/export.sh
export IDF_TARGET=${{ matrix.target.idf_target }}
idf.py build
- name: Package Binaries
run: |
. ~/esp-idf/export.sh
mkdir -p release
cp build/bootloader/bootloader.bin release/
cp build/partition_table/partition-table.bin release/partitions.bin
cp build/pwnpower.bin release/firmware.bin
# Both targets use OTA layout - flash to ota_0 partition at 0x20000
python3 -m esptool --chip ${{ matrix.target.idf_target }} merge_bin \
--output release/pwnpower-merged.bin \
--flash_mode dio \
--flash_size ${{ matrix.target.idf_target == 'esp32c5' && '8MB' || '4MB' }} \
0x0 release/bootloader.bin \
0x8000 release/partitions.bin \
0x20000 release/firmware.bin
cd release && zip -j ../${{ matrix.target.zip_name }} *
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.target.zip_name }}
path: Pwn-Power/${{ matrix.target.zip_name }}
upload_prerelease:
name: Create Pre-release and Upload Artifacts
needs: build
if: github.event.inputs.buildType == 'prerelease'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Download all build artifacts
uses: actions/download-artifact@v4
with:
path: all_build_artifacts
- name: Verify and Prepare Artifacts for Upload
run: |
mkdir -p release_assets
find all_build_artifacts -name '*.zip' -exec cp {} release_assets/ \;
echo "Prepared release assets:"
ls -lh release_assets
- name: Generate Pre-release Tag and Title
id: pre_release_info
run: |
if [ -n "${{ github.event.inputs.releaseVersion }}" ]; then
TAG_NAME="${{ github.event.inputs.releaseVersion }}"
else
TAG_NAME="prerelease-$(date +'%Y%m%d-%H%M%S')-${GITHUB_SHA::7}"
fi
if [ -n "${{ github.event.inputs.releaseName }}" ]; then
TITLE="${{ github.event.inputs.releaseName }}"
elif [ -n "${{ github.event.inputs.releaseVersion }}" ]; then
TITLE="Release $TAG_NAME"
else
TITLE="Pre-release $(date +'%Y-%m-%d %H:%M:%S')"
fi
echo "tag_name=$TAG_NAME" >> $GITHUB_OUTPUT
echo "release_title=$TITLE" >> $GITHUB_OUTPUT
echo "Generated Tag: $TAG_NAME"
echo "Generated Title: $TITLE"
- name: Create GitHub Pre-Release and Upload Assets
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAG: ${{ steps.pre_release_info.outputs.tag_name }}
TITLE: ${{ steps.pre_release_info.outputs.release_title }}
run: |
echo "Creating pre-release with tag $TAG and title '$TITLE'"
cat > release_notes.md <<EOF
Automated pre-release build for tag $TAG.
## Flashing Instructions
PwnPower uses OTA partition layouts:
- Application: firmware.bin at **0x20000**
- Bootloader: bootloader.bin at **0x0**
- Partition Table: partitions.bin at **0x8000**
- Flash Size: 4MB (ESP32-C3) or 8MB (ESP32-C5)
**Important:** Do NOT use factory offsets (0x10000 for app).
## Supported Targets
- ESP32-C3: 4MB flash, 2.4GHz WiFi
- ESP32-C5: 8MB flash, 2.4GHz + 5GHz WiFi
EOF
if [ -z "$(ls -A release_assets/*.zip 2>/dev/null)" ]; then
echo "No ZIP files found in release_assets. Creating pre-release without assets."
gh release create "$TAG" \
--repo "$GITHUB_REPOSITORY" \
--title "$TITLE" \
--notes-file release_notes.md \
--prerelease
else
echo "Uploading assets from release_assets:"
ls -l release_assets/*.zip
gh release create "$TAG" \
--repo "$GITHUB_REPOSITORY" \
--title "$TITLE" \
--notes-file release_notes.md \
--prerelease \
release_assets/*.zip
fi
echo "Pre-release creation attempted."