-
Notifications
You must be signed in to change notification settings - Fork 1
129 lines (114 loc) · 4.59 KB
/
integration-tests.yml
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
name: Integration Tests
on:
push:
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#onworkflow_dispatch
workflow_dispatch:
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions
permissions:
contents: read # for "git clone"
defaults:
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#defaultsrun
run:
# Enable fail-fast behavior using set -eo pipefail
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#exit-codes-and-error-action-preference
shell: bash
jobs:
run-integration-tests:
name: Integration Tests
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on
runs-on: ubuntu-20.04
# https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs
strategy:
# https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs#handling-failures
fail-fast: false
matrix:
# https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs#example-adding-configurations
include:
# "docker-service-name" must match "services.$name" from docker-compose.yaml
# "database-service-name" must match "services.$name" from docker-compose.yaml
# "application-port" must match "services.$name.environment:PORT" from docker-compose.yaml
- docker-service-name: 'express-js'
database-service-name: 'mysql'
application-port: 3010
skip_500_error_testing: false
- docker-service-name: 'express-ts'
database-service-name: 'mysql'
application-port: 3020
skip_500_error_testing: false
- docker-service-name: 'chi'
database-service-name: 'mysql'
application-port: 3030
skip_500_error_testing: true
- docker-service-name: 'fastapi'
database-service-name: 'postgres'
application-port: 4040
skip_500_error_testing: false
env:
# Prevent interference between builds by setting the project name to a unique value. Otherwise
# "docker compose down" has been stopping containers (especially database) from other builds.
# https://docs.docker.com/compose/project-name/
# https://docs.docker.com/compose/environment-variables/envvars/#compose_project_name
COMPOSE_PROJECT_NAME: ${{ matrix.docker-service-name }}
steps:
- name: Clone source code
uses: actions/[email protected] # https://github.com/actions/checkout
with:
# Whether to configure the token or SSH key with the local git config. Default: true
persist-credentials: false
- name: Show docker version
run: docker version
- name: Show docker compose version
run: docker compose version
- name: Start containers
working-directory: docker
run: >-
docker compose up \
--build \
--detach \
--wait \
--quiet-pull \
${{ matrix.docker-service-name }}
- name: Show container statuses
if: '!cancelled()'
working-directory: docker
run: docker compose ps
- name: Install Hurl
run: |
DEB=hurl_4.2.0_amd64.deb
curl --location --no-progress-meter --remote-name https://github.com/Orange-OpenSource/hurl/releases/download/4.2.0/$DEB
sudo dpkg --install $DEB
- name: Show Hurl version
run: hurl --version
- name: Run integration tests
run: >-
hurl \
--error-format long \
--variable SERVER_URL=http://127.0.0.1:${{ matrix.application-port }} \
--variable skip_500_error_testing=${{ matrix.skip_500_error_testing }} \
--test \
tests/crud.hurl \
tests/misc.hurl
- name: Show application logs
if: failure()
working-directory: docker
run: >-
docker compose logs \
--no-log-prefix \
--timestamps \
${{ matrix.docker-service-name }}
- name: Show database logs
if: failure()
working-directory: docker
run: >-
docker compose logs \
--no-log-prefix \
--timestamps \
${{ matrix.database-service-name }}
- name: Stop containers
if: always()
working-directory: docker
run: >-
docker compose down \
--volumes \
--remove-orphans \
--rmi local