Skip to content

Commit

Permalink
chore(embed): automate the deployment of the code embed renderer
Browse files Browse the repository at this point in the history
  • Loading branch information
tericcabrel committed Sep 3, 2022
1 parent fa79472 commit 43ac179
Show file tree
Hide file tree
Showing 12 changed files with 11,635 additions and 10,912 deletions.
55 changes: 55 additions & 0 deletions .github/workflows/deploy-code-embed.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: Sharingan Deploy Code Embed
on:
workflow_dispatch:
inputs:
stage:
default: Production
options:
- Production
- Development
description: "Environment to deploy on"
required: true
push:
branches:
- main
paths:
- 'packages/database/prisma/**'
- 'packages/database/src/**'
- 'apps/functions/code-embed/src/**'
- 'apps/functions/code-embed/serverless.ts'

jobs:
deploy:
runs-on: ubuntu-latest
environment: ${{ github.event.inputs.stage }}
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
EMBED_STYLE_URL: ${{ secrets.EMBED_STYLE_URL }}
EMBED_JS_URL: ${{ secrets.EMBED_JS_URL }}
WEB_APP_URL: ${{ secrets.WEB_APP_URL }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
steps:
- uses: actions/checkout@v2
- name: Set up Node 16
uses: actions/setup-node@v2
with:
node-version: '16'

- name: Install projects dependencies
uses: bahmutov/npm-install@v1

- name: Deploy the application in staging
working-directory: 'apps/functions/code-embed'
if: ${{ github.event.inputs.stage == 'Development' }}
run: |
yarn setup:layer:remote
yarn sls deploy --stage dev
- name: Deploy the application in production
working-directory: 'apps/functions/code-embed'
if: ${{ github.event.inputs.stage == 'Production' }}
run: |
yarn setup:layer:remote
yarn sls deploy --stage prod
4 changes: 2 additions & 2 deletions apps/functions/code-embed/.env.template
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
DATABASE_URL="mysql:https://root:@127.0.0.1:3311/sharingan"
EMBED_STYLE_URL=http:https://localhost:7502/sharingan/style.css
EMBED_JS_URL=http:https://localhost:7502/sharingan/script.js
EMBED_STYLE_URL=https:https://cdn.jsdelivr.net/npm/sharingan-embed@latest/style.min.css
EMBED_JS_URL=https:https://cdn.jsdelivr.net/npm/sharingan-embed@latest/script.min.js
WEB_APP_URL=http:https://localhost:7500
2 changes: 1 addition & 1 deletion apps/functions/code-embed/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@ jspm_packages
.turbo
lib
.env
.esbuild/.build/src/functions/renderer/schema.prisma
.env.dev
11 changes: 8 additions & 3 deletions apps/functions/code-embed/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,15 @@
"description": "Generate the HTML page from a code snippet",
"main": "serverless.ts",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "tsc",
"clean": "rm -rf .turbo lib .esbuild",
"clean": "rm -rf .turbo lib .esbuild .serverless",
"lint": "eslint src serverless.ts",
"invoke:local": "sls invoke local -f renderer --path src/functions/renderer/mock.json"
"invoke:local": "sls invoke local -f renderer --path src/functions/renderer/mock.json",
"offline": "sls offline start",
"setup:layer:local": "./scripts/setup-layer.sh local",
"setup:layer:remote": "./scripts/setup-layer.sh remote",
"reset:env": "cp -f .env.template .env",
"deploy:dev": "yarn setup:layer:remote && cp -f .env.dev .env && sls deploy --stage dev && yarn reset:env"
},
"engines": {
"node": ">=16.14.0"
Expand All @@ -25,6 +29,7 @@
"esbuild": "^0.15.5",
"serverless": "^3.22.0",
"serverless-esbuild": "^1.32.8",
"serverless-offline": "^9.2.6",
"ts-node": "^10.4.0",
"tsconfig-paths": "^4.1.0",
"typescript": "^4.8.2"
Expand Down
27 changes: 27 additions & 0 deletions apps/functions/code-embed/scripts/setup-layer.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!/usr/bin/env bash

rm -rf layers

mkdir -p layers
mkdir -p layers/prisma-layer/nodejs/node_modules/@prisma
mkdir -p layers/shiki-layer/nodejs/node_modules

cd ../../..

yarn workspace @sharingan/database db:generate

cp -r node_modules/.prisma apps/functions/code-embed/layers/prisma-layer/nodejs/node_modules

if [ $1 = "remote" ]; then
rm apps/functions/code-embed/layers/prisma-layer/nodejs/node_modules/.prisma/client/libquery_engine-darwin.dylib.node
rm apps/functions/code-embed/layers/prisma-layer/nodejs/node_modules/.prisma/client/libquery_engine-linux-musl.so.node
else
echo 'local'
fi

cp -r node_modules/@prisma/client apps/functions/code-embed/layers/prisma-layer/nodejs/node_modules/@prisma

cp -r node_modules/shiki apps/functions/code-embed/layers/shiki-layer/nodejs/node_modules
cp -r node_modules/vscode-oniguruma apps/functions/code-embed/layers/shiki-layer/nodejs/node_modules
cp -r node_modules/vscode-textmate apps/functions/code-embed/layers/shiki-layer/nodejs/node_modules
cp -r node_modules/jsonc-parser apps/functions/code-embed/layers/shiki-layer/nodejs/node_modules
22 changes: 19 additions & 3 deletions apps/functions/code-embed/serverless.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ const serverlessConfiguration: AWS = {
bundle: true,
concurrency: 10,
define: { 'require.resolve': undefined },
exclude: ['aws-sdk', 'vscode-oniguruma'],
exclude: ['aws-sdk', 'vscode-oniguruma', 'shiki', '@prisma'],
minify: false,
platform: 'node',
sourcemap: true,
Expand All @@ -17,18 +17,34 @@ const serverlessConfiguration: AWS = {
},
frameworkVersion: '3',
functions: { renderer },
package: { individually: true },
plugins: ['serverless-esbuild'],
layers: {
Prisma: {
path: 'layers/prisma-layer',
},
Shiki: {
path: 'layers/shiki-layer',
},
},
package: {
individually: true,
patterns: ['./src/**'],
},
plugins: ['serverless-esbuild', 'serverless-offline'],
provider: {
apiGateway: {
minimumCompressionSize: 1024,
shouldStartNameWithService: true,
},
environment: {
AWS_NODEJS_CONNECTION_REUSE_ENABLED: '1',
DATABASE_URL: '${env:DATABASE_URL}',
EMBED_JS_URL: '${env:EMBED_JS_URL}',
EMBED_STYLE_URL: '${env:EMBED_STYLE_URL}',
NODE_OPTIONS: '--enable-source-maps --stack-trace-limit=1000',
WEB_APP_URL: '${env:WEB_APP_URL}',
},
name: 'aws',
region: 'eu-west-2',
runtime: 'nodejs16.x',
},
service: 'code-embed',
Expand Down
3 changes: 3 additions & 0 deletions apps/functions/code-embed/src/functions/renderer/handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ export const main: Handler<APIGatewayProxyEvent, APIGatewayProxyResult> = async

return {
body: content,
headers: {
'Content-Type': 'text/html',
},
statusCode: 200,
};
};
10 changes: 9 additions & 1 deletion apps/functions/code-embed/src/functions/renderer/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import type { AWS } from '@serverless/typescript';

import { handlerPath } from '@/libs/handler-resolver';

type LambdaEventHandler = Pick<AWS['functions'][number], 'events' | 'handler'>;
type LambdaEventHandler = Pick<AWS['functions'][number], 'events' | 'handler' | 'layers'>;

export default {
events: [
Expand All @@ -21,4 +21,12 @@ export default {
},
],
handler: `${handlerPath(__dirname)}/handler.main`,
layers: [
{
Ref: 'PrismaLambdaLayer',
},
{
Ref: 'ShikiLambdaLayer',
},
],
} as LambdaEventHandler;
2 changes: 1 addition & 1 deletion packages/database/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"db:shadow": "docker run -d --rm -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=sharingan --name sharingan-shadow-db -p 3312:3306 mysql:8.0",
"db:shadow:stop": "docker kill sharingan-shadow-db && docker container prune -f",
"db:deploy:create": "pscale deploy-request create sharingan dev",
"db:generate": "prisma generate --schema=./prisma/schema.prisma",
"db:generate": "prisma generate --schema=./prisma/schema.prisma",
"db:migrate:dev": "prisma migrate dev",
"db:reset:dev": "prisma migrate reset --skip-seed",
"db:reset:dev:seed": "prisma migrate reset",
Expand Down
2 changes: 1 addition & 1 deletion packages/database/prisma/schema.prisma
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
generator client {
provider = "prisma-client-js"
previewFeatures = ["referentialIntegrity"]
binaryTargets = ["native", "linux-musl"]
binaryTargets = ["native", "linux-musl", "rhel-openssl-1.0.x"]
}

datasource db {
Expand Down
2 changes: 1 addition & 1 deletion packages/database/prisma/schema.test.prisma
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
generator client {
provider = "prisma-client-js"
previewFeatures = ["referentialIntegrity"]
binaryTargets = ["native", "linux-musl"]
binaryTargets = [env("PRISMA_BINARY_TARGET")]
}

datasource db {
Expand Down

0 comments on commit 43ac179

Please sign in to comment.