From 23e96c5100f55452a717504df576b1048cf1fbda Mon Sep 17 00:00:00 2001 From: Julien Poissonnier Date: Wed, 28 Feb 2024 14:03:50 +0100 Subject: [PATCH] Adds a monorepo example using Nx --- nx-monorepo/.gitignore | 3 + nx-monorepo/README.md | 195 ++++++++++++++++++ nx-monorepo/dependency-graph.png | Bin 0 -> 116368 bytes nx-monorepo/infra/Pulumi.yaml | 7 + nx-monorepo/infra/index.ts | 11 + nx-monorepo/infra/package.json | 26 +++ nx-monorepo/infra/tsconfig.json | 6 + nx-monorepo/nx.json | 12 ++ nx-monorepo/package.json | 15 ++ nx-monorepo/packages/s3folder/index.ts | 54 +++++ nx-monorepo/packages/s3folder/package.json | 12 ++ nx-monorepo/packages/s3folder/tsconfig.json | 6 + nx-monorepo/packages/website-builder/index.ts | 9 + .../packages/website-builder/package.json | 22 ++ .../packages/website-builder/tsconfig.json | 6 + nx-monorepo/packages/website-deploy/index.ts | 19 ++ .../packages/website-deploy/package.json | 16 ++ .../packages/website-deploy/tsconfig.json | 6 + nx-monorepo/tsconfig.json | 14 ++ 19 files changed, 439 insertions(+) create mode 100644 nx-monorepo/.gitignore create mode 100644 nx-monorepo/README.md create mode 100644 nx-monorepo/dependency-graph.png create mode 100644 nx-monorepo/infra/Pulumi.yaml create mode 100644 nx-monorepo/infra/index.ts create mode 100644 nx-monorepo/infra/package.json create mode 100644 nx-monorepo/infra/tsconfig.json create mode 100644 nx-monorepo/nx.json create mode 100644 nx-monorepo/package.json create mode 100644 nx-monorepo/packages/s3folder/index.ts create mode 100644 nx-monorepo/packages/s3folder/package.json create mode 100644 nx-monorepo/packages/s3folder/tsconfig.json create mode 100644 nx-monorepo/packages/website-builder/index.ts create mode 100644 nx-monorepo/packages/website-builder/package.json create mode 100644 nx-monorepo/packages/website-builder/tsconfig.json create mode 100644 nx-monorepo/packages/website-deploy/index.ts create mode 100644 nx-monorepo/packages/website-deploy/package.json create mode 100644 nx-monorepo/packages/website-deploy/tsconfig.json create mode 100644 nx-monorepo/tsconfig.json diff --git a/nx-monorepo/.gitignore b/nx-monorepo/.gitignore new file mode 100644 index 000000000..9b6edcb5a --- /dev/null +++ b/nx-monorepo/.gitignore @@ -0,0 +1,3 @@ +.nx/cache +generated-website +dist \ No newline at end of file diff --git a/nx-monorepo/README.md b/nx-monorepo/README.md new file mode 100644 index 000000000..2304d52e3 --- /dev/null +++ b/nx-monorepo/README.md @@ -0,0 +1,195 @@ +# Nx Monorepo + +This example shows how to use Nx to organize a mono repo and track dependencies. + +The example consists of the following components: + +``` + - packages: + - s3folder: ComponentResource that manages a S3 bucket + - website-deploy: ComponentResource resource that manages files in a S3 bucket + - website-builder: Mock website generator that creates HTML output + - infra: Pulumi program that uses the s3folder and website ComponentResources to deploy a website +``` + +To deploy the latest version of the website, we need to respect the certain dependencies: + +- website-builder needs to be compiled before we can use it to generate the HTML output. +- s3folder and website-deploy need to be compiled before we can build infra. +- We need to generate HTML output before we can deploy the infra. +- infra needs to be compiled before we can deploy. + +These dependecies can be defined using Nx, for example in [infra/package.json](./infra//package.json) we declare that the `deploy` needs its dependencies to be built, and the HTML to generated: + +``` + ... + "nx": { + "targets": { + "deploy": { + "dependsOn": [ + "build", + "website-builder:generate" + ] + } + } + } +``` + +Nx can visualize the dependencies for us using `npx nx deploy infra --graph` + +![Dependency Graph](./dependency-graph.png) + +## Deploying + +### Prerequisites + +1. [Install Pulumi](https://www.pulumi.com/docs/get-started/install/) +2. [Configure AWS Credentials](https://www.pulumi.com/docs/intro/cloud-providers/aws/setup/) + +### Steps + +Since Nx manages the interdependencies, all we have to do is to install our node dependencies + +```bash +npm install +``` + +and then run nx: + +```bash +npx nx deploy infra +``` + +``` + ✔ 4/4 dependent project tasks succeeded [0 read from cache] + + Hint: you can run the command with --verbose to see the full dependent project outputs + +——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— + + +> nx run infra:build + + +> infra@1.0.0 build +> tsc + + +> nx run infra:deploy + + +> infra@1.0.0 deploy +> pulumi up --stack dev + +The stack 'dev' does not exist. + +If you would like to create this stack now, please press , otherwise press ^C: +Created stack 'dev' +Previewing update (dev) + +View in Browser (Ctrl+O): https://app.pulumi.com/julienp/nx-monorepo/dev/previews/fc7630fd-7dc4-4c7e-baa0-3d6e014fc90a + + Type Name Plan + + pulumi:pulumi:Stack nx-monorepo-dev create + + ├─ pulumi:examples:WebsiteDeploy my-website create + + │ └─ aws:s3:BucketObject index.html create + + └─ pulumi:examples:S3Folder my-folder create + + ├─ aws:s3:Bucket my-folder create + + ├─ aws:s3:BucketPublicAccessBlock public-access-block create + + └─ aws:s3:BucketPolicy bucketPolicy create + +Outputs: + websiteUrl: output + +Resources: + + 7 to create + +Do you want to perform this update? yes +Updating (dev) + +View in Browser (Ctrl+O): https://app.pulumi.com/julienp/nx-monorepo/dev/updates/1 + + Type Name Status + + pulumi:pulumi:Stack nx-monorepo-dev created (6s) + + ├─ pulumi:examples:S3Folder my-folder created (5s) + + │ ├─ aws:s3:Bucket my-folder created (1s) + + │ ├─ aws:s3:BucketPublicAccessBlock public-access-block created (0.76s) + + │ └─ aws:s3:BucketPolicy bucketPolicy created (0.85s) + + └─ pulumi:examples:WebsiteDeploy my-website created (2s) + + └─ aws:s3:BucketObject index.html created (0.80s) + +Outputs: + websiteUrl: "my-folder-a64ab3c.s3-website.eu-central-1.amazonaws.com" + +Resources: + + 7 created + +Duration: 9s + + +——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— + + NX Successfully ran target deploy for project infra and 5 tasks it depends on (42s) +``` + +To destroy the stack, we run: + +``` +npx nx destroy infra +``` + +``` +> nx run infra:destroy + + +> infra@1.0.0 destroy +> pulumi destroy --stack dev + +Previewing destroy (dev) + +View in Browser (Ctrl+O): https://app.pulumi.com/julienp/nx-monorepo/dev/previews/b640cce7-a9df-49a5-b004-3fbdbe65c4eb + + Type Name Plan + - pulumi:pulumi:Stack nx-monorepo-dev delete + - ├─ pulumi:examples:S3Folder my-folder delete + - │ ├─ aws:s3:BucketPolicy bucketPolicy delete + - │ ├─ aws:s3:BucketPublicAccessBlock public-access-block delete + - │ └─ aws:s3:Bucket my-folder delete + - └─ pulumi:examples:WebsiteDeploy my-website delete + - └─ aws:s3:BucketObject index.html delete + +Outputs: + - websiteUrl: "my-folder-a64ab3c.s3-website.eu-central-1.amazonaws.com" + +Resources: + - 7 to delete + +Do you want to perform this destroy? yes +Destroying (dev) + +View in Browser (Ctrl+O): https://app.pulumi.com/julienp/nx-monorepo/dev/updates/2 + + Type Name Status + - pulumi:pulumi:Stack nx-monorepo-dev deleted (0.31s) + - ├─ pulumi:examples:WebsiteDeploy my-website deleted (0.60s) + - │ └─ aws:s3:BucketObject index.html deleted (0.88s) + - └─ pulumi:examples:S3Folder my-folder deleted (0.82s) + - ├─ aws:s3:BucketPolicy bucketPolicy deleted (0.96s) + - ├─ aws:s3:BucketPublicAccessBlock public-access-block deleted (0.91s) + - └─ aws:s3:Bucket my-folder deleted (0.74s) + +Outputs: + - websiteUrl: "my-folder-a64ab3c.s3-website.eu-central-1.amazonaws.com" + +Resources: + - 7 deleted + +Duration: 7s + +The resources in the stack have been deleted, but the history and configuration associated with the stack are still maintained. +If you want to remove the stack completely, run `pulumi stack rm dev`. + +——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— + + NX Successfully ran target destroy for project infra (18s) +``` diff --git a/nx-monorepo/dependency-graph.png b/nx-monorepo/dependency-graph.png new file mode 100644 index 0000000000000000000000000000000000000000..3ee9dbfebb6af5c9fb2c3dd5d32d0bd393058128 GIT binary patch literal 116368 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�RbFM0P@Ix?Pep% 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

Wf%P7q9?bAb%~8B7 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 literal 0 HcmV?d00001 diff --git a/nx-monorepo/infra/Pulumi.yaml b/nx-monorepo/infra/Pulumi.yaml new file mode 100644 index 000000000..fc8393afe --- /dev/null +++ b/nx-monorepo/infra/Pulumi.yaml @@ -0,0 +1,7 @@ +name: nx-monorepo +description: A project using an Nx monorepo. +main: dist/index.js +runtime: + name: nodejs + options: + typescript: false \ No newline at end of file diff --git a/nx-monorepo/infra/index.ts b/nx-monorepo/infra/index.ts new file mode 100644 index 000000000..a8191a63a --- /dev/null +++ b/nx-monorepo/infra/index.ts @@ -0,0 +1,11 @@ +import * as path from "path" +import * as s3folder from "s3folder" +import * as websiteDeploy from "website-deploy" + +// Create the folder to hold our website files +const folder = new s3folder.S3Folder("my-folder", {}) +export const websiteUrl = folder.websiteUrl + +// Deploy the website to the folder +const generatedWebsite = path.join("..", "..", "generated-website") +const website = new websiteDeploy.WebsiteDeploy("my-website", folder.bucket, generatedWebsite, {}) diff --git a/nx-monorepo/infra/package.json b/nx-monorepo/infra/package.json new file mode 100644 index 000000000..ca125c1fb --- /dev/null +++ b/nx-monorepo/infra/package.json @@ -0,0 +1,26 @@ +{ + "name": "infra", + "main": "dist/index.js", + "version": "1.0.0", + "dependencies": { + "@pulumi/pulumi": "latest", + "s3folder": "*", + "website-deploy": "*", + "website-builder": "*" + }, + "scripts": { + "build": "tsc", + "deploy": "pulumi up --stack dev", + "destroy": "pulumi destroy --stack dev" + }, + "nx": { + "targets": { + "deploy": { + "dependsOn": [ + "build", + "website-builder:generate" + ] + } + } + } +} \ No newline at end of file diff --git a/nx-monorepo/infra/tsconfig.json b/nx-monorepo/infra/tsconfig.json new file mode 100644 index 000000000..49c207c93 --- /dev/null +++ b/nx-monorepo/infra/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "dist" + } +} diff --git a/nx-monorepo/nx.json b/nx-monorepo/nx.json new file mode 100644 index 000000000..80a8b51ec --- /dev/null +++ b/nx-monorepo/nx.json @@ -0,0 +1,12 @@ +{ + "extends": "nx/presets/npm.json", + "$schema": "./node_modules/nx/schemas/nx-schema.json", + "targetDefaults": { + "build": { + "cache": true, + "dependsOn": [ + "^build" + ] + } + } +} \ No newline at end of file diff --git a/nx-monorepo/package.json b/nx-monorepo/package.json new file mode 100644 index 000000000..9ceabfa2b --- /dev/null +++ b/nx-monorepo/package.json @@ -0,0 +1,15 @@ +{ + "name": "nx-repo", + "version": "1.0.0", + "scripts": {}, + "private": true, + "devDependencies": { + "@nx/js": "18.0.5", + "nx": "18.0.5", + "typescript": "^5.3.3" + }, + "workspaces": [ + "packages/*", + "infra" + ] +} \ No newline at end of file diff --git a/nx-monorepo/packages/s3folder/index.ts b/nx-monorepo/packages/s3folder/index.ts new file mode 100644 index 000000000..6a736fd8b --- /dev/null +++ b/nx-monorepo/packages/s3folder/index.ts @@ -0,0 +1,54 @@ +import * as aws from "@pulumi/aws"; +import * as pulumi from "@pulumi/pulumi"; + +export class S3Folder extends pulumi.ComponentResource { + readonly bucket: pulumi.Output; + readonly websiteUrl: pulumi.Output; + + constructor(bucketName: string, opts: pulumi.ComponentResourceOptions) { + super("pulumi:examples:S3Folder", bucketName, {}, opts); + + // Create a bucket and expose a website index document + let siteBucket = new aws.s3.Bucket(bucketName, { + website: { + indexDocument: "index.html", + }, + }, { parent: this }); // specify resource parent + + const publicAccessBlock = new aws.s3.BucketPublicAccessBlock("public-access-block", { + bucket: siteBucket.id, + blockPublicAcls: false, + }, { parent: this }); + + // Set the access policy for the bucket so all objects are readable + let bucketPolicy = new aws.s3.BucketPolicy("bucketPolicy", { + bucket: siteBucket.bucket, + policy: siteBucket.bucket.apply(this.publicReadPolicyForBucket), + }, { parent: this, dependsOn: publicAccessBlock }); // specify resource parent + + this.bucket = pulumi.output(siteBucket); + this.websiteUrl = siteBucket.websiteEndpoint; + + // Register output properties for this component + this.registerOutputs({ + bucket: this.bucket, + websiteUrl: this.websiteUrl, + }); + } + + publicReadPolicyForBucket(bucketName: string) { + return JSON.stringify({ + Version: "2012-10-17", + Statement: [{ + Effect: "Allow", + Principal: "*", + Action: [ + "s3:GetObject" + ], + Resource: [ + `arn:aws:s3:::${bucketName}/*` + ] + }] + }); + } +} diff --git a/nx-monorepo/packages/s3folder/package.json b/nx-monorepo/packages/s3folder/package.json new file mode 100644 index 000000000..8874d05dc --- /dev/null +++ b/nx-monorepo/packages/s3folder/package.json @@ -0,0 +1,12 @@ +{ + "name": "s3folder", + "main": "dist/index.js", + "version": "1.0.0", + "dependencies": { + "@pulumi/pulumi": "^3.107.0", + "@pulumi/aws": "^6.23.0" + }, + "scripts": { + "build": "tsc" + } +} \ No newline at end of file diff --git a/nx-monorepo/packages/s3folder/tsconfig.json b/nx-monorepo/packages/s3folder/tsconfig.json new file mode 100644 index 000000000..b4e69ae1f --- /dev/null +++ b/nx-monorepo/packages/s3folder/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist" + } +} diff --git a/nx-monorepo/packages/website-builder/index.ts b/nx-monorepo/packages/website-builder/index.ts new file mode 100644 index 000000000..edf06f76e --- /dev/null +++ b/nx-monorepo/packages/website-builder/index.ts @@ -0,0 +1,9 @@ + +import * as fs from 'fs'; +import * as path from "path"; + +const outDir = path.join("..", "..", "generated-website"); +const indexPath = path.join(outDir, "index.html") + +fs.mkdirSync(outDir, { recursive: true }) +fs.writeFileSync(indexPath, `Hello, world! ${new Date().toISOString()}`) \ No newline at end of file diff --git a/nx-monorepo/packages/website-builder/package.json b/nx-monorepo/packages/website-builder/package.json new file mode 100644 index 000000000..0b7d168d0 --- /dev/null +++ b/nx-monorepo/packages/website-builder/package.json @@ -0,0 +1,22 @@ +{ + "name": "website-builder", + "main": "dist/index.js", + "version": "1.0.0", + "dependencies": {}, + "scripts": { + "build": "tsc", + "generate": "node ./dist/index.js" + }, + "nx": { + "targets": { + "generate": { + "outputs": [ + "{workspaceRoot}/generated-website" + ], + "dependsOn": [ + "website-builder:build" + ] + } + } + } +} \ No newline at end of file diff --git a/nx-monorepo/packages/website-builder/tsconfig.json b/nx-monorepo/packages/website-builder/tsconfig.json new file mode 100644 index 000000000..b4e69ae1f --- /dev/null +++ b/nx-monorepo/packages/website-builder/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist" + } +} diff --git a/nx-monorepo/packages/website-deploy/index.ts b/nx-monorepo/packages/website-deploy/index.ts new file mode 100644 index 000000000..0dcd0d6a5 --- /dev/null +++ b/nx-monorepo/packages/website-deploy/index.ts @@ -0,0 +1,19 @@ +import * as aws from "@pulumi/aws"; +import * as pulumi from "@pulumi/pulumi"; +import * as mime from "mime"; + +export class WebsiteDeploy extends pulumi.ComponentResource { + constructor(name: string, bucket: pulumi.Input, path: string, opts: pulumi.ComponentResourceOptions) { + super("pulumi:examples:WebsiteDeploy", name, {}, opts); + + // For each file in the directory, create an S3 object stored in `bucket` + for (let item of require("fs").readdirSync(path)) { + let filePath = require("path").join(path, item); + let object = new aws.s3.BucketObject(item, { + bucket: bucket, + source: new pulumi.asset.FileAsset(filePath), // use FileAsset to point to a file + contentType: mime.getType(filePath) || undefined, // set the MIME type of the file + }, { parent: this }); // specify resource parent + } + } +} diff --git a/nx-monorepo/packages/website-deploy/package.json b/nx-monorepo/packages/website-deploy/package.json new file mode 100644 index 000000000..bbb7ab116 --- /dev/null +++ b/nx-monorepo/packages/website-deploy/package.json @@ -0,0 +1,16 @@ +{ + "name": "website-deploy", + "main": "dist/index.js", + "version": "1.0.0", + "dependencies": { + "@pulumi/aws": "^6.23.0", + "@pulumi/pulumi": "^3.107.0", + "mime": "^2.6.0" + }, + "scripts": { + "build": "tsc" + }, + "devDependencies": { + "@types/mime": "^3.0.4" + } +} \ No newline at end of file diff --git a/nx-monorepo/packages/website-deploy/tsconfig.json b/nx-monorepo/packages/website-deploy/tsconfig.json new file mode 100644 index 000000000..b4e69ae1f --- /dev/null +++ b/nx-monorepo/packages/website-deploy/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist" + } +} diff --git a/nx-monorepo/tsconfig.json b/nx-monorepo/tsconfig.json new file mode 100644 index 000000000..b95b11bbf --- /dev/null +++ b/nx-monorepo/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "strict": true, + "target": "es6", + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": true, + "experimentalDecorators": true, + "pretty": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "forceConsistentCasingInFileNames": true + } +}