-
Notifications
You must be signed in to change notification settings - Fork 0
140 lines (106 loc) · 3.14 KB
/
ci.yml
File metadata and controls
140 lines (106 loc) · 3.14 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
134
135
136
137
138
139
140
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
permissions:
contents: read
jobs:
ci:
name: Format / Lint / Typecheck / Test
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
- name: Install dependencies
run: npm ci
- name: Check formatting
run: npm run format:check
- name: Lint
run: npm run lint
- name: Build design system
run: npm run build -w packages/ui
- name: Typecheck
run: npx tsc --noEmit
- name: Build
run: npm run build
- name: Test with coverage
run: npm test
validate-lattice:
name: Validate Lattice Structure
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Validate YAML syntax
run: |
npm install -g yaml-lint
find .lattice -name "*.yaml" -exec yaml-lint {} \;
- name: Check required fields
run: |
for file in $(find .lattice/requirements .lattice/theses .lattice/sources -name "*.yaml" 2>/dev/null); do
echo "Checking $file..."
if ! grep -q "^id:" "$file"; then
echo "ERROR: $file missing 'id' field"
exit 1
fi
if ! grep -q "^title:" "$file"; then
echo "ERROR: $file missing 'title' field"
exit 1
fi
if ! grep -q "^status:" "$file"; then
echo "ERROR: $file missing 'status' field"
exit 1
fi
done
echo "All lattice nodes have required fields"
lattice-lint:
name: Lattice Lint
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install lattice
run: curl -fsSL https://raw.githubusercontent.com/forkzero/lattice/main/install.sh | sh
- name: Run lattice lint
run: lattice lint
- name: Smoke test - list nodes
run: |
lattice list requirements
lattice list theses
lattice list sources
pages:
name: Deploy Lattice to GitHub Pages
runs-on: ubuntu-latest
needs: [ci, validate-lattice, lattice-lint]
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
concurrency:
group: pages
cancel-in-progress: false
permissions:
contents: read
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install lattice
run: curl -fsSL https://raw.githubusercontent.com/forkzero/lattice/main/install.sh | sh
- name: Export lattice data
run: lattice export --format pages --output _site
- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v3
with:
path: _site
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4