|
| 1 | +import * as aws from "@pulumi/aws"; |
| 2 | +import * as pulumi from "@pulumi/pulumi"; |
| 3 | +import * as saws from "@stackattack/aws"; |
| 4 | + |
| 5 | +export default () => { |
| 6 | + const ctx = saws.context(); |
| 7 | + const config = new pulumi.Config(); |
| 8 | + |
| 9 | + const dnsName = config.require("dns-name"); |
| 10 | + const docsDnsName = config.require("docs-dns-name"); |
| 11 | + |
| 12 | + const demoBucket = saws.bucket(ctx.prefix("demo")); |
| 13 | + |
| 14 | + saws.bucketFiles(ctx.prefix("demo"), { |
| 15 | + bucket: demoBucket, |
| 16 | + paths: [ |
| 17 | + "dist/demo", |
| 18 | + "dist/chrome.zip", |
| 19 | + "dist/firefox.zip", |
| 20 | + "dist/firefox-mv2.zip", |
| 21 | + ], |
| 22 | + }); |
| 23 | + |
| 24 | + saws.staticSite(ctx.prefix("demo"), { |
| 25 | + bucket: demoBucket, |
| 26 | + domain: dnsName, |
| 27 | + adapter: { |
| 28 | + index: "demo-history.html", |
| 29 | + defaultHeaders: { |
| 30 | + "Cross-Origin-Opener-Policy": "same-origin", |
| 31 | + "Cross-Origin-Embedder-Policy": "require-corp", |
| 32 | + }, |
| 33 | + }, |
| 34 | + }); |
| 35 | + |
| 36 | + const docsBucket = saws.bucket(ctx.prefix("docs")); |
| 37 | + |
| 38 | + saws.bucketFiles(ctx.prefix("docs"), { |
| 39 | + bucket: docsBucket, |
| 40 | + paths: ["dist/docs/html"], |
| 41 | + }); |
| 42 | + |
| 43 | + saws.staticSite(ctx.prefix("demo"), { |
| 44 | + bucket: docsBucket, |
| 45 | + domain: docsDnsName, |
| 46 | + adapter: { |
| 47 | + index: "index.html", |
| 48 | + }, |
| 49 | + }); |
| 50 | + |
| 51 | + const githubRole = saws.githubRole(ctx, { |
| 52 | + repo: "cfeenstra67/egghead", |
| 53 | + policy: aws.iam.getPolicyDocumentOutput({ |
| 54 | + statements: [ |
| 55 | + { |
| 56 | + actions: ["iam", "s3", "acm", "route53", "cloudfront"].flatMap( |
| 57 | + (service) => [ |
| 58 | + `${service}:Get*`, |
| 59 | + `${service}:List*`, |
| 60 | + `${service}:Describe*`, |
| 61 | + ], |
| 62 | + ), |
| 63 | + resources: ["*"], |
| 64 | + }, |
| 65 | + { |
| 66 | + actions: ["s3:PutObject*", "s3:DeleteObject"], |
| 67 | + resources: [demoBucket.bucket.arn, docsBucket.bucket.arn].flatMap( |
| 68 | + (arn) => [arn, pulumi.interpolate`${arn}/*`], |
| 69 | + ), |
| 70 | + }, |
| 71 | + ], |
| 72 | + }).json, |
| 73 | + }); |
| 74 | + |
| 75 | + return { |
| 76 | + demoUrl: `https://${dnsName}`, |
| 77 | + docsUrl: `https://${docsDnsName}`, |
| 78 | + githubRoleArn: githubRole.arn, |
| 79 | + }; |
| 80 | +}; |
0 commit comments