-
Notifications
You must be signed in to change notification settings - Fork 1
152 lines (147 loc) · 5.29 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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
name: Deploy
on:
workflow_dispatch:
inputs:
input:
required: false
push:
branches:
- staging
- master
jobs:
build-client:
name: Build Client
runs-on: ubuntu-latest
environment:
name: ${{ github.ref_name }}
steps:
- name: Cache Trunk
uses: actions/cache@v3
with:
path: |
~/.cargo
/usr/local/cargo/bin
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-
- uses: actions/checkout@v4
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
toolchain: stable
- name: Install Trunk
run: cargo install trunk
if: steps.cache.outputs.cache-hit != 'true'
- name: Build with Trunk
run: |
echo ${{ secrets.API_URL }} > src/api_url.txt
trunk build --release
working-directory: client
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: clientArtifact
path: client/dist
- name: Upload Dockerfile
uses: actions/upload-artifact@v4
with:
name: clientDockerfile
path: client/Dockerfile
build-server:
name: Build Server
runs-on: ubuntu-latest
environment:
name: ${{ github.ref_name }}
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x
- name: Restore dependencies
run: dotnet restore ./server/devblog.csproj
- name: Build application
run: dotnet build ./server/devblog.csproj -c Release -o ./app/build
- name: Publish application
run: dotnet publish ./server/devblog.csproj -c Release -o ./app/publish /p:UseAppHost=false
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: serverArtifact
path: app/publish
- name: Upload Dockerfile
uses: actions/upload-artifact@v4
with:
name: serverDockerfile
path: server/Dockerfile
- name: Upload Docker Compose
uses: actions/upload-artifact@v4
with:
name: dockerCompose
path: docker-compose.yml
copy-files:
name: Copy Files
needs: [build-server, build-client]
runs-on: ubuntu-latest
environment:
name: ${{ github.ref_name }}
steps:
- name: Create SSH Key
run: |
mkdir -p ${{ secrets.SSH_PRIVATE_KEY_PATH }}
echo "${{ secrets.SSH_PRIVATE_KEY_CONTENT }}" > ${{ secrets.SSH_PRIVATE_KEY_PATH }}/${{ secrets.SSH_PRIVATE_KEY_NAME }}
sudo chmod 600 ${{ secrets.SSH_PRIVATE_KEY_PATH }}/${{ secrets.SSH_PRIVATE_KEY_NAME }}
shell: bash
- name: Add Host Key to known_hosts
run: ssh-keyscan -H ${{ secrets.SSH_HOST }} >> ${{ secrets.SSH_PRIVATE_KEY_PATH }}/known_hosts
- name: Download Client Artifacts
uses: actions/download-artifact@v4
with:
name: clientArtifact
path: dist
- name: Download Server Artifacts
uses: actions/download-artifact@v4
with:
name: serverArtifact
path: publish
- name: Download Server Dockerfile
uses: actions/download-artifact@v4
with:
name: serverDockerfile
path: server
- name: Download Client Dockerfile
uses: actions/download-artifact@v4
with:
name: clientDockerfile
path: client
- name: Download Docker Compose
uses: actions/download-artifact@v4
with:
name: dockerCompose
path: dockerCompose
- name: Copy Files to Server
run: |
scp -i ${{ secrets.SSH_PRIVATE_KEY_PATH }}/${{ secrets.SSH_PRIVATE_KEY_NAME }} dockerCompose/docker-compose.yml ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:${{ secrets.DEVBLOG_ROOT_PATH }}
scp -i ${{ secrets.SSH_PRIVATE_KEY_PATH }}/${{ secrets.SSH_PRIVATE_KEY_NAME }} -r client/Dockerfile dist ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:${{ secrets.DEVBLOG_ROOT_PATH }}/client
scp -i ${{ secrets.SSH_PRIVATE_KEY_PATH }}/${{ secrets.SSH_PRIVATE_KEY_NAME }} -r server/Dockerfile publish ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:${{ secrets.DEVBLOG_ROOT_PATH }}/server
restart-containers:
name: Restart Containers
needs: [copy-files]
runs-on: ubuntu-latest
environment:
name: ${{ github.ref_name }}
steps:
- name: Create SSH Key
run: |
mkdir -p ${{ secrets.SSH_PRIVATE_KEY_PATH }}
echo "${{ secrets.SSH_PRIVATE_KEY_CONTENT }}" > ${{ secrets.SSH_PRIVATE_KEY_PATH }}/${{ secrets.SSH_PRIVATE_KEY_NAME }}
sudo chmod 600 ${{ secrets.SSH_PRIVATE_KEY_PATH }}/${{ secrets.SSH_PRIVATE_KEY_NAME }}
shell: bash
- name: Add Host Key to known_hosts
run: ssh-keyscan -H ${{ secrets.SSH_HOST }} >> ${{ secrets.SSH_PRIVATE_KEY_PATH }}/known_hosts
- name: Restart Container
run: |
ssh -i ${{ secrets.SSH_PRIVATE_KEY_PATH }}/${{ secrets.SSH_PRIVATE_KEY_NAME }} ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "\
cd ${{ secrets.DEVBLOG_ROOT_PATH }} && \
docker compose up -d --force-recreate"