1+ name : Docker Demo on Self-Hosted Runner
2+
3+ on :
4+ push :
5+ branches :
6+ - main
7+
8+ jobs :
9+ run-in-paris :
10+ name : Run on Paris Runner
11+ runs-on : [self-hosted, paris]
12+ steps :
13+ - name : Fix permissions before checkout
14+ run : sudo chown -R $USER:$USER $GITHUB_WORKSPACE
15+
16+ - name : Force delete previous build artifacts
17+ run : sudo rm -rf $GITHUB_WORKSPACE/* || true
18+
19+ - name : Checkout repository
20+ uses : actions/checkout@v3
21+ with :
22+ ref : main
23+ clean : true
24+
25+ - name : Create hoops_license.txt
26+ run : |
27+ echo "${{ secrets.HOOPS_LICENSE }}" | base64 --decode > hoops_license.txt
28+ ls -l hoops_license.txt # Verify file exists
29+ cat hoops_license.txt # Debugging: Check file content (remove in production)
30+
31+ - name : Inject Host IP into index.html
32+ run : |
33+ sed -i 's|<head>|<head>\n<script>window.HOST_IP="${{ secrets.HOST_IP }}";</script>|' ./public/index.html
34+
35+ - name : Write SSL certificates to files
36+ run : |
37+ pwd # Print the current working directory
38+ ls -la # List files before creating certs
39+ mkdir -p certs
40+ echo "${{ secrets.SSL_CERT }}" > certs/server.crt
41+ echo "${{ secrets.SSL_KEY }}" > certs/server.key
42+ echo "${{ secrets.CA_CERT }}" > certs/ca.crt
43+
44+ - name : Verify SSL Certificates
45+ run : |
46+ echo "🔍 Checking SSL certificate files..."
47+ if [ ! -s certs/server.crt ] || [ ! -s certs/server.key ]; then
48+ echo "❌ Error: SSL certificate files are missing or empty!"
49+ exit 1
50+ fi
51+ ls -la certs/
52+
53+ - name : Set Environment Variable for Docker
54+ run : echo "HOST_IP=${{ secrets.HOST_IP }}" >> $GITHUB_ENV
55+
56+ - name : Login to GitHub Packages
57+ run : echo "${{ secrets.GHCR_PAT }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
58+
59+ - name : Remove unused Docker images
60+ run : docker image prune -af
61+
62+ - name : Pull Latest Docker Images
63+ run : |
64+ docker pull ghcr.io/techsoft3d/streaming-server:latest
65+ docker pull ghcr.io/techsoft3d/node-server:latest
66+ docker pull ghcr.io/techsoft3d/proxy-server:latest
67+
68+ - name : Copy `./public` into External Docker Volume (Using Temporary Container)
69+ run : |
70+ docker run --rm \
71+ -v public:/volume \
72+ -v $(pwd)/public:/backup \
73+ alpine sh -c "cp -r /backup/* /volume/ && ls -la /volume/"
74+
75+ docker run --rm \
76+ -v patches:/volume \
77+ -v $(pwd)/patches:/backup \
78+ alpine sh -c "cp -r /backup/* /volume/ && ls -la /volume/"
79+ docker run --rm \
80+ -v models:/volume \
81+ -v $(pwd)/models:/backup \
82+ alpine sh -c "cp -r /backup/* /volume/ && ls -la /volume/"
83+
84+
85+
86+ - name : Build and Run Docker Containers
87+ run : |
88+ docker-compose -p main_project up -d --force-recreate
89+
90+
91+ run-in-oregon :
92+ name : Run on Oregon Runner
93+ runs-on : [self-hosted, oregon]
94+ steps :
95+ - name : Fix permissions before checkout
96+ run : sudo chown -R $USER:$USER $GITHUB_WORKSPACE
97+
98+ - name : Force delete previous build artifacts
99+ run : sudo rm -rf $GITHUB_WORKSPACE/* || true
100+
101+ - name : Checkout repository
102+ uses : actions/checkout@v3
103+ with :
104+ ref : main
105+ clean : true
106+
107+ - name : Create hoops_license.txt
108+ run : |
109+ echo "${{ secrets.HOOPS_LICENSE }}" | base64 --decode > hoops_license.txt
110+ ls -l hoops_license.txt # Verify file exists
111+ cat hoops_license.txt # Debugging: Check file content (remove in production)
112+
113+ - name : Inject Host IP into index.html
114+ run : |
115+ sed -i 's|<head>|<head>\n<script>window.HOST_IP="${{ secrets.HOST_IP }}";</script>|' ./public/index.html
116+
117+ - name : Write SSL certificates to files
118+ run : |
119+ pwd # Print the current working directory
120+ ls -la # List files before creating certs
121+ mkdir -p certs
122+ echo "${{ secrets.SSL_CERT }}" > certs/server.crt
123+ echo "${{ secrets.SSL_KEY }}" > certs/server.key
124+ echo "${{ secrets.CA_CERT }}" > certs/ca.crt
125+
126+ - name : Verify SSL Certificates
127+ run : |
128+ echo "🔍 Checking SSL certificate files..."
129+ if [ ! -s certs/server.crt ] || [ ! -s certs/server.key ]; then
130+ echo "❌ Error: SSL certificate files are missing or empty!"
131+ exit 1
132+ fi
133+ ls -la certs/
134+
135+ - name : Set Environment Variable for Docker
136+ run : echo "HOST_IP=${{ secrets.HOST_IP }}" >> $GITHUB_ENV
137+
138+ - name : Login to GitHub Packages
139+ run : echo "${{ secrets.GHCR_PAT }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
140+
141+ - name : Remove unused Docker images
142+ run : docker image prune -af
143+
144+ - name : Pull Latest Docker Images
145+ run : |
146+ docker pull ghcr.io/techsoft3d/streaming-server:latest
147+ docker pull ghcr.io/techsoft3d/node-server:latest
148+ docker pull ghcr.io/techsoft3d/proxy-server:latest
149+
150+ - name : Copy `./public` into External Docker Volume (Using Temporary Container)
151+ run : |
152+ docker run --rm \
153+ -v public:/volume \
154+ -v $(pwd)/public:/backup \
155+ alpine sh -c "cp -r /backup/* /volume/ && ls -la /volume/"
156+
157+ docker run --rm \
158+ -v patches:/volume \
159+ -v $(pwd)/patches:/backup \
160+ alpine sh -c "cp -r /backup/* /volume/ && ls -la /volume/"
161+ docker run --rm \
162+ -v models:/volume \
163+ -v $(pwd)/models:/backup \
164+ alpine sh -c "cp -r /backup/* /volume/ && ls -la /volume/"
165+
166+
167+
168+ - name : Build and Run Docker Containers
169+ run : |
170+ docker-compose -p main_project up -d --force-recreate
0 commit comments