Sync Device SVGs #273
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: Sync Device SVGs | |
| on: | |
| schedule: | |
| # Run nightly at 2 AM UTC | |
| - cron: '0 2 * * *' | |
| workflow_dispatch: | |
| # Allow manual triggering | |
| jobs: | |
| sync-device-svgs: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '18' | |
| - name: Install dependencies | |
| run: | | |
| npm install -g svgo | |
| - name: Download and process SVGs | |
| run: | | |
| #!/bin/bash | |
| set -e | |
| # Create temporary directory | |
| mkdir -p temp_svgs | |
| cd temp_svgs | |
| # Clone web-flasher repo (shallow clone for speed) | |
| git clone --depth 1 https://github.com/meshtastic/web-flasher.git | |
| # Navigate to SVG directory | |
| cd web-flasher/public/img/devices | |
| # Create output directory | |
| mkdir -p ../../../../processed_svgs | |
| # Process each SVG file | |
| for svg_file in *.svg; do | |
| if [ -f "$svg_file" ]; then | |
| # Get filename without extension | |
| filename=$(basename "$svg_file" .svg) | |
| # Optimize SVG | |
| svgo "$svg_file" --output "../../../../processed_svgs/${filename}.svg" | |
| echo "Processed: $filename" | |
| fi | |
| done | |
| cd ../../../../ | |
| ls -la processed_svgs/ | |
| - name: Update Xcode Assets | |
| run: | | |
| #!/bin/bash | |
| set -e | |
| ASSETS_DIR="Meshtastic/Assets.xcassets" | |
| # Ensure assets directory exists | |
| mkdir -p "$ASSETS_DIR" | |
| # Process each SVG | |
| for svg_file in processed_svgs/*.svg; do | |
| if [ -f "$svg_file" ]; then | |
| # Get filename without extension | |
| filename=$(basename "$svg_file" .svg) | |
| # Create imageset directory | |
| imageset_dir="${ASSETS_DIR}/${filename}.imageset" | |
| mkdir -p "$imageset_dir" | |
| # Copy SVG to imageset | |
| cp "$svg_file" "${imageset_dir}/${filename}.svg" | |
| # Create Contents.json for the imageset | |
| cat > "${imageset_dir}/Contents.json" << EOF | |
| { | |
| "images" : [ | |
| { | |
| "filename" : "${filename}.svg", | |
| "idiom" : "universal" | |
| } | |
| ], | |
| "info" : { | |
| "author" : "xcode", | |
| "version" : 1 | |
| }, | |
| "properties" : { | |
| "preserves-vector-representation" : true | |
| } | |
| } | |
| EOF | |
| echo "Created imageset: ${filename}" | |
| fi | |
| done | |
| - name: Check for changes | |
| id: check_changes | |
| run: | | |
| if git diff --quiet; then | |
| echo "has_changes=false" >> $GITHUB_OUTPUT | |
| else | |
| echo "has_changes=true" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Commit and push changes | |
| if: steps.check_changes.outputs.has_changes == 'true' | |
| run: | | |
| git config --local user.email "action@github.com" | |
| git config --local user.name "GitHub Action" | |
| git add Meshtastic/Assets.xcassets/ | |
| git commit -m "🤖 Sync device SVGs from web-flasher repo | |
| - Updated device images from meshtastic/web-flasher | |
| - Automatically synced on $(date -u) | |
| - Source: https://github.com/meshtastic/web-flasher/tree/main/public/img/devices" | |
| git push | |
| - name: Create PR (alternative to direct push) | |
| if: steps.check_changes.outputs.has_changes == 'true' && false # Set to true if you prefer PRs | |
| uses: peter-evans/create-pull-request@v5 | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| commit-message: "🤖 Sync device SVGs from web-flasher repo" | |
| title: "Sync device SVGs from web-flasher" | |
| body: | | |
| This PR automatically syncs device SVG images from the [meshtastic/web-flasher](https://github.com/meshtastic/web-flasher) repository. | |
| **Changes:** | |
| - Updated device images from web-flasher repo | |
| - Source: https://github.com/meshtastic/web-flasher/tree/main/public/img/devices | |
| - Automatically generated on $(date -u) | |
| The SVGs have been optimized and converted to Xcode asset format. | |
| branch: sync-device-svgs | |
| delete-branch: true | |
| - name: Cleanup | |
| if: always() | |
| run: | | |
| rm -rf temp_svgs processed_svgs | |
| - name: Summary | |
| run: | | |
| if [ "${{ steps.check_changes.outputs.has_changes }}" == "true" ]; then | |
| echo "✅ Device SVGs updated successfully" | |
| else | |
| echo "ℹ️ No changes detected - SVGs are up to date" | |
| fi |