New Workflow to Validate Plugins on PR #3
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: Validate & Deploy Plugins | |
| on: | |
| pull_request: | |
| jobs: | |
| validate-and-deploy: | |
| 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: Install & Configure SquaredUp CLI | |
| if: steps.detect.outputs.plugins_modified == 'true' | |
| 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 |