Merge pull request #1 from lightspeedwp/copilot/scaffold-single-block… #7
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 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: npm run lint:js | ||
| - name: Lint CSS | ||
| run: npm run lint:css | ||
| - name: Lint PHP | ||
| run: composer run lint | ||
| - name: Run JavaScript tests | ||
| run: npm run test:unit | ||
| - name: Run PHP tests | ||
| run: composer run test | ||
| - name: Build plugin | ||
| run: npm run build | ||
| - 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/ | ||
| 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/ | ||
| deploy: | ||
| name: Deploy Release | ||
| runs-on: ubuntu-latest | ||
| needs: [lint-and-test, e2e-tests] | ||
| 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 | ||