name: Validate API Project on: pull_request: branches: [main, develop] push: branches: [main, develop] workflow_dispatch: jobs: validate: name: Validate API Project runs-on: ubuntu-latest steps: - name: Checkout project uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - name: Checkout MokoStandards uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 with: repository: mokoshalb/MokoStandards path: .mokostandards ref: main - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.1' extensions: mbstring, json, fileinfo - name: Install MokoStandards dependencies working-directory: .mokostandards run: composer install --prefer-dist --no-progress - name: Run API validation id: validate run: | php .mokostandards/api/plugin_validate.php \ --project-path . \ --project-type api \ --json > validation-results.json cat validation-results.json if jq -e '.valid == false' validation-results.json > /dev/null; then echo "::error::Project validation failed" exit 1 fi - name: Run health check id: health run: | php .mokostandards/api/plugin_health_check.php \ --project-path . \ --project-type api \ --json > health-results.json cat health-results.json SCORE=$(jq -r '.score' health-results.json) echo "Health Score: $SCORE/100" - name: Collect metrics id: metrics run: | php .mokostandards/api/plugin_metrics.php \ --project-path . \ --project-type api \ --json > metrics-results.json cat metrics-results.json - name: Check release readiness id: readiness run: | php .mokostandards/api/plugin_readiness.php \ --project-path . \ --project-type api \ --json > readiness-results.json cat readiness-results.json - name: Check OpenAPI/Swagger spec continue-on-error: true run: | if [ -f openapi.yaml ] || [ -f swagger.yaml ]; then echo "Found API specification" # Install validator npm install -g swagger-cli swagger-cli validate openapi.yaml || swagger-cli validate swagger.yaml || true fi - name: Upload validation artifacts if: always() uses: actions/upload-artifact@v4 with: name: api-validation-results path: | validation-results.json health-results.json metrics-results.json readiness-results.json retention-days: 30