Skip to content

v1.1.0-pre: Auto-Connect MQTT, M5GO/M5StickC firmware, Setup --kiosk/… #21

v1.1.0-pre: Auto-Connect MQTT, M5GO/M5StickC firmware, Setup --kiosk/…

v1.1.0-pre: Auto-Connect MQTT, M5GO/M5StickC firmware, Setup --kiosk/… #21

Workflow file for this run

# =============================================================================
# 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 "========================================"