1
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# CI/CD Integration
2
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
3
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Navegador's `ci` subcommand is designed for non-interactive use in pipelines. All CI commands emit structured output and use exit codes that CI systems understand.
4
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
5
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
6
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
7
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## CI commands
8
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
9
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### `navegador ci ingest`
10
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
11
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Ingest the repo and output a machine-readable summary. Exits non-zero on errors.
12
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
13
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
14
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador ci ingest ./src
15
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
16
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
17
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
JSON output (always on in CI mode):
18
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
19
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```json
20
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
21
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"status": "ok",
22
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"nodes_created": 1240,
23
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"nodes_updated": 38,
24
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"edges_created": 4821,
25
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"files_processed": 87,
26
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"errors": [],
27
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"duration_seconds": 4.2
28
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
29
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
30
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
31
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### `navegador ci stats`
32
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
33
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Print graph statistics as JSON. Use to track graph growth over time or assert a minimum coverage threshold.
34
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
35
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
36
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador ci stats
37
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
38
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
39
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```json
40
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
41
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"repositories": 1,
42
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"files": 87,
43
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"classes": 143,
44
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"functions": 891,
45
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"methods": 412,
46
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"concepts": 14,
47
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"rules": 9,
48
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"decisions": 6,
49
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"total_edges": 4821
50
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
51
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
52
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
53
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### `navegador ci check`
54
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
55
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Run assertion checks against the graph. Exits non-zero if any check fails.
56
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
57
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
58
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador ci check
59
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
60
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
61
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Checks run by default:
62
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
63
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Check | Condition for failure |
64
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|
65
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `no-cycles` | Circular import chains detected |
66
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `min-coverage` | Functions with no tests below threshold |
67
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `critical-rules` | Code violates a `critical`-severity rule |
68
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `dead-code` | High-confidence dead code above threshold |
69
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
70
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Configure checks in `navegador.toml`:
71
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
72
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```toml
73
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[ci.checks]
74
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
no-cycles = true
75
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
min-coverage = 60 # percent of functions with tests
76
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
critical-rules = true
77
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
dead-code = false # disable dead-code check
78
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
79
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
[ci.thresholds]
80
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
dead_code_max = 10 # fail if more than 10 dead-code candidates
81
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
uncovered_max_percent = 40 # fail if more than 40% of functions lack tests
82
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
83
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
84
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Running specific checks
85
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
86
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
87
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador ci check --only no-cycles
88
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador ci check --only critical-rules,min-coverage
89
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador ci check --skip dead-code
90
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
91
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
92
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
93
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
94
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Exit codes
95
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
96
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Code | Meaning |
97
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|
98
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `0` | Success — all checks passed |
99
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `1` | Check failure — one or more assertions failed |
100
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `2` | Ingest error — files could not be parsed (partial result) |
101
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `3` | Configuration error — bad flags or missing config |
102
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| `4` | Connection error — cannot reach database or Redis |
103
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
104
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
105
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
106
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## GitHub Actions
107
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
108
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Basic: ingest on push
109
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
110
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```yaml
111
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# .github/workflows/navegador.yml
112
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
name: navegador
113
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
114
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
on:
115
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
push:
116
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
branches: [main]
117
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
pull_request:
118
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
119
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
jobs:
120
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
graph:
121
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
runs-on: ubuntu-latest
122
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
steps:
123
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- uses: actions/checkout@v4
124
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
125
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- name: Install navegador
126
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
run: pip install navegador
127
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
128
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- name: Ingest
129
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
run: navegador ci ingest ./src
130
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
131
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- name: Check
132
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
run: navegador ci check
133
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
134
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
135
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### With graph caching
136
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
137
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Cache the SQLite database between runs to speed up incremental ingestion:
138
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
139
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```yaml
140
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- name: Cache navegador graph
141
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
uses: actions/cache@v4
142
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
with:
143
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
path: .navegador/navegador.db
144
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
key: navegador-${{ runner.os }}-${{ hashFiles('src/**') }}
145
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
restore-keys: navegador-${{ runner.os }}-
146
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
147
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- name: Ingest
148
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
run: navegador ci ingest ./src
149
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
150
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- name: Check
151
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
run: navegador ci check
152
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
153
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
154
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Shared graph via Redis (cluster mode)
155
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
156
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Use a shared Redis instance for team-wide graph persistence across branches and PRs:
157
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
158
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```yaml
159
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- name: Ingest to shared graph
160
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
env:
161
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
NAVEGADOR_REDIS_URL: ${{ secrets.NAVEGADOR_REDIS_URL }}
162
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
run: |
163
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador ci ingest ./src --cluster
164
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador ci check --cluster
165
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
166
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
167
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### PR impact report
168
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
169
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Post an impact analysis comment on pull requests:
170
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
171
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```yaml
172
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- name: Impact analysis
173
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if: github.event_name == 'pull_request'
174
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
run: |
175
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
CHANGED=$(git diff --name-only origin/main...HEAD | grep '\.py$' | head -20)
176
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for f in $CHANGED; do
177
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador ci ingest "$f"
178
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
done
179
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador impact --changed-since origin/main --format json > impact.json
180
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
181
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- name: Comment impact
182
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if: github.event_name == 'pull_request'
183
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
uses: actions/github-script@v7
184
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
with:
185
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
script: |
186
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const impact = require('./impact.json')
187
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
const body = `## Navegador impact analysis\n\n${impact.summary}`
188
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
github.rest.issues.createComment({
189
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
issue_number: context.issue.number,
190
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
owner: context.repo.owner,
191
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
repo: context.repo.repo,
192
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
body
193
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
})
194
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
195
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
196
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
197
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
198
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Editor integration
199
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
200
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### VS Code
201
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
202
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Install the [Navegador VS Code extension](https://marketplace.visualstudio.com/items?itemName=ConflictHQ.navegador) for inline context overlays and on-save re-ingest.
203
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
204
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Or configure a task in `.vscode/tasks.json` to run on save:
205
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
206
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```json
207
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
208
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"version": "2.0.0",
209
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"tasks": [
210
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
{
211
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"label": "Navegador: re-ingest on save",
212
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"type": "shell",
213
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"command": "navegador ingest ${file}",
214
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"group": "build",
215
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"presentation": {
216
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"reveal": "silent",
217
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"panel": "shared"
218
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
},
219
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"runOptions": {
220
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"runOn": "folderOpen"
221
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
222
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
223
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
]
224
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
225
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
226
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
227
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Neovim
228
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
229
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Add a post-write autocmd to trigger incremental ingest:
230
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
231
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```lua
232
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
-- in your init.lua or a plugin config
233
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
vim.api.nvim_create_autocmd("BufWritePost", {
234
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
pattern = { "*.py", "*.ts", "*.tsx", "*.js" },
235
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
callback = function(ev)
236
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
local file = ev.file
237
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
vim.fn.jobstart({ "navegador", "ingest", file }, { detach = true })
238
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
end,
239
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
})
240
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
241
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
242
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Pre-commit hook
243
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
244
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Run checks before committing:
245
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
246
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```yaml
247
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# .pre-commit-config.yaml
248
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
repos:
249
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- repo: local
250
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
hooks:
251
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
- id: navegador-check
252
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
name: Navegador graph checks
253
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
entry: navegador ci check --only no-cycles,critical-rules
254
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
language: system
255
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
pass_filenames: false
256
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
stages: [commit]
257
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
258
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
259
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
260
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
261
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Secrets and auth
262
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
263
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The graph database path and Redis URL should come from environment variables in CI, not from committed config:
264
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
265
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
266
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# CI environment variables
267
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
NAVEGADOR_DB=.navegador/navegador.db # SQLite path
268
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
NAVEGADOR_REDIS_URL=redis://... # Redis URL (cluster mode)
269
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
GITHUB_TOKEN=ghp_... # for wiki ingestion
270
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
271
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
272
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Set these as [GitHub Actions secrets](https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions) and reference them in your workflow with `${{ secrets.NAME }}`.
273
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!