-
Notifications
You must be signed in to change notification settings - Fork 0
133 lines (122 loc) · 4.75 KB
/
deploy.yml
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
name: Deploy kbsb-demodash
run-name: Deploying kbsb-demodash (${{ github.actor }}).
on:
push:
branches:
- main
jobs:
deploy-frontend:
runs-on: ubuntu-latest
env:
SCW_ACCESS_KEY_ID: ${{ secrets.SCW_ACCESS_KEY_ID }}
SCW_SECRET_ACCESS_KEY: ${{ secrets.SCW_SECRET_ACCESS_KEY }}
CLOUDFLARE_TOKEN: ${{ secrets.CLOUDFLARE_TOKEN }}
CLOUDFLARE_ZONE: ${{ secrets.CLOUDFLARE_ZONE }}
RCLONE_SYNC_DIR: dist
RCLONE_REMOTE: scw
RCLONE_BUCKET_NAME: demodash.kbsb.app
VITE_ENDPOINT: ${{ vars.VITE_ENDPOINT }}
VITE_AIRTABLE_BASE: ${{ vars.VITE_AIRTABLE_BASE}}
steps:
- name: Check out repository code
uses: actions/checkout@v3
# env
- name: create `.env` and `.env.production`
run: |
echo "VITE_AIRTABLE_BASE=$VITE_AIRTABLE_BASE" > .env
echo "VITE_ENDPOINT=$VITE_ENDPOINT" > .env.production
working-directory: ./app
# Build the Node project
- name: Install Node
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install `pnpm`
run: npm install -g pnpm
working-directory: ./app
- name: Install dependencies
run: pnpm install
working-directory: ./app
- name: Build frontend
run: make build
working-directory: ./app
# Upload to Scaleway
- name: Install Rclone
run: sudo -v ; curl https://rclone.org/install.sh | sudo bash
- name: Verify `rclone`
run: rclone --version
- name: Create Rclone configuration file
run: |
echo "[scw]" > rclone.conf
echo "type = s3" >> rclone.conf
echo "provider = Scaleway" >> rclone.conf
echo "env_auth = true" >> rclone.conf
echo "region = nl-ams" >> rclone.conf
echo "endpoint = s3.nl-ams.scw.cloud" >> rclone.conf
echo "acl = private" >> rclone.conf
echo "bucket_acl = private" >> rclone.conf
working-directory: ./app
- name: Verify `rlcone.conf`
run: cat rclone.conf
working-directory: ./app
- name: Rclone copy `dist` folder to Scaleway bucket
run: |
# Set bucket authentication (Rclone expects AWS_)
export AWS_ACCESS_KEY_ID=$SCW_ACCESS_KEY_ID
export AWS_SECRET_ACCESS_KEY=$SCW_SECRET_ACCESS_KEY
rclone sync --auto-confirm --config="rclone.conf" ./"$RCLONE_SYNC_DIR"/ "$RCLONE_REMOTE":"$RCLONE_BUCKET_NAME"
working-directory: ./app
# Cloudflare cache
- name: Purge Cloudflare cache
run: |
curl -X POST "https://api.cloudflare.com/client/v4/zones/$CLOUDFLARE_ZONE/purge_cache" -H "Authorization: Bearer $CLOUDFLARE_TOKEN" -H "Content-Type: application/json" --data '{"purge_everything":true}'
deploy-backend:
runs-on: ubuntu-latest
env:
# .aws/.env vars
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# .env vars
CORS_DOMAIN: ${{ vars.CORS_DOMAIN }}
# make.docker vars
AWS_ARN: ${{ vars.AWS_ACCOUNT_ID }}
AWS_ACCOUNT_ID: ${{ vars.AWS_ACCOUNT_ID }}
AWS_REGION: ${{ vars.AWS_REGION }}
LAMBDA_FUNCTION_NAME: ${{ vars.LAMBDA_FUNCTION_NAME }}
ECR_DOCKER_REPO_NAME: ${{ vars.ECR_DOCKER_REPO_NAME }}
ECR_DOCKER_IMAGE_NAME: ${{ vars.ECR_DOCKER_IMAGE_NAME }}
steps:
- name: Check out repository code
uses: actions/checkout@v3
- name: Install Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Create `.aws` credentials file
run: |
echo "AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID" > .env
echo "AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY" >> .env
working-directory: ./lambdas/todos/.aws
- name: Create `.env` file
run: |
echo "CORS_DOMAIN=$CORS_DOMAIN" > .env
# set the Airtable environment variables manually
working-directory: ./lambdas/todos
- name: Create `.make.docker` config file
run: |
echo "ECR_DOCKER_REPO_NAME=$ECR_DOCKER_REPO_NAME" > .make.docker
echo "ECR_DOCKER_IMAGE_NAME=$ECR_DOCKER_IMAGE_NAME" >> .make.docker
echo "LAMBDA_FUNCTION_NAME=$LAMBDA_FUNCTION_NAME" >> .make.docker
echo "AWS_REGION=$AWS_REGION" >> .make.docker
echo "AWS_ACCOUNT_ID=$AWS_ACCOUNT_ID" >> .make.docker
echo "AWS_ARN=$AWS_ACCOUNT_ID" >> .make.docker
working-directory: ./lambdas/todos
# run Makefiles
- name: Login to ECR Docker registry
run: |
make auth
working-directory: ./lambdas/todos
- name: Push changes and update function
run: |
make update
working-directory: ./lambdas/todos