-
Notifications
You must be signed in to change notification settings - Fork 7
141 lines (139 loc) · 4.61 KB
/
Copy pathdocker.yml
File metadata and controls
141 lines (139 loc) · 4.61 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
name: Docker
on:
push:
branches:
- main
- CHAOS-224-KHAOS-rewrite
env:
ENVIRONMENT: ${{ github.ref_name == 'main' && 'staging' || 'staging' }}
IMAGE_NAME: ${{ github.ref_name == 'main' && 'chaos' || 'chaos-staging' }}
jobs:
build-backend:
name: Build (Backend)
runs-on: ubuntu-latest
environment:
name: staging
url: https://chaos.devsoc.app
permissions:
contents: read
packages: write
services:
postgres:
image: postgres:16
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: chaos
ports:
- 5432:5432
steps:
- uses: actions/checkout@v4
with:
submodules: true
token: ${{ github.token }}
- name: Setup cargo cache
uses: actions/cache@v3
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
backend/server/target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-cargo-
- name: Setup temporary DB
working-directory: backend
run: |
which sqlx || cargo install sqlx-cli --no-default-features --features native-tls,postgres
echo "DATABASE_URL=postgres://postgres:password@localhost:5432/chaos" >> .env
sqlx migrate run
- name: Generate SQLx files
working-directory: backend/server
run: cargo sqlx prepare
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@master
with:
install: true
- name: Cache Docker layers
uses: actions/cache@v3
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-multi-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-multi-buildx
- name: Docker Login
uses: docker/login-action@v2.2.0
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ github.token }}
- name: Build production image
uses: docker/build-push-action@v4
with:
context: backend
builder: ${{ steps.buildx.outputs.name }}
file: backend/Dockerfile
push: true
tags: |
ghcr.io/devsoc-unsw/${{ env.IMAGE_NAME }}-backend:${{ github.sha }}
ghcr.io/devsoc-unsw/${{ env.IMAGE_NAME }}-backend:latest
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,mode=max,dest=/tmp/.buildx-cache-new
- name: Move cache
run: |
rm -rf /tmp/.buildx-cache
mv /tmp/.buildx-cache-new /tmp/.buildx-cache
build-frontend:
name: Build (Frontend)
runs-on: ubuntu-latest
environment:
name: staging
url: https://chaos.devsoc.app
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Log into registry ${{ env.REGISTRY }}
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ github.token }}
- name: Build and push Docker image
uses: docker/build-push-action@v4
with:
context: frontend-nextjs
platforms: linux/amd64
file: frontend-nextjs/Dockerfile
push: true
build-args: |
NEXT_PUBLIC_APP_URL=${{ vars.NEXT_PUBLIC_APP_URL }}
NEXT_PUBLIC_API_BASE_URL=${{ vars.NEXT_PUBLIC_API_BASE_URL }}
tags: |
ghcr.io/devsoc-unsw/${{ env.IMAGE_NAME }}-frontend:${{ github.sha }}
ghcr.io/devsoc-unsw/${{ env.IMAGE_NAME }}-frontend:latest
labels: ${{ steps.meta.outputs.labels }}
deploy:
name: Deploy (CD)
runs-on: ubuntu-latest
needs: [build-frontend, build-backend]
concurrency: staging
environment:
name: staging
url: https://chaosstaging.devsoc.app
steps:
- name: Dispatch deployment
uses: devsoc-unsw/deployment-dispatch-action@main
with:
deployment-dispatcher-app-id: ${{ vars.DEPLOYMENT_DISPATCHER_APP_ID }}
deployment-dispatcher-app-private-key: ${{ secrets.DEPLOYMENT_DISPATCHER_APP_PRIVATE_KEY }}
updates: |
ghcr.io/devsoc-unsw/${{ env.IMAGE_NAME }}-frontend=${{ github.sha }}
ghcr.io/devsoc-unsw/${{ env.IMAGE_NAME }}-backend=${{ github.sha }}