v1.1.0-pre: Auto-Connect MQTT, M5GO/M5StickC firmware, Setup --kiosk/… #21
Workflow file for this run
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
| # ============================================================================= | |
| # SIDEKICK Release Workflow | |
| # ============================================================================= | |
| # Baut das Projekt automatisch und erstellt ein Release wenn ein Tag gepusht wird. | |
| # | |
| # Verwendung: | |
| # git tag v1.0.0 | |
| # git push origin v1.0.0 | |
| # | |
| # Das erstellt automatisch ein Release mit der gebauten Webapp als ZIP. | |
| # ============================================================================= | |
| name: Build and Release | |
| on: | |
| push: | |
| tags: | |
| - 'v*' # Triggered bei Tags wie v1.0.0, v1.2.3, etc. | |
| # Erlaubt manuelles Triggern für Tests | |
| workflow_dispatch: | |
| jobs: | |
| build: | |
| name: Build SIDEKICK | |
| runs-on: ubuntu-latest | |
| steps: | |
| # 1. Code auschecken | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| # 2. Node.js einrichten | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '18' | |
| # Kein Caching, da package-lock.json nicht im Repo ist | |
| # 3. Scratch-VM und Scratch-GUI klonen (wie 0-setup.sh) | |
| - name: Clone Scratch repositories | |
| env: | |
| HUSKY: '0' # Disable husky hooks during setup | |
| run: | | |
| echo "Cloning scratch-vm..." | |
| git clone --depth 1 https://github.com/scratchfoundation/scratch-vm.git | |
| echo "Cloning scratch-gui..." | |
| git clone --depth 1 https://github.com/scratchfoundation/scratch-gui.git | |
| # 4. Extensions in scratch-vm kopieren | |
| - name: Copy extensions to scratch-vm | |
| run: | | |
| mkdir -p scratch-vm/src/extensions/scratch3_sidekickmqtt | |
| mkdir -p scratch-vm/src/extensions/scratch3_sidekick | |
| cp -r sidekick-scratch-mqtt-extension/* scratch-vm/src/extensions/scratch3_sidekickmqtt/ | |
| cp -r sidekick-scratch-extension/* scratch-vm/src/extensions/scratch3_sidekick/ | |
| # 5. Scratch-VM Setup und Build | |
| - name: Setup and Build Scratch-VM | |
| working-directory: scratch-vm | |
| env: | |
| NODE_OPTIONS: '--openssl-legacy-provider' | |
| HUSKY: '0' | |
| run: | | |
| npm install | |
| # Skip docs generation (jsdoc has issues), only run webpack | |
| ./node_modules/.bin/webpack --progress | |
| # 6. Patches anwenden (Extension Manager + Player + Icons) | |
| - name: Apply patches | |
| run: | | |
| # Extension Manager patchen (registriert die SIDEKICK Extensions) | |
| cp patches/extension-manager.js scratch-vm/src/extension-support/extension-manager.js | |
| # Extension Icons kopieren | |
| cp -r patches/extensions/sidekick scratch-gui/src/lib/libraries/extensions/ | |
| cp -r patches/extensions/sidekickmqtt scratch-gui/src/lib/libraries/extensions/ | |
| # index.jsx patchen (Extension-Bibliothek UI) | |
| cp patches/index.jsx scratch-gui/src/lib/libraries/extensions/index.jsx | |
| # Player.jsx patchen (für Kiosk/Fullscreen) | |
| cp patches/player.jsx scratch-gui/src/playground/player.jsx | |
| # 7. Scratch-VM neu bauen (nach Patches) | |
| - name: Rebuild Scratch-VM after patches | |
| working-directory: scratch-vm | |
| env: | |
| NODE_OPTIONS: '--openssl-legacy-provider' | |
| HUSKY: '0' | |
| run: | | |
| ./node_modules/.bin/webpack --progress | |
| # 8. Scratch-GUI Setup und Build | |
| - name: Setup and Build Scratch-GUI | |
| working-directory: scratch-gui | |
| env: | |
| NODE_OPTIONS: '--openssl-legacy-provider' | |
| HUSKY: '0' | |
| run: | | |
| npm install | |
| npm link ../scratch-vm | |
| npm run build | |
| # 9. Release-Paket zusammenstellen | |
| - name: Prepare release package | |
| run: | | |
| mkdir -p release/sidekick | |
| # Webapp (gebaute Scratch-GUI) | |
| cp -r scratch-gui/build/* release/sidekick/ | |
| # Third-party libraries | |
| cp -r sidekick-thirdparty-libraries release/sidekick/ | |
| # Kiosk-Dateien und Logo | |
| cp src/kiosk.html release/sidekick/ | |
| cp src/dashboard-qr.png release/sidekick/ | |
| cp src/sidekick-logo.svg release/sidekick/ | |
| # Videos und Projects Ordner anlegen | |
| mkdir -p release/sidekick/videos | |
| mkdir -p release/sidekick/projects | |
| echo "[]" > release/sidekick/videos/video-list.json | |
| echo "[]" > release/sidekick/projects/project-list.json | |
| # Python-Skripte | |
| mkdir -p release/python | |
| cp RPi/python/*.py release/python/ | |
| # Setup-Skript (unified install/update) | |
| mkdir -p release/scripts | |
| cp RPi/sidekick-setup.sh release/scripts/ | |
| chmod +x release/scripts/*.sh | |
| # Version info | |
| echo "${{ github.ref_name }}" > release/VERSION | |
| # ZIP erstellen | |
| cd release | |
| zip -r ../sidekick-${{ github.ref_name }}.zip . | |
| # 9. Release erstellen (nur bei Tag-Push, nicht bei manuellem Trigger) | |
| - name: Create Release | |
| if: startsWith(github.ref, 'refs/tags/') | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| files: | | |
| sidekick-${{ github.ref_name }}.zip | |
| RPi/sidekick-setup.sh | |
| generate_release_notes: true | |
| draft: false | |
| # Pre-Release wenn 'test', 'beta', 'alpha' oder 'dev' im Tag-Namen | |
| prerelease: ${{ contains(github.ref_name, 'test') || contains(github.ref_name, 'beta') || contains(github.ref_name, 'alpha') || contains(github.ref_name, 'dev') }} | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| # 10. Artefakt auch als Download verfügbar machen (für Tests) | |
| - name: Upload build artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: sidekick-build | |
| path: release/ | |
| retention-days: 7 | |
| # 11. Build Summary | |
| - name: Build Summary | |
| run: | | |
| echo "========================================" | |
| echo "✅ SIDEKICK Build erfolgreich!" | |
| echo "========================================" | |
| if [[ "${{ github.ref }}" == refs/tags/* ]]; then | |
| echo "📦 Release erstellt: ${{ github.ref_name }}" | |
| echo "🔗 Download verfügbar unter GitHub Releases" | |
| else | |
| echo "🔧 Test-Build (manueller Trigger)" | |
| echo "ℹ️ Kein Release erstellt - nur zum Testen" | |
| echo "💡 Für echtes Release: git tag v1.x.x && git push origin v1.x.x" | |
| fi | |
| echo "========================================" |