name: Gitea Release on: workflow_call: inputs: gitea_ref_name: required: true type: string gitea_server_url: required: true type: string gitea_repository: required: true type: string secrets: GITEA_TOKEN: required: true jobs: create-release: runs-on: ubuntu-latest 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: Install xxd run: | sudo apt-get update sudo apt-get install xxd - name: Check for SPIFFS changes id: check_spiffs run: | git fetch --unshallow || true CHANGED_FILES=$(git diff --name-only HEAD^..HEAD) if echo "$CHANGED_FILES" | grep -q "^data/\|^html/"; then echo "SPIFFS_CHANGED=true" >> $GITHUB_OUTPUT else echo "SPIFFS_CHANGED=false" >> $GITHUB_OUTPUT fi - name: Build Firmware run: | # Get version from platformio.ini VERSION=$(grep '^version = ' platformio.ini | cut -d'"' -f2) # Always build firmware pio run -e esp32dev cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/filaman_${VERSION}.bin # Only build SPIFFS if changed if [[ "${{ steps.check_spiffs.outputs.SPIFFS_CHANGED }}" == "true" ]]; then echo "Building SPIFFS due to changes..." pio run -t buildfs cp .pio/build/esp32dev/spiffs.bin .pio/build/esp32dev/webpage_${VERSION}.bin fi - name: Prepare binaries run: | cd .pio/build/esp32dev VERSION=$(grep '^version = ' ../../platformio.ini | cut -d'"' -f2) # Create full binary only if SPIFFS changed if [[ "${{ steps.check_spiffs.outputs.SPIFFS_CHANGED }}" == "true" ]]; then echo "Creating full binary..." esptool.py --chip esp32 merge_bin \ --fill-flash-size 4MB \ --flash_mode dio \ --flash_freq 40m \ --flash_size 4MB \ -o filaman_full_${VERSION}.bin \ 0x0000 bootloader.bin \ 0x8000 partitions.bin \ 0x10000 firmware.bin \ 0x390000 spiffs.bin fi # Verify file sizes echo "File sizes:" ls -lh *.bin - name: Create Release env: TOKEN: ${{ secrets.GITEA_TOKEN }} run: | TAG="${{ inputs.gitea_ref_name }}" API_URL="${{ inputs.gitea_server_url }}/api/v1" REPO="${{ inputs.gitea_repository }}" VERSION=$(grep '^version = ' platformio.ini | cut -d'"' -f2) # Create release RESPONSE=$(curl -k -s \ -X POST \ -H "Authorization: token ${TOKEN}" \ -H "Content-Type: application/json" \ -d "{ \"tag_name\":\"${TAG}\", \"name\":\"Release ${TAG}\", \"body\":\"${{ steps.changelog.outputs.CHANGES }}\" }" \ "${API_URL}/repos/${REPO}/releases") RELEASE_ID=$(echo "$RESPONSE" | grep -o '"id":[0-9]*' | cut -d':' -f2 | head -n1) if [ -n "$RELEASE_ID" ]; then echo "Release created with ID: $RELEASE_ID" cd .pio/build/esp32dev # Always upload firmware if [ -f "filaman_${VERSION}.bin" ]; then curl -k -s \ -X POST \ -H "Authorization: token ${TOKEN}" \ -H "Content-Type: application/octet-stream" \ --data-binary "@filaman_${VERSION}.bin" \ "${API_URL}/repos/${REPO}/releases/${RELEASE_ID}/assets?name=filaman_${VERSION}.bin" fi # Upload SPIFFS and full binary only if they exist for file in webpage_${VERSION}.bin filaman_full_${VERSION}.bin; do if [ -f "$file" ]; then echo "Uploading $file..." curl -k -s \ -X POST \ -H "Authorization: token ${TOKEN}" \ -H "Content-Type: application/octet-stream" \ --data-binary "@$file" \ "${API_URL}/repos/${REPO}/releases/${RELEASE_ID}/assets?name=$file" fi done else echo "Failed to create release. Response:" echo "$RESPONSE" exit 1 fi