-
Notifications
You must be signed in to change notification settings - Fork 75
195 lines (176 loc) · 8.27 KB
/
test.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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
name: Test Dockerfiles
on:
push:
branches: [ "main", "master" ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ "main" ]
permissions:
contents: read
jobs:
test:
env:
CONTAINER_NAME: "liquibase"
strategy:
fail-fast: false
matrix:
dockerfile: [Dockerfile, Dockerfile.alpine]
os: [ubuntu-latest, macos-13]
name: Build & Test ${{ matrix.dockerfile }} - ${{ matrix.os }}
runs-on: ${{ matrix.os }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Docker on macOS
if: matrix.os == 'macos-13'
uses: douglascamata/setup-docker-macos-action@v1-alpha
- name: Build an image from ${{ matrix.dockerfile }}
run: |
docker build -f ${{ matrix.dockerfile }} -t liquibase/liquibase:${{ github.sha }} .
- name: Test liquibase init start-h2
run: |
LOG_STRING="The database does not persist data"
docker run --name $CONTAINER_NAME -d -v $(pwd)/.github/test:/liquibase/changelog liquibase/liquibase:${{ github.sha }} init start-h2
sleep 20
# Check if the container is running
if docker inspect -f '{{.State.Running}}' "$CONTAINER_NAME" 2>/dev/null | grep -q "true"; then
# Get the logs and check if the desired string is present
if docker logs "$CONTAINER_NAME" 2>&1 | grep -q "$LOG_STRING"; then
echo "The log contains the string: $LOG_STRING"
else
echo "The log does not contain the string: $LOG_STRING"
exit 1
fi
else
echo "Error: Container $CONTAINER_NAME is not running."
exit 2
fi
- name: Test liquibase version
run: |
LOG_STRING="Liquibase Version:"
# Check if the container is running
if docker inspect -f '{{.State.Running}}' "$CONTAINER_NAME" 2>/dev/null | grep -q "true"; then
# Get the logs and check if the desired string is present
if docker exec $CONTAINER_NAME liquibase --version 2>&1 | grep -q "$LOG_STRING"; then
echo "The log contains the string: $LOG_STRING"
else
echo "The log does not contain the string: $LOG_STRING"
exit 1
fi
else
echo "Error: Container $CONTAINER_NAME is not running."
exit 2
fi
- name: Test liquibase update
run: |
LOG_STRING="Update has been successful"
# Check if the container is running
if docker inspect -f '{{.State.Running}}' "$CONTAINER_NAME" 2>/dev/null | grep -q "true"; then
# Get the logs and check if the desired string is present
if docker exec $CONTAINER_NAME liquibase update --defaultsFile=/liquibase/changelog/liquibase.properties --changelog-file=/changelog/example-changelog.xml 2>&1 | grep -q "$LOG_STRING"; then
echo "The log contains the string: $LOG_STRING"
else
echo "The log does not contain the string: $LOG_STRING"
exit 1
fi
else
echo "Error: Container $CONTAINER_NAME is not running."
exit 2
fi
- name: Test liquibase wrong ENV variable
run: |
LOG_STRING="Error: Unable to access jarfile wrong_path/internal/lib/"
# Stop docker container and remove it
docker stop $CONTAINER_NAME
docker rm $CONTAINER_NAME
# Start docker container with wrong ENV
# Get the logs and check if the desired string is present
if docker run --name $CONTAINER_NAME -d -v $(pwd)/.github/test:/liquibase/changelog -e LIQUIBASE_HOME="wrong_path" liquibase/liquibase:${{ github.sha }} init start-h2 2>&1 | grep -q "$LOG_STRING"; then
echo "The log does not contain the string: $LOG_STRING"
exit 1
else
echo "The log contains the string: $LOG_STRING"
fi
- name: Test liquibase good ENV variable
run: |
LOG_STRING="The database does not persist data"
# Stop docker container and remove it
docker stop $CONTAINER_NAME
docker rm $CONTAINER_NAME
# Start docker container with good ENV
docker run --name $CONTAINER_NAME -d -v $(pwd)/.github/test:/liquibase/changelog -e LIQUIBASE_HOME="/liquibase" liquibase/liquibase:${{ github.sha }} init start-h2
sleep 20
docker logs $CONTAINER_NAME
# Check if the container is running
if docker inspect -f '{{.State.Running}}' "$CONTAINER_NAME" 2>/dev/null | grep -q "true"; then
# Get the logs and check if the desired string is present
if docker logs "$CONTAINER_NAME" 2>&1 | grep -q "$LOG_STRING"; then
echo "The log contains the string: $LOG_STRING"
else
echo "The log does not contain the string: $LOG_STRING"
exit 1
fi
else
echo "Error: Container $CONTAINER_NAME is not running."
exit 2
fi
- name: Test volume persistence
run: |
LOG_STRING="Update has been successful"
# Stop docker container
docker stop $CONTAINER_NAME
# Start docker container
docker start $CONTAINER_NAME
sleep 5
# Check if the container is running
if docker inspect -f '{{.State.Running}}' "$CONTAINER_NAME" 2>/dev/null | grep -q "true"; then
# Get the logs and check if the desired string is present
if docker exec $CONTAINER_NAME liquibase update --defaultsFile=/liquibase/changelog/liquibase.properties --changelog-file=/changelog/example-changelog.xml 2>&1 | grep -q "$LOG_STRING"; then
echo "The log contains the string: $LOG_STRING"
else
echo "The log does not contain the string: $LOG_STRING"
exit 1
fi
else
echo "Error: Container $CONTAINER_NAME is not running."
exit 2
fi
- name: Test extension loading
run: |
LOG_STRING="liquibase-redshift"
# Stop docker container
docker exec $CONTAINER_NAME lpm add liquibase-redshift --category=extension -g
# Get the logs and check if the desired string is present
if docker exec $CONTAINER_NAME liquibase --version 2>&1 | grep -q "$LOG_STRING"; then
echo "The log contains the string: $LOG_STRING"
else
echo "The log does not contain the string: $LOG_STRING"
exit 1
fi
- name: Test driver connection
run: |
LOG_STRING="successfully installed in classpath"
docker stop $CONTAINER_NAME
docker rm $CONTAINER_NAME
docker network create --driver bridge test_network
# Get the logs and check if the desired string is present
docker run -d --name $CONTAINER_NAME --network test_network -v $(pwd)/.github/test:/liquibase/changelog liquibase/liquibase:${{ github.sha }} init start-h2
if docker exec $CONTAINER_NAME lpm add mssql --category=driver -g 2>&1 | grep -q "$LOG_STRING"; then
echo "The log contains the string: $LOG_STRING"
else
echo "The log does not contain the string: $LOG_STRING"
exit 1
fi
- name: Test custom entrypoint
run: |
LOG_STRING="Update has been successful"
# Build auxiliary liquibase image to inherit from
docker build -f ${{ matrix.dockerfile }} -t liquibase:test-entrypoint .
# Build custom liquibase image
docker build -f $(pwd)/.github/test/Dockerfile -t liquibase:test $(pwd)/.github/test/
# Get the logs and check if the desired string is present
docker run --rm --name liquibase-test --entrypoint="/scripts/liquibase_command.sh" -v $(pwd)/.github/test:/liquibase/changelog liquibase:test "version"