name: Gitea Release on: workflow_call: inputs: version: required: true type: string changelog: required: true type: string permissions: contents: write # Required for creating releases issues: read # Required for reading changelog pull-requests: read # Required for reading changelog jobs: build: 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 dependencies run: | python -m pip install --upgrade pip pip install --upgrade platformio esptool sudo apt-get update sudo apt-get install -y jq - name: Build Firmware run: | pio run -t buildfs pio run - name: Merge firmware and SPIFFS run: | esptool.py --chip esp32 merge_bin \ --flash_mode dio \ --flash_freq 40m \ --flash_size 4MB \ -o .pio/build/esp32dev/filaman_full.bin \ 0x1000 .pio/build/esp32dev/bootloader.bin \ 0x8000 .pio/build/esp32dev/partitions.bin \ 0x10000 .pio/build/esp32dev/firmware.bin \ 0x290000 .pio/build/esp32dev/spiffs.bin - name: Prepare OTA firmware run: cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/filaman_ota.bin - name: Create Release env: GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} GITEA_API_URL: ${{ secrets.GITEA_API_URL }} GITEA_REPOSITORY: ${{ secrets.GITEA_REPOSITORY }} run: | # Validate and sanitize API URL if [[ ! "$GITEA_API_URL" =~ ^https?:// ]]; then echo "Error: GITEA_API_URL must start with http:// or https://" exit 1 fi # Remove trailing slash and ensure /api/v1 GITEA_API_URL="${GITEA_API_URL%/}" if [[ ! "$GITEA_API_URL" =~ /api/v1$ ]]; then GITEA_API_URL="${GITEA_API_URL}/api/v1" fi echo "Creating Gitea release..." RESPONSE=$(curl -sS -X POST \ -H "Authorization: token ${GITEA_TOKEN}" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ "${GITEA_API_URL}/repos/${GITEA_REPOSITORY}/releases" \ -d @- << EOF { "tag_name": "${{ github.ref_name }}", "name": "Release ${{ inputs.version }}", "body": ${{ toJSON(inputs.changelog) }}, "draft": false, "prerelease": false } EOF ) # Extract and validate release ID RELEASE_ID=$(echo "$RESPONSE" | jq -r .id) if [ -z "$RELEASE_ID" ] || [ "$RELEASE_ID" = "null" ]; then echo "Error: Failed to get release ID" echo "API Response:" echo "$RESPONSE" | jq . exit 1 fi # Upload binary files for file in "filaman_full.bin" "filaman_ota.bin"; do echo "Uploading $file..." if ! curl -sS -X POST \ -H "Authorization: token ${GITEA_TOKEN}" \ -H "Content-Type: application/octet-stream" \ "${GITEA_API_URL}/repos/${GITEA_REPOSITORY}/releases/${RELEASE_ID}/assets?name=${file}" \ --data-binary "@.pio/build/esp32dev/${file}"; then echo "Error: Failed to upload $file" exit 1 fi echo "Successfully uploaded $file" done } } } }