fix(docker): filter ghost containers from WebGUI #716
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/**' | |
| - '.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 directory using PR SHAs | |
| git diff --name-only "${{ github.event.pull_request.base.sha }}...${{ github.event.pull_request.head.sha }}" | grep '^emhttp/' > 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 | |
| dir=$(dirname "$file") | |
| mkdir -p "build/usr/local/$dir" | |
| cp "$file" "build/usr/local/$dir/" | |
| echo "Added: $file" | |
| fi | |
| done < changed_files.txt | |
| # Create tarball - consistent filename for updates | |
| cd build | |
| echo "Creating tarball with contents:" | |
| find usr/ -type f | |
| tar -czf ../${{ steps.version.outputs.local_txz }} usr/ | |
| cd .. | |
| # Generate file list for plugin | |
| find build/usr/local/emhttp -type f | sed 's|^build||' > file_list.txt | |
| echo "File list for plugin:" | |
| cat file_list.txt | |
| # 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 | |