New Workflow to Validate Plugins on PR #1
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: PR Run | |
| on: | |
| pull_request: | |
| jobs: | |
| plugin-metadata: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| - name: Detect modified plugins | |
| id: detect | |
| run: | | |
| echo "Scanning for modified plugins against origin/main..." | |
| changed_files=$(git diff --name-only origin/main... -- ./plugins) | |
| plugin_paths=$(echo "$changed_files" | grep -oP 'plugins/[^/]+/v[^/]+' | sort -u) | |
| if [ -z "$plugin_paths" ]; then | |
| echo "No plugins were modified in this PR." | |
| echo "plugins_modified=false" >> $GITHUB_OUTPUT | |
| else | |
| echo "Found modified plugin(s):" | |
| echo "$plugin_paths" | |
| echo "plugins_modified=true" >> $GITHUB_OUTPUT | |
| echo "plugin_paths<<EOF" >> $GITHUB_OUTPUT | |
| echo "$plugin_paths" >> $GITHUB_OUTPUT | |
| echo "EOF" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Show metadata.json for modified plugins | |
| if: steps.detect.outputs.plugins_modified == 'true' | |
| run: | | |
| while IFS= read -r plugin_path; do | |
| metadata_file="${plugin_path}/metadata.json" | |
| if [ -f "$metadata_file" ]; then | |
| echo "--- Metadata for ${plugin_path} ---" | |
| cat "$metadata_file" | |
| echo "" | |
| else | |
| echo "Warning: No metadata.json found at ${metadata_file}" | |
| fi | |
| done <<< "${{ steps.detect.outputs.plugin_paths }}" | |
| - name: Install & Configure SquaredUp CLI | |
| run: | | |
| echo "Installing SquaredUp CLI..." | |
| npm install -g @squaredup/cli | |
| echo "Configuring SquaredUp CLI with API key..." | |
| squaredup login --apiKey ${{ secrets.SQUAREDUP_API_KEY }} | |
| - name: Validate modified plugins | |
| id: validate | |
| if: steps.detect.outputs.plugins_modified == 'true' | |
| run: | | |
| validation_failed=false | |
| while IFS= read -r plugin_path; do | |
| echo "Validating ${plugin_path}..." | |
| result=$(squaredup validate "${plugin_path}" --json) | |
| valid=$(echo "$result" | jq -r '.valid') | |
| if [ "$valid" = "true" ]; then | |
| plugin_name=$(echo "$result" | jq -r '.pluginName') | |
| echo "[PASS] ${plugin_name} passed validation" | |
| echo "$result" | jq '.summary' | |
| else | |
| echo "[FAIL] Validation failed for ${plugin_path}" | |
| echo "$result" | jq -r '.errors[] | " - [\(.file)] \(.message) (path: \(.path | join(".")))"' | |
| validation_failed=true | |
| fi | |
| echo "" | |
| done <<< "${{ steps.detect.outputs.plugin_paths }}" | |
| if [ "$validation_failed" = "true" ]; then | |
| echo "One or more plugins failed validation." | |
| exit 1 | |
| fi | |
| - name: Deploy modified plugins | |
| id: deploy | |
| if: steps.detect.outputs.plugins_modified == 'true' | |
| run: | | |
| while IFS= read -r plugin_path; do | |
| echo "Deploying ${plugin_path}..." | |
| squaredup deploy "${plugin_path}" --suffix "-${{ github.event.pull_request.number }}" --force | |
| echo "Deployed ${plugin_path} successfully." | |
| echo "" | |
| done <<< "${{ steps.detect.outputs.plugin_paths }}" | |
| - name: Summary | |
| if: always() | |
| run: | | |
| echo "## 🧩 Plugin PR Summary" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| if [ "${{ steps.detect.outputs.plugins_modified }}" != "true" ]; then | |
| echo "ℹ️ No plugins were modified in this PR." >> $GITHUB_STEP_SUMMARY | |
| exit 0 | |
| fi | |
| echo "### 📦 Modified Plugins" >> $GITHUB_STEP_SUMMARY | |
| while IFS= read -r plugin_path; do | |
| echo "- \`${plugin_path}\`" >> $GITHUB_STEP_SUMMARY | |
| done <<< "${{ steps.detect.outputs.plugin_paths }}" | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### 📋 Results" >> $GITHUB_STEP_SUMMARY | |
| echo "| Step | Status |" >> $GITHUB_STEP_SUMMARY | |
| echo "|------|--------|" >> $GITHUB_STEP_SUMMARY | |
| validate_conclusion="${{ steps.validate.conclusion }}" | |
| deploy_conclusion="${{ steps.deploy.conclusion }}" | |
| [ "$validate_conclusion" = "success" ] && v_status="✅ Passed" || v_status="❌ Failed" | |
| [ "$deploy_conclusion" = "success" ] && d_status="🚀 Deployed" || d_status="⏭️ Skipped" | |
| echo "| Validation | ${v_status} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Deployment | ${d_status} |" >> $GITHUB_STEP_SUMMARY |