-
Notifications
You must be signed in to change notification settings - Fork 1
125 lines (111 loc) · 4.2 KB
/
ci.yml
File metadata and controls
125 lines (111 loc) · 4.2 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
name: CI/CD Pipeline
on:
push:
branches:
- master
release:
types:
- published
permissions:
contents: read
packages: write
env:
BACKEND_IMAGE: ghcr.io/vzbot3d/vzbot-discordbot
FRONTEND_IMAGE: ghcr.io/vzbot3d/vzbot-nuxt
jobs:
detect-changes:
runs-on: ubuntu-latest
outputs:
backend: ${{ github.event_name == 'release' || steps.filter.outputs.backend }}
frontend: ${{ github.event_name == 'release' || steps.filter.outputs.frontend }}
backend_tags: ${{ steps.tags.outputs.backend_tags }}
frontend_tags: ${{ steps.tags.outputs.frontend_tags }}
deploy_env: ${{ steps.tags.outputs.deploy_env }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Detect changed paths
uses: dorny/paths-filter@v3
id: filter
with:
filters: |
backend:
- 'backend/**'
frontend:
- 'frontend/**'
- name: Determine image tags and deploy environment
id: tags
run: |
VERSION=${{ github.sha }}
echo "backend_tags=${{ env.BACKEND_IMAGE }}:${VERSION},${{ env.BACKEND_IMAGE }}:latest" >> $GITHUB_OUTPUT
echo "frontend_tags=${{ env.FRONTEND_IMAGE }}:${VERSION},${{ env.FRONTEND_IMAGE }}:latest" >> $GITHUB_OUTPUT
echo "deploy_env=production" >> $GITHUB_OUTPUT
build-backend:
needs: detect-changes
if: needs.detect-changes.outputs.backend == 'true'
uses: ./.github/workflows/build-backend.yml
with:
image_tags: ${{ needs.detect-changes.outputs.backend_tags }}
deploy_env: ${{ needs.detect-changes.outputs.deploy_env }}
secrets: inherit
build-frontend:
needs: detect-changes
if: needs.detect-changes.outputs.frontend == 'true'
uses: ./.github/workflows/build-frontend.yml
with:
image_tags: ${{ needs.detect-changes.outputs.frontend_tags }}
secrets: inherit
deploy:
runs-on: ubuntu-latest
needs: [detect-changes, build-backend, build-frontend]
if: always() && !failure() && !cancelled()
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Generate .env file
run: |
cat <<'DOTENV' > infra/.env
VZ_MODE=DEPLOY
VZ_TOKEN=${{ secrets.VZ_TOKEN }}
VZ_LOG_CHANNEL=${{ vars.VZ_LOG_CHANNEL }}
VZ_ADMIN_ROLE=${{ vars.VZ_ADMIN_ROLE }}
VZ_TEAM_ROLE=${{ vars.VZ_TEAM_ROLE }}
VZ_MODERATOR_ROLE=${{ vars.VZ_MODERATOR_ROLE }}
VZ_CONTRIBUTOR_ROLE=${{ vars.VZ_CONTRIBUTOR_ROLE }}
VZ_OWNERS_ROLE=${{ vars.VZ_OWNERS_ROLE }}
VZ_SERIAL_CATEGORY=${{ vars.VZ_SERIAL_CATEGORY }}
VZ_SERIAL_ANNOUNCEMENT_CHANNEL=${{ vars.VZ_SERIAL_ANNOUNCEMENT_CHANNEL }}
VZ_SERIAL_BASE_PLATE_LOCATION=/data/serial-base-plates
VZ_SERIAL_NUMBER_PLATES_LOCATION=/data/serial-number-plates
VZ_SERIAL_BASE_PLATE_HOST_PATH=${{ vars.VZ_SERIAL_BASE_PLATE_HOST_PATH }}
VZ_SERIAL_NUMBER_PLATES_HOST_PATH=${{ vars.VZ_SERIAL_NUMBER_PLATES_HOST_PATH }}
VZ_WEBSITE_URL=${{ vars.VZ_WEBSITE_URL }}
VZ_DB_USER=${{ secrets.VZ_DB_USER }}
VZ_DB_ROOT_PASSWORD=${{ secrets.VZ_DB_ROOT_PASSWORD }}
VZ_DB_HOST=mariadb
VZ_DB_PASSWORD=${{ secrets.VZ_DB_PASSWORD }}
VZ_DB_DATABASE=${{ secrets.VZ_DB_DATABASE }}
VZ_DB_PORT=3306
BACKEND_URL=http://bot:8080
BACKEND_TOKEN=${{ secrets.BACKEND_TOKEN }}
DOTENV
sed -i 's/^ //' infra/.env
- name: Copy infra files to server
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.SERVER_HOST }}
username: devin
password: ${{ secrets.SERVER_PASSWORD }}
port: ${{ secrets.SERVER_SSH_PORT }}
source: "infra/docker-compose.yml,infra/deploy.sh,infra/.env"
target: "~"
- name: Deploy on server
uses: appleboy/ssh-action@v1.2.0
with:
host: ${{ secrets.SERVER_HOST }}
username: devin
password: ${{ secrets.SERVER_PASSWORD }}
port: ${{ secrets.SERVER_SSH_PORT }}
script: |
chmod +x ~/infra/deploy.sh
~/infra/deploy.sh production