Skip to content

Commit 8939aca

Browse files
committed
Increase CDN caching of build and invalidate upon release
1 parent ea272e7 commit 8939aca

File tree

2 files changed

+20
-6
lines changed

2 files changed

+20
-6
lines changed

.github/workflows/build.yml

+4-2
Original file line numberDiff line numberDiff line change
@@ -83,19 +83,21 @@ jobs:
8383
if: startsWith(github.ref, 'refs/tags/v')
8484
run: npm run deploy
8585
env:
86+
DEPLOY: prod
8687
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
8788
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
88-
DEPLOY: prod
89+
CF_DISTRO: ${{ secrets.CF_DISTRO }}
8990
LATEST_API: ${{ secrets.LATEST_API }}
9091
S3_BUCKET: ${{ secrets.S3_BUCKET }}
9192

9293
- name: Deploy 'main' build
9394
if: github.ref == 'refs/heads/main'
9495
run: npm run deploy
9596
env:
97+
DEPLOY: main
9698
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
9799
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
98-
DEPLOY: main
100+
CF_DISTRO: ${{ secrets.CF_DISTRO }}
99101
LATEST_API: ${{ secrets.LATEST_API }}
100102
S3_BUCKET: ${{ secrets.S3_BUCKET }}
101103

scripts/deploy

+16-4
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,16 @@ let { join } = require('path')
66
let admZip = require('adm-zip')
77
let aws = require('aws-sdk')
88

9-
let { DEPLOY, S3_BUCKET: Bucket, LATEST_API: FunctionName } = process.env
9+
let { DEPLOY, CF_DISTRO: DistributionId, S3_BUCKET: Bucket, LATEST_API: FunctionName } = process.env
1010
if (!Bucket) throw ReferenceError('Missing S3_BUCKET config!')
1111
if (!DEPLOY) throw ReferenceError('Missing DEPLOY config!')
12+
if (!DistributionId) throw ReferenceError('Missing CF_DISTRO config!')
1213
if (!FunctionName) throw ReferenceError('Missing LATEST_API config!')
1314
let valid = [ 'prod', 'main' ]
1415
if (!valid.includes(DEPLOY)) throw ReferenceError(`DEPLOY must be one of: ${valid.join(', ')}`)
1516

1617
let region = 'us-west-2'
18+
let cf = new aws.CloudFront()
1719
let lambda = new aws.Lambda({ region })
1820
let s3 = new aws.S3({ region })
1921
let ssm = new aws.SSM({ region })
@@ -50,8 +52,7 @@ let kb = buf => Math.floor(buf.length / 1000)
5052
}
5153
let channel = isProd ? 'latest' : 'main'
5254
let ACL = 'public-read'
53-
// TODO: increase to 24 hours, clear cache on publish
54-
let CacheControl = 'max-age=500'
55+
let CacheControl = 's-maxage=3600, max-age=3600, must-revalidate' // 1 hour
5556

5657
for (let [ local, { name, zip } ] of Object.entries(files)) {
5758
let path = join(__dirname, '..', 'build', local)
@@ -75,6 +76,17 @@ let kb = buf => Math.floor(buf.length / 1000)
7576
}
7677
}
7778

79+
// Flush CDN release channel
80+
let releasePath = `/releases/${channel}/*`
81+
await cf.createInvalidation({
82+
DistributionId,
83+
InvalidationBatch: {
84+
CallerReference: `${channel}-${new Date().toISOString()}`,
85+
Paths: { Quantity: 1, Items: [ releasePath ] }
86+
}
87+
}).promise()
88+
console.log(`Invalidated ${releasePath}`)
89+
7890
let uri = ext => `https://dl.begin.com/releases/${channel}/begin-x64-${ext}`
7991
let data = {
8092
[`ver_${channel}`.toUpperCase()]: version,
@@ -105,7 +117,7 @@ let kb = buf => Math.floor(buf.length / 1000)
105117
console.log(`Updated ${key}`)
106118
}
107119

108-
// Fetch Lambda config
120+
// Update `dl.begin.com/versions` config
109121
let config = await lambda.getFunctionConfiguration({ FunctionName }).promise()
110122
let Environment = { Variables: { ...config.Environment.Variables, ...data } }
111123
await lambda.updateFunctionConfiguration({ FunctionName, Environment }).promise()

0 commit comments

Comments
 (0)