Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
6c533e7
fix(upgrade): compare prerelease versions per SemVer
riglar Jun 24, 2026
d543981
fix: suppress refresh countdown in quiet mode
riglar Jun 24, 2026
f77841f
Merge pull request #34 from devicecloud-dev/fix/upgrade-prerelease-co…
riglar Jun 24, 2026
10eade4
Merge pull request #35 from devicecloud-dev/fix/quiet-suppress-refres…
riglar Jun 24, 2026
ea62f72
feat(cloud): warn on deprecated iOS 16 (removal 2026-08-23)
finalerock44 Jun 24, 2026
d794695
Merge pull request #37 from devicecloud-dev/chore/deprecate-ios-16
finalerock44 Jun 24, 2026
62c7672
feat(cloud): drop legacy Maestro removed-versions block; soft-warn on…
finalerock44 Jun 24, 2026
ee995e7
Merge pull request #38 from devicecloud-dev/chore/maestro-deprecation
finalerock44 Jun 24, 2026
ec16bcc
fix(installer): make beta opt-in, add stable/beta channels
riglar Jun 24, 2026
77cf138
chore: add open-source contribution governance
finalerock44 Jun 24, 2026
88c3532
Merge pull request #39 from devicecloud-dev/fix/installer-beta-opt-in
riglar Jun 24, 2026
129f802
chore: drop CODEOWNERS
finalerock44 Jun 24, 2026
ebac7e2
Merge pull request #40 from devicecloud-dev/chore/oss-governance
finalerock44 Jun 24, 2026
dc87257
fix(ci): keep dependabot and fork PRs green (#46)
finalerock44 Jun 24, 2026
07074d3
ci: power CLA via the shared automation GitHub App (#49)
finalerock44 Jun 24, 2026
d3b0acc
docs: set legal entity to Moropo Ltd t/a DeviceCloud (#50)
finalerock44 Jun 24, 2026
3fe1f21
ci: bump the actions group across 1 directory with 6 updates (#47)
dependabot[bot] Jun 24, 2026
d780e55
fix: v5 release blockers — installer, binary version, repeated flags,…
finalerock44 Jun 24, 2026
7fd253a
chore(dev): release 5.0.0-beta.2 (#36)
github-actions[bot] Jun 24, 2026
bd60298
fix: stop CLA locking release PRs (breaks release pipeline) (#52)
finalerock44 Jun 24, 2026
a02584f
feat(live): add a beta warning to `dcd live start` (#54)
finalerock44 Jun 25, 2026
3eedde3
chore(dev): release 5.0.0-beta.3 (#53)
dcd-cli-release-please[bot] Jun 25, 2026
b72b83a
chore: remove dead Maestro 1.39.5/1.41.0 deprecation warning (#57)
finalerock44 Jun 26, 2026
10dfdbf
feat: render DB-driven notices and forward CLI/CI identity (#58)
finalerock44 Jun 26, 2026
58c3b1b
chore(dev): release 5.0.0-beta.4 (#59)
dcd-cli-release-please[bot] Jun 26, 2026
c99f040
fix: notices render polish (#60)
finalerock44 Jun 26, 2026
5adec18
chore: release 5.0.1-beta.1 (#62)
finalerock44 Jun 26, 2026
ee23356
chore(dev): release 5.0.1-beta.1 (#61)
dcd-cli-release-please[bot] Jun 26, 2026
1d331b4
refactor: route notice rendering through ui (add ui.deprecation) (#66)
finalerock44 Jun 29, 2026
851f051
chore: bump eslint-plugin-unicorn from 68.0.0 to 69.0.0 (#70)
dependabot[bot] Jul 10, 2026
cfd9fe2
deps: bump the minor-and-patch group across 1 directory with 9 update…
dependabot[bot] Jul 10, 2026
7fd7748
fix: recover cleanly when the stored session is dead (#72)
riglar Jul 10, 2026
b78a1dc
feat(cloud): device matrix via repeated --ios-config/--android-config…
finalerock44 Jul 13, 2026
bc9c61f
chore: release 5.2.0-beta.1 (#76)
finalerock44 Jul 13, 2026
4ef0292
chore(dev): release 5.2.0-beta.1 (#67)
dcd-cli-release-please[bot] Jul 13, 2026
fc3ea3f
refactor(cloud): rename --ios-config/--android-config to --ios-device…
finalerock44 Jul 13, 2026
8b6fde1
docs: correct the release bump table — a breaking `!` bumps the MAJOR…
finalerock44 Jul 13, 2026
db71189
chore(dev): release 5.2.0-beta.2 (#78)
dcd-cli-release-please[bot] Jul 13, 2026
5560158
fix(cloud): refuse a device matrix on an API that cannot honour it (#80)
finalerock44 Jul 13, 2026
1e7a1eb
chore(dev): release 5.2.0-beta.3 (#81)
dcd-cli-release-please[bot] Jul 13, 2026
cc5ee4d
fix(deps): resolve pnpm audit failures in transitive dependencies (#89)
riglar Jul 23, 2026
cbac88b
chore: bump eslint-plugin-unicorn from 69.0.0 to 71.1.0 (#85)
dependabot[bot] Jul 23, 2026
5730af7
ci: bump actions/setup-node from 6 to 7 in the actions group (#86)
dependabot[bot] Jul 23, 2026
f333be9
deps: bump the minor-and-patch group across 1 directory with 7 update…
dependabot[bot] Jul 23, 2026
a4f11ff
deps: patch js-yaml and brace-expansion DoS advisories (#95)
riglar Jul 27, 2026
1b29d2d
deps: bump chalk from 5.6.2 to 6.0.0 (#98)
dependabot[bot] Jul 30, 2026
7d85979
chore: bump eslint-plugin-unicorn from 71.1.0 to 72.0.0 (#97)
dependabot[bot] Jul 30, 2026
f6fcfaf
feat(artifacts): prefer server-assembled bundle delivery for download…
riglar Jul 30, 2026
47b9d90
deps: bump the minor-and-patch group across 1 directory with 5 update…
dependabot[bot] Jul 30, 2026
a34d9d4
feat: client-side envelope encryption of binaries, flow zips & env va…
riglar Jul 30, 2026
6e244a9
feat(upload): dedup encrypted binaries on the plaintext hash (#101)
riglar Aug 3, 2026
3888fc5
refactor(cloud): remove mitmproxy flags (#102)
riglar Aug 3, 2026
f7934b0
fix(deps): resolve three new transitive security advisories (#106)
finalerock44 Aug 5, 2026
2fd4bdf
chore: regenerate schema types from the current API swagger (#105)
finalerock44 Aug 5, 2026
3d24435
feat(device): add Android API level 37 (Android 17) (#107)
finalerock44 Aug 6, 2026
4af1ddb
ci: bump pnpm/action-setup from 6 to 6.0.9 in the actions group (#103)
dependabot[bot] Aug 6, 2026
3038ed8
chore(dev): release 5.2.0-beta.4 (#91)
dcd-cli-release-please[bot] Aug 7, 2026
13d01ee
fix(cloud): exclude config-shaped files from flow discovery (#114)
finalerock44 Aug 10, 2026
0c70928
chore: bump eslint-plugin-unicorn from 72.0.0 to 73.0.0 (#113)
dependabot[bot] Aug 10, 2026
2223dd4
deps: bump the minor-and-patch group with 5 updates (#112)
dependabot[bot] Aug 10, 2026
96147df
ci: bump pnpm/action-setup from 6.0.9 to 6.0.10 in the actions group …
dependabot[bot] Aug 10, 2026
6858220
chore: pin the next dev beta to 5.3.1-beta.1 (#116)
finalerock44 Aug 10, 2026
57711c6
chore(dev): release 5.3.1-beta.1 (#115)
dcd-cli-release-please[bot] Aug 10, 2026
1973a42
fix(cloud): reject malformed executionOrder instead of silently runni…
finalerock44 Aug 13, 2026
43e7324
chore(dev): release 5.3.1-beta.2 (#118)
dcd-cli-release-please[bot] Aug 13, 2026
1c07fc1
deps: bump the minor-and-patch group with 6 updates (#121)
dependabot[bot] Aug 18, 2026
2b89f3a
ci: stop reaching into the private dcd repo for the mock-api (#124)
finalerock44 Aug 18, 2026
fcfa524
feat!: remove iOS 16 (#126)
finalerock44 Aug 24, 2026
a60611d
chore: release the iOS 16 removal as 5.4.0, not 6.0.0 (#127)
finalerock44 Aug 24, 2026
0aaa652
chore(dev): release 5.4.0-beta.0 (#122)
dcd-cli-release-please[bot] Aug 24, 2026
1333960
feat(device): add iOS 27 and the iPhone 17 family (#131)
finalerock44 Aug 27, 2026
3222dda
fix(ci): point the CLA check at our node24 fork (#135)
finalerock44 Sep 2, 2026
38f6dfa
feat(device): drop the iPhone 17 family (#134)
finalerock44 Sep 2, 2026
b903241
docs(ci): the CLA action fork must stay public (#136)
finalerock44 Sep 2, 2026
0d2234a
deps: bump the minor-and-patch group across 1 directory with 4 update…
dependabot[bot] Sep 2, 2026
fc43dc6
chore: release 5.4.1-beta.1 (#137)
finalerock44 Sep 2, 2026
7ccb0c9
fix(deps): refresh audit overrides to the patched versions (#141)
finalerock44 Sep 10, 2026
df39281
chore: bump mocha from 11.8.0 to 12.0.0 (#140)
dependabot[bot] Sep 10, 2026
7daa42b
chore: bump eslint-plugin-unicorn from 73.0.0 to 74.0.0 (#139)
dependabot[bot] Sep 10, 2026
9b5f751
fix(deps): adopt bplist-parser 0.5 named exports (#143)
finalerock44 Sep 10, 2026
9a4ad49
deps: bump the minor-and-patch group across 1 directory with 5 update…
dependabot[bot] Sep 10, 2026
97cad3d
chore(dev): release 5.4.1-beta.1 (#132)
dcd-cli-release-please[bot] Sep 10, 2026
9d9e413
feat(notices): expose platform, device and Maestro version to notice …
finalerock44 Sep 10, 2026
190a0e9
chore(dev): release 5.5.0-beta.1 (#148)
dcd-cli-release-please[bot] Sep 10, 2026
84190d1
chore: promote the notices targeting change into 5.4.1
finalerock44 Sep 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 19 additions & 3 deletions src/commands/cloud.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ import {
CompatibilityData,
fetchCompatibilityData,
} from '../utils/compatibility.js';
import { renderNotices } from '../services/notices.service.js';
import { platformFromAppFile, renderNotices } from '../services/notices.service.js';
import { resolveApiUrl } from '../utils/config-store.js';
import { downloadExpoUrl, extractTarGz, findAppBundle, isUrl } from '../utils/expo.js';
import {
Expand Down Expand Up @@ -494,17 +494,32 @@ export const cloudCommand = defineCommand({
// returned with the compatibility data. Replaces the previously hardcoded
// iOS-16 deprecation warning — that is now a seeded notice gated on the
// selected iOS version below. Honours --json via out/warnOut.
renderNotices(
const visibleNotices = renderNotices(
compatibilityData.notices,
{
platform: platformFromAppFile(finalAppFile),
ios_version: iOSVersion,
ios_device: iOSDevice,
android_api_level: androidApiLevel,
android_device: androidDevice,
// Resolved (what the run will use) and requested (undefined when the
// customer relied on the default), so a notice can target either.
maestro_version: resolvedMaestroVersion,
requested_maestro_version: maestroVersion,
cli_version: cliVersion,
ci_provider: ciContext.provider,
ci_wrapper_version: ciContext.wrapperVersion,
},
{ out },
);
// --json suppresses the rendered lines, so the payload carries them instead.
const noticesForJson = visibleNotices.map((n) => ({
slug: n.slug,
level: n.level,
title: n.title,
body: n.body,
learnMoreUrl: n.learnMoreUrl,
}));

deviceValidationService.validateAndroidDevice(
androidApiLevel,
Expand Down Expand Up @@ -963,6 +978,7 @@ export const cloudCommand = defineCommand({
tags: testMetadataMap[r.test_file_name]?.tags || [],
})),
uploadId: results[0].test_upload_id,
notices: noticesForJson,
};

if (jsonFileFlag) {
Expand Down Expand Up @@ -1087,7 +1103,7 @@ export const cloudCommand = defineCommand({
});
}

const jsonOutput = pollingResult;
const jsonOutput = { ...pollingResult, notices: noticesForJson };
if (jsonFileFlag) {
const jsonFilePath = jsonFileName || `${results[0].test_upload_id}_dcd.json`;
writeJSONFile(jsonFilePath, jsonOutput, {
Expand Down
15 changes: 15 additions & 0 deletions src/services/notices.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,21 @@ function renderNotice(notice: Notice, opts: RenderNoticesOptions): void {
* payload instead of printing. `opts.out` is the caller's `--json`-gated
* emitter, so under `--json` nothing prints but the list is still returned.
*/
/**
* Best-effort platform from the app artifact's extension, so a notice can be
* targeted at one platform (e.g. "you rely on the default Android API level")
* without firing on the other platform's runs.
*/
export function platformFromAppFile(
appFile: string | undefined,
): 'android' | 'ios' | undefined {
if (!appFile) return undefined;
const ext = appFile.split('?')[0].toLowerCase().match(/.([a-z0-9]+)$/)?.[1];
if (ext === 'apk' || ext === 'aab') return 'android';
if (ext === 'zip' || ext === 'app' || ext === 'ipa') return 'ios';
return undefined;
}

export function renderNotices(
notices: Notice[] | undefined,
ctx: NoticeContext,
Expand Down
Loading