-
Notifications
You must be signed in to change notification settings - Fork 2
134 lines (110 loc) · 5.7 KB
/
autodeploy.yml
File metadata and controls
134 lines (110 loc) · 5.7 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
126
127
128
129
130
131
132
133
134
name: CI/CD Pipeline
on:
push:
branches: main
jobs:
CI-PIPELINE:
runs-on: ubuntu-latest
steps:
# Step 1: Installs needed dependencies to set up our code
- name: Checkout Code
uses: actions/checkout@v3
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 18
# Step 2: Tests code too ensure it passes all tests
- name: Run frontend tests
run: cd course-matrix/frontend && npm install && npm run test
- name: Run backend tests
run: cd course-matrix/backend && npm install && npm run test
# Step 3: Set up Docker Buildx
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
# Step 4: Sets our our application's environment
- name: setup application env
run: |
cd course-matrix
# Update frontend .env
cd frontend
echo "VITE_SERVER_URL=\"http://34.130.253.243:8081\"" > .env && \
echo "VITE_PUBLIC_ASSISTANT_BASE_URL=\"${{ secrets.VITE_PUBLIC_ASSISTANT_BASE_URL }}\"" >> .env && \
echo "VITE_ASSISTANT_UI_KEY=\"${{ secrets.VITE_ASSISTANT_UI_KEY }}\"" >> .env
# Update backend .env
cd ../backend
echo "NODE_ENV=\"development\"" > .env && \
echo "PORT=8081" >> .env && \
echo "CLIENT_APP_URL=\"http://34.130.253.243:5173\"" >> .env && \
echo "DATABASE_URL=\"${{ secrets.DATABASE_URL }}\"" >> .env && \
echo "DATABASE_KEY=\"${{ secrets.DATABASE_KEY }}\"" >> .env && \
echo "OPENAI_API_KEY=\"${{ secrets.OPENAI_API_KEY }}\"" >> .env && \
echo "PINECONE_API_KEY=\"${{ secrets.PINECONE_API_KEY }}\"" >> .env && \
echo "PINECONE_INDEX_NAME=\"course-matrix\"" >> .env && \
echo "BREVO_API_KEY=\"${{ secrets.BREVO_API_KEY }}\"" >> .env && \
echo "SENDER_EMAIL=\"${{ secrets.SENDER_EMAIL }}\"" >> .env && \
echo "SENDER_NAME=\"Course Matrix Notifications\"" >> .env
cd ../
# Step 5: Logging in to dockerhub
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
# Step 6: Build all required doccker images
- name: Build Docker Image
run: |
cd course-matrix
docker compose build
# Step 7: Check if images exist before tagging
- name: List Docker Images (Debugging)
run: docker images
# Step 8: Tags created images with version using github commit tags
- name: Tag Images With Version
run: |
docker tag course-matrix/frontend:latest ${{ secrets.DOCKERHUB_USERNAME }}/course-matrix-frontend:${{ github.sha }}
docker tag course-matrix/backend:latest ${{ secrets.DOCKERHUB_USERNAME }}/course-matrix-backend:${{ github.sha }}
# Step 9: Push Docker images version to Docker Hub
- name: Push Docker images version to Docker Hub
run: |
docker push ${{ secrets.DOCKERHUB_USERNAME }}/course-matrix-frontend:${{ github.sha }}
docker push ${{ secrets.DOCKERHUB_USERNAME }}/course-matrix-backend:${{ github.sha }}
# Step 10: Tags created images for the master branch
- name: Tag Images for Master Branch
run: |
docker tag course-matrix/frontend:latest ${{ secrets.DOCKERHUB_USERNAME }}/course-matrix-frontend:master
docker tag course-matrix/backend:latest ${{ secrets.DOCKERHUB_USERNAME }}/course-matrix-backend:master
# Step 11: Push Docker images to Docker Hub master branch
- name: Push images to Master Branch
run: |
docker push ${{ secrets.DOCKERHUB_USERNAME }}/course-matrix-frontend:master
docker push ${{ secrets.DOCKERHUB_USERNAME }}/course-matrix-backend:master
CD-PIPELINE:
needs: CI-PIPELINE
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v3
# Step 12: Connect to virtual machine
- name: Setup SSH Connection
run: |
echo "${{ secrets.GCP_SSH_PRIVATE_KEY }}" > private_key
chmod 600 private_key
- name: Deploy to Google Cloud VM
run: |
ssh -i private_key -o StrictHostKeyChecking=no ${{ secrets.GCP_USERNAME }}@${{ secrets.GCP_VM_IP }} << 'EOF'
cd /home/masahisasekita/term-group-project-c01w25-project-course-matrix || { echo "Error: Directory /root/myapp does not exist!"; exit 1; }
# Step 13: Clears deployment environment
sudo docker stop $(sudo docker ps -q)
sudo docker rmi -f $(sudo docker images -q)
sudo docker system prune -a --volumes -f
# Step 14: Pull the latest images
sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/course-matrix-frontend:master
sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/course-matrix-backend:master
# Step 15: Run the docker containers
sudo docker run -d -p 5173:5173 -e TZ=America/Toronto -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro ${{ secrets.DOCKERHUB_USERNAME }}/course-matrix-frontend:master
sudo docker run -d -p 8081:8081 -e TZ=America/Toronto -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro ${{ secrets.DOCKERHUB_USERNAME }}/course-matrix-backend:master
# Step 16: Run post deployment tests
sudo docker ps
sudo docker run --rm ${{ secrets.DOCKERHUB_USERNAME }}/course-matrix-frontend:master npm test
sudo docker run --rm ${{ secrets.DOCKERHUB_USERNAME }}/course-matrix-backend:master npm test
EOF