-
Notifications
You must be signed in to change notification settings - Fork 1
133 lines (113 loc) · 3.45 KB
/
ci.yml
File metadata and controls
133 lines (113 loc) · 3.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# CI pipeline — lint, unit tests com coverage, e E2E Playwright em matriz
# Roda em push (main/develop) e em todo pull_request
#
# Design note: este arquivo é o TEMPLATE de CI que o starter copia para
# repositórios consumidores. No próprio repo `wesleysimplicio/llm-project-mapper`
# todos os jobs aqui são pulados via `if: github.repository != ...` porque o
# starter não tem código de produção pra rodar lint/unit/e2e em formato
# consumer. O CI real deste repo vive em `scaffold-self-check.yml`.
name: CI
on:
push:
branches:
- main
- develop
pull_request:
branches:
- main
- develop
# Evita rodar pipelines duplicados quando push acontece num PR aberto
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
NODE_ENV: test
CI: true
jobs:
lint:
name: Lint
runs-on: ubuntu-latest
if: github.repository != 'wesleysimplicio/llm-project-mapper'
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 22
cache: npm
- name: Install dependencies
run: npm ci
- name: Run lint
run: npm run lint
unit:
name: Unit tests (node ${{ matrix.node-version }})
needs: lint
runs-on: ubuntu-latest
if: github.repository != 'wesleysimplicio/llm-project-mapper'
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
node-version: [20, 22]
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-version }}
cache: npm
- name: Install dependencies
run: npm ci
- name: Run unit tests with coverage
run: npm test -- --coverage
- name: Upload coverage
if: always()
uses: actions/upload-artifact@v4
with:
name: coverage-node-${{ matrix.node-version }}
path: coverage/
if-no-files-found: warn
retention-days: 14
e2e:
name: E2E Playwright (node ${{ matrix.node-version }})
needs: unit
runs-on: ubuntu-latest
if: github.repository != 'wesleysimplicio/llm-project-mapper'
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
node-version: [20, 22]
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-version }}
cache: npm
- name: Install dependencies
run: npm ci
- name: Install Playwright browsers
run: npx playwright install --with-deps
- name: Run Playwright tests
run: npx playwright test
- name: Upload Playwright HTML report
if: always()
uses: actions/upload-artifact@v4
with:
name: playwright-report-node-${{ matrix.node-version }}
path: playwright-report/
if-no-files-found: warn
retention-days: 14
- name: Upload Playwright test results (traces, screenshots, videos)
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results-node-${{ matrix.node-version }}
path: test-results/
if-no-files-found: warn
retention-days: 14