diff --git a/.github/workflows/providers/gitea-release.yml b/.github/workflows/providers/gitea-release.yml index 70e08de..c37f25e 100644 --- a/.github/workflows/providers/gitea-release.yml +++ b/.github/workflows/providers/gitea-release.yml @@ -4,101 +4,60 @@ on: workflow_call: inputs: version: - required: true type: string + required: true changelog: - required: true type: string - -permissions: - contents: write - issues: read - pull-requests: read + required: true jobs: - build: - runs-on: ubuntu-latest + release: + runs-on: gitea-runner 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..." - release_data="{\"tag_name\":\"${{ github.ref_name }}\",\"name\":\"Release ${{ inputs.version }}\",\"body\":${{ toJSON(inputs.changelog) }},\"draft\":false,\"prerelease\":false}" - 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 "$release_data") - - # 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 \ + - name: Debug Info + run: | + echo "Version: ${{ inputs.version }}" + echo "Changelog: ${{ inputs.changelog }}" + echo "Tag: ${GITHUB_REF#refs/tags/}" + + - 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 platformio esptool + + - name: Build + run: | + pio run -t buildfs + pio run + + - name: Create full firmware + 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 + cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/filaman_ota.bin + + - name: Create Release + run: | + TAG="${GITHUB_REF#refs/tags/}" + curl -X POST "${GITEA_API_URL}/repos/${GITEA_REPOSITORY}/releases" \ -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 \ No newline at end of file + -H "Content-Type: application/json" \ + -d "{\"tag_name\":\"$TAG\",\"name\":\"Release ${{ inputs.version }}\",\"body\":\"${{ inputs.changelog }}\",\"draft\":false,\"prerelease\":false}" + env: + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} + GITEA_API_URL: ${{ secrets.GITEA_API_URL }} + GITEA_REPOSITORY: ${{ secrets.GITEA_REPOSITORY }} \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3658c70..6a5225a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -6,50 +6,86 @@ on: - 'v*' jobs: - get-version-and-changelog: - runs-on: ubuntu-latest + prepare: + runs-on: gitea-runner outputs: - version: ${{ steps.get_version.outputs.VERSION }} - changelog: ${{ steps.changelog.outputs.CHANGES }} + version: ${{ steps.version.outputs.version }} + changelog: ${{ steps.changelog.outputs.changelog }} steps: - uses: actions/checkout@v4 - name: Get version from tag - id: get_version - run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT - - - name: Verify version match + id: version run: | - PIO_VERSION=$(grep '^version = ' platformio.ini | cut -d'"' -f2) - TAG_VERSION=${{ steps.get_version.outputs.VERSION }} - - if [ "$PIO_VERSION" != "$TAG_VERSION" ]; then - echo "Error: Version mismatch between tag ($TAG_VERSION) and platformio.ini ($PIO_VERSION)" - exit 1 - fi + VERSION=${GITHUB_REF#refs/tags/v} + echo "version=$VERSION" >> $GITHUB_OUTPUT - - name: Read CHANGELOG.md + - name: Get changelog id: changelog run: | - CHANGELOG=$(awk "/## \\[${{ steps.get_version.outputs.VERSION }}\\]/{p=1;print;next} /## \\[/{p=0} p" CHANGELOG.md) - echo "CHANGES<> $GITHUB_OUTPUT + CHANGELOG=$(awk "/## \\[${{ steps.version.outputs.version }}\\]/{p=1;print;next} /## \\[/{p=0} p" CHANGELOG.md) + echo "changelog<> $GITHUB_OUTPUT echo "$CHANGELOG" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT - github-release: - needs: get-version-and-changelog + github: + needs: prepare if: github.server_url == 'https://github.com' uses: ./.github/workflows/providers/github-release.yml with: - version: ${{ needs.get-version-and-changelog.outputs.version }} - changelog: ${{ needs.get-version-and-changelog.outputs.changelog }} + version: ${{ needs.prepare.outputs.version }} + changelog: ${{ needs.prepare.outputs.changelog }} secrets: inherit - gitea-release: - needs: get-version-and-changelog + gitea: + needs: prepare if: github.server_url != 'https://github.com' - uses: ./.github/workflows/providers/gitea-release.yml - with: - version: ${{ needs.get-version-and-changelog.outputs.version }} - changelog: ${{ needs.get-version-and-changelog.outputs.changelog }} - secrets: inherit \ No newline at end of file + runs-on: gitea-runner + 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 platformio esptool + + - name: Build + run: | + pio run -t buildfs + pio run + + - name: Create full firmware + 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 + 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: | + echo "Creating release for version ${{ needs.prepare.outputs.version }}" + curl -X POST "${GITEA_API_URL}/repos/${GITEA_REPOSITORY}/releases" \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + -d "{ + \"tag_name\": \"${GITHUB_REF#refs/tags/}\", + \"name\": \"Release ${{ needs.prepare.outputs.version }}\", + \"body\": \"${{ needs.prepare.outputs.changelog }}\", + \"draft\": false, + \"prerelease\": false + }" \ No newline at end of file diff --git a/platformio.ini b/platformio.ini index e6c0ec1..74cc0d8 100644 --- a/platformio.ini +++ b/platformio.ini @@ -9,7 +9,7 @@ ; https://docs.platformio.org/page/projectconf.html [common] -version = "1.2.16" +version = "1.2.17" [env:esp32dev] platform = espressif32