Skip to content

New Workflow to Validate Plugins on PR #3

New Workflow to Validate Plugins on PR

New Workflow to Validate Plugins on PR #3

Workflow file for this run

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