feat: add GitHub and Gitea release workflows; streamline firmware release process
This commit is contained in:
		
							
								
								
									
										102
									
								
								.github/workflows/providers/gitea-release.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								.github/workflows/providers/gitea-release.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -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<<EOF" >> $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
 | 
			
		||||
							
								
								
									
										85
									
								
								.github/workflows/providers/github-release.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								.github/workflows/providers/github-release.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -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<<EOF" >> $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"
 | 
			
		||||
							
								
								
									
										97
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										97
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							@@ -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<<EOF" >> $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"
 | 
			
		||||
      - 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
 | 
			
		||||
		Reference in New Issue
	
	Block a user