-
Notifications
You must be signed in to change notification settings - Fork 20
138 lines (115 loc) · 4.41 KB
/
test-deploy.yml
File metadata and controls
138 lines (115 loc) · 4.41 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
135
136
137
138
name: Test and Deploy Pipeline
env:
build_number: ${{ github.run_id }}
concurrency:
group: test-deploy
cancel-in-progress: true
on:
push:
branches:
- master
jobs:
build-web:
runs-on: ubuntu-latest
environment: staging
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and push
uses: docker/build-push-action@v6
with:
file: ./Dockerfile
context: .
push: true
tags: mltshp/mltshp-web:build-${{ env.build_number }}
build-worker:
runs-on: ubuntu-latest
environment: staging
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and push
uses: docker/build-push-action@v6
with:
file: ./Dockerfile.worker
context: .
push: true
tags: mltshp/mltshp-worker:build-${{ env.build_number }}
test:
needs: [build-web]
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Start services with Docker Compose
run: docker compose -f release/docker-compose.yml up -d
- name: Wait for services to be ready
run: sleep 10
- name: Run tests
run: docker exec -t release-mltshp-1 ./run-tests.sh
- name: Run Coveralls report
env:
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
run: docker exec -t -e COVERALLS_REPO_TOKEN release-mltshp-1 ./coveralls-report.sh
- name: Stop services and clean up
run: |
docker compose -f release/docker-compose.yml down
docker container prune -f
staging:
needs: [test]
runs-on: ubuntu-latest
environment: staging
if: success()
steps:
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Pull and tag web image
run: |
docker pull mltshp/mltshp-web:build-${{ env.build_number }}
docker tag mltshp/mltshp-web:build-${{ env.build_number }} mltshp/mltshp-web:staging
docker push mltshp/mltshp-web:staging
deploy:
needs: [test, build-worker]
runs-on: ubuntu-latest
environment: production
if: success()
steps:
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Pull and tag web image
run: |
docker pull mltshp/mltshp-web:build-${{ env.build_number }}
docker tag mltshp/mltshp-web:build-${{ env.build_number }} mltshp/mltshp-web:latest
docker push mltshp/mltshp-web:latest
- name: Pull and tag worker image
run: |
docker pull mltshp/mltshp-worker:build-${{ env.build_number }}
docker tag mltshp/mltshp-worker:build-${{ env.build_number }} mltshp/mltshp-worker:latest
docker push mltshp/mltshp-worker:latest
- name: Notify Slack
uses: 8398a7/action-slack@v3
with:
status: success
fields: repo,message,commit,author,action,eventName,ref,workflow,job,took
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}