You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Promote from dev to stable:
* feat(cloud): upload-level device matrix (#1105) — one `dcd cloud` upload
carries N device configs via repeatable `--ios-device-matrix <device>:<version>`
/ `--android-device-matrix <device>:<apiLevel>[:play]`, fanning out into one
result row per (flow × config). Each flag names exactly one validated cell;
there is no cross-product. Sequential flows form N independent depends_on
chains, one per device. Adds a pre-submit cell-count + cost preview and a
`device` object on each `--json` `tests[]` entry.
* fix(cloud): refuse a device matrix on an API that cannot honour it — an older
API silently strips the unknown field and runs one device, exiting 0; the CLI
now fails loudly instead of under-testing in silence.
* test: run the integration suite via execFile argv rather than a shell,
clearing the whole js/shell-command-injection-from-environment class.
REQUIRES the dcd API carrying #1105 to be on production first. Without it the
matrix flags cannot be honoured (the CLI refuses, by design).
Carries only the source delta — package.json version, CHANGELOG.md and the
release-please manifests stay as release-please left them on production.
Release-As: 5.2.0
Copy file name to clipboardExpand all lines: CLAUDE.md
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -53,7 +53,8 @@ Full guide in `CONTRIBUTING.md`; the operationally important parts (the ones tha
53
53
54
54
-**Branch off `dev`** (the default branch) and open PRs **against `dev`**. `production` is the maintainer-only stable track — never target it directly.
55
55
- PRs are **squash-merged**, so the **PR title becomes the commit** and must be a [Conventional Commit](https://www.conventionalcommits.org). The title — not the branch commits — is what release-please reads to compute the next version, so it matters even though individual commits are squashed away. A `PR Title` CI check enforces it.
56
-
- Type → bump (pre-1.0, so `feat` and breaking `!` both bump **minor**): `feat` minor; `fix`/`perf`/`deps`/`revert`/`refactor` patch; `docs`/`chore`/`test`/`ci`/`build`/`style` are hidden and bump nothing. Allowed scopes are free-form.
56
+
- Type → bump: `feat`**minor**; `fix`/`perf`/`deps`/`revert`/`refactor`**patch**; `docs`/`chore`/`test`/`ci`/`build`/`style` are hidden and bump nothing. Allowed scopes are free-form.
57
+
- ⚠️ **A `!` (or `BREAKING CHANGE:` footer) bumps the MAJOR — do not use it casually.** The configs set `bump-minor-pre-major: true`, but that only applies **below 1.0.0**; we are on 5.x, so it is inert and a breaking marker means exactly what semver says. A `refactor(cloud)!:` PR title once produced a `6.0.0-beta.1` release PR for what was only a flag rename in an unconsumed beta. Because PRs are squash-merged, **the PR title IS the commit** — the `!` lands even if no branch commit carried it.
57
58
-**Never hand-edit `package.json` version, `CHANGELOG.md`, or the `.release-please-manifest*.json` files** — release-please owns all of them. `src/types/generated/schema.types.ts` is likewise generated (openapi-typescript).
58
59
- A first-time contributor must sign the CLA (the CLA Assistant bot comments on the first PR); the CLA check must be green to merge.
59
60
-**CI (`.github/workflows/cli-ci.yml`) runs on every PR** including forks: gitleaks secret scan, `pnpm lint`, `pnpm typecheck`, `pnpm build`, `pnpm audit --audit-level moderate`. The **integration tests need the private `devicecloud-dev/dcd` mock-api** (cloned via the `DCD_SSH_DEPLOY_KEY` secret), and GitHub withholds secrets from fork and Dependabot PRs — so `pnpm test` is **skipped there** and a maintainer runs the full suite before merge. gitleaks also runs as a pre-commit hook (allowlist in `.gitleaks.toml`); without the binary installed the hook self-skips and CI is the backstop.
Copy file name to clipboardExpand all lines: src/config/flags/device.flags.ts
+8Lines changed: 8 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -42,6 +42,14 @@ export const deviceFlags = {
42
42
type: 'string',
43
43
description: `[iOS only] iOS version to run your flow against (options: ${iosVersions})`,
44
44
},
45
+
'ios-device-matrix': {
46
+
type: 'string',
47
+
description: `[iOS only] Device-matrix cell as <device>:<version>, e.g. iphone-16:18. Repeatable — every flow runs once per cell (no cross-product). Cannot be combined with --android-device-matrix.`,
48
+
},
49
+
'android-device-matrix': {
50
+
type: 'string',
51
+
description: `[Android only] Device-matrix cell as <device>:<apiLevel> (append :play for Google Play), e.g. pixel-7:34 or pixel-7:34:play. Repeatable — every flow runs once per cell (no cross-product). Cannot be combined with --ios-device-matrix.`,
0 commit comments