ado-sync 0.1.4 → 0.1.5
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 +324 -49
- package/dist/cli.js +8 -6
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.js +5 -3
- package/dist/config.js.map +1 -1
- package/package.json +1 -1
- package/tester/ado-sync.json +27 -0
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Bidirectional sync between local test specs and Azure DevOps Test Cases.
|
|
4
4
|
|
|
5
|
-
Supports **Cucumber / Gherkin** `.feature` files and **prose Markdown** `.md` spec files.
|
|
5
|
+
Supports **Cucumber / Gherkin** `.feature` files and **prose Markdown** `.md` spec files (including Playwright test-plan markdown generated by the Playwright MCP agent).
|
|
6
6
|
Inspired by [SpecSync](https://docs.specsolutions.eu/specsync/).
|
|
7
7
|
|
|
8
8
|
---
|
|
@@ -11,9 +11,9 @@ Inspired by [SpecSync](https://docs.specsolutions.eu/specsync/).
|
|
|
11
11
|
|
|
12
12
|
```
|
|
13
13
|
Local files ado-sync Azure DevOps
|
|
14
|
-
──────────────
|
|
15
|
-
.feature files ── push ──► create / update
|
|
16
|
-
.md spec files ◄── pull ── apply changes
|
|
14
|
+
────────────── ───────────────── ────────────────
|
|
15
|
+
.feature files ── push ──► create / update ──► Test Cases
|
|
16
|
+
.md spec files ◄── pull ── apply changes ◄── (Work Items)
|
|
17
17
|
write ID back
|
|
18
18
|
@tc:12345 / <!-- tc: 12345 -->
|
|
19
19
|
```
|
|
@@ -26,7 +26,7 @@ On the **first push** of a scenario, a new Test Case is created in Azure DevOps
|
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
28
|
npm install -g ado-sync
|
|
29
|
-
# or use locally
|
|
29
|
+
# or use locally without installing
|
|
30
30
|
npx ado-sync --help
|
|
31
31
|
```
|
|
32
32
|
|
|
@@ -37,11 +37,10 @@ npx ado-sync --help
|
|
|
37
37
|
### 1. Generate a config file
|
|
38
38
|
|
|
39
39
|
```bash
|
|
40
|
-
ado-sync init
|
|
40
|
+
ado-sync init # creates ado-sync.json
|
|
41
|
+
ado-sync init ado-sync.yml # creates ado-sync.yml (YAML format)
|
|
41
42
|
```
|
|
42
43
|
|
|
43
|
-
This creates `ado-sync.json` in the current directory.
|
|
44
|
-
|
|
45
44
|
### 2. Edit the config
|
|
46
45
|
|
|
47
46
|
```json
|
|
@@ -93,21 +92,22 @@ Options:
|
|
|
93
92
|
-h, --help Show help
|
|
94
93
|
|
|
95
94
|
Commands:
|
|
96
|
-
init [
|
|
95
|
+
init [output] Generate a starter config file
|
|
97
96
|
push [options] Push local specs to Azure DevOps
|
|
98
97
|
pull [options] Pull updates from Azure DevOps into local files
|
|
99
|
-
status
|
|
98
|
+
status [options] Show what would change without making any modifications
|
|
100
99
|
help [command] Help for a specific command
|
|
101
100
|
```
|
|
102
101
|
|
|
103
102
|
### `init`
|
|
104
103
|
|
|
105
104
|
```bash
|
|
106
|
-
ado-sync init
|
|
107
|
-
ado-sync init
|
|
105
|
+
ado-sync init # creates ado-sync.json
|
|
106
|
+
ado-sync init ado-sync.yml # creates ado-sync.yml
|
|
107
|
+
ado-sync init path/to/config.json
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
-
Creates a starter
|
|
110
|
+
Creates a starter config file in JSON or YAML format depending on the file extension. Safe — will not overwrite an existing file.
|
|
111
111
|
|
|
112
112
|
---
|
|
113
113
|
|
|
@@ -118,6 +118,7 @@ ado-sync push
|
|
|
118
118
|
ado-sync push --dry-run
|
|
119
119
|
ado-sync push --tags "@smoke"
|
|
120
120
|
ado-sync push --tags "@smoke and not @wip"
|
|
121
|
+
ado-sync push --config-override testPlan.id=9999
|
|
121
122
|
ado-sync -c other-config.json push
|
|
122
123
|
```
|
|
123
124
|
|
|
@@ -126,8 +127,9 @@ For every scenario / heading in your local spec files:
|
|
|
126
127
|
| Scenario state | Action |
|
|
127
128
|
|----------------|--------|
|
|
128
129
|
| No ID tag yet | Creates a new Test Case, writes ID back to file |
|
|
129
|
-
| Has ID tag, no changes | Skipped |
|
|
130
|
+
| Has ID tag, no changes | Skipped (uses local cache for speed) |
|
|
130
131
|
| Has ID tag, title or steps changed | Updates the existing Test Case |
|
|
132
|
+
| Deleted locally, still in Azure suite | Tagged `ado-sync:removed` in Azure |
|
|
131
133
|
| Has ID tag but Test Case deleted in Azure | Reported as error |
|
|
132
134
|
|
|
133
135
|
`--dry-run` prints what would happen without modifying anything.
|
|
@@ -140,13 +142,14 @@ For every scenario / heading in your local spec files:
|
|
|
140
142
|
ado-sync pull
|
|
141
143
|
ado-sync pull --dry-run
|
|
142
144
|
ado-sync pull --tags "@smoke"
|
|
145
|
+
ado-sync pull --config-override sync.conflictAction=skip
|
|
143
146
|
```
|
|
144
147
|
|
|
145
148
|
For every locally-linked scenario (has an ID tag):
|
|
146
149
|
|
|
147
150
|
| Remote state | Action |
|
|
148
151
|
|--------------|--------|
|
|
149
|
-
| Title or
|
|
152
|
+
| Title, steps, or description changed in Azure | Updates the local file |
|
|
150
153
|
| No changes | Skipped |
|
|
151
154
|
| Test Case not found | Reported as error |
|
|
152
155
|
|
|
@@ -159,52 +162,91 @@ For every locally-linked scenario (has an ID tag):
|
|
|
159
162
|
```bash
|
|
160
163
|
ado-sync status
|
|
161
164
|
ado-sync status --tags "@smoke"
|
|
165
|
+
ado-sync status --config-override testPlan.id=9999
|
|
162
166
|
```
|
|
163
167
|
|
|
164
|
-
Compares local specs against Azure DevOps and prints a diff — no changes made.
|
|
168
|
+
Compares local specs against Azure DevOps and prints a diff — no changes made.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
### `--config-override`
|
|
173
|
+
|
|
174
|
+
All commands accept one or more `--config-override path=value` options to set config values from the command line without editing the file. Useful in CI pipelines.
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
# Override test plan ID
|
|
178
|
+
ado-sync push --config-override testPlan.id=9999
|
|
179
|
+
|
|
180
|
+
# Override tag prefix
|
|
181
|
+
ado-sync push --config-override sync.tagPrefix=azure
|
|
182
|
+
|
|
183
|
+
# Multiple overrides (repeat the flag)
|
|
184
|
+
ado-sync push \
|
|
185
|
+
--config-override testPlan.id=9999 \
|
|
186
|
+
--config-override sync.disableLocalChanges=true
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Dot-path notation is used for nested fields. Numbers and booleans are coerced automatically.
|
|
165
190
|
|
|
166
191
|
---
|
|
167
192
|
|
|
168
193
|
## Config file reference
|
|
169
194
|
|
|
170
|
-
Config files can be JSON (`.json`) or YAML (`.yml` / `.yaml`).
|
|
195
|
+
Config files can be JSON (`.json`) or YAML (`.yml` / `.yaml`). Run `ado-sync init` to generate a template.
|
|
196
|
+
|
|
197
|
+
### Full example (JSON)
|
|
171
198
|
|
|
172
199
|
```json
|
|
173
200
|
{
|
|
174
|
-
"orgUrl":
|
|
175
|
-
"project":
|
|
201
|
+
"orgUrl": "https://dev.azure.com/YOUR_ORG",
|
|
202
|
+
"project": "YOUR_PROJECT",
|
|
176
203
|
|
|
177
204
|
"auth": {
|
|
178
|
-
"type":
|
|
179
|
-
"token":
|
|
180
|
-
"applicationIdURI": ""
|
|
205
|
+
"type": "pat",
|
|
206
|
+
"token": "$AZURE_DEVOPS_TOKEN"
|
|
181
207
|
},
|
|
182
208
|
|
|
183
209
|
"testPlan": {
|
|
184
|
-
"id":
|
|
185
|
-
"suiteId": 5678
|
|
210
|
+
"id": 1234,
|
|
211
|
+
"suiteId": 5678,
|
|
212
|
+
"suiteMapping": "flat"
|
|
186
213
|
},
|
|
187
214
|
|
|
188
215
|
"local": {
|
|
189
|
-
"type":
|
|
216
|
+
"type": "gherkin",
|
|
190
217
|
"include": "specs/**/*.feature",
|
|
191
218
|
"exclude": []
|
|
192
219
|
},
|
|
193
220
|
|
|
194
221
|
"sync": {
|
|
195
|
-
"tagPrefix":
|
|
196
|
-
"
|
|
197
|
-
"
|
|
222
|
+
"tagPrefix": "tc",
|
|
223
|
+
"titleField": "System.Title",
|
|
224
|
+
"areaPath": "MyProject\\Team A",
|
|
225
|
+
"iterationPath": "MyProject\\Sprint 1",
|
|
226
|
+
"disableLocalChanges": false,
|
|
227
|
+
"conflictAction": "overwrite",
|
|
228
|
+
"links": [
|
|
229
|
+
{ "prefix": "story", "relationship": "System.LinkTypes.Related" },
|
|
230
|
+
{ "prefix": "bug", "relationship": "System.LinkTypes.Related" }
|
|
231
|
+
]
|
|
198
232
|
}
|
|
199
233
|
}
|
|
200
234
|
```
|
|
201
235
|
|
|
236
|
+
---
|
|
237
|
+
|
|
202
238
|
### `orgUrl`
|
|
239
|
+
|
|
203
240
|
Azure DevOps organisation URL. Format: `https://dev.azure.com/YOUR_ORG`.
|
|
204
241
|
|
|
242
|
+
---
|
|
243
|
+
|
|
205
244
|
### `project`
|
|
245
|
+
|
|
206
246
|
Azure DevOps project name.
|
|
207
247
|
|
|
248
|
+
---
|
|
249
|
+
|
|
208
250
|
### `auth`
|
|
209
251
|
|
|
210
252
|
| Field | Description |
|
|
@@ -215,28 +257,71 @@ Azure DevOps project name.
|
|
|
215
257
|
|
|
216
258
|
**PAT permissions required:** Test Management (Read & Write), Work Items (Read & Write).
|
|
217
259
|
|
|
260
|
+
---
|
|
261
|
+
|
|
218
262
|
### `testPlan`
|
|
219
263
|
|
|
264
|
+
| Field | Default | Description |
|
|
265
|
+
|-------|---------|-------------|
|
|
266
|
+
| `id` | *(required)* | ID of the Azure DevOps Test Plan. |
|
|
267
|
+
| `suiteId` | plan root | ID of the Test Suite within the plan. Defaults to the plan's root suite. |
|
|
268
|
+
| `suiteMapping` | `"flat"` | `"flat"` — all Test Cases go into one suite. `"byFolder"` — folder structure is mirrored as nested child suites (e.g. `specs/login/` → suite named `login`). |
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
### `testPlans` (multi-plan)
|
|
273
|
+
|
|
274
|
+
To sync the same repository against multiple Test Plans, use the `testPlans` array instead of (or in addition to) `testPlan`. Each entry overrides `testPlan` and can specify its own file globs.
|
|
275
|
+
|
|
276
|
+
```json
|
|
277
|
+
{
|
|
278
|
+
"testPlans": [
|
|
279
|
+
{
|
|
280
|
+
"id": 1001,
|
|
281
|
+
"suiteId": 2001,
|
|
282
|
+
"include": "specs/smoke/**/*.feature"
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
"id": 1002,
|
|
286
|
+
"suiteId": 2002,
|
|
287
|
+
"include": "specs/regression/**/*.feature",
|
|
288
|
+
"suiteMapping": "byFolder"
|
|
289
|
+
}
|
|
290
|
+
]
|
|
291
|
+
}
|
|
292
|
+
```
|
|
293
|
+
|
|
220
294
|
| Field | Description |
|
|
221
295
|
|-------|-------------|
|
|
222
|
-
| `id` |
|
|
223
|
-
| `suiteId` | *(Optional)*
|
|
296
|
+
| `id` | Test Plan ID |
|
|
297
|
+
| `suiteId` | *(Optional)* Target suite ID |
|
|
298
|
+
| `suiteMapping` | *(Optional)* `"flat"` or `"byFolder"` |
|
|
299
|
+
| `include` | *(Optional)* Override `local.include` for this plan |
|
|
300
|
+
| `exclude` | *(Optional)* Override `local.exclude` for this plan |
|
|
301
|
+
|
|
302
|
+
---
|
|
224
303
|
|
|
225
304
|
### `local`
|
|
226
305
|
|
|
227
306
|
| Field | Description |
|
|
228
307
|
|-------|-------------|
|
|
229
|
-
| `type` | `"gherkin"` for `.feature` files · `"markdown"` for prose `.md` specs
|
|
308
|
+
| `type` | `"gherkin"` for `.feature` files · `"markdown"` for prose `.md` specs |
|
|
230
309
|
| `include` | Glob pattern(s) relative to the config file. String or array. |
|
|
231
310
|
| `exclude` | *(Optional)* Glob pattern(s) to exclude. String or array. |
|
|
232
311
|
|
|
312
|
+
---
|
|
313
|
+
|
|
233
314
|
### `sync`
|
|
234
315
|
|
|
235
316
|
| Field | Default | Description |
|
|
236
317
|
|-------|---------|-------------|
|
|
237
|
-
| `tagPrefix` | `"tc"` | Prefix used in ID tags. See [ID tags](#id-tags)
|
|
318
|
+
| `tagPrefix` | `"tc"` | Prefix used in ID tags. See [ID tags](#id-tags). |
|
|
319
|
+
| `titleField` | `"System.Title"` | Azure DevOps field used as the test case title. |
|
|
238
320
|
| `areaPath` | *(none)* | Area path for newly created Test Cases. |
|
|
239
321
|
| `iterationPath` | *(none)* | Iteration path for newly created Test Cases. |
|
|
322
|
+
| `disableLocalChanges` | `false` | When `true`, no local files are modified — no ID writeback, no pull apply. Use in CI pipelines that should not commit file changes. |
|
|
323
|
+
| `conflictAction` | `"overwrite"` | How to handle conflicts (remote changed since last sync AND local also differs). `"overwrite"` — push local version. `"skip"` — emit a conflict result, leave both sides unchanged. `"fail"` — throw an error listing all conflicts. |
|
|
324
|
+
| `links` | `[]` | Work item link configurations. See [Work item linking](#work-item-linking). |
|
|
240
325
|
|
|
241
326
|
---
|
|
242
327
|
|
|
@@ -246,7 +331,7 @@ After a scenario is pushed for the first time, ado-sync writes the Azure Test Ca
|
|
|
246
331
|
|
|
247
332
|
### Gherkin
|
|
248
333
|
|
|
249
|
-
The ID tag is inserted on its own line immediately above the `Scenario:`
|
|
334
|
+
The ID tag is inserted on its own line immediately above the `Scenario:` or `Scenario Outline:` keyword:
|
|
250
335
|
|
|
251
336
|
```gherkin
|
|
252
337
|
Feature: Login
|
|
@@ -258,11 +343,23 @@ Feature: Login
|
|
|
258
343
|
Then I am redirected to the inventory page
|
|
259
344
|
```
|
|
260
345
|
|
|
261
|
-
|
|
346
|
+
For `Scenario Outline`, a **single** parametrized Test Case is created in Azure with a data table — one `@tc:ID` tag for the whole outline, not one per example row.
|
|
347
|
+
|
|
348
|
+
```gherkin
|
|
349
|
+
@tc:1043
|
|
350
|
+
Scenario Outline: Login with different roles
|
|
351
|
+
Given I am logged in as "<role>"
|
|
352
|
+
Then I can see "<dashboard>"
|
|
353
|
+
|
|
354
|
+
Examples:
|
|
355
|
+
| role | dashboard |
|
|
356
|
+
| admin | Admin view |
|
|
357
|
+
| tester | Test view |
|
|
358
|
+
```
|
|
262
359
|
|
|
263
360
|
### Markdown
|
|
264
361
|
|
|
265
|
-
The ID comment is inserted on the line immediately after the `### heading
|
|
362
|
+
The ID comment is inserted on the line immediately after the `### heading`:
|
|
266
363
|
|
|
267
364
|
```markdown
|
|
268
365
|
### 1. Login (happy path)
|
|
@@ -317,9 +414,11 @@ ado-sync pull --tags "@regression or @critical"
|
|
|
317
414
|
```
|
|
318
415
|
|
|
319
416
|
Tags are evaluated against all tags on a scenario, including:
|
|
320
|
-
|
|
417
|
+
|
|
418
|
+
- Tags inherited from the Feature block (Gherkin)
|
|
321
419
|
- Tags on the Scenario / Scenario Outline block
|
|
322
420
|
- Tags on individual Examples tables
|
|
421
|
+
- Inline `<!-- tags: -->` comments in Markdown (see below)
|
|
323
422
|
- **Path-based auto-tags** — directory segments prefixed with `@` are automatically applied as tags to all scenarios in that directory:
|
|
324
423
|
|
|
325
424
|
```
|
|
@@ -331,12 +430,31 @@ Tags are evaluated against all tags on a scenario, including:
|
|
|
331
430
|
checkout.feature ← all scenarios get tags 'regression' and 'slow'
|
|
332
431
|
```
|
|
333
432
|
|
|
334
|
-
This lets you filter by folder without adding tags to every scenario manually:
|
|
335
433
|
```bash
|
|
336
434
|
ado-sync push --tags "@smoke" # only push specs/@smoke/** scenarios
|
|
337
435
|
```
|
|
338
436
|
|
|
339
|
-
|
|
437
|
+
### Tags in Markdown
|
|
438
|
+
|
|
439
|
+
Add a `<!-- tags: -->` HTML comment anywhere inside a scenario block to assign tags:
|
|
440
|
+
|
|
441
|
+
```markdown
|
|
442
|
+
### Login with valid credentials
|
|
443
|
+
<!-- tc: 1042 -->
|
|
444
|
+
<!-- tags: @smoke, @regression -->
|
|
445
|
+
|
|
446
|
+
Steps:
|
|
447
|
+
1. Navigate to the login page
|
|
448
|
+
2. Enter valid credentials
|
|
449
|
+
3. Click Login
|
|
450
|
+
|
|
451
|
+
Expected results:
|
|
452
|
+
- Dashboard is shown
|
|
453
|
+
|
|
454
|
+
---
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
Path-based auto-tagging also works for Markdown files — placing them inside an `@smoke/` folder automatically adds the `smoke` tag.
|
|
340
458
|
|
|
341
459
|
---
|
|
342
460
|
|
|
@@ -348,7 +466,7 @@ Standard Gherkin syntax is supported, including:
|
|
|
348
466
|
- `Feature` / `Scenario` / `Scenario Outline`
|
|
349
467
|
- `Given` / `When` / `Then` / `And` / `But`
|
|
350
468
|
- Feature-level and scenario-level tags
|
|
351
|
-
- `Examples` tables —
|
|
469
|
+
- `Scenario Outline` with `Examples` tables — creates a **single** parametrized Test Case in Azure (data table included), not one TC per row
|
|
352
470
|
|
|
353
471
|
```gherkin
|
|
354
472
|
Feature: Checkout
|
|
@@ -366,8 +484,8 @@ Feature: Checkout
|
|
|
366
484
|
Then the result is "<result>"
|
|
367
485
|
|
|
368
486
|
Examples:
|
|
369
|
-
| user
|
|
370
|
-
| standard_user
|
|
487
|
+
| user | result |
|
|
488
|
+
| standard_user | success |
|
|
371
489
|
| performance_glitch_user | success |
|
|
372
490
|
```
|
|
373
491
|
|
|
@@ -381,6 +499,9 @@ Each `### heading` is treated as one test case. The file can contain any number
|
|
|
381
499
|
## Test scenarios
|
|
382
500
|
|
|
383
501
|
### Login with valid credentials
|
|
502
|
+
<!-- tags: @smoke -->
|
|
503
|
+
|
|
504
|
+
Assumption: Fresh browser session.
|
|
384
505
|
|
|
385
506
|
Steps:
|
|
386
507
|
1. Navigate to https://example.com/login
|
|
@@ -407,8 +528,130 @@ Expected results:
|
|
|
407
528
|
---
|
|
408
529
|
```
|
|
409
530
|
|
|
410
|
-
|
|
411
|
-
|
|
531
|
+
Sections recognised: `Steps:`, `Expected results:` (case-insensitive). All other prose is captured as the test case description. Heading number prefixes (`### 1. Title` or `### Title`) are both supported.
|
|
532
|
+
|
|
533
|
+
#### Playwright test-plan markdown
|
|
534
|
+
|
|
535
|
+
Markdown `.md` files generated by the [Playwright MCP agent](https://playwright.dev/docs/test-agents) are fully supported as a local spec source. Set `local.type: "markdown"` and point `local.include` at the generated files to sync them into Azure DevOps as Test Cases.
|
|
536
|
+
|
|
537
|
+
---
|
|
538
|
+
|
|
539
|
+
## Work item linking
|
|
540
|
+
|
|
541
|
+
Tags matching a configured `links` prefix are turned into Azure DevOps work item relations on the Test Case.
|
|
542
|
+
|
|
543
|
+
### Config
|
|
544
|
+
|
|
545
|
+
```json
|
|
546
|
+
{
|
|
547
|
+
"sync": {
|
|
548
|
+
"links": [
|
|
549
|
+
{ "prefix": "story", "relationship": "System.LinkTypes.Related" },
|
|
550
|
+
{ "prefix": "bug", "relationship": "System.LinkTypes.Related" },
|
|
551
|
+
{ "prefix": "req", "relationship": "Microsoft.VSTS.Common.TestedBy-Reverse" }
|
|
552
|
+
]
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
### Usage in Gherkin
|
|
558
|
+
|
|
559
|
+
```gherkin
|
|
560
|
+
@tc:1042 @story:555 @bug:789
|
|
561
|
+
Scenario: User can add items to cart
|
|
562
|
+
...
|
|
563
|
+
```
|
|
564
|
+
|
|
565
|
+
### Usage in Markdown
|
|
566
|
+
|
|
567
|
+
```markdown
|
|
568
|
+
### User can add items to cart
|
|
569
|
+
<!-- tc: 1042 -->
|
|
570
|
+
<!-- tags: @story:555, @bug:789 -->
|
|
571
|
+
```
|
|
572
|
+
|
|
573
|
+
On each `push`, relations are synced: new links are added and stale links (whose tag was removed) are deleted. The `relationship` value is the ADO relation type; `"System.LinkTypes.Related"` is the default if omitted.
|
|
574
|
+
|
|
575
|
+
---
|
|
576
|
+
|
|
577
|
+
## Suite hierarchy
|
|
578
|
+
|
|
579
|
+
By default, all Test Cases are created in a single flat suite (`suiteMapping: "flat"`). Setting `suiteMapping: "byFolder"` mirrors the folder structure of your spec files as nested child suites in Azure.
|
|
580
|
+
|
|
581
|
+
```json
|
|
582
|
+
{
|
|
583
|
+
"testPlan": {
|
|
584
|
+
"id": 1234,
|
|
585
|
+
"suiteId": 5678,
|
|
586
|
+
"suiteMapping": "byFolder"
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
```
|
|
592
|
+
specs/
|
|
593
|
+
login/
|
|
594
|
+
basic.feature → suite "login" → TC "Successful login"
|
|
595
|
+
checkout/
|
|
596
|
+
happy.feature → suite "checkout" → TC "Add item and checkout"
|
|
597
|
+
```
|
|
598
|
+
|
|
599
|
+
Child suites are created automatically if they do not exist. The suite hierarchy is re-used across runs.
|
|
600
|
+
|
|
601
|
+
---
|
|
602
|
+
|
|
603
|
+
## Conflict detection
|
|
604
|
+
|
|
605
|
+
ado-sync uses a local state cache (`.ado-sync-state.json`) to detect conflicts — cases where **both** the local file and the Azure Test Case were changed since the last sync.
|
|
606
|
+
|
|
607
|
+
The `sync.conflictAction` setting controls what happens:
|
|
608
|
+
|
|
609
|
+
| Value | Behaviour |
|
|
610
|
+
|-------|-----------|
|
|
611
|
+
| `"overwrite"` *(default)* | Push the local version to Azure, overwriting the remote change. |
|
|
612
|
+
| `"skip"` | Emit a `!` conflict result for the scenario and leave both sides unchanged. |
|
|
613
|
+
| `"fail"` | Throw an error listing all conflicting scenarios and abort the sync. |
|
|
614
|
+
|
|
615
|
+
```json
|
|
616
|
+
{ "sync": { "conflictAction": "skip" } }
|
|
617
|
+
```
|
|
618
|
+
|
|
619
|
+
---
|
|
620
|
+
|
|
621
|
+
## Local state cache
|
|
622
|
+
|
|
623
|
+
ado-sync writes a `.ado-sync-state.json` file in the same directory as your config file. This cache stores SHA-256 hashes of the last-synced title, steps, and description for each Test Case, plus the Azure `changedDate` timestamp.
|
|
624
|
+
|
|
625
|
+
**Commit this file to version control** so all team members and CI share the same last-synced state, enabling accurate conflict detection across machines.
|
|
626
|
+
|
|
627
|
+
The cache also speeds up `push` — if neither the local file nor the Azure `changedDate` has changed since the last sync, the Azure API call is skipped entirely and the scenario is marked `skipped`.
|
|
628
|
+
|
|
629
|
+
---
|
|
630
|
+
|
|
631
|
+
## Build server / CI mode
|
|
632
|
+
|
|
633
|
+
Set `sync.disableLocalChanges: true` to prevent ado-sync from writing back to local files. In this mode:
|
|
634
|
+
|
|
635
|
+
- `push` — creates and updates Test Cases in Azure, but does **not** write ID tags back to local files.
|
|
636
|
+
- `pull` — computes what would change but does **not** modify local files (behaves like `--dry-run`).
|
|
637
|
+
|
|
638
|
+
```json
|
|
639
|
+
{ "sync": { "disableLocalChanges": true } }
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
Or use `--config-override` per run:
|
|
643
|
+
|
|
644
|
+
```bash
|
|
645
|
+
ado-sync push --config-override sync.disableLocalChanges=true
|
|
646
|
+
```
|
|
647
|
+
|
|
648
|
+
---
|
|
649
|
+
|
|
650
|
+
## Removed scenario detection
|
|
651
|
+
|
|
652
|
+
When a scenario is deleted from a local spec file but its Test Case still exists in the Azure suite, ado-sync detects this on the next `push` and appends the tag `ado-sync:removed` to the Azure Test Case (without deleting it). A `−` removed line is printed in the output.
|
|
653
|
+
|
|
654
|
+
To completely remove the Test Case from Azure, delete it manually in Test Plans after reviewing.
|
|
412
655
|
|
|
413
656
|
---
|
|
414
657
|
|
|
@@ -425,17 +668,22 @@ auth:
|
|
|
425
668
|
testPlan:
|
|
426
669
|
id: 1234
|
|
427
670
|
suiteId: 5678
|
|
671
|
+
suiteMapping: byFolder
|
|
428
672
|
|
|
429
673
|
local:
|
|
430
|
-
type:
|
|
431
|
-
include:
|
|
432
|
-
- specs/**/*.md
|
|
674
|
+
type: gherkin
|
|
675
|
+
include: specs/**/*.feature
|
|
433
676
|
exclude:
|
|
434
677
|
- specs/archive/**
|
|
435
678
|
|
|
436
679
|
sync:
|
|
437
680
|
tagPrefix: tc
|
|
438
681
|
areaPath: "MyProject\\QA Team"
|
|
682
|
+
conflictAction: skip
|
|
683
|
+
disableLocalChanges: false
|
|
684
|
+
links:
|
|
685
|
+
- prefix: story
|
|
686
|
+
relationship: System.LinkTypes.Related
|
|
439
687
|
```
|
|
440
688
|
|
|
441
689
|
---
|
|
@@ -458,7 +706,8 @@ You can also use a `.env` file in the working directory. It is loaded automatica
|
|
|
458
706
|
~ updated — existing Test Case updated
|
|
459
707
|
↓ pulled — local file updated from Azure DevOps
|
|
460
708
|
= skipped — no changes detected
|
|
461
|
-
! conflict — both sides changed (
|
|
709
|
+
! conflict — both sides changed (see conflictAction)
|
|
710
|
+
− removed — local scenario deleted; Test Case tagged ado-sync:removed in Azure
|
|
462
711
|
✗ error — something went wrong (see detail message)
|
|
463
712
|
```
|
|
464
713
|
|
|
@@ -504,6 +753,26 @@ ado-sync pull
|
|
|
504
753
|
ado-sync status
|
|
505
754
|
```
|
|
506
755
|
|
|
756
|
+
### CI pipeline (no file writeback)
|
|
757
|
+
|
|
758
|
+
```yaml
|
|
759
|
+
# GitHub Actions example
|
|
760
|
+
- name: Sync test cases to Azure DevOps
|
|
761
|
+
run: ado-sync push --config-override sync.disableLocalChanges=true
|
|
762
|
+
env:
|
|
763
|
+
AZURE_DEVOPS_TOKEN: ${{ secrets.AZURE_DEVOPS_TOKEN }}
|
|
764
|
+
```
|
|
765
|
+
|
|
766
|
+
### Override plan per environment
|
|
767
|
+
|
|
768
|
+
```bash
|
|
769
|
+
# Push to staging plan
|
|
770
|
+
ado-sync push --config-override testPlan.id=2001
|
|
771
|
+
|
|
772
|
+
# Push to production plan
|
|
773
|
+
ado-sync push --config-override testPlan.id=3001
|
|
774
|
+
```
|
|
775
|
+
|
|
507
776
|
---
|
|
508
777
|
|
|
509
778
|
## Troubleshooting
|
|
@@ -515,7 +784,7 @@ Run `ado-sync init` or pass `-c path/to/config.json`.
|
|
|
515
784
|
Your config references `$X` in `auth.token` but the variable is not exported. Run `export X=...` or add it to a `.env` file.
|
|
516
785
|
|
|
517
786
|
**Test Case created but ID not written back**
|
|
518
|
-
Check that the local file is writable. On the next `push` it will try again.
|
|
787
|
+
Check that the local file is writable, or set `sync.disableLocalChanges: false`. On the next `push` it will try again.
|
|
519
788
|
|
|
520
789
|
**`Test case #N not found in Azure DevOps`**
|
|
521
790
|
The test case was deleted in Azure. Remove the ID tag from the local file to recreate it, or restore the test case in Azure.
|
|
@@ -524,4 +793,10 @@ The test case was deleted in Azure. Remove the ID tag from the local file to rec
|
|
|
524
793
|
Gherkin syntax error in a `.feature` file. Run `npx cucumber-js --dry-run` to identify the problem line.
|
|
525
794
|
|
|
526
795
|
**Changes not detected on push**
|
|
527
|
-
The comparison
|
|
796
|
+
The comparison uses title + steps + description. If only `areaPath` or `iterationPath` changed, touch any step to trigger an update, or use `--config-override` to set those fields and rely on the next sync.
|
|
797
|
+
|
|
798
|
+
**Conflict detected unexpectedly**
|
|
799
|
+
Delete `.ado-sync-state.json` to reset the cache. The next push will re-populate it by fetching current state from Azure.
|
|
800
|
+
|
|
801
|
+
**`init` generated JSON instead of YAML**
|
|
802
|
+
Pass the filename as a positional argument: `ado-sync init ado-sync.yml` (not `--output`).
|
package/dist/cli.js
CHANGED
|
@@ -58,16 +58,18 @@ function collect(value, previous) {
|
|
|
58
58
|
}
|
|
59
59
|
// ─── init ─────────────────────────────────────────────────────────────────────
|
|
60
60
|
program
|
|
61
|
-
.command('init')
|
|
62
|
-
.description('Generate a starter ado-sync.json
|
|
63
|
-
.
|
|
64
|
-
|
|
65
|
-
const outPath = path.resolve(
|
|
61
|
+
.command('init [output]')
|
|
62
|
+
.description('Generate a starter config file (default: ado-sync.json). Pass ado-sync.yml for YAML.')
|
|
63
|
+
.action((output) => {
|
|
64
|
+
const outFile = output ?? 'ado-sync.json';
|
|
65
|
+
const outPath = path.resolve(outFile);
|
|
66
66
|
if (fs.existsSync(outPath)) {
|
|
67
67
|
console.error(chalk_1.default.red(`File already exists: ${outPath}`));
|
|
68
68
|
process.exit(1);
|
|
69
69
|
}
|
|
70
|
-
|
|
70
|
+
const ext = path.extname(outFile).toLowerCase();
|
|
71
|
+
const isYaml = ext === '.yml' || ext === '.yaml';
|
|
72
|
+
fs.writeFileSync(outPath, isYaml ? config_1.CONFIG_TEMPLATE_YAML : config_1.CONFIG_TEMPLATE_JSON, 'utf8');
|
|
71
73
|
console.log(chalk_1.default.green(`Created ${outPath}`));
|
|
72
74
|
console.log(chalk_1.default.dim('Edit the file with your Azure DevOps details, then run:'));
|
|
73
75
|
console.log(chalk_1.default.dim(' ado-sync push (to create test cases from local specs)'));
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yBAAuB;AAEvB,kDAA0B;AAC1B,yCAAoC;AACpC,uCAAyB;AACzB,2CAA6B;AAE7B,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
package/dist/config.js
CHANGED
|
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.CONFIG_TEMPLATE_JSON = void 0;
|
|
36
|
+
exports.CONFIG_TEMPLATE_YAML = exports.CONFIG_TEMPLATE_JSON = void 0;
|
|
37
37
|
exports.resolveConfigPath = resolveConfigPath;
|
|
38
38
|
exports.loadConfig = loadConfig;
|
|
39
39
|
exports.applyOverrides = applyOverrides;
|
|
@@ -147,7 +147,7 @@ function applyOverrides(cfg, overrides) {
|
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
|
-
|
|
150
|
+
const CONFIG_TEMPLATE_OBJECT = {
|
|
151
151
|
orgUrl: 'https://dev.azure.com/YOUR_ORG',
|
|
152
152
|
project: 'YOUR_PROJECT',
|
|
153
153
|
auth: {
|
|
@@ -173,5 +173,7 @@ exports.CONFIG_TEMPLATE_JSON = JSON.stringify({
|
|
|
173
173
|
conflictAction: 'overwrite',
|
|
174
174
|
links: [],
|
|
175
175
|
},
|
|
176
|
-
}
|
|
176
|
+
};
|
|
177
|
+
exports.CONFIG_TEMPLATE_JSON = JSON.stringify(CONFIG_TEMPLATE_OBJECT, null, 2);
|
|
178
|
+
exports.CONFIG_TEMPLATE_YAML = yaml.dump(CONFIG_TEMPLATE_OBJECT, { indent: 2, lineWidth: 120 });
|
|
177
179
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"orgUrl": "https://dev.azure.com/YOUR_ORG",
|
|
3
|
+
"project": "YOUR_PROJECT",
|
|
4
|
+
"auth": {
|
|
5
|
+
"type": "pat",
|
|
6
|
+
"token": "$AZURE_DEVOPS_TOKEN"
|
|
7
|
+
},
|
|
8
|
+
"testPlan": {
|
|
9
|
+
"id": 0,
|
|
10
|
+
"suiteId": 0,
|
|
11
|
+
"suiteMapping": "flat"
|
|
12
|
+
},
|
|
13
|
+
"local": {
|
|
14
|
+
"type": "gherkin",
|
|
15
|
+
"include": "specs/**/*.feature",
|
|
16
|
+
"exclude": []
|
|
17
|
+
},
|
|
18
|
+
"sync": {
|
|
19
|
+
"tagPrefix": "tc",
|
|
20
|
+
"titleField": "System.Title",
|
|
21
|
+
"areaPath": "",
|
|
22
|
+
"iterationPath": "",
|
|
23
|
+
"disableLocalChanges": false,
|
|
24
|
+
"conflictAction": "overwrite",
|
|
25
|
+
"links": []
|
|
26
|
+
}
|
|
27
|
+
}
|