diff --git a/.github/workflows/providers/gitea-release.yml b/.github/workflows/providers/gitea-release.yml new file mode 100644 index 0000000..a68fbda --- /dev/null +++ b/.github/workflows/providers/gitea-release.yml @@ -0,0 +1,102 @@ +name: Gitea Release + +on: + push: + tags: + - 'v*' + +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 PlatformIO + run: | + python -m pip install --upgrade pip + pip install --upgrade platformio + + - name: Build Firmware + run: | + pio run -t buildfs # Build SPIFFS + pio run # Build firmware + + - name: Install esptool + run: | + pip install esptool + + - 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: Get version from tag + id: get_version + run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT + + - name: Read CHANGELOG.md + id: changelog + run: | + CHANGELOG=$(awk "/## \\[${{ steps.get_version.outputs.VERSION }}\\]/{p=1;print;next} /## \\[/{p=0} p" CHANGELOG.md) + echo "CHANGES<> $GITHUB_OUTPUT + echo "$CHANGELOG" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + + - name: Create Release + env: + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} + GITEA_API_URL: ${{ secrets.GITEA_API_URL }} + run: | + # Create release using Gitea API + RESPONSE=$(curl -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + -H "accept: application/json" \ + ${GITEA_API_URL}/repos/${GITHUB_REPOSITORY}/releases \ + -d '{ + "tag_name": "${{ github.ref_name }}", + "name": "Release ${{ steps.get_version.outputs.VERSION }}", + "body": "${{ steps.changelog.outputs.CHANGES }}", + "draft": false, + "prerelease": false + }') + + # Extract release ID from response + RELEASE_ID=$(echo $RESPONSE | jq -r .id) + + # Upload full firmware + curl -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/octet-stream" \ + ${GITEA_API_URL}/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets?name=filaman_full.bin \ + --data-binary @.pio/build/esp32dev/filaman_full.bin + + # Upload OTA firmware + curl -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/octet-stream" \ + ${GITEA_API_URL}/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets?name=filaman_ota.bin \ + --data-binary @.pio/build/esp32dev/filaman_ota.bin \ No newline at end of file diff --git a/.github/workflows/providers/github-release.yml b/.github/workflows/providers/github-release.yml new file mode 100644 index 0000000..5f15625 --- /dev/null +++ b/.github/workflows/providers/github-release.yml @@ -0,0 +1,85 @@ +name: GitHub Release + +on: + push: + tags: + - 'v*' + +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 # Required for creating releases at job level + 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 + + - name: Build Firmware + run: | + pio run -t buildfs # Build SPIFFS + pio run # Build firmware + + - name: Install esptool + run: | + pip install esptool + + - 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: | + # Use PlatformIO to create a proper OTA image + cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/filaman_ota.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: | + CHANGELOG=$(awk "/## \\[${{ steps.get_version.outputs.VERSION }}\\]/{p=1;print;next} /## \\[/{p=0} p" CHANGELOG.md) + echo "CHANGES<> $GITHUB_OUTPUT + echo "$CHANGELOG" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + + - name: Install and Configure GitHub CLI + run: | + curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \ + && sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \ + && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \ + && sudo apt update \ + && sudo apt install gh -y + + - name: Create Release with GitHub CLI + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh release create "${{ github.ref_name }}" \ + --title "Release ${{ steps.get_version.outputs.VERSION }}" \ + --notes "${{ steps.changelog.outputs.CHANGES }}" \ + ".pio/build/esp32dev/filaman_full.bin#filaman_full.bin" \ + ".pio/build/esp32dev/filaman_ota.bin#filaman_ota.bin" \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index cf97d4d..f61c07b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,85 +1,32 @@ -name: Create Release +name: Release on: push: tags: - 'v*' -permissions: - contents: write # Required for creating releases - issues: read # Required for reading changelog - pull-requests: read # Required for reading changelog - jobs: - build: + detect-and-run: runs-on: ubuntu-latest - permissions: - contents: write # Required for creating releases at job level 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 - - - name: Build Firmware - run: | - pio run -t buildfs # Build SPIFFS - pio run # Build firmware - - - name: Install esptool - run: | - pip install esptool - - - 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: Checkout code + uses: actions/checkout@v4 - - name: Prepare OTA firmware - run: | - # Use PlatformIO to create a proper OTA image - cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/filaman_ota.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: | - CHANGELOG=$(awk "/## \\[${{ steps.get_version.outputs.VERSION }}\\]/{p=1;print;next} /## \\[/{p=0} p" CHANGELOG.md) - echo "CHANGES<> $GITHUB_OUTPUT - echo "$CHANGELOG" >> $GITHUB_OUTPUT - echo "EOF" >> $GITHUB_OUTPUT - - - name: Install and Configure GitHub CLI - run: | - curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \ - && sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \ - && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \ - && sudo apt update \ - && sudo apt install gh -y - - - name: Create Release with GitHub CLI - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - gh release create "${{ github.ref_name }}" \ - --title "Release ${{ steps.get_version.outputs.VERSION }}" \ - --notes "${{ steps.changelog.outputs.CHANGES }}" \ - ".pio/build/esp32dev/filaman_full.bin#filaman_full.bin" \ - ".pio/build/esp32dev/filaman_ota.bin#filaman_ota.bin" \ No newline at end of file + - name: Determine hosting platform + id: platform + run: | + if [[ "$GITHUB_SERVER_URL" == "https://github.com" ]]; then + echo "platform=github" >> $GITHUB_OUTPUT + elif [[ "$CI_SERVER_URL" == *"gitlab"* ]]; then + echo "platform=gitlab" >> $GITHUB_OUTPUT + else + echo "platform=gitea" >> $GITHUB_OUTPUT + fi + + - name: Run GitHub Release + if: steps.platform.outputs.platform == 'github' + uses: ./.github/workflows/providers/github-release.yml + + - name: Run Gitea Release + if: steps.platform.outputs.platform == 'gitea' + uses: ./.github/workflows/providers/gitea-release.yml \ No newline at end of file