-
Notifications
You must be signed in to change notification settings - Fork 0
132 lines (125 loc) · 5.42 KB
/
main.yml
File metadata and controls
132 lines (125 loc) · 5.42 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
name: Continuous Integration and Delivery
on: [push]
env:
WEB_IMAGE: ghcr.io/$(echo $GITHUB_REPOSITORY | tr '[:upper:]' '[:lower:]')/web
jobs:
tests:
if: ${{ github.event.workflow_run.head_branch }} == 'main'
name: Run Tests
runs-on: ubuntu-latest
strategy:
max-parallel: 4
matrix:
python-version: [3.11]
django-version: [4.1.3]
steps:
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Install Dependencies
run: |
cd app
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install "Django~=${{ matrix.django-version }}.0"
- name: Setup Tests
run: |
echo "$(python --version) / Django $(django-admin --version)"
- name: Community App Tests
run: |
cd app
python manage.py test community_app
- name: Messaging App Tests
run: |
cd app
python manage.py test messaging_app
- name: Settings App Tests
run: |
cd app
python manage.py test settings_app
- name: Dashboard App Tests
run: |
cd app
python manage.py test dashboard_app
- name: User App Tests
run: |
cd app
python manage.py test user_app
build:
name: Build Docker Images
runs-on: ubuntu-latest
needs: tests
if: github.ref == 'refs/heads/main'
steps:
- name: Checkout main
uses: actions/checkout@v3
- name: Add environment variables to .env
run: |
echo "DEBUG=0" >> .env
echo "SECRET_KEY=${{ secrets.SECRET_KEY }}" >> .env
echo "SQL_ENGINE=django.db.backends.postgresql_psycopg2" >> .env
echo "DATABASE=postgres" >> .env
echo "SQL_DATABASE=${{ secrets.SQL_DATABASE }}" >> .env
echo "SQL_USER=${{ secrets.SQL_USER }}" >> .env
echo "SQL_PASSWORD=${{ secrets.SQL_PASSWORD }}" >> .env
echo "SQL_HOST=${{ secrets.SQL_HOST }}" >> .env
echo "SQL_PORT=${{ secrets.SQL_PORT }}" >> .env
- name: Set environment variables
run: |
echo "WEB_IMAGE=$(echo ${{env.WEB_IMAGE}} )" >> $GITHUB_ENV
- name: Log in to GitHub Packages
run: echo ${PERSONAL} | docker login ghcr.io -u ${{ secrets.NAMESPACE }} --password-stdin
env:
PERSONAL: ${{ secrets.PERSONAL }}
- name: Pull images
run: |
docker pull ${{ env.WEB_IMAGE }} || true
- name: Build images
run: |
docker-compose -f docker-compose.ci.yml build
- name: Push images
run: |
docker push ${{ env.WEB_IMAGE }}
deploy:
name: Deploy to Linode
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout main
uses: actions/checkout@v3
- name: Add environment variables to .env
run: |
echo "DEBUG=0" >> .env
echo "SECRET_KEY=${{ secrets.SECRET_KEY }}" >> .env
echo "WEB_IMAGE=${{ env.WEB_IMAGE }}" >> .env
echo "NAMESPACE=${{ secrets.NAMESPACE }}" >> .env
echo "PERSONAL=${{ secrets.PERSONAL }}" >> .env
echo "SQL_ENGINE=django.db.backends.postgresql_psycopg2" >> .env
echo "DATABASE=postgres" >> .env
echo "SQL_DATABASE=${{ secrets.SQL_DATABASE }}" >> .env
echo "SQL_USER=${{ secrets.SQL_USER }}" >> .env
echo "SQL_PASSWORD=${{ secrets.SQL_PASSWORD }}" >> .env
echo "SQL_HOST=${{ secrets.SQL_HOST }}" >> .env
echo "SQL_PORT=${{ secrets.SQL_PORT }}" >> .env
- name: Add the private SSH key to the ssh-agent
env:
SSH_AUTH_SOCK: /tmp/ssh_agent.sock
run: |
mkdir -p ~/.ssh
ssh-agent -a $SSH_AUTH_SOCK > /dev/null
ssh-keyscan github.com >> ~/.ssh/known_hosts
ssh-add - <<< "${{ secrets.PRIVATE_KEY }}"
- name: Build and deploy images on Linode
env:
SSH_AUTH_SOCK: /tmp/ssh_agent.sock
run: |
scp -o StrictHostKeyChecking=no -r ./.env ./docker-compose.prod.yml root@${{ secrets.LINODE_IP_ADDRESS }}:/app
ssh -o StrictHostKeyChecking=no root@${{ secrets.LINODE_IP_ADDRESS }} << 'ENDSSH'
cd /app
source .env
docker login ghcr.io -u $NAMESPACE -p $PERSONAL
docker pull $WEB_IMAGE
sudo docker-compose -f docker-compose.prod.yml up -d
ENDSSH