Add Notification: CallMeBot #710
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
| name: Build PR Plugin | |
| on: | |
| pull_request: | |
| paths: | |
| - 'emhttp/**' | |
| - 'etc/**' | |
| - 'sbin/**' | |
| - 'share/**' | |
| - '.github/workflows/pr-plugin-build.yml' | |
| - '.github/scripts/**' | |
| permissions: | |
| contents: read | |
| pull-requests: read | |
| actions: read | |
| jobs: | |
| build-plugin: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Get changed files | |
| id: changed-files | |
| run: | | |
| set -euo pipefail | |
| # Get list of changed files in emhttp, etc, sbin, share using PR SHAs | |
| git diff --name-only "${{ github.event.pull_request.base.sha }}...${{ github.event.pull_request.head.sha }}" | grep -E '^(emhttp|etc|sbin|share)/' > changed_files.txt || true | |
| # Output for debugging | |
| echo "Changed files:" | |
| cat changed_files.txt | |
| # Check if we have any changes | |
| if [ ! -s "changed_files.txt" ]; then | |
| echo "No emhttp files changed" | |
| echo "has_changes=false" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "has_changes=true" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: Generate plugin version | |
| if: steps.changed-files.outputs.has_changes == 'true' | |
| id: version | |
| run: | | |
| # Generate version with proper timestamp format: YYYY.MM.DD.HHMM | |
| VERSION=$(date -u +"%Y.%m.%d.%H%M") | |
| # Also keep PR info for reference | |
| PR_VERSION="pr.${{ github.event.pull_request.number }}.$(git rev-parse --short HEAD)" | |
| # Generate URLs with versioned TXZ to prevent SHA conflicts | |
| S3_BASE_URL="${{ secrets.CLOUDFLARE_PREVIEW_BUCKET_BASE_URL }}/pr-plugins/pr-${{ github.event.pull_request.number }}" | |
| # Define filenames | |
| LOCAL_TXZ_NAME="webgui-pr-${{ github.event.pull_request.number }}.tar.gz" | |
| REMOTE_TXZ_NAME="webgui-pr-${{ github.event.pull_request.number }}-${VERSION}.tar.gz" | |
| PLUGIN_NAME="webgui-pr-${{ github.event.pull_request.number }}.plg" | |
| # TXZ gets unique versioned path to prevent SHA conflicts on updates | |
| TXZ_URL="${S3_BASE_URL}/${REMOTE_TXZ_NAME}" | |
| PLUGIN_URL="${S3_BASE_URL}/${PLUGIN_NAME}" | |
| TXZ_KEY="pr-plugins/pr-${{ github.event.pull_request.number }}/${REMOTE_TXZ_NAME}" | |
| PLUGIN_KEY="pr-plugins/pr-${{ github.event.pull_request.number }}/${PLUGIN_NAME}" | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| echo "pr_version=$PR_VERSION" >> $GITHUB_OUTPUT | |
| echo "local_txz=$LOCAL_TXZ_NAME" >> $GITHUB_OUTPUT | |
| echo "remote_txz=$REMOTE_TXZ_NAME" >> $GITHUB_OUTPUT | |
| echo "plugin_name=$PLUGIN_NAME" >> $GITHUB_OUTPUT | |
| echo "txz_url=$TXZ_URL" >> $GITHUB_OUTPUT | |
| echo "plugin_url=$PLUGIN_URL" >> $GITHUB_OUTPUT | |
| echo "txz_key=$TXZ_KEY" >> $GITHUB_OUTPUT | |
| echo "plugin_key=$PLUGIN_KEY" >> $GITHUB_OUTPUT | |
| echo "Generated version: $VERSION (PR: $PR_VERSION)" | |
| - name: Create plugin package | |
| if: steps.changed-files.outputs.has_changes == 'true' | |
| run: | | |
| # Create build directory | |
| mkdir -p build/usr/local | |
| # Copy changed files preserving directory structure | |
| while IFS= read -r file; do | |
| if [ -f "$file" ]; then | |
| # Create directory structure in build with target mappings | |
| case "$file" in | |
| etc/rc.d/*) | |
| target_dir="build/usr/local/etc/rc.d" | |
| ;; | |
| etc/*) | |
| target_dir="build/${file%/*}" | |
| ;; | |
| sbin/*) | |
| target_dir="build/usr/local/sbin/${file#sbin/}" | |
| target_dir="${target_dir%/*}" | |
| ;; | |
| share/*) | |
| target_dir="build/usr/local/share/${file#share/}" | |
| target_dir="${target_dir%/*}" | |
| ;; | |
| emhttp/*) | |
| target_dir="build/usr/local/${file%/*}" | |
| ;; | |
| *) | |
| echo "Skipping unsupported path: $file" | |
| continue | |
| ;; | |
| esac | |
| mkdir -p "$target_dir" | |
| cp "$file" "$target_dir/" | |
| echo "Added: $file" | |
| fi | |
| done < changed_files.txt | |
| # Generate file list for plugin/tar (relative paths) | |
| find build -type f | sed 's|^build/||' > file_list.txt | |
| echo "File list for plugin:" | |
| cat file_list.txt | |
| # Create tarball - consistent filename for updates | |
| cd build | |
| echo "Creating tarball with contents:" | |
| cat ../file_list.txt | |
| tar -czf ../${{ steps.version.outputs.local_txz }} -T ../file_list.txt | |
| cd .. | |
| # Verify tarball contents | |
| echo "Tarball contents:" | |
| tar -tzf ${{ steps.version.outputs.local_txz }} | |
| - name: Generate plugin file | |
| if: steps.changed-files.outputs.has_changes == 'true' | |
| run: | | |
| # Generate with placeholder URLs - will be updated by upload workflow | |
| bash .github/scripts/generate-pr-plugin.sh \ | |
| "${{ steps.version.outputs.version }}" \ | |
| "${{ github.event.pull_request.number }}" \ | |
| "$(git rev-parse --short HEAD)" \ | |
| "${{ steps.version.outputs.local_txz }}" \ | |
| "${{ steps.version.outputs.remote_txz }}" \ | |
| "PENDING_UPLOAD" \ | |
| "PENDING_UPLOAD" | |
| - name: Save metadata for upload workflow | |
| if: steps.changed-files.outputs.has_changes == 'true' | |
| run: | | |
| cat > pr-metadata.json << EOF | |
| { | |
| "pr_number": ${{ github.event.pull_request.number }}, | |
| "version": "${{ steps.version.outputs.version }}", | |
| "pr_version": "${{ steps.version.outputs.pr_version }}", | |
| "local_txz": "${{ steps.version.outputs.local_txz }}", | |
| "remote_txz": "${{ steps.version.outputs.remote_txz }}", | |
| "plugin_name": "${{ steps.version.outputs.plugin_name }}", | |
| "changed_files": $(cat changed_files.txt | jq -R -s -c 'split("\n") | map(select(length > 0))') | |
| } | |
| EOF | |
| echo "Metadata saved:" | |
| cat pr-metadata.json | |
| - name: Upload artifacts to GitHub | |
| if: steps.changed-files.outputs.has_changes == 'true' | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: webgui-pr-plugin-${{ github.event.pull_request.number }} | |
| path: | | |
| webgui-pr-*.plg | |
| webgui-pr-*.tar.gz | |
| pr-metadata.json | |
| changed_files.txt | |
| retention-days: 30 | |