ado-sync 0.1.59 → 0.1.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +64 -0
- package/dist/__tests__/regressions.test.js +108 -0
- package/dist/__tests__/regressions.test.js.map +1 -1
- package/dist/cli.js +17 -2
- package/dist/cli.js.map +1 -1
- package/dist/sync/publish-results.js +235 -17
- package/dist/sync/publish-results.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/docs/capability-roadmap.md +280 -0
- package/docs/publish-test-results.md +15 -0
- package/mkdocs.yml +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
# Capability Roadmap
|
|
2
|
+
|
|
3
|
+
This roadmap turns the recent benchmark review into a product-owned plan for expanding ado-sync without copying another tool's terminology or structure.
|
|
4
|
+
|
|
5
|
+
The goal is straightforward: make large-scale synchronization more predictable, make result publishing more trustworthy, and give teams a cleaner path from single-suite setups to portfolio-scale usage.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Current strengths
|
|
10
|
+
|
|
11
|
+
ado-sync already delivers a solid base:
|
|
12
|
+
|
|
13
|
+
- bidirectional push and pull for local specs and Azure DevOps test cases
|
|
14
|
+
- broad parser coverage across Gherkin, source-code, tabular, and result-file formats
|
|
15
|
+
- Azure work item linking, state updates, attachments, and field updates
|
|
16
|
+
- test result publishing with multiple input formats
|
|
17
|
+
- higher-level workflows such as stale detection, coverage, trend analysis, AI-assisted generation, and editor integration
|
|
18
|
+
|
|
19
|
+
The roadmap below focuses on gaps that limit scale, predictability, or user trust.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Phase 1: Fix correctness gaps first
|
|
24
|
+
|
|
25
|
+
### Why this comes first
|
|
26
|
+
|
|
27
|
+
Some configuration surfaces are documented and typed, but not fully honored at runtime. That weakens confidence in the tool even when the rest of the workflow is sound.
|
|
28
|
+
|
|
29
|
+
### Priority work
|
|
30
|
+
|
|
31
|
+
1. Align `publish-test-results` docs, types, and runtime behavior.
|
|
32
|
+
2. Either implement or remove unsupported settings from public docs and config types.
|
|
33
|
+
3. Add focused regression tests around run creation and configuration lookup.
|
|
34
|
+
|
|
35
|
+
### Main files
|
|
36
|
+
|
|
37
|
+
- `src/sync/publish-results.ts`
|
|
38
|
+
- `src/types.ts`
|
|
39
|
+
- `docs/publish-test-results.md`
|
|
40
|
+
- `src/__tests__/regressions.test.ts`
|
|
41
|
+
|
|
42
|
+
### Concrete targets
|
|
43
|
+
|
|
44
|
+
- honor `publishTestResults.testConfiguration.name` by resolving configuration names to IDs before run creation
|
|
45
|
+
- support explicit test suite targeting for result publication when configured
|
|
46
|
+
- implement deterministic flaky-outcome policies instead of exposing them as no-op configuration
|
|
47
|
+
- document only behavior that is actually live
|
|
48
|
+
|
|
49
|
+
### Exit criteria
|
|
50
|
+
|
|
51
|
+
- every documented `publishTestResults` setting is either implemented end-to-end or removed
|
|
52
|
+
- dry-run and live-run behavior produce matching routing decisions
|
|
53
|
+
- regression coverage exists for name-based configuration selection and flaky handling
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Phase 2: Introduce scoped synchronization
|
|
58
|
+
|
|
59
|
+
### Problem to solve
|
|
60
|
+
|
|
61
|
+
Today the model is centered on a plan, optional suite mapping, and local filters. That works for smaller installations, but it does not give teams a strong way to define which remote inventory a configuration owns.
|
|
62
|
+
|
|
63
|
+
### Product direction
|
|
64
|
+
|
|
65
|
+
Add a first-class sync target model that tells ado-sync exactly which remote set belongs to a configuration. This should be original to ado-sync, not a copy of anyone else's schema.
|
|
66
|
+
|
|
67
|
+
### Proposed design direction
|
|
68
|
+
|
|
69
|
+
Introduce a new top-level concept such as `syncTarget` or `ownership` with selectable modes:
|
|
70
|
+
|
|
71
|
+
- `tagged` for test cases carrying a generated ownership tag
|
|
72
|
+
- `suite` for test cases managed through a designated suite root
|
|
73
|
+
- `query` for test cases matched by an Azure DevOps query or rule set
|
|
74
|
+
|
|
75
|
+
This model should work alongside `configurationKey`, not replace it.
|
|
76
|
+
|
|
77
|
+
### Main files
|
|
78
|
+
|
|
79
|
+
- `src/types.ts`
|
|
80
|
+
- `src/config.ts`
|
|
81
|
+
- `src/sync/engine.ts`
|
|
82
|
+
- `src/cli.ts`
|
|
83
|
+
- `docs/configuration.md`
|
|
84
|
+
|
|
85
|
+
### Exit criteria
|
|
86
|
+
|
|
87
|
+
- push, pull, stale detection, and status all use the same ownership boundary
|
|
88
|
+
- removing a local scenario does not risk touching unrelated remote items
|
|
89
|
+
- multiple configurations can target the same project without collisions
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Phase 3: Build a real hierarchy engine
|
|
94
|
+
|
|
95
|
+
### Problem to solve
|
|
96
|
+
|
|
97
|
+
Current suite support is useful but narrow. It covers basic mapping and conditional routing, but not richer hierarchy construction, cleanup rules, or multiple parallel views of the same inventory.
|
|
98
|
+
|
|
99
|
+
### Product direction
|
|
100
|
+
|
|
101
|
+
Create named hierarchy definitions that can materialize test suites from local structure, tags, or explicit routing rules.
|
|
102
|
+
|
|
103
|
+
### Proposed capabilities
|
|
104
|
+
|
|
105
|
+
- folder-based hierarchy generation
|
|
106
|
+
- file-based hierarchy generation
|
|
107
|
+
- tag-driven hierarchy generation
|
|
108
|
+
- explicit level rules for multi-level suite trees
|
|
109
|
+
- cleanup policies for stale nodes and stale memberships
|
|
110
|
+
- optional multiple hierarchy outputs from the same local corpus
|
|
111
|
+
|
|
112
|
+
### Main files
|
|
113
|
+
|
|
114
|
+
- `src/azure/test-cases.ts`
|
|
115
|
+
- `src/sync/engine.ts`
|
|
116
|
+
- `src/types.ts`
|
|
117
|
+
- `docs/advanced.md`
|
|
118
|
+
- `docs/configuration.md`
|
|
119
|
+
|
|
120
|
+
### Exit criteria
|
|
121
|
+
|
|
122
|
+
- hierarchy definitions are declarative and testable
|
|
123
|
+
- hierarchy sync can add, move, and prune memberships safely
|
|
124
|
+
- teams can maintain more than one suite view without duplicating specs
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Phase 4: Expand the command surface for scale workflows
|
|
129
|
+
|
|
130
|
+
### Problem to solve
|
|
131
|
+
|
|
132
|
+
The current command line is clean, but it is missing a few control points that matter in large repositories and CI pipelines.
|
|
133
|
+
|
|
134
|
+
### Priority work
|
|
135
|
+
|
|
136
|
+
1. Add source-file filters for push and pull.
|
|
137
|
+
2. Add operation modes such as create-only, link-only, and update-only where applicable.
|
|
138
|
+
3. Add consistent diagnostic controls across commands.
|
|
139
|
+
4. Allow temporary auth and routing overrides in a controlled way.
|
|
140
|
+
|
|
141
|
+
### Main files
|
|
142
|
+
|
|
143
|
+
- `src/cli.ts`
|
|
144
|
+
- `src/config.ts`
|
|
145
|
+
- `src/sync/engine.ts`
|
|
146
|
+
- `docs/cli.md`
|
|
147
|
+
|
|
148
|
+
### Exit criteria
|
|
149
|
+
|
|
150
|
+
- operators can target a small slice of a large repo without changing config files
|
|
151
|
+
- CI jobs can run low-risk creation-only or link-only flows
|
|
152
|
+
- troubleshooting output is consistent across push, pull, status, and result publication
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Phase 5: Modernize configuration ergonomics
|
|
157
|
+
|
|
158
|
+
### Problem to solve
|
|
159
|
+
|
|
160
|
+
The configuration model is powerful enough for a single repository, but it becomes awkward when shared across many teams or environments.
|
|
161
|
+
|
|
162
|
+
### Product direction
|
|
163
|
+
|
|
164
|
+
Make configuration layering easier, safer, and more portable.
|
|
165
|
+
|
|
166
|
+
### Priority work
|
|
167
|
+
|
|
168
|
+
1. Support comment-tolerant JSON configuration parsing.
|
|
169
|
+
2. Add optional parent-config discovery through ancestor folders.
|
|
170
|
+
3. Add personal config overlays for credentials and machine-local overrides.
|
|
171
|
+
4. Add reusable remote profiles so org-level connection settings do not need to be copied into every repository.
|
|
172
|
+
|
|
173
|
+
### Main files
|
|
174
|
+
|
|
175
|
+
- `src/config.ts`
|
|
176
|
+
- `src/types.ts`
|
|
177
|
+
- `docs/configuration.md`
|
|
178
|
+
- `src/cli.ts`
|
|
179
|
+
|
|
180
|
+
### Exit criteria
|
|
181
|
+
|
|
182
|
+
- teams can share base config safely without checking credentials into the repo
|
|
183
|
+
- repository config stays small even when many projects use the same Azure DevOps org
|
|
184
|
+
- the override and inheritance rules are explicit and easy to debug
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Phase 6: Deepen automation and result publishing
|
|
189
|
+
|
|
190
|
+
### Problem to solve
|
|
191
|
+
|
|
192
|
+
The core publishing flow works, but automation metadata and run routing are still simpler than what enterprise teams usually need.
|
|
193
|
+
|
|
194
|
+
### Product direction
|
|
195
|
+
|
|
196
|
+
Expand the publishing model so it can express how tests were executed, where runs should land, and how automated metadata should be maintained.
|
|
197
|
+
|
|
198
|
+
### Priority work
|
|
199
|
+
|
|
200
|
+
1. Support automation classification rules instead of a single coarse toggle.
|
|
201
|
+
2. Resolve named test configurations at runtime.
|
|
202
|
+
3. Allow controlled publication to more than one destination suite when desired.
|
|
203
|
+
4. Add stronger matching and fallback rules for automated result association.
|
|
204
|
+
5. Expand attachment and comment policies for passing, flaky, and retried tests.
|
|
205
|
+
|
|
206
|
+
### Main files
|
|
207
|
+
|
|
208
|
+
- `src/sync/publish-results.ts`
|
|
209
|
+
- `src/azure/test-runs.ts`
|
|
210
|
+
- `src/azure/test-cases.ts`
|
|
211
|
+
- `src/types.ts`
|
|
212
|
+
- `docs/publish-test-results.md`
|
|
213
|
+
|
|
214
|
+
### Exit criteria
|
|
215
|
+
|
|
216
|
+
- automation metadata is predictable across push and publish flows
|
|
217
|
+
- result publication can be routed by configuration rather than ad hoc flags alone
|
|
218
|
+
- retry-heavy pipelines produce consistent final outcomes
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Phase 7: Add extension points instead of hard-coding every variant
|
|
223
|
+
|
|
224
|
+
### Problem to solve
|
|
225
|
+
|
|
226
|
+
ado-sync already supports many ecosystems, but every new integration currently tends to require first-party changes.
|
|
227
|
+
|
|
228
|
+
### Product direction
|
|
229
|
+
|
|
230
|
+
Introduce a narrow extension model for parser registration, result ingestion, custom routing, and metadata transforms.
|
|
231
|
+
|
|
232
|
+
### Candidate extension seams
|
|
233
|
+
|
|
234
|
+
- local spec discovery
|
|
235
|
+
- parser registration
|
|
236
|
+
- result-file ingestion
|
|
237
|
+
- test-case field transformation
|
|
238
|
+
- run-routing policies
|
|
239
|
+
|
|
240
|
+
### Main files
|
|
241
|
+
|
|
242
|
+
- `src/types.ts`
|
|
243
|
+
- `src/config.ts`
|
|
244
|
+
- parser modules under `src/parsers/`
|
|
245
|
+
- `src/sync/engine.ts`
|
|
246
|
+
- `src/sync/publish-results.ts`
|
|
247
|
+
|
|
248
|
+
### Exit criteria
|
|
249
|
+
|
|
250
|
+
- new ecosystems can be added without invasive changes to the core sync engine
|
|
251
|
+
- experimental integrations can ship behind stable interfaces
|
|
252
|
+
- core maintenance load stays bounded as format coverage expands
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## Recommended implementation order
|
|
257
|
+
|
|
258
|
+
1. Phase 1: correctness and documentation trust
|
|
259
|
+
2. Phase 2: scoped synchronization model
|
|
260
|
+
3. Phase 4: command-surface improvements needed to operate the new scope model
|
|
261
|
+
4. Phase 3: hierarchy engine
|
|
262
|
+
5. Phase 6: deeper automation and result-routing behavior
|
|
263
|
+
6. Phase 5: configuration ergonomics and shared profiles
|
|
264
|
+
7. Phase 7: extension model
|
|
265
|
+
|
|
266
|
+
This order reduces user-facing confusion first, then hardens ownership boundaries before adding more advanced routing and hierarchy features.
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## Near-term backlog candidates
|
|
271
|
+
|
|
272
|
+
If the goal is to start implementation immediately, the highest-value first batch is:
|
|
273
|
+
|
|
274
|
+
1. fix `publish-test-results` contract drift
|
|
275
|
+
2. add named test configuration lookup
|
|
276
|
+
3. design `syncTarget` ownership schema in `src/types.ts`
|
|
277
|
+
4. wire ownership filtering into `status`, `push`, `pull`, and `stale`
|
|
278
|
+
5. add `--source-file`, `--create-only`, and `--link-only` style command controls
|
|
279
|
+
|
|
280
|
+
That batch improves trust, reduces operational risk, and lays the foundation for the larger roadmap.
|
|
@@ -24,6 +24,13 @@ ado-sync publish-test-results --testResult results/test.trx --dry-run
|
|
|
24
24
|
ado-sync publish-test-results \
|
|
25
25
|
--testResult results/test.trx \
|
|
26
26
|
--buildId 12345
|
|
27
|
+
|
|
28
|
+
# Publish to a specific planned suite/configuration
|
|
29
|
+
ado-sync publish-test-results \
|
|
30
|
+
--testResult results/test.trx \
|
|
31
|
+
--testPlan "Smoke Plan" \
|
|
32
|
+
--testSuite "BDD" \
|
|
33
|
+
--testConfiguration "Windows 10"
|
|
27
34
|
```
|
|
28
35
|
|
|
29
36
|
### Options
|
|
@@ -35,6 +42,9 @@ ado-sync publish-test-results \
|
|
|
35
42
|
| `--attachmentsFolder <path>` | Folder to scan for screenshots/videos/logs to attach to test results. |
|
|
36
43
|
| `--runName <name>` | Name for the Test Run in Azure DevOps. Defaults to `ado-sync <ISO timestamp>`. |
|
|
37
44
|
| `--buildId <id>` | Build ID to associate with the Test Run. |
|
|
45
|
+
| `--testConfiguration <nameOrId>` | Azure test configuration name or numeric ID for the published run. |
|
|
46
|
+
| `--testSuite <nameOrId>` | Azure test suite name or numeric ID for planned run publication. |
|
|
47
|
+
| `--testPlan <nameOrId>` | Azure test plan name or numeric ID used with `--testSuite`. |
|
|
38
48
|
| `--dry-run` | Parse results and print summary without creating a run in Azure. |
|
|
39
49
|
| `--create-issues-on-failure` | File GitHub Issues or ADO Bugs for each failed test after publishing. |
|
|
40
50
|
| `--issue-provider <github\|ado>` | Issue provider. Default: `github`. |
|
|
@@ -772,12 +782,17 @@ Results can also be configured in the config file under `publishTestResults`:
|
|
|
772
782
|
| `flakyTestOutcome` | How to handle flaky tests: `"lastAttemptOutcome"` *(default)* · `"firstAttemptOutcome"` · `"worstOutcome"`. |
|
|
773
783
|
| `testConfiguration.name` | Name of the Azure test configuration to associate. |
|
|
774
784
|
| `testConfiguration.id` | ID of the Azure test configuration. |
|
|
785
|
+
| `testSuite.name` | Name of the Azure test suite to publish against. Requires every result to resolve to a test case ID. |
|
|
786
|
+
| `testSuite.id` | ID of the Azure test suite to publish against. |
|
|
787
|
+
| `testSuite.testPlan` | Optional test plan name or ID used when resolving the target suite. Defaults to `testPlan.id` from the main config. |
|
|
775
788
|
| `testRunSettings.name` | Name for the Test Run. |
|
|
776
789
|
| `testRunSettings.comment` | Comment attached to the Test Run. |
|
|
777
790
|
| `testRunSettings.runType` | `"Automated"` *(default)* · `"Manual"`. |
|
|
778
791
|
| `testResultSettings.comment` | Comment applied to every test result. |
|
|
779
792
|
| `publishAttachmentsForPassingTests` | `"none"` *(default)* · `"files"` · `"all"`. |
|
|
780
793
|
|
|
794
|
+
When `testSuite` is configured, ado-sync creates a planned run and binds each published result to the matching test point in that suite. If a suite contains multiple configurations for the same test case, set `testConfiguration.id` or `testConfiguration.name` so the target point can be resolved unambiguously.
|
|
795
|
+
|
|
781
796
|
---
|
|
782
797
|
|
|
783
798
|
## Creating issues on failure
|
package/mkdocs.yml
CHANGED