Skip to content

Refactor plugin classes and update namespaces #28

Refactor plugin classes and update namespaces

Refactor plugin classes and update namespaces #28

Workflow file for this run

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