1+ name : Deploy to Home Test Server (WireGuard)
2+
3+ on :
4+ issue_comment :
5+ types : [created]
6+
7+ jobs :
8+ deploy :
9+ runs-on : ubuntu-latest
10+ if : >
11+ github.event.issue.pull_request &&
12+ contains(github.event.comment.body, '/test deploy')
13+
14+ steps :
15+ - name : Checkout code
16+ uses : actions/checkout@v4
17+ with :
18+ ref : develop
19+
20+ - name : Install WireGuard
21+ run : |
22+ sudo apt-get update
23+ sudo apt-get install -y wireguard resolvconf
24+
25+ - name : Create & Start WireGuard
26+ run : |
27+ echo "${{ secrets.WIREGUARD_CONFIG }}" > wg0.conf
28+ sudo cp wg0.conf /etc/wireguard/wg0.conf
29+ sudo chmod 600 /etc/wireguard/wg0.conf
30+ sudo wg-quick up wg0
31+
32+ - name : Check VPN Connection
33+ run : |
34+ sudo wg show
35+ ping -c 3 ${{ secrets.TEST_HOST }}
36+
37+ - name : Set up JDK 17
38+ uses : actions/setup-java@v3
39+ with :
40+ java-version : ' 17'
41+ distribution : ' temurin'
42+
43+ - name : Grant execute permission for gradlew
44+ run : chmod +x ./gradlew
45+
46+ - name : Build with Gradle
47+ env :
48+ DB_ADDRESS : ${{ secrets.DB_ADDRESS }}
49+ DB_USER : ${{ secrets.DB_USER }}
50+ DB_PASSWORD : ${{ secrets.DB_PASSWORD }}
51+ REDIS_PASSWORD : ${{ secrets.REDIS_PASSWORD }}
52+ GMAIL_ADDRESS : ${{ secrets.GMAIL_ADDRESS }}
53+ GMAIL_PASSWORD : ${{ secrets.GMAIL_PASSWORD }}
54+ JWT_SECRET_KEY : ${{ secrets.JWT_SECRET_KEY }}
55+ run : ./gradlew build -x test --stacktrace
56+
57+ - name : Login to Docker Hub
58+ uses : docker/login-action@v3
59+ with :
60+ username : ${{ secrets.DOCKER_USERNAME }}
61+ password : ${{ secrets.DOCKER_PASSWORD }}
62+
63+ - name : Build and Push Docker image
64+ run : |
65+ docker build -t renzzle/github-action:test-latest .
66+ docker push renzzle/github-action:test-latest
67+
68+ - name : Create .env file for Test Server
69+ run : |
70+ echo "DB_ADDRESS=db:3306/${{ secrets.DB_NAME }}" >> .env
71+ echo "DB_USER=${{ secrets.DB_USER }}" >> .env
72+ echo "DB_PASSWORD=${{ secrets.DB_PASSWORD }}" >> .env
73+ echo "DB_ROOT_PASSWORD=${{ secrets.DB_ROOT_PASSWORD }}" >> .env
74+ echo "DB_NAME=${{ secrets.DB_NAME }}" >> .env
75+ echo "REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }}" >> .env
76+ echo "GMAIL_PASSWORD=${{ secrets.GMAIL_PASSWORD }}" >> .env
77+ echo "GMAIL_ADDRESS=\"${{ secrets.GMAIL_ADDRESS }}\"" >> .env
78+ echo "JWT_SECRET_KEY=\"${{ secrets.JWT_SECRET_KEY }}\"" >> .env
79+
80+ - name : Copy Files to Home Server
81+ uses : appleboy/scp-action@master
82+ with :
83+ host : ${{ secrets.TEST_HOST }}
84+ username : ${{ secrets.TEST_USERNAME }}
85+ key : ${{ secrets.TEST_PRIVATE_KEY }}
86+ source : " ./docker-compose.yml,./docker-compose.prod.yml,./.env"
87+ target : " /home/${{ secrets.TEST_USERNAME }}/app/"
88+ overwrite : true
89+
90+ - name : Deploy via SSH
91+ uses : appleboy/ssh-action@master
92+ with :
93+ host : ${{ secrets.TEST_HOST }}
94+ username : ${{ secrets.TEST_USERNAME }}
95+ key : ${{ secrets.TEST_PRIVATE_KEY }}
96+ script : |
97+ cd /home/${{ secrets.TEST_USERNAME }}/app/
98+ docker-compose -f docker-compose.yml -f docker-compose.prod.yml down
99+ docker-compose -f docker-compose.yml -f docker-compose.prod.yml pull
100+ docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
101+ docker image prune -f
0 commit comments