name: PR Validation - Test and Build
on:
pull_request:
branches:
- master
- main
paths-ignore:
- '*.md'
- '.vscode/**'
- '.idea/**'
concurrency:
group: pr-validation-${{ github.ref }}
cancel-in-progress: true
jobs:
validate:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: lts/*
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 'latest'
run_install: false
- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_OUTPUT
- name: Cache dependencies
uses: actions/cache@v4
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-
- name: Install Dependencies
run: pnpm install
- name: Lint Code
run: pnpm exec eslint ./src --max-warnings 0
continue-on-error: true
- name: Run Tests
run: pnpm run test
- name: Build Plugins
run: pnpm run build
- name: Upload Build Artifacts
if: always()
uses: actions/upload-artifact@v5
with:
name: build-artifacts
path: dist/
retention-days: 5
- name: Comment PR with Results
if: failure()
uses: actions/github-script@v7
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '❌ PR validation failed. Please check the workflow logs for details.'
})
- name: Comment PR with Success
if: success()
uses: actions/github-script@v7
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '✅ PR validation passed successfully!'
})