-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTaskfile.yml
More file actions
239 lines (217 loc) 路 9.21 KB
/
Copy pathTaskfile.yml
File metadata and controls
239 lines (217 loc) 路 9.21 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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
---
# yaml-language-server: $schema=https://taskfile.dev/schema.json
version: "3"
vars:
ARCHITECTURE_WORKSPACE: '{{default "." .ARCHITECTURE_WORKSPACE}}'
JAVASCRIPT_QUALITY_WORKSPACE: '{{default "." .JAVASCRIPT_QUALITY_WORKSPACE}}'
DOGFOOD_IMAGE: '{{default "egolint-full:dogfood" .DOGFOOD_IMAGE}}'
DOGFOOD_EVALUATION_DATE:
sh: date -u "+%Y-%m-%d"
DOGFOOD_CONTINUITY_BASE:
sh: >-
python3 -c 'import pathlib,re; text=pathlib.Path("CONTINUITY.md").read_text();
match=re.search(r"(?m)^ base:\n revision: ([a-f0-9]{40}|unborn)$", text);
print(match.group(1) if match else "")'
includes:
lint:
taskfile: ./tasks/lint.yml
flatten: false
complementary:
taskfile: ./tasks/complementary.yml
flatten: false
tasks:
default:
desc: "Validate the standalone Egolint source and policy contracts"
cmds:
- task: verify
rust:fmt:
desc: "Check Rust formatting"
cmds:
- cargo fmt --all --check
rust:clippy:
desc: "Run the strict Rust lint profile"
cmds:
- cargo clippy --all-targets --all-features -- -D warnings
rust:test:
desc: "Run Rust unit and integration tests"
cmds:
- cargo test --all-targets --all-features
architecture:check:
desc: "Run the canonical JS/TS dependency architecture profile"
requires:
vars:
- EVALUATION_DATE
preconditions:
- sh: command -v pnpm >/dev/null 2>&1
msg: "pnpm is required for the dependency-cruiser adapter."
cmds:
- >-
cargo run --quiet --locked --bin egolint-architecture -- --workspace
"{{.ARCHITECTURE_WORKSPACE}}" --evaluation-date "{{.EVALUATION_DATE}}"
architecture:graph:
desc: "Run JS/TS architecture checks and emit an optional DOT graph"
requires:
vars:
- EVALUATION_DATE
preconditions:
- sh: command -v pnpm >/dev/null 2>&1
msg: "pnpm is required for the dependency-cruiser adapter."
cmds:
- >-
cargo run --quiet --locked --bin egolint-architecture -- --workspace
"{{.ARCHITECTURE_WORKSPACE}}" --evaluation-date "{{.EVALUATION_DATE}}" --graph
".reports/egolint/javascript-architecture.dot"
javascript-quality:check:
desc: "Run the canonical JavaScript/TypeScript package-quality profile"
preconditions:
- sh: command -v node >/dev/null 2>&1
msg: "Node.js is required for the JavaScript package-quality adapter."
- sh: command -v pnpm >/dev/null 2>&1
msg: "pnpm is required for JavaScript package-quality adapters."
cmds:
- >-
node scripts/javascript-package-quality.mjs --workspace "{{.JAVASCRIPT_QUALITY_WORKSPACE}}"
javascript-quality:test:
desc: "Validate JavaScript package-quality policy and migration contracts"
cmds:
- node --test tests/javascript-package-quality.test.mjs
contracts:
desc: "Validate imported MegaLinter and complementary-tool contracts"
cmds:
- python3 scripts/package_integrations.py --check
- task: lint:contracts
- task: complementary:contracts
- task: javascript-quality:test
schemas:write:
desc: "Regenerate checked-in JSON Schemas from the Rust types"
cmds:
- cargo run --quiet --locked -- schema config > schemas/config.schema.json
- cargo run --quiet --locked -- schema profile > schemas/profile.schema.json
- cargo run --quiet --locked -- schema finding > schemas/finding.schema.json
- cargo run --quiet --locked -- schema suppression > schemas/suppression.schema.json
- cargo run --quiet --locked -- schema evidence > schemas/evidence.schema.json
- cargo run --quiet --locked -- schema tool-result > schemas/tool-result.schema.json
- cargo run --quiet --locked -- schema plan > schemas/plan.schema.json
- cargo run --quiet --locked -- schema report > schemas/report.schema.json
- cargo run --quiet --locked -- schema debt > schemas/debt.schema.json
- cargo run --quiet --locked -- schema repository-contract >
schemas/repository-contract.schema.json
- cargo run --quiet --locked -- schema repository-intelligence >
schemas/repository-intelligence.schema.json
- cargo run --quiet --locked -- schema repository-intelligence-report >
schemas/repository-intelligence-report.schema.json
- cargo run --quiet --locked -- schema repository-presentation >
schemas/repository-presentation.schema.json
- cargo run --quiet --locked -- schema repository-presentation-report >
schemas/repository-presentation-report.schema.json
- cargo run --quiet --locked -- schema repository-continuity >
schemas/repository-continuity.schema.json
- cargo run --quiet --locked -- schema repository-continuity-report >
schemas/repository-continuity-report.schema.json
schemas:check:
desc: "Fail when checked-in JSON Schemas differ from the Rust types"
cmds:
- |
temporary_directory="$(mktemp -d)"
trap 'rm -rf "$temporary_directory"' EXIT
for schema in \
config \
profile \
finding \
suppression \
evidence \
tool-result \
plan \
report \
debt \
repository-contract \
repository-intelligence \
repository-intelligence-report \
repository-presentation \
repository-presentation-report \
repository-continuity \
repository-continuity-report; do
cargo run --quiet --locked -- schema "$schema" > "$temporary_directory/$schema.schema.json"
diff --unified \
"schemas/$schema.schema.json" \
"$temporary_directory/$schema.schema.json"
done
verify:
desc: "Run deterministic source, schema, policy, and test verification"
cmds:
- task: rust:fmt
- task: rust:clippy
- task: rust:test
- task: schemas:check
- task: contracts
dogfood:image:
desc: "Build the current checkout's full Egolint policy image"
preconditions:
- sh: command -v docker >/dev/null 2>&1
msg: "Docker is required for holistic Egolint dogfooding."
cmds:
- >-
docker build --file "Dockerfile.full" --tag "{{.DOGFOOD_IMAGE}}" "."
dogfood:native:
desc: "Consume Egolint's public validate CLI against this repository"
cmds:
- >-
cargo run --quiet --locked -- --workspace "." --config ".config/dogfood/egolint.toml"
validate --repository-contract ".config/dogfood/repository-context.toml"
--repository-intelligence ".config/dogfood/repository-intelligence.toml"
--represented-commit "$(git rev-parse --verify HEAD)" --repository-continuity
".config/dogfood/repository-continuity.toml" --continuity-base
"{{.DOGFOOD_CONTINUITY_BASE}}" --continuity-head "working-tree" --continuity-disposition
"updated" --continuity-transition "pull-request" --continuity-live-verification
"unavailable" --continuity-evaluation-date "{{.DOGFOOD_EVALUATION_DATE}}"
continuity:check:
desc: "Validate continuity with caller-supplied, locally available base/head evidence"
requires:
vars:
- CONTINUITY_BASE
- CONTINUITY_HEAD
- CONTINUITY_DISPOSITION
- EVALUATION_DATE
cmds:
- >-
cargo run --quiet --locked -- --workspace "." validate --repository-contract
".config/dogfood/repository-context.toml" --repository-continuity
".config/dogfood/repository-continuity.toml" --continuity-base "{{.CONTINUITY_BASE}}"
--continuity-head "{{.CONTINUITY_HEAD}}" --continuity-disposition
"{{.CONTINUITY_DISPOSITION}}" --continuity-transition '{{default "pull-request"
.CONTINUITY_TRANSITION}}' --continuity-live-verification '{{default "unavailable"
.CONTINUITY_LIVE_VERIFICATION}}' --continuity-evaluation-date "{{.EVALUATION_DATE}}"
dogfood:architecture:
desc: "Run Egolint's architecture adapter with bounded self-consumer debt"
preconditions:
- sh: command -v pnpm >/dev/null 2>&1
msg: "pnpm is required for the dependency-cruiser adapter."
cmds:
- >-
cargo run --quiet --locked --bin egolint-architecture -- --workspace "." --overlay
".config/dogfood/javascript-architecture.overlay.json" --evaluation-date
"{{.DOGFOOD_EVALUATION_DATE}}"
dogfood:javascript:
desc: "Consume Egolint's JS architecture and package-quality profiles against itself"
cmds:
- task: dogfood:architecture
- task: javascript-quality:check
vars:
JAVASCRIPT_QUALITY_WORKSPACE: "."
dogfood:holistic:
desc: "Run the public Egolint holistic lint path using the current checkout's full image"
deps:
- dogfood:image
cmds:
- >-
cargo run --quiet --locked -- --workspace "." --config ".config/dogfood/egolint.toml" lint
--disable-linter "JSON_V8R" --disable-linter "REPOSITORY_DUSTILOCK" --disable-linter
"REPOSITORY_GRYPE" --disable-linter "REPOSITORY_TRIVY" --disable-linter
"REPOSITORY_TRIVY_SBOM" --disable-linter "RUST_CLIPPY" --disable-linter "SPELL_LYCHEE"
--disable-linter "YAML_V8R"
dogfood:
desc: "Dogfood Egolint as its own reference consumer"
cmds:
- task: dogfood:native
- task: dogfood:javascript
- task: dogfood:holistic