-
Notifications
You must be signed in to change notification settings - Fork 0
146 lines (123 loc) · 5.09 KB
/
test.yml
File metadata and controls
146 lines (123 loc) · 5.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
name: Deploy Production (mosu-app)
on:
workflow_dispatch:
pull_request:
branches:
- release
env:
AWS_REGION: ap-northeast-2
AWS_S3_BUCKET_NAME: ${{ secrets.AWS_S3_BUCKET_NAME }}
AWS_S3_LAMBDA_BUCKET_NAME: mosu-lambda
AWS_LAMBDA_FUNCTION_NAME: mosu-web-server
WORKING_DIRECTORY: ./mosu-app
COPIED_WORKING_DIRECTORY: ./app
jobs:
build:
name: Build and Package
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Copy Application Directory
run: cp -r ${{ env.WORKING_DIRECTORY }} ${{ env.COPIED_WORKING_DIRECTORY }}
- name: Setup Node.js (with Yarn cache)
uses: actions/setup-node@v4
with:
node-version: "22"
cache: "yarn"
- name: Clean Next.js Cache
run: rm -rf ${{ env.COPIED_WORKING_DIRECTORY }}/.next
- name: Install dependencies
run: yarn install
working-directory: ${{ env.COPIED_WORKING_DIRECTORY }}
- name: Build Application
run: yarn build
working-directory: ${{ env.COPIED_WORKING_DIRECTORY }}
- name: Install express and serverless-http
run: |
cd ./.next/standalone
yarn add express serverless-http
working-directory: ${{ env.COPIED_WORKING_DIRECTORY }}
- name: Create Node Modules Lambda Layer
run: |
cd ./.next/standalone
mkdir nodejs
mv -r node_modules nodejs/
zip -r layer.zip nodejs
working-directory: ${{ env.COPIED_WORKING_DIRECTORY }}
- name: Create Lambda Package
working-directory: ${{ env.COPIED_WORKING_DIRECTORY }}
run: |
cd ./.next/standalone
zip -r ../../lambda-package.zip ./*
- name: Upload Lambda Package Artifact
uses: actions/upload-artifact@v4
with:
name: lambda-package
path: ${{ env.COPIED_WORKING_DIRECTORY }}/lambda-package.zip
if-no-files-found: error
- name: Create Static Assets Package
working-directory: ${{ env.COPIED_WORKING_DIRECTORY }}
run: tar -czf static-assets.tar.gz public .next/static
- name: Upload Static Assets Artifact
uses: actions/upload-artifact@v4
with:
name: static-assets
path: ${{ env.COPIED_WORKING_DIRECTORY }}/static-assets.tar.gz
if-no-files-found: error
deploy-static-assets:
name: Deploy Static Assets to S3
needs: build
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- name: Download static assets artifact
uses: actions/download-artifact@v4
with:
name: static-assets
- name: Extract static assets
run: tar -xzf static-assets.tar.gz
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ${{ env.AWS_REGION }}
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- name: Sync static assets to S3
run: |
aws s3 sync ./public s3://${{ env.AWS_S3_BUCKET_NAME }} --delete
aws s3 sync ./.next/static s3://${{ env.AWS_S3_BUCKET_NAME }}/_next/static --delete
- name: Invalidate CloudFront Cache
run: |
aws cloudfront create-invalidation \
--distribution-id ${{ secrets.AWS_CLOUDFRONT_DISTRIBUTION_ID }} \
--paths "/*"
deploy-lambda:
name: Deploy Lambda Function
needs: build
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- name: Download lambda package artifact
uses: actions/download-artifact@v4
with:
name: lambda-package
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ${{ env.AWS_REGION }}
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- name: Upload Lambda Package
run: |
aws s3 cp lambda-package.zip s3://${{ env.AWS_S3_LAMBDA_BUCKET_NAME }}/lambda-package.zip
- name: Deploy to Lambda
run: |
aws lambda update-function-code \
--function-name ${{ env.AWS_LAMBDA_FUNCTION_NAME }} \
--s3-bucket ${{ env.AWS_S3_LAMBDA_BUCKET_NAME }} \
--s3-key lambda-package.zip