-
Notifications
You must be signed in to change notification settings - Fork 142
141 lines (126 loc) · 4.35 KB
/
test-build-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
134
135
136
137
138
139
140
141
name: Build Docker Images
on: push
jobs:
run-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Cache node modules
id: cache-npm
uses: actions/cache@v3
env:
cache-name: cache-node-modules
with:
# npm cache files are stored in `~/.npm` on Linux/macOS
path: ~/.npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
- if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }}
name: List the state of node modules
continue-on-error: true
run: npm list
- name: Install dependencies
run: npm ci && npx playwright install --with-deps
- name: Start backend
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
JWT_SECRET: ${{ secrets.JWT_SECRET }}
APP_URL: http://localhost:8080
API_URL: http://localhost:3333
LUNARY_PUBLIC_KEY: 259d2d94-9446-478a-ae04-484de705b522
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
timeout-minutes: 1
run: npm run start:backend & npx wait-on http://localhost:3333/v1/health
- name: Start frontend
env:
APP_URL: http://localhost:8080
API_URL: http://localhost:3333
NEXT_PUBLIC_API_URL: xyzPLACEHOLDERxyz
timeout-minutes: 2
run: (npm run build:frontend && npm run start:frontend) & npx wait-on http://localhost:8080/
- name: Run tests
run: npx playwright test
env:
BASE_URL: http://localhost:8080
DATABASE_URL: ${{ secrets.DATABASE_URL }}
build-and-push:
needs: run-tests
runs-on: ubuntu-latest
steps:
- name: Check out the private Ops repo
uses: actions/checkout@v4
with:
token: ${{ secrets.ACCESS_TOKEN }}
submodules: "recursive"
- name: Generate data
id: date
run: echo "::set-output name=date::$(date +%Y-%m-%d-%Hh%Mm%Ss)"
- name: Get short commit hash
id: commit
run: echo "::set-output name=hash::$(git rev-parse --short HEAD)"
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to private Docker Registry
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_REGISTRY_USERNAME }}
password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }}
- name: Build and push backend
uses: docker/build-push-action@v5
with:
context: .
file: ./ops/backend.Dockerfile
push: true
tags: |
lunary/backend:latest
lunary/backend:rev-${{ steps.date.outputs.date }}-${{ steps.commit.outputs.hash }}
platforms: linux/amd64
- name: Build and push frontend
uses: docker/build-push-action@v5
with:
context: .
file: ./ops/frontend.Dockerfile
push: true
tags: |
lunary/frontend:latest
lunary/frontend:rev-${{ steps.date.outputs.date }}-${{ steps.commit.outputs.hash }}
platforms: linux/amd64
- name: Build and push radar
uses: docker/build-push-action@v5
with:
context: .
file: ./ops/radar.Dockerfile
push: true
tags: |
lunary/radar:latest
lunary/radar:rev-${{ steps.date.outputs.date }}-${{ steps.commit.outputs.hash }}
platforms: linux/amd64
- name: Build and push ml
uses: docker/build-push-action@v5
with:
context: .
file: ./ops/ml.Dockerfile
push: true
tags: |
lunary/ml:latest
lunary/ml:rev-${{ steps.date.outputs.date }}-${{ steps.commit.outputs.hash }}
platforms: linux/amd64
deploy:
needs: build-and-push
runs-on: ubuntu-latest
steps:
- name: Deploy to Production
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.PRODUCTION_IP_ADDRESS }}
username: root
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: 3855
script: |
cd /opt/lunary
docker compose pull
docker compose down
docker compose up -d