Skip to content

Commit 7962bc5

Browse files
authored
Notices (#2560)
* add notices schema * add notices schema * add missing entry * we need that too. * remove id. * remove id. * add validator * spacing * validator * more * move stuff to cli-core * more predicates * changeset * fix that * tests * lint * fixes * fixes * remove that * add e2e test * lint * more * printer * api * print post command * add some predicates * post merge fixes * more predicates * rename * add to sandbox * add to sandbox * this works * this works * almost all * changeset * api * fix * more tests * more * AI generated tests. * more tests * more tests * more tests * post merge fixes * more tests * more tests * more !!! * strings changes * finito for now * package lock * fix typo * change enum * use two files * add validations * improve error * refactor
1 parent 1d2b36f commit 7962bc5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+3249
-162
lines changed

.changeset/fuzzy-flowers-agree.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@aws-amplify/backend-cli': patch
3+
---
4+
5+
Add notices

.changeset/rich-walls-peel.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
---
22
'@aws-amplify/backend-cli': patch
3+
'@aws-amplify/platform-core': minor
34
---
45

56
fix: exclude logs streaming options from sandbox command help output

.eslint_dictionary.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
[
22
"acceptor",
33
"acceptors",
4+
"acknowledgement",
5+
"acknowledgements",
46
"aggregator",
57
"amazonaws",
68
"amazoncognito",
@@ -63,6 +65,7 @@
6365
"esbuild",
6466
"esnext",
6567
"execa",
68+
"evaluator",
6669
"facebook",
6770
"filepath",
6871
"filesystem",

.github/workflows/health_checks.yml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,6 +532,37 @@ jobs:
532532
cdk-cli-version: ${{ needs.resolve_inputs.outputs.cdk_cli_version }}
533533
link_cli: true
534534
run: npm run test:dir ${{ matrix.testPaths }}
535+
e2e_notices:
536+
if: needs.do_include_e2e.outputs.run_e2e == 'true'
537+
strategy:
538+
# will finish running other test matrices even if one fails
539+
fail-fast: false
540+
matrix:
541+
os: ${{ fromJSON(needs.resolve_inputs.outputs.os) }}
542+
runs-on: ${{ matrix.os }}
543+
name: e2e_notices ${{ matrix.os }}
544+
timeout-minutes: 5
545+
needs:
546+
- do_include_e2e
547+
- build
548+
- resolve_inputs
549+
permissions:
550+
# these permissions are required for the configure-aws-credentials action to get a JWT from GitHub
551+
id-token: write
552+
contents: read
553+
steps:
554+
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # version 4.1.4
555+
- uses: ./.github/actions/setup_node
556+
with:
557+
node-version: 18
558+
- uses: ./.github/actions/restore_build_cache
559+
with:
560+
node-version: 18
561+
cdk-lib-version: ${{ needs.resolve_inputs.outputs.cdk_lib_version }}
562+
cdk-cli-version: ${{ needs.resolve_inputs.outputs.cdk_cli_version }}
563+
- run: cd packages/cli && npm link
564+
- name: Run e2e notices tests
565+
run: npm run test:dir packages/integration-tests/lib/test-e2e/notices.test.js
535566
e2e_backend_output:
536567
if: needs.do_include_e2e.outputs.run_e2e == 'true'
537568
runs-on: ubuntu-latest
@@ -841,6 +872,7 @@ jobs:
841872
- e2e_package_manager
842873
- e2e_deployment
843874
- e2e_sandbox
875+
- e2e_notices
844876
- e2e_create_amplify
845877
- resolve_inputs
846878
runs-on: ubuntu-latest

package-lock.json

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/cli-core/API.md

Lines changed: 24 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -158,28 +158,10 @@ export const noticeSchema: z.ZodObject<{
158158
}, {
159159
type: "errorMessage";
160160
errorMessage: string;
161-
}>, z.ZodObject<{
162-
type: z.ZodLiteral<"frequency">;
163-
frequency: z.ZodEnum<["command", "deployment", "once", "daily"]>;
164-
}, "strip", z.ZodTypeAny, {
165-
type: "frequency";
166-
frequency: "once" | "command" | "deployment" | "daily";
167-
}, {
168-
type: "frequency";
169-
frequency: "once" | "command" | "deployment" | "daily";
170-
}>, z.ZodObject<{
171-
type: z.ZodLiteral<"validityPeriod">;
172-
from: z.ZodOptional<z.ZodNumber>;
173-
to: z.ZodOptional<z.ZodNumber>;
174-
}, "strip", z.ZodTypeAny, {
175-
type: "validityPeriod";
176-
from?: number | undefined;
177-
to?: number | undefined;
178-
}, {
179-
type: "validityPeriod";
180-
from?: number | undefined;
181-
to?: number | undefined;
182161
}>]>, "many">;
162+
frequency: z.ZodOptional<z.ZodEnum<["command", "deployment", "once", "daily"]>>;
163+
validFrom: z.ZodOptional<z.ZodNumber>;
164+
validTo: z.ZodOptional<z.ZodNumber>;
183165
}, "strip", z.ZodTypeAny, {
184166
details: string;
185167
id: string;
@@ -203,15 +185,11 @@ export const noticeSchema: z.ZodObject<{
203185
} | {
204186
type: "errorMessage";
205187
errorMessage: string;
206-
} | {
207-
type: "frequency";
208-
frequency: "once" | "command" | "deployment" | "daily";
209-
} | {
210-
type: "validityPeriod";
211-
from?: number | undefined;
212-
to?: number | undefined;
213188
})[];
214189
link?: string | undefined;
190+
frequency?: "once" | "command" | "deployment" | "daily" | undefined;
191+
validFrom?: number | undefined;
192+
validTo?: number | undefined;
215193
}, {
216194
details: string;
217195
id: string;
@@ -235,15 +213,11 @@ export const noticeSchema: z.ZodObject<{
235213
} | {
236214
type: "errorMessage";
237215
errorMessage: string;
238-
} | {
239-
type: "frequency";
240-
frequency: "once" | "command" | "deployment" | "daily";
241-
} | {
242-
type: "validityPeriod";
243-
from?: number | undefined;
244-
to?: number | undefined;
245216
})[];
246217
link?: string | undefined;
218+
frequency?: "once" | "command" | "deployment" | "daily" | undefined;
219+
validFrom?: number | undefined;
220+
validTo?: number | undefined;
247221
}>;
248222

249223
// @public (undocumented)
@@ -313,28 +287,10 @@ export const noticesManifestSchema: z.ZodObject<{
313287
}, {
314288
type: "errorMessage";
315289
errorMessage: string;
316-
}>, z.ZodObject<{
317-
type: z.ZodLiteral<"frequency">;
318-
frequency: z.ZodEnum<["command", "deployment", "once", "daily"]>;
319-
}, "strip", z.ZodTypeAny, {
320-
type: "frequency";
321-
frequency: "once" | "command" | "deployment" | "daily";
322-
}, {
323-
type: "frequency";
324-
frequency: "once" | "command" | "deployment" | "daily";
325-
}>, z.ZodObject<{
326-
type: z.ZodLiteral<"validityPeriod">;
327-
from: z.ZodOptional<z.ZodNumber>;
328-
to: z.ZodOptional<z.ZodNumber>;
329-
}, "strip", z.ZodTypeAny, {
330-
type: "validityPeriod";
331-
from?: number | undefined;
332-
to?: number | undefined;
333-
}, {
334-
type: "validityPeriod";
335-
from?: number | undefined;
336-
to?: number | undefined;
337290
}>]>, "many">;
291+
frequency: z.ZodOptional<z.ZodEnum<["command", "deployment", "once", "daily"]>>;
292+
validFrom: z.ZodOptional<z.ZodNumber>;
293+
validTo: z.ZodOptional<z.ZodNumber>;
338294
}, "strip", z.ZodTypeAny, {
339295
details: string;
340296
id: string;
@@ -358,15 +314,11 @@ export const noticesManifestSchema: z.ZodObject<{
358314
} | {
359315
type: "errorMessage";
360316
errorMessage: string;
361-
} | {
362-
type: "frequency";
363-
frequency: "once" | "command" | "deployment" | "daily";
364-
} | {
365-
type: "validityPeriod";
366-
from?: number | undefined;
367-
to?: number | undefined;
368317
})[];
369318
link?: string | undefined;
319+
frequency?: "once" | "command" | "deployment" | "daily" | undefined;
320+
validFrom?: number | undefined;
321+
validTo?: number | undefined;
370322
}, {
371323
details: string;
372324
id: string;
@@ -390,15 +342,11 @@ export const noticesManifestSchema: z.ZodObject<{
390342
} | {
391343
type: "errorMessage";
392344
errorMessage: string;
393-
} | {
394-
type: "frequency";
395-
frequency: "once" | "command" | "deployment" | "daily";
396-
} | {
397-
type: "validityPeriod";
398-
from?: number | undefined;
399-
to?: number | undefined;
400345
})[];
401346
link?: string | undefined;
347+
frequency?: "once" | "command" | "deployment" | "daily" | undefined;
348+
validFrom?: number | undefined;
349+
validTo?: number | undefined;
402350
}>, "many">;
403351
}, "strip", z.ZodTypeAny, {
404352
notices: {
@@ -424,15 +372,11 @@ export const noticesManifestSchema: z.ZodObject<{
424372
} | {
425373
type: "errorMessage";
426374
errorMessage: string;
427-
} | {
428-
type: "frequency";
429-
frequency: "once" | "command" | "deployment" | "daily";
430-
} | {
431-
type: "validityPeriod";
432-
from?: number | undefined;
433-
to?: number | undefined;
434375
})[];
435376
link?: string | undefined;
377+
frequency?: "once" | "command" | "deployment" | "daily" | undefined;
378+
validFrom?: number | undefined;
379+
validTo?: number | undefined;
436380
}[];
437381
}, {
438382
notices: {
@@ -458,15 +402,11 @@ export const noticesManifestSchema: z.ZodObject<{
458402
} | {
459403
type: "errorMessage";
460404
errorMessage: string;
461-
} | {
462-
type: "frequency";
463-
frequency: "once" | "command" | "deployment" | "daily";
464-
} | {
465-
type: "validityPeriod";
466-
from?: number | undefined;
467-
to?: number | undefined;
468405
})[];
469406
link?: string | undefined;
407+
frequency?: "once" | "command" | "deployment" | "daily" | undefined;
408+
validFrom?: number | undefined;
409+
validTo?: number | undefined;
470410
}[];
471411
}>;
472412

packages/cli-core/src/notices/notices.ts

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,6 @@ const noticePredicateSchema = z.discriminatedUnion('type', [
2626
type: z.literal('errorMessage'),
2727
errorMessage: z.string(),
2828
}),
29-
z.object({
30-
type: z.literal('frequency'),
31-
frequency: z.enum(['command', 'deployment', 'once', 'daily']),
32-
}),
33-
z.object({
34-
type: z.literal('validityPeriod'),
35-
from: z.number().optional(),
36-
to: z.number().optional(),
37-
}),
3829
]);
3930

4031
export const noticeSchema = z.object({
@@ -43,6 +34,9 @@ export const noticeSchema = z.object({
4334
details: z.string(),
4435
link: z.string().optional(),
4536
predicates: z.array(noticePredicateSchema),
37+
frequency: z.enum(['command', 'deployment', 'once', 'daily']).optional(),
38+
validFrom: z.number().optional(),
39+
validTo: z.number().optional(),
4640
});
4741

4842
export type Notice = z.infer<typeof noticeSchema>;

packages/cli-core/src/notices/notices_manifest_validator.test.ts

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,15 @@ void describe('Notices manifest validator', () => {
2929
title: 'test notice 2',
3030
details: 'test details 2',
3131
predicates: [],
32+
frequency: 'once',
3233
},
3334
{
3435
id: '3',
3536
link: 'https://github.com/aws-amplify/amplify-backend/issues/3',
3637
title: 'test notice 3',
3738
details: 'test details 3',
39+
validFrom: Date.now() - 1000,
40+
validTo: Date.now() + 1000,
3841
predicates: [
3942
{
4043
type: 'packageVersion',
@@ -49,10 +52,6 @@ void describe('Notices manifest validator', () => {
4952
type: 'command',
5053
command: 'sandbox',
5154
},
52-
{
53-
type: 'frequency',
54-
frequency: 'once',
55-
},
5655
{
5756
type: 'errorMessage',
5857
errorMessage: 'Some error message',
@@ -65,11 +64,6 @@ void describe('Notices manifest validator', () => {
6564
type: 'osFamily',
6665
osFamily: 'linux',
6766
},
68-
{
69-
type: 'validityPeriod',
70-
from: Date.now() - 10,
71-
to: Date.now(),
72-
},
7367
],
7468
},
7569
],

packages/cli/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
"execa": "^9.5.1",
5757
"is-ci": "^4.1.0",
5858
"open": "^9.1.0",
59+
"semver": "^7.6.3",
5960
"yargs": "^17.7.2",
6061
"zod": "^3.22.2"
6162
},

packages/cli/src/ampx.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { fileURLToPath } from 'node:url';
1414
import { verifyCommandName } from './verify_command_name.js';
1515
import { hideBin } from 'yargs/helpers';
1616
import { PackageManagerControllerFactory, format } from '@aws-amplify/cli-core';
17+
import { NoticesRenderer } from './notices/notices_renderer.js';
1718

1819
const packageJson = new PackageJsonReader().read(
1920
fileURLToPath(new URL('../package.json', import.meta.url)),
@@ -27,9 +28,9 @@ if (libraryVersion == undefined) {
2728
});
2829
}
2930

30-
const dependencies = await new PackageManagerControllerFactory()
31-
.getPackageManagerController()
32-
.tryGetDependencies();
31+
const packageManagerController =
32+
new PackageManagerControllerFactory().getPackageManagerController();
33+
const dependencies = await packageManagerController.tryGetDependencies();
3334

3435
const usageDataEmitter = await new UsageDataEmitterFactory().getInstance(
3536
libraryVersion,
@@ -40,7 +41,8 @@ attachUnhandledExceptionListeners(usageDataEmitter);
4041

4142
verifyCommandName();
4243

43-
const parser = createMainParser(libraryVersion);
44+
const noticesRenderer = new NoticesRenderer(packageManagerController);
45+
const parser = createMainParser(libraryVersion, noticesRenderer);
4446
const errorHandler = generateCommandFailureHandler(parser, usageDataEmitter);
4547

4648
try {
@@ -52,9 +54,16 @@ try {
5254
metricDimension.command = subCommands;
5355
}
5456

57+
await noticesRenderer.tryFindAndPrintApplicableNotices({
58+
event: 'postCommand',
59+
});
5560
await usageDataEmitter.emitSuccess({}, metricDimension);
5661
} catch (e) {
5762
if (e instanceof Error) {
63+
await noticesRenderer.tryFindAndPrintApplicableNotices({
64+
event: 'postCommand',
65+
error: e,
66+
});
5867
await errorHandler(format.error(e), e);
5968
}
6069
}

0 commit comments

Comments
 (0)