Skip to content

Commit ff32ec7

Browse files
committed
fix(serverless-cms-aws): add control for full website render
1 parent 72829f8 commit ff32ec7

File tree

3 files changed

+72
-49
lines changed

3 files changed

+72
-49
lines changed

packages/serverless-cms-aws/src/createWebsiteApp.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ import {
55
lambdaEdgeWarning,
66
renderWebsite,
77
telemetryNoLongerNewUser,
8-
ensureApiDeployedBeforeBuild
8+
ensureApiDeployedBeforeBuild,
9+
IRenderWebsiteParams
910
} from "./website/plugins";
1011
import { uploadAppToS3 } from "./react/plugins";
1112

1213
export interface CreateWebsiteAppParams extends CreateWebsitePulumiAppParams {
14+
renderWebsiteAfterDeploy?: (params: IRenderWebsiteParams) => boolean;
1315
plugins?: PluginCollection;
1416
}
1517

@@ -18,7 +20,7 @@ export function createWebsiteApp(projectAppParams: CreateWebsiteAppParams = {})
1820
uploadAppToS3({ folder: "apps/website" }),
1921
generateCommonHandlers,
2022
lambdaEdgeWarning,
21-
renderWebsite,
23+
renderWebsite({ prerender: projectAppParams.renderWebsiteAfterDeploy ?? (() => true) }),
2224
telemetryNoLongerNewUser,
2325
ensureApiDeployedBeforeBuild
2426
];

packages/serverless-cms-aws/src/enterprise/createWebsiteApp.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@ import {
88
lambdaEdgeWarning,
99
renderWebsite,
1010
telemetryNoLongerNewUser,
11-
ensureApiDeployedBeforeBuild
11+
ensureApiDeployedBeforeBuild,
12+
IRenderWebsiteParams
1213
} from "~/website/plugins";
1314
import { uploadAppToS3 } from "~/react/plugins";
1415

1516
export interface CreateWebsiteAppParams extends CreateWebsitePulumiAppParams {
17+
renderWebsiteAfterDeploy?: (params: IRenderWebsiteParams) => boolean;
1618
plugins?: PluginCollection;
1719
}
1820

@@ -21,7 +23,7 @@ export function createWebsiteApp(projectAppParams: CreateWebsiteAppParams = {})
2123
uploadAppToS3({ folder: "apps/website" }),
2224
generateCommonHandlers,
2325
lambdaEdgeWarning,
24-
renderWebsite,
26+
renderWebsite({ prerender: projectAppParams.renderWebsiteAfterDeploy ?? (() => true) }),
2527
telemetryNoLongerNewUser,
2628
ensureApiDeployedBeforeBuild
2729
];

packages/serverless-cms-aws/src/website/plugins/renderWebsite.ts

Lines changed: 64 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2,58 +2,77 @@ import { EventBridgeClient, PutEventsCommand } from "@webiny/aws-sdk/client-even
22
import { CliContext } from "@webiny/cli/types";
33
import { getStackOutput } from "@webiny/cli-plugin-deploy-pulumi/utils";
44

5+
export interface IRenderWebsiteParams {
6+
env: string;
7+
inputs: IRenderWebsiteParamsInputs;
8+
}
9+
10+
export interface IRenderWebsiteParamsInputs {
11+
preview?: boolean;
12+
build?: boolean;
13+
}
14+
15+
interface RenderWebsiteParams {
16+
prerender: (params: IRenderWebsiteParams) => boolean;
17+
}
18+
519
/**
620
* On every deployment of the Website project application, this plugin ensures all pages created
721
* with the Webiny Page Builder application are re-rendered.
822
*/
9-
export const renderWebsite = {
10-
type: "hook-after-deploy",
11-
name: "hook-after-deploy-website-render",
12-
async hook(params: Record<string, any>, context: CliContext) {
13-
if (params.inputs.build === false) {
14-
context.info(`"--no-build" argument detected - skipping Website re-rendering.`);
15-
return;
16-
}
23+
export const renderWebsite = (renderWebsiteParams: RenderWebsiteParams) => {
24+
return {
25+
type: "hook-after-deploy",
26+
name: "hook-after-deploy-website-render",
27+
async hook(params: IRenderWebsiteParams, context: CliContext) {
28+
if (params.inputs.build === false) {
29+
context.info(`"--no-build" argument detected - skipping Website re-rendering.`);
30+
return;
31+
}
1732

18-
// No need to re-render the website if we're doing a preview.
19-
if (params.inputs.preview) {
20-
return;
21-
}
33+
// No need to re-render the website if we're doing a preview.
34+
if (params.inputs.preview) {
35+
return;
36+
}
2237

23-
const coreOutput = getStackOutput({ folder: "apps/core", env: params.env });
24-
25-
context.info("Issuing a complete website render job...");
26-
27-
try {
28-
const client = new EventBridgeClient({ region: coreOutput["region"] });
29-
30-
const result = await client.send(
31-
new PutEventsCommand({
32-
Entries: [
33-
{
34-
Source: "webiny-cli",
35-
EventBusName: coreOutput["eventBusArn"],
36-
DetailType: "RenderPages",
37-
Detail: JSON.stringify({ path: "*", tenant: "*" })
38-
}
39-
]
40-
})
41-
);
42-
43-
const entry = result.Entries?.[0];
44-
if (entry?.ErrorMessage) {
45-
throw new Error(entry.ErrorMessage);
38+
if (!renderWebsiteParams.prerender(params)) {
39+
context.info("Skipping complete website rendering.");
40+
return;
4641
}
4742

48-
context.success("Website re-render job successfully issued.");
49-
context.info(
50-
"Please note that it can take a couple of minutes for the website to be fully updated."
51-
);
52-
} catch (e) {
53-
context.error(
54-
`An error occurred while trying to update default Page Builder app's settings!`
55-
);
56-
console.log(e);
43+
const coreOutput = getStackOutput({ folder: "apps/core", env: params.env });
44+
45+
context.info("Issuing a complete website rendering job...");
46+
47+
try {
48+
const client = new EventBridgeClient({ region: coreOutput["region"] });
49+
50+
const result = await client.send(
51+
new PutEventsCommand({
52+
Entries: [
53+
{
54+
Source: "webiny-cli",
55+
EventBusName: coreOutput["eventBusArn"],
56+
DetailType: "RenderPages",
57+
Detail: JSON.stringify({ path: "*", tenant: "*" })
58+
}
59+
]
60+
})
61+
);
62+
63+
const entry = result.Entries?.[0];
64+
if (entry?.ErrorMessage) {
65+
throw new Error(entry.ErrorMessage);
66+
}
67+
68+
context.success("Website rendering job successfully issued.");
69+
context.info(
70+
"Please note that it can take a couple of minutes for the website to be fully updated."
71+
);
72+
} catch (e) {
73+
context.error(`An error occurred while issuing a website rendering job!`);
74+
console.log(e);
75+
}
5776
}
58-
}
77+
};
5978
};

0 commit comments

Comments
 (0)