Refactor plugin classes and update namespaces #28
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: CI/CD Pipeline | |
| on: | |
| push: | |
| branches: [ main, develop ] | |
| pull_request: | |
| branches: [ main, develop ] | |
| release: | |
| types: [ published ] | |
| permissions: | |
| contents: read | |
| jobs: | |
| lint-and-test: | |
| name: Lint and Test | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| strategy: | |
| matrix: | |
| node-version: [18.x, 20.x] | |
| php-version: [8.0, 8.1, 8.2] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup logging | |
| run: | | |
| mkdir -p logs | |
| TIMESTAMP=$(date -Iseconds | sed 's/:/-/g') | |
| echo "[$(date -Iseconds)] [INFO] CI/CD workflow starting" >> logs/workflow-ci-cd-${TIMESTAMP}.log | |
| echo "LOG_FILE=logs/workflow-ci-cd-${TIMESTAMP}.log" >> $GITHUB_ENV | |
| - name: Setup Node.js ${{ matrix.node-version }} | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| cache: 'npm' | |
| - name: Setup PHP ${{ matrix.php-version }} | |
| uses: shivammathur/setup-php@v2 | |
| with: | |
| php-version: ${{ matrix.php-version }} | |
| extensions: mysql, zip | |
| tools: composer | |
| - name: Install Node.js dependencies | |
| run: npm ci | |
| - name: Install Composer dependencies | |
| run: composer install --prefer-dist --no-progress --no-interaction | |
| - name: Lint JavaScript | |
| run: | | |
| echo "[$(date -Iseconds)] [INFO] Running JavaScript lint" >> $LOG_FILE | |
| npm run lint:js 2>&1 | tee -a $LOG_FILE | |
| - name: Lint CSS | |
| run: | | |
| echo "[$(date -Iseconds)] [INFO] Running CSS lint" >> $LOG_FILE | |
| npm run lint:css 2>&1 | tee -a $LOG_FILE | |
| - name: Lint PHP | |
| run: | | |
| echo "[$(date -Iseconds)] [INFO] Running PHP lint" >> $LOG_FILE | |
| composer run lint 2>&1 | tee -a $LOG_FILE | |
| - name: Run JavaScript tests | |
| run: | | |
| echo "[$(date -Iseconds)] [INFO] Running JavaScript tests" >> $LOG_FILE | |
| npm run test:unit 2>&1 | tee -a $LOG_FILE | |
| - name: Run PHP tests | |
| run: | | |
| echo "[$(date -Iseconds)] [INFO] Running PHP tests" >> $LOG_FILE | |
| composer run test 2>&1 | tee -a $LOG_FILE | |
| - name: Build plugin | |
| run: | | |
| echo "[$(date -Iseconds)] [INFO] Building plugin" >> $LOG_FILE | |
| npm run build 2>&1 | tee -a $LOG_FILE | |
| - name: Upload logs | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: workflow-logs-node-${{ matrix.node-version }}-php-${{ matrix.php-version }} | |
| path: logs/ | |
| retention-days: 7 | |
| - name: Archive build artifacts | |
| if: matrix.node-version == '20.x' && matrix.php-version == '8.1' | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: build-files | |
| path: build/ | |
| security-audit: | |
| name: Security Audit | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20.x' | |
| cache: 'npm' | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Run npm audit | |
| run: | | |
| echo "🔒 Running security audit..." | |
| npm audit --audit-level=moderate --production || { | |
| echo "❌ Security vulnerabilities detected." | |
| echo "Run 'npm audit' locally for details." | |
| exit 1 | |
| } | |
| - name: Check for outdated dependencies | |
| run: | | |
| echo "📦 Checking for outdated dependencies..." | |
| npm outdated || true | |
| e2e-tests: | |
| name: E2E Tests | |
| runs-on: ubuntu-latest | |
| needs: lint-and-test | |
| permissions: | |
| contents: read | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20.x' | |
| cache: 'npm' | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Install Playwright browsers | |
| run: npx playwright install --with-deps | |
| - name: Build plugin | |
| run: npm run build | |
| - name: Start WordPress environment | |
| run: npm run env:start | |
| - name: Run E2E tests | |
| run: npm run test:e2e | |
| - name: Upload E2E test results | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: e2e-test-results | |
| path: test-results/ | |
| - name: Upload E2E logs | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: e2e-logs | |
| path: logs/ | |
| retention-days: 7 | |
| deploy: | |
| name: Deploy Release | |
| runs-on: ubuntu-latest | |
| needs: [lint-and-test, e2e-tests, security-audit] | |
| if: github.event_name == 'release' | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20.x' | |
| cache: 'npm' | |
| - name: Setup PHP | |
| uses: shivammathur/setup-php@v2 | |
| with: | |
| php-version: '8.1' | |
| tools: composer | |
| - name: Install dependencies | |
| run: | | |
| npm ci | |
| composer install --no-dev --optimize-autoloader | |
| - name: Build plugin | |
| run: npm run build | |
| - name: Create plugin ZIP | |
| run: npm run plugin-zip | |
| - name: Upload ZIP to release | |
| uses: actions/upload-release-asset@v1 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| upload_url: ${{ github.event.release.upload_url }} | |
| asset_path: "./{{slug}}.zip" | |
| asset_name: "{{slug}}.zip" | |
| asset_content_type: application/zip |