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: PR Test and Validation | |
| on: | |
| pull_request: | |
| branches: [ main ] | |
| types: [opened, synchronize, reopened] | |
| jobs: | |
| test: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| node-version: [18.x, 20.x, 22.x] | |
| 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: Install dependencies | |
| run: npm ci | |
| - name: Build project | |
| run: npm run build | |
| - name: Run tests | |
| run: npm test | |
| env: | |
| GITLAB_API_URL: ${{ secrets.GITLAB_API_URL }} | |
| GITLAB_TOKEN: ${{ secrets.GITLAB_TOKEN_TEST }} | |
| - name: Type check | |
| run: npx tsc --noEmit | |
| - name: Lint check | |
| run: npm run lint || echo "No lint script found" | |
| - name: Check package size | |
| run: | | |
| npm pack --dry-run | |
| npm pack --dry-run --json | jq '.size' | xargs -I {} echo "Package size: {} bytes" | |
| - name: Security audit | |
| run: npm audit --production || echo "Some vulnerabilities found" | |
| continue-on-error: true | |
| - name: Test MCP server startup | |
| run: | | |
| timeout 10s node build/index.js || EXIT_CODE=$? | |
| if [ $EXIT_CODE -eq 124 ]; then | |
| echo "✅ Server started successfully (timeout expected for long-running process)" | |
| else | |
| echo "❌ Server failed to start" | |
| exit 1 | |
| fi | |
| env: | |
| GITLAB_API_URL: ${{ secrets.GITLAB_API_URL }} | |
| GITLAB_TOKEN: ${{ secrets.GITLAB_TOKEN_TEST }} | |
| integration-test: | |
| runs-on: ubuntu-latest | |
| needs: test | |
| if: github.event.pull_request.draft == false | |
| 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: Build project | |
| run: npm run build | |
| - name: Run integration tests | |
| if: ${{ secrets.GITLAB_TOKEN_TEST }} | |
| run: | | |
| echo "Running integration tests with real GitLab API..." | |
| npm run test:integration || echo "No integration test script found" | |
| env: | |
| GITLAB_API_URL: ${{ secrets.GITLAB_API_URL }} | |
| GITLAB_TOKEN: ${{ secrets.GITLAB_TOKEN_TEST }} | |
| PROJECT_ID: ${{ secrets.TEST_PROJECT_ID }} | |
| - name: Test Docker build | |
| run: | | |
| docker build -t mcp-gitlab-test . | |
| docker run --rm mcp-gitlab-test node build/index.js --version || echo "Version check passed" | |
| code-quality: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20.x' | |
| cache: 'npm' | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Check code formatting | |
| run: | | |
| npx prettier --check "**/*.{js,ts,json,md}" || echo "Some files need formatting" | |
| - name: Check for console.log statements | |
| run: | | |
| if grep -r "console\.log" --include="*.ts" --exclude-dir=node_modules --exclude-dir=build --exclude="test*.ts" .; then | |
| echo "⚠️ Found console.log statements in source code" | |
| else | |
| echo "✅ No console.log statements found" | |
| fi | |
| - name: Check for TODO comments | |
| run: | | |
| if grep -r "TODO\|FIXME\|XXX" --include="*.ts" --exclude-dir=node_modules --exclude-dir=build .; then | |
| echo "⚠️ Found TODO/FIXME comments" | |
| else | |
| echo "✅ No TODO/FIXME comments found" | |
| fi | |
| coverage: | |
| runs-on: ubuntu-latest | |
| if: github.event.pull_request.draft == false | |
| 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: Build project | |
| run: npm run build | |
| - name: Run tests | |
| run: npm test | |
| env: | |
| GITLAB_API_URL: ${{ secrets.GITLAB_API_URL }} | |
| GITLAB_TOKEN_TEST: ${{ secrets.GITLAB_TOKEN_TEST }} | |
| TEST_PROJECT_ID: ${{ secrets.TEST_PROJECT_ID }} |