Update debugbuild.yml #62
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Debug Build - Floaty | |
| on: | |
| push: | |
| branches: | |
| - "**" | |
| # Add explicit permissions for the workflow | |
| permissions: | |
| contents: write # Required for creating releases | |
| actions: read # Required for downloading artifacts | |
| env: | |
| DEPLOYMENT_API_KEY: ${{ secrets.DEPLOYMENT_API_KEY }} | |
| jobs: | |
| LINUXANDROID: | |
| name: Linux & Android | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install jq for JSON parsing | |
| run: sudo apt-get update && sudo apt-get install -y jq | |
| - name: Setup Flutter | |
| uses: subosito/flutter-action@v2 | |
| with: | |
| flutter-version: "3.29.3" | |
| cache: true | |
| - name: Install Flutter dependencies | |
| run: flutter pub get | |
| - name: Install Linux dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y \ | |
| libgtk-3-dev \ | |
| libayatana-appindicator3-dev \ | |
| libmpv-dev | |
| - name: Install dependencies for AppImage | |
| run: | | |
| sudo apt install -y locate | |
| wget -O appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" | |
| chmod +x appimagetool | |
| sudo mv appimagetool /usr/local/bin/ | |
| - name: Prepare make_config.yaml | |
| run: | | |
| OS=linux | |
| for config_file in $(find "$OS/packaging" -type f -name "make_config_${GITHUB_REF_NAME}.yaml"); do | |
| target_dir=$(dirname "$config_file") | |
| cp "$config_file" "${target_dir}/make_config.yaml" | |
| echo "Copied $config_file → ${target_dir}/make_config.yaml" | |
| done | |
| - name: Install Fastforge | |
| run: dart pub global activate fastforge | |
| - name: Build and release | |
| run: fastforge release --name ${{ github.ref_name }}linux | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: dist-linux-android | |
| path: dist/ | |
| MACOSIOS: | |
| if: github.ref_name == 'release' | |
| name: MacOS & iOS | |
| runs-on: macos-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Setup Flutter | |
| uses: subosito/flutter-action@v2 | |
| with: | |
| flutter-version: "3.29.1" | |
| cache: true | |
| - name: Install Flutter dependencies | |
| run: flutter pub get | |
| - name: Prepare make_config.yaml | |
| run: | | |
| OS=macos | |
| for config_file in $(find "$OS/packaging" -type f -name "make_config_${GITHUB_REF_NAME}.yaml"); do | |
| target_dir=$(dirname "$config_file") | |
| cp "$config_file" "${target_dir}/make_config.yaml" | |
| echo "Copied $config_file → ${target_dir}/make_config.yaml" | |
| done | |
| - name: Install Fastforge | |
| run: dart pub global activate fastforge | |
| - name: Build and release | |
| run: fastforge release --name ${{ github.ref_name }}macos | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: dist-macos-ios | |
| path: dist/ | |
| WINDOWS: | |
| name: Windows | |
| runs-on: windows-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Setup Flutter | |
| uses: subosito/flutter-action@v2 | |
| with: | |
| flutter-version: "3.29.1" | |
| cache: true | |
| - name: Install Flutter dependencies | |
| run: flutter pub get | |
| - name: Prepare make_config.yaml | |
| shell: bash #i hate powershell it can burn in hell | |
| run: | | |
| OS=windows | |
| for config_file in $(find "$OS/packaging" -type f -name "make_config_${GITHUB_REF_NAME}.yaml"); do | |
| target_dir=$(dirname "$config_file") | |
| cp "$config_file" "${target_dir}/make_config.yaml" | |
| echo "Copied $config_file → ${target_dir}/make_config.yaml" | |
| done | |
| - name: Install Fastforge | |
| run: dart pub global activate fastforge | |
| - name: Build and release | |
| run: fastforge release --name ${{ github.ref_name }}windows | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: dist-windows | |
| path: dist/ | |
| DEPLOY: | |
| name: Deploy Release | |
| needs: [LINUXANDROID, WINDOWS, MACOSIOS] | |
| runs-on: ubuntu-latest | |
| if: always() && (needs.LINUXANDROID.result == 'success' || needs.WINDOWS.result == 'success' || needs.MACOSIOS.result == 'success') | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Set timestamp variable | |
| id: timestamp | |
| run: echo "timestamp=$(date +%Y%m%d-%H%M%S)" >> $GITHUB_OUTPUT | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: ./artifacts | |
| - name: Organize build files | |
| run: | | |
| mkdir -p release/{windows,linux,android,macos,ios} | |
| if [ -d "./artifacts/dist-linux-android" ]; then | |
| find ./artifacts/dist-linux-android -name "*.rpm" -exec cp {} release/linux/ \; | |
| find ./artifacts/dist-linux-android -name "*.AppImage" -exec cp {} release/linux/ \; | |
| find ./artifacts/dist-linux-android -name "*.apk" -exec cp {} release/android/ \; | |
| fi | |
| if [ -d "./artifacts/dist-windows" ]; then | |
| find ./artifacts/dist-windows -name "*.exe" -exec cp {} release/windows/ \; | |
| find ./artifacts/dist-windows -name "*.msi" -exec cp {} release/windows/ \; | |
| fi | |
| if [ -d "./artifacts/dist-macos-ios" ]; then | |
| find ./artifacts/dist-macos-ios -name "*.dmg" -exec cp {} release/macos/ \; | |
| find ./artifacts/dist-macos-ios -name "*.pkg" -exec cp {} release/macos/ \; | |
| find ./artifacts/dist-macos-ios -name "*.ipa" -exec cp {} release/ios/ \; | |
| fi | |
| - name: Generate deployment manifest | |
| run: | | |
| VERSION=$(grep '^version:' pubspec.yaml | sed 's/version: //' | tr -d ' ' || echo "1.0.0") | |
| if [[ "${{ github.ref_name }}" == "main" || "${{ github.ref_name }}" == "master" ]]; then | |
| FLAVOR="stable" | |
| elif [[ "${{ github.ref_name }}" == "release" ]]; then | |
| FLAVOR="release" | |
| else | |
| FLAVOR="nightly" | |
| fi | |
| cat > release/manifest.json << EOF | |
| { | |
| "version": "$VERSION", | |
| "flavor": "$FLAVOR", | |
| "platforms": [ | |
| EOF | |
| if ls release/windows/*.exe >/dev/null 2>&1 || ls release/windows/*.msi >/dev/null 2>&1; then | |
| echo ' {' >> release/manifest.json | |
| echo ' "platform": "windows",' >> release/manifest.json | |
| echo ' "files": [' >> release/manifest.json | |
| FIRST=true | |
| for file in release/windows/*; do | |
| if [ -f "$file" ]; then | |
| [ "$FIRST" = false ] && echo ',' >> release/manifest.json | |
| filename=$(basename "$file") | |
| if [[ "$filename" == *.exe ]]; then | |
| echo -n " {\"type\": \".exe Installer\", \"path\": \"windows/$filename\"}" >> release/manifest.json | |
| elif [[ "$filename" == *.msi ]]; then | |
| echo -n " {\"type\": \".msi Installer\", \"path\": \"windows/$filename\"}" >> release/manifest.json | |
| fi | |
| FIRST=false | |
| fi | |
| done | |
| echo '' >> release/manifest.json | |
| echo ' ]' >> release/manifest.json | |
| echo ' },' >> release/manifest.json | |
| fi | |
| if ls release/linux/*.rpm >/dev/null 2>&1 || ls release/linux/*.AppImage >/dev/null 2>&1; then | |
| echo ' {' >> release/manifest.json | |
| echo ' "platform": "linux",' >> release/manifest.json | |
| echo ' "files": [' >> release/manifest.json | |
| FIRST=true | |
| for file in release/linux/*; do | |
| if [ -f "$file" ]; then | |
| [ "$FIRST" = false ] && echo ',' >> release/manifest.json | |
| filename=$(basename "$file") | |
| if [[ "$filename" == *.rpm ]]; then | |
| echo -n " {\"type\": \"RPM\", \"path\": \"linux/$filename\"}" >> release/manifest.json | |
| elif [[ "$filename" == *.AppImage ]]; then | |
| echo -n " {\"type\": \"AppImage\", \"path\": \"linux/$filename\"}" >> release/manifest.json | |
| fi | |
| FIRST=false | |
| fi | |
| done | |
| echo '' >> release/manifest.json | |
| echo ' ]' >> release/manifest.json | |
| echo ' },' >> release/manifest.json | |
| fi | |
| if ls release/android/*.apk >/dev/null 2>&1; then | |
| echo ' {' >> release/manifest.json | |
| echo ' "platform": "android",' >> release/manifest.json | |
| echo ' "files": [' >> release/manifest.json | |
| FIRST=true | |
| for file in release/android/*; do | |
| if [ -f "$file" ]; then | |
| [ "$FIRST" = false ] && echo ',' >> release/manifest.json | |
| filename=$(basename "$file") | |
| echo -n " {\"type\": \"APK\", \"path\": \"android/$filename\"}" >> release/manifest.json | |
| FIRST=false | |
| fi | |
| done | |
| echo '' >> release/manifest.json | |
| echo ' ]' >> release/manifest.json | |
| echo ' },' >> release/manifest.json | |
| fi | |
| if ls release/macos/*.dmg >/dev/null 2>&1 || ls release/macos/*.pkg >/dev/null 2>&1; then | |
| echo ' {' >> release/manifest.json | |
| echo ' "platform": "macos",' >> release/manifest.json | |
| echo ' "files": [' >> release/manifest.json | |
| FIRST=true | |
| for file in release/macos/*; do | |
| if [ -f "$file" ]; then | |
| [ "$FIRST" = false ] && echo ',' >> release/manifest.json | |
| filename=$(basename "$file") | |
| if [[ "$filename" == *.dmg ]]; then | |
| echo -n " {\"type\": \"DMG\", \"path\": \"macos/$filename\"}" >> release/manifest.json | |
| elif [[ "$filename" == *.pkg ]]; then | |
| echo -n " {\"type\": \"PKG\", \"path\": \"macos/$filename\"}" >> release/manifest.json | |
| fi | |
| FIRST=false | |
| fi | |
| done | |
| echo '' >> release/manifest.json | |
| echo ' ]' >> release/manifest.json | |
| echo ' },' >> release/manifest.json | |
| fi | |
| sed -i '$ s/,$//' release/manifest.json | |
| echo ' ]' >> release/manifest.json | |
| echo ' }' >> release/manifest.json | |
| - name: Create deployment package | |
| run: | | |
| PACKAGE_NAME="floaty-release-${{ github.ref_name }}-${{ steps.timestamp.outputs.timestamp }}.zip" | |
| echo "PACKAGE_NAME=$PACKAGE_NAME" >> $GITHUB_ENV | |
| cd release | |
| zip -r "../$PACKAGE_NAME" . | |
| cd .. | |
| - name: Display manifest content | |
| run: cat release/manifest.json | |
| - name: Deploy to API | |
| id: deploy | |
| run: | | |
| echo "Deploying package: $PACKAGE_NAME" | |
| if [ ! -f "$PACKAGE_NAME" ]; then | |
| echo "Error: Package file $PACKAGE_NAME not found!" | |
| ls -la | |
| exit 1 | |
| fi | |
| RESPONSE=$(curl -X POST \ | |
| -H "x-api-key: ${{ env.DEPLOYMENT_API_KEY }}" \ | |
| -F "artifact=@${PACKAGE_NAME}" \ | |
| -w "\n%{http_code}" \ | |
| "https://floaty.fyi/api/deploy" \ | |
| 2>/dev/null) | |
| HTTP_CODE=$(echo "$RESPONSE" | tail -n1) | |
| RESPONSE_BODY=$(echo "$RESPONSE" | head -n -1) | |
| echo "HTTP Response Code: $HTTP_CODE" | |
| echo "Response Body: $RESPONSE_BODY" | |
| if [ "$HTTP_CODE" -eq 200 ]; then | |
| echo "Successfully deployed $PACKAGE_NAME" | |
| echo "Response: $RESPONSE_BODY" | |
| echo "deployment_response=$RESPONSE_BODY" >> $GITHUB_OUTPUT | |
| DEPLOYMENT_ID=$(echo "$RESPONSE_BODY" | jq -r '.deploymentId // empty') | |
| VERSION=$(echo "$RESPONSE_BODY" | jq -r '.version // empty') | |
| FLAVOR=$(echo "$RESPONSE_BODY" | jq -r '.flavor // empty') | |
| echo "deployment_id=$DEPLOYMENT_ID" >> $GITHUB_OUTPUT | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| echo "flavor=$FLAVOR" >> $GITHUB_OUTPUT | |
| echo "Deployment ID: $DEPLOYMENT_ID" | |
| echo "Version: $VERSION" | |
| echo "Flavor: $FLAVOR" | |
| else | |
| echo "Deployment failed with HTTP $HTTP_CODE" | |
| echo "Error: $RESPONSE_BODY" | |
| exit 1 | |
| fi | |
| - name: Create GitHub Release | |
| if: steps.deploy.outputs.deployment_id != '' | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: "${{ steps.deploy.outputs.flavor }}-v${{ steps.deploy.outputs.version }}-${{ steps.deploy.outputs.deployment_id }}" | |
| name: "${{ steps.deploy.outputs.flavor }} v${{ steps.deploy.outputs.version }}" | |
| body: | | |
| ## ${{ steps.deploy.outputs.flavor }} Release v${{ steps.deploy.outputs.version }} | |
| 🔗 **[View Changelogs](https://floaty.fyi/changelogs#${{ steps.deploy.outputs.deployment_id }})** | |
| This release includes builds for: | |
| ${{ needs.LINUXANDROID.result == 'success' && '- 🐧 Linux (RPM, AppImage)' || '' }} | |
| ${{ needs.LINUXANDROID.result == 'success' && '- 🤖 Android (APK)' || '' }} | |
| ${{ needs.WINDOWS.result == 'success' && '- 🪟 Windows (EXE Installer)' || '' }} | |
| ${{ needs.MACOSIOS.result == 'success' && '- 🍎 macOS (DMG, PKG)' || '' }} | |
| ${{ needs.MACOSIOS.result == 'success' && '- 📱 iOS (IPA)' || '' }} | |
| **Deployment ID:** `${{ steps.deploy.outputs.deployment_id }}` | |
| **Branch:** `${{ github.ref_name }}` | |
| **Commit:** `${{ github.sha }}` | |
| draft: false | |
| prerelease: ${{ steps.deploy.outputs.flavor != 'stable' }} | |
| files: | | |
| release/windows/* | |
| release/linux/* | |
| release/android/* | |
| release/macos/* | |
| release/ios/* | |
| release/manifest.json | |
| - name: Upload final package as artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: deployment-package | |
| path: "${{ env.PACKAGE_NAME }}" | |
| retention-days: 30 |